Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
14.05.2007, 22:37
|
|
Частый гость
Регистрация: 24.04.2007
Сообщений: 29
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Помогите разобраться с программой для ATmega16
Начал работать с микроконтроллерами. Собрал тест-плату для ATmega16 c кнопкой и переключателем. Написал простенькую программку на С в CodeVision для мигания светодиодами - РС1, РС5.
Алгоритм следующий: 1. Включаем переключатель (РD3=0), 1а. Если кнопка нажата (РС5=0) то попадаем в подпрограмму где увеличивается значение переменной ctr, (отвечающей за задержку мигания) и светодиоды РС1, РС5 несинфазно мигают с задержкой ctr. 1b. Если кнопка не нажата (РС5=1) то значение переменной ctr не увеличивается и светодиоды РС1, РС5 несинфазно мигают с задержкой ctr. При симуляции в VMlab и в реальной плате все работает как надо, почти... при включении PD3 диоды начинают мигать с задержкой 1ms как и положено, но спустя примерно 850ms значение задержки становится больше, хотя значение ctr не меняется. Помогите плиз, бьюсь неделю в чем может быть дело? Код прилагаю
Прикрепленный файл: 5669949.rar
|
|
|
|
14.05.2007, 22:56
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Код:
|
void btn(void){
ctr+=5; PORTA.2=0;
PORTC.1=0; PORTD.1=1; delay_ms(ctr);
PORTC.1=1; PORTD.1=0; delay_ms(ctr);
if (ctr›245){PORTB.2=0;} if (ctr‹245){PORTB.2=1;}
}
void main (void){
MCUCSR=0xF0;MCUCSR=0xF0;
// ---port initialization---
PORTA=0xFF;
DDRA=0xFF;
PORTC=0xFF;
DDRC=0xDF;
PORTB=0xFF;
DDRB=0xFF;
PORTD=0xFF;
DDRD=0xE7;
while (1){
while (PIND.3==1) {PORTA.2=1; PORTC.1=1; PORTB.2=1; PORTD.1=1;}
while (PINC.5==0) {btn(); }
PORTA.2=0; PORTC.1=0; PORTD.1=1; delay_ms(ctr);
PORTC.1=1; PORTD.1=0; delay_ms(ctr);
if (ctr›245){PORTB.2=0; } if (ctr‹245){PORTB.2=1;} |
Честно говоря не видел чтобы так разметку программы делали... можно вообще всю программу в одну строчку написать, только кто в этом разбираться захочет??? И обычно выкладывают не только исходник, а и весь проект... После этого можно и поискать ошибочку...
|
|
|
|
15.05.2007, 07:36
|
|
Частый гость
Регистрация: 25.01.2007
Адрес: Омск
Сообщений: 40
Сказал спасибо: 5
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
а у тебя случайно не переполняется сторожевой таймер? выключи его или периодически сбрасывай
|
|
|
|
15.05.2007, 08:22
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Может у меня "повылазило", но я не вижу здесь инициализации сторожеого тамера, а по умолчанию он выключен...
|
|
|
|
15.05.2007, 08:39
|
|
Частый гость
Регистрация: 25.01.2007
Адрес: Омск
Сообщений: 40
Сказал спасибо: 5
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
насколько я помню, когда я работал c CodeVision меня была проблема со сторожевым таймером, он был ПО УМОЛЧАНИЮ ВКЛЮЧЕН, не было времени разбираться с его регистром, чтоб отключить, просто периодически стал его сбрасывать, и все работало. Сейчас перешел VMLab - эта проблема решилась сама собой
|
|
|
|
15.05.2007, 08:46
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Честно говоря работаю с CodeVisionAVR уже более года и такого не встречал... А vmlab это же отладчик а не компилятор???
|
|
|
|
15.05.2007, 09:37
|
|
Частый гость
Регистрация: 25.01.2007
Адрес: Омск
Сообщений: 40
Сказал спасибо: 5
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
отладчик и компилятор, мне кажется более функциональный, чем CodeVision, хотя я могу и ошибаться, т.к. не много с ним работал, не изучил все его функции
|
|
|
|
15.05.2007, 09:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Я не разбираюсь в авр, но как сtr может увеличиваться, если оно забито в памяти программ???
eeprom unsigned char ctr=1;
И где защита от переполнения? так и должно быть ?
|
|
|
|
15.05.2007, 10:43
|
|
Вид на жительство
Регистрация: 22.06.2006
Адрес: Украина
Сообщений: 308
Сказал спасибо: 19
Сказали Спасибо 32 раз(а) в 24 сообщении(ях)
|
idmg, простите за посторонний вопрос ... Вы, случайно, не с страничек avr123_nm_ru начали познавать микроконтроллеры?
|
|
|
|
15.05.2007, 12:36
|
|
Частый гость
Регистрация: 12.05.2007
Сообщений: 38
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Лично моё мнение конечно - выкиньте кодвижн и поставьте винавр с аврстудией - море удовольствий - заодно и привыкнете к гцц- под него есть много портированных для авр-ов вещей(мона иар конечно взять - но там денежки плотить надо чтоб без проблем работать - а тут бесплатно - все дела..)
В общем советовал бы начать писать на гцц используя виавр - там если вшить его в аврстудию - есть такая вещ как симулятор + возможность смотреть исполняемый код - на начальных этапах самое то..
А если вы кумите житаг(200 баксов и море удовольствия) то вообще вам счастье будет - там внутрисхемный отладчик с удобным интерфейсом...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:38.
|
|