Форум по разработке и ремонту электронной техники Киевский форум радиолюбителей и электронщиков. Форумы по разработке и ремонту электронной техники
    Схемы электрические принципиальныеГлавная    ФорумФорум    ПоискПоиск по форуму    Личные сообщенияФайлообменник    Личные сообщенияРадиотехнический каталог   

Фотогалерея   <b>Профиль</b>Ваш профиль    Личные сообщенияЛичные сообщения    ГруппыГруппы   

FAQFAQ    РегистрацияРегистрация    ВходВход

Уважаемые посетители! Это старая версия форума. Новая версия находится по адресу: http://www.remexpert.com
Микроконтроллеры начинающим
На страницу Пред.  1, 2, 3, 4 ... 12, 13, 14  След.
 
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС...
 
Автор Сообщение
tellurian
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 15.11.2006
Сообщения: 15

СообщениеДобавлено: 23 Ноя 2006, 9:51    Заголовок сообщения: Ответить с цитатой

Вот словесный алгоритм, который я разработал Радостный

Инициализируем 2 порта
PB0 - выход (для светодиода)
PB1 - вход (для кнопки)
Моргаем светодиодом с частотой 1 раз в 5 секунд (все данные из задания №2).
При возникновении напряжения (кнопка нажата) на входе PB1 начинаем моргать
с частотой 1 раз в секунду. Если отпускаем кнопку, снова моргаем 1 раз в 5 секунд.
Кнопка подключается к выходу VCC и входу PB1.

Вопросы:
1. Как смоделировать нажатие кнопки? (для демонстрации работы в VMLab).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alexx
Знатный посетитель (>20)
Знатный посетитель (>20)


Зарегистрирован: 25.09.2006
Сообщения: 49
Откуда: Украина, Киев

СообщениеДобавлено: 23 Ноя 2006, 10:10    Заголовок сообщения: Ответить с цитатой

tellurian писал(а):
Вот словесный алгоритм, который я разработал Радостный

Инициализируем 2 порта
PB0 - выход (для светодиода)
PB1 - вход (для кнопки)
Кнопка подключается к выходу VCC и входу PB1.

Вопросы:
1. Как смоделировать нажатие кнопки? (для демонстрации работы в VMLab).


1) Начнем с того, что "красивее" и правильнее подключать кнопку между выводом МК и "землей" В данном случае единичный уровень будет формироваться при разомкнутой кнопке внутренним пуллапом МК.
Нулевй уровень будет формироваться при нажатии кнопки - замыкание на "землю" (см. поясняющий рисунок)

2) В ВМЛабе это моделируется следующей строкой в проектном файле :
K1 VSS PB1 ; при нажатии на кнопку "1" на линии РВ1 будет "лог0"

3) проконтролировать себя можно путем просмотра состояния выводов МК (View->I/O Ports)



Key.JPG
 Описание:
 Размер файла:  12.7 KB
 Просмотрено:  3160 раз(а)

Key.JPG


Вернуться к началу
Посмотреть профиль Отправить личное сообщение
tellurian
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 15.11.2006
Сообщения: 15

СообщениеДобавлено: 23 Ноя 2006, 15:35    Заголовок сообщения: Ответить с цитатой

Работа с кнопкой.

Код:
#include <90s2313.h>  //подключаем библиотеку работы с микроконтроллером

interrupt [TIM1_OVF] void timer1_ovf_isr(void) //описываем прерывание 
{
 TCNT1H = 0xb3; // задаем время для
 TCNT1L = 0xb5; // таймера/счетчика 1
// выполняемый код
 PORTB = PORTB ^ 1;// инвертируем последний бит порта
}             

void main(void) {
 
 DDRB  = 0x01; // определяем направление (выход)   
 PORTB = 0x02; // загорается светодиод


 TCCR1A = 0x00;   TCCR1B = 0x02; // устанавливаем параметры счетчика
 TCNT1H = 0xb3;   TCNT1L = 0xb5; // устанавливаем временной интервал
 OCR1H  = 0x00;   OCR1L  = 0x00; // устанавливаем регистр совпадения
 
 TIMSK  = 0xB0;   // разрешаем прерывание от таймера/счетчика 1
 PORTB  = 0x01;   // светодиод гаснет
 #asm ("SEI");     // разрешаем прерывания   
 
 while (1) {

   if (PINB&0x02)  TCCR1B =0x02;  //проверяем второй бит порта B,если 1, то оставляем тот же период мерцания
                                else  {                  // если второй бит равен 0,
                                       TCCR1B =0x01;     // изменяем частоту мерцания                   
                                       PORTB=PORTB^0x02;
                                       PORTB=PORTB^0x02;
                                       } //else
 }    // запускаем бесконечный цыкл
} //main


Для демонстрации нажатия кнопки в файле проекта необходимо прописать строчку

Код:
K1 VSS PB1



Эта строка подключает кнопку "1" на панели "Control Panel".



Third.rar
 Описание:
Это архив с заданием №3

Файлообменник
 Название файла:  Third.rar
 Размер файла:  17.99 KB
 Скачено:  241 раз(а)

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 23 Ноя 2006, 16:18    Заголовок сообщения: Ответить с цитатой

хитрО! Я разные варианты реализации ждал увидеть ... но управлять делителем честоты вх. импульсов не додумался.

И еще ... расскажи для чего в главном цикле строки
Код:

PORTB=PORTB^0x02;
PORTB=PORTB^0x02;

небольшие замечания
0
Код:

PORTB = 0x02; // загорается светодиод

Здесь не светодиод загорается, а подтянгивающий резистор включается, ибо вывод у тебя сконфигурирован как вход.
1 А еще подскажи как модернизировать алгоритм, дабы при отпущеной кнопке моргалка моргала 1Гц, а при нажатой - 0,75 Гц. Умник
Код:

 TCCR1A = 0x00;   TCCR1B = 0x02; // устанавливаем параметры счетчика
 PORTB = PORTB ^ 1;// инвертируем последний бит порта
 

Намного информативней было бы
Код:

 TCCR1A = 0x00;   TCCR1B = 0x02; // TC1 PWM-off, CK/8
 PORTB = PORTB ^ 1;        // переключение светодиода
 

То что в строке устанавливаются параметры счетчика и так ясно ... а вот какие параметры!? Намного легче читать, однако.
2 Приучитесь сразу к определенному форматированию текста - намного меньше глупых ошибок будет. Работать то будет и в одной строке всё, а вот читать и вникать намного легче, когда блоки выровнены

_________________
AndryG


Последний раз редактировалось: AndryG (23 Ноя 2006, 17:16), всего редактировалось 3 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
tellurian
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 15.11.2006
Сообщения: 15

СообщениеДобавлено: 23 Ноя 2006, 16:24    Заголовок сообщения: Ответить с цитатой

AndryG писал(а):

И еще ... расскажи для чего в главном цикле строки
Код:

PORTB=PORTB^0x02;
PORTB=PORTB^0x02;


Это для того чтобы при отпускании клавиши установить 2-ой бит PINB
Не додумался до лутшего варианта Смущение
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 23 Ноя 2006, 16:34    Заголовок сообщения: Ответить с цитатой

Эти две строки просто "передергивают" внутренний подтягивающий резистор.
Какой с этого толк? Нужно в самом начале устновить этот бит, тем самым подключив подтягивающий резистор, и больше его не нужно трогать.
Как только кнопка будет отпущена, вход B.2 будет подтянут к питанию внутренним резистором и на нем установится единица... так я считал и читал ... попробовал в симуляторе - нет! - вывод сидит в нуле и с подключенным внутренним подтягивающим. Может кто объяснит где глюк: в симуляторе или в голове.
А пока, дабы заработало твое творение без извратов ... давай подключим внешний подтягивающий резистор в VMLABе ...
Код:

  K1 VSS PB1      ;Кнопка
  R2 VDD PB1 4700 ;Подтягивающий резистор
 

... и в окне Scope всё здорово начнет плясать.

На счет подтягивающих резисторов... Если в схеме возможны большие помехи, то надеятся на внутренние резисторы не стоит - их сопротивление доволно большое и слабо "тянет" к плюсу .. лучше поставить внешние на несколько кОм, что усилит помехозащищенность конструкции.

_________________
AndryG


Последний раз редактировалось: AndryG (23 Ноя 2006, 17:22), всего редактировалось 2 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
tellurian
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 15.11.2006
Сообщения: 15

СообщениеДобавлено: 23 Ноя 2006, 16:43    Заголовок сообщения: Ответить с цитатой

После отпускания кнопки, второй бит PINB не устанавливается. Поэтому пришлось прибегать к такой вот фишке. Смущение
Попробуйте закоментаровать эти две строчки и увидите результат Улыбка
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 23 Ноя 2006, 17:19    Заголовок сообщения: Ответить с цитатой

Попробуйте убрать эти две строки, подключить подтягивающий резистор
Код:

  R2 VDD PB1 4700 ;Подтягивающий резистор

У увидите результатъ Улыбка

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
tellurian
Частый гость (>5)
Частый гость (>5)


Зарегистрирован: 15.11.2006
Сообщения: 15

СообщениеДобавлено: 24 Ноя 2006, 10:17    Заголовок сообщения: Ответить с цитатой

Подскажите пожалуйста. Существует ли документация (окромя хэлпа) по VMLab? Ммм...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AndryG
Модератор


Зарегистрирован: 24.07.2006
Сообщения: 411
Откуда: Helios-3

СообщениеДобавлено: 24 Ноя 2006, 11:05    Заголовок сообщения: Ответить с цитатой

Я, лично, не видел ...
А что тебя интересует? Программа простая, я ее немного знаю, Alexx ее хорошо знает, может другие подключатся ... спрашивай - ответим ... так и сделаем "документацию". Улыбка

С включением подтягивающего резистора в VMLABe получилось без тех двух строк нормальной работы добится?

И еще... на счет 1 и 0,75 Гц
У меня идея такова... настраиваем таймер на 0,25 сек.
Если кнопка отжата, то переключаем светожиод каждый четвертый тик, если нажата - каждый пятый.
Чем, на мой взгляд, такой вариант хорош... в дальней можно уменьшить время "тикания" таймера и в его обработчике сканировать клавиатуру, обрабатывать дребезг, управлять индикацией и т.д. ... если некоторые действия нужно выполнять реже, то просто выполняем их не каждый тик, а каждый N-ый.
Я, например, ставлю один таймер на определенной время. В отдельной переменной (байт) каждый бит у меня указывает на определенный режим работы .. своеобразный флаг. Пототом по этим флагам включаем индикацию ... если бит поднят, то переключаем светодиод каждый сотый раз... иначе каждый 50-ый. Так получаем различные варианты индикации и т.д.

_________________
AndryG
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Форум по разработке и ремонту электронной техники -> Микроконтроллеры, процессоры, ПЛИС... Часовой пояс: GMT + 2
На страницу Пред.  1, 2, 3, 4 ... 12, 13, 14  След.
Страница 3 из 14

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять вложения в этом форуме
Вы можете просматривать вложения в этом форуме


Rambler's Top100 PageRank Яндекс цитирования
Сайты наших друзей: Гири, все о гирях, Автоматизация магазинов, супермаркетов, ресторанов, кинотеатров,
Весы электронные, Сканеры штрих-кода, Принтеры штрих-кода

Powered by phpBB © 2001, 2005 phpBB Group

Время генерации страницы: 0.7407s (PHP: 91% - SQL: 9%) - SQL запросов: 15 - GZIP enabled - Debug on