roboforum.ru

Технический форум по робототехнике.

Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Сообщение itor » 13 окт 2008, 07:29

Вот разбираюсь с протеусом и CVAVR. Хочу штобы при замыкании SW1 зажигался D1 и соответственно при размыкании SW1 светодиод D1 гас (понимаю задача дурацкая но всетаки:).
В CodeVisionAVR написал следующее:

Код: Выделить всёРазвернуть
while (1)
{
// Place your code here
if (PORTA.4==0)
         {
          PORTA.0=1;
         }
else
         {
          PORTA.0=0;
         };     
};


Нога PORTA.0 - выход, нога PORTA.4 - вход. Настраивал визардом.

При симуляции когда я включаю выключаю переключатель SW1 состосяние ноги PORTA.0 не меняется (делал код циклического моргания светодиода так он мигал:). Такое впечатление что программа не видет изменений на ноге PORTA.4. Почему не работает?
Вложения
fig1.JPG
Аватара пользователя
itor
 
Сообщения: 8
Зарегистрирован: 24 сен 2008, 03:17
Откуда: Хабаровск

Re: Уважаемые Гуру, помогите! Что я делаю не так?

Сообщение avr123.nm.ru » 13 окт 2008, 07:49

Посмотрите откуда надо читать что на ножке МК - "Устройство AVR" - http://avr123.nm.ru/02.htm

В реальном устройстве в цикл можно добавить паузу 30-70 мСек для устранения влияния дребезка реальных контактов.
Пауза - delay - "Си для МК AVR" - http://avr123.nm.ru/05.htm

Как ПРАВИЛЬНО подключать светодиод ! - http://avr123.nm.ru/03.htm
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Уважаемые Гуру, помогите! Что я делаю не так?

Сообщение itor » 13 окт 2008, 08:27

Вот файло. Четко видно - переключатель SW1 соединяет ножку порта с землей. Если соединен, PORTD.0,1,2,3,4,5 = 0, разомкнут 1. Я правильно понял схему?


з.ы.: про подключение светодиода, да какая разница нет резистора, в симуляторе не сгорит...
Вложения
z3_timer.png
Аватара пользователя
itor
 
Сообщения: 8
Зарегистрирован: 24 сен 2008, 03:17
Откуда: Хабаровск

Re: Уважаемые Гуру, помогите! Что я делаю не так?

Сообщение avr123.nm.ru » 13 окт 2008, 09:01

itor писал(а):Вот файло. Четко видно - переключатель SW1 соединяет ножку порта с землей. Если соединен, PORTD.0,1,2,3,4,5 = 0, разомкнут 1. Я правильно понял схему?

Правильно. НО там к схеме еще и исходнички имеются - гляньте ! как прочитайть что замкнуто.

itor писал(а):з.ы.: про подключение светодиода, да какая разница нет резистора, в симуляторе не сгорит...
Не кошерно ИМХО. Не по-спортивному.

Добавлено спустя 25 минут 10 секунд:
Вот - распечатайте !

Изображение

Вот смотрите:

Изображение
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Уважаемые Гуру, помогите! Что я делаю не так?

Сообщение itor » 13 окт 2008, 09:42

Ах вот оно что! Ну наконец-то дошло!

1. Если нога PA0 - выход то:
- в соответствующем регистре DDR (для этой ноги DDRA.0) стоит 1 (это и означает что нога выход);
- для изменения 1/0 на ноге надо писать: PORTA.0=1; или PORTA.0=1 (т.е. в регистр PORTA.№ для ноги PA№ регистр PORTB.№ для ноги PB№ итд, но при соблюдении условия выше);

2. Если нога PA0 - вход то:
- в соответствующем регистре DDR (для этой ноги DDRA.0) стоит 0 (это и означает что нога вход);
далее есть два варианта:
- если в соответствующем DDR, бите PORT стоит 0 то вход будет без подтяжки, чтобы получить на нем "1" нужно подать на него высокий логический сигнал (ну Vсс или +5V или около того);
- если в соответствующем DDR, бите PORT стоит 1 то вход будет c подтяжкой, чтобы получить на нем "1" нужно его просто заземлить.

Примерно как в файле (PA4 - с подтяжкой, PA7 - без подтяжки)
Все правильно?


При этом программа будет выглядеть так примерно:
Код: Выделить всёРазвернуть
if (PINA.4==0)
         {
          PORTA.0=0;
         }
else
         {
          PORTA.0=1;
         };
             
if (PINA.7==0)
         {
          PORTA.1=0;
         }
else
         {
          PORTA.1=1;
         }
Вложения
fig2.JPG
Аватара пользователя
itor
 
Сообщения: 8
Зарегистрирован: 24 сен 2008, 03:17
Откуда: Хабаровск

Re: Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Сообщение avr123.nm.ru » 13 окт 2008, 10:05

Поменяв порядок управления светодиодом можно сделать поэлегантней условие у IF

Код: Выделить всёРазвернуть
if (PINA.4)
         {
          PORTA.0=1;
         }
else
         {
          PORTA.0=0;
         };

delay_ms(50);
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Сообщение Aphon » 27 окт 2008, 04:07

Выложи свой исходник,и HEX файл.Собрал твою схему не че не работает :(
Aphon
 

Re: Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Сообщение D'Ark Trouyan » 31 янв 2009, 21:18

Не пойму что за бред с кнопкой. Как описл товарищ двумя постами выше не получается, у меня почему-то не зависит от значения PORT. И получается так(см рис.). А необходимо сделать зависимость не от контакта с землёй а от контакта с VCC. Может последовательность DDR и PORT не та или еще чего ??? Второй день голову ломаю. :RTFM:
Вложения
ХЗ.JPG
vivere militare est
Аватара пользователя
D'Ark Trouyan
 
Сообщения: 76
Зарегистрирован: 21 сен 2006, 22:42
Откуда: М.О.

Re: Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Сообщение avr123.nm.ru » 31 янв 2009, 22:00

"0" на входе AVR возможно сделать только подав на нее ВНЕШНИЙ сигнал "0"
смотрите "Устройство AVR" - http://avr123.nm.ru/02.htm
Например подключив к ножке резистор 10 кОм на землю.

Главное между ножкой и кнопкой резисторы поставь 150-470 ом - а то пока будешь голову ломать случайно и AVR пожгешь.
Последний раз редактировалось avr123.nm.ru 01 фев 2009, 12:34, всего редактировалось 1 раз.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Сообщение D'Ark Trouyan » 01 фев 2009, 10:17

Да PIN. т.е. не смотря на то какое значчение у PORT, PIN равен еденице при:
1) свободной ноге (!!!)
2) при замкнутой ноге на VCC
А нулю он равен только при замыкании на землю.

А неообходимо реальзовать:
1) 0 при свободной ноге
2) 1 при замкнутой на VCC

Таблицу раз 10 пересмотрел,перечитал.

P.S. резисторы стоят
vivere militare est
Аватара пользователя
D'Ark Trouyan
 
Сообщения: 76
Зарегистрирован: 21 сен 2006, 22:42
Откуда: М.О.

Re: Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Сообщение EdGull » 01 фев 2009, 10:24

а у ноги подтяжка внутреняя точно отключена?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Сообщение D'Ark Trouyan » 01 фев 2009, 10:49

Если Я правильно понял и подяжка- это что-то вроде соединения ноги с питанием (внутри МК), то нет она не отключена на ноге питание есть и , видать, поэтому он считает, что при свободной ноге там 1.
Как Я понял подтяжка отключается при помощи команды PORTx=0; ? - но почему-то изменения значения PORT результата не дает, на ноге всеравно +4.5 В
vivere militare est
Аватара пользователя
D'Ark Trouyan
 
Сообщения: 76
Зарегистрирован: 21 сен 2006, 22:42
Откуда: М.О.

Re: Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Сообщение EdGull » 01 фев 2009, 10:53

вот поэтому там и единица
1. конфигурируешь ногу на выход.
2. высталяешь на ней ноль.
3. конфигурируешь ногу на вход.

шлешь один рубль мне на счёт :D
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Сообщение D'Ark Trouyan » 01 фев 2009, 11:13

((( Отличная идея но увы не работат:
Код: Выделить всёРазвернуть
DDRE=0xFF;
PORTE=0;

тут всё отлично нога выход ставим на нее 0, проверяю вольметром так и есть.
Код: Выделить всёРазвернуть
DDRE=0xFF;
PORTE=0;
DDRE=0;
PORT=0;

А после этого кода на ноге Е уже +4.5В. (((
Проблема точно не в МК т.к. на двух платах тоже самое.
А может быть проблема в таинственных фьюзах ? Я с ними еще не работал, а тут прошиваю другим программатором, и фиг знает как они там настроены...
vivere militare est
Аватара пользователя
D'Ark Trouyan
 
Сообщения: 76
Зарегистрирован: 21 сен 2006, 22:42
Откуда: М.О.

Re: Кнопка, светодиод, ATmega16 и CVAVR - Что я делаю не так?

Сообщение EdGull » 01 фев 2009, 11:17

а ты чё, JTAG не отключил чтоли?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19