Перейти к содержанию
    

ATmega128 постоянный сброс устройства с частотой около 10герц.

Значится так.

 

Одной из задач второй платы моего устройства на ATmega128 является передача отладочной инфы на компьютер по интерфейсу RS232.

 

Ну и я начал писать прошивку с того, что инициализировал USART1 и передавал строку или символ по интерфейсу.

 

Но в окне Terminal почему-то появлялась эта строка или символ многое количество раз и с непонятно большой скоростью.

 

Я решил поставить _delay_ms(1000); после инициализации (на всякий случай:))

Тогда при перепрошивке символы в Terminal перестали передаваться.

 

В итоге я решил забить на RS232 и просто поморгать светодиодом через ножку порта.

 

написал прогу что-то наподобие:

int main() {
   DDRA = (1 << PA2);

   while (1) {
       PORTA |= (1 << PA2);
       _delay_ms(1000);
       PORTA &= ~(1 << PA2);
       _delay_ms(1000);

   }


}

 

а светодиод почему-то моргал с частотой около 10 Гц.

 

и тут меня осенило! закомментил цикл while

int main() {
   DDRA = (1 << PA2);

   //while (1) {
       PORTA |= (1 << PA2);
       _delay_ms(1000);
       PORTA &= ~(1 << PA2);
       _delay_ms(1000);

   //}


}

,а программа работает точно так же!

 

проверил питание - все в порядке, резет тоже стабильный, а микроконтроллер перезагружается.

 

Подскажите, пожалуйста, в чем может быть проблема!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приведите пожалуйста, получившийся после компиляции код (файл с расширением .lss)

Например, в таком виде:

void Pc_Init_Port(ubrr)
{
UBRR1H=(uint8_t)(ubrr>>8);
1ea:	29 2f       	mov	r18, r25
1ec:	33 27       	eor	r19, r19
1ee:	27 fd       	sbrc	r18, 7
1f0:	3a 95       	dec	r19
1f2:	20 93 98 00 	sts	0x0098, r18
UBRR1L=(uint8_t)(ubrr);
1f6:	80 93 99 00 	sts	0x0099, r24

 

Еще можно проверить, не включен ли WDT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В итоге я решил забить на RS232 и просто поморгать светодиодом через ножку порта.

 

Подскажите, пожалуйста, в чем может быть проблема!

Watchdog отключи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для отладки лучше отключи оптимизацию кода в компиляторе, однажды налетел на такое, долго провозился с ерундовой проблемой...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я прошивал эту ATmega128 через AVRDude в Eclipse, но когда возникали проблемы, то запускал AVReal из консоли. Дак вот интересно что.

 

Когда смотрел авриэлом, то вотчдог был 1 т.е. Unprogrammed, а когда в рабочем порядке шил AVRDude, то этот фьюз каким то хреном устанавливался Programmed :( При чем, что в настройках аврдюда я выключил перезапись фьюзов.

 

 

ВОТ ВАМ И БЕСПЛАТНЫЙ СОФТ, ТОВАРИЩИ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решилась. Дякую!!!!

А как решилась-то? У меня похожий трабл, тока на 64-ой меге, и контроллер ребутается, когда начинаю чё-нить по usart слать. И ёще возник один вопрос. В 64/128 -ой меге выводы программирования совпадают с выводами USART0. Как сделать так, чтобы можно было и прошивать, и пользоваться юартом?

Изменено пользователем MAPT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как решилась-то?

avrdude фьюз вачдога почему-то обнулял (=вачдог вкл).

 

В 64/128 -ой меге выводы программирования совпадают с выводами USART0. Как сделать так, чтобы можно было и прошивать, и пользоваться юартом?

например линию rx заводить в контроллер через резистор ом 100 (или скажем джампер но он места много занимает). isp вешать по даташиту. isp конечно не "на 5 проводках" а с драйвером.

Изменено пользователем Ronin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как сделать так, чтобы можно было и прошивать, и пользоваться юартом?

1. Шить JTAG'ом

2. Уточню Ronin'а. Нога E0(Rx) Подключается к программатору напрямую, а к драйверу RS232/RS485 - через резистор. Но здесь 100 Ом маловато будет. (Если драйвер выдаст +5В, а программатор - 0В, то в програматор потечет ток 50мА.) Я бы поставил от 330..560 Ом. Повторюсь, драйвер на программаторе обязателен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2. Уточню Ronin'а. Нога E0(Rx) Подключается к программатору напрямую, а к драйверу RS232/RS485 - через резистор. Но здесь 100 Ом маловато будет. (Если драйвер выдаст +5В, а программатор - 0В, то в програматор потечет ток 50мА.) Я бы поставил от 330..560 Ом. Повторюсь, драйвер на программаторе обязателен.

 

В принципе да. лучше порядка 330 ом. хотя и 100 ом hc244 тянет :)

Просто у меня предубеждение что 330-560 ом это максимум что можно ставить ))) ещё от ТТЛ )) а когда оно только 1 раз нужно, то чтоб точно не мешало ещё уменьшить в раз несколько :) хотя тут то и скорости обычно не выше 115к.

В серии стоит джампер совмещённым с диагностическим разъёмом (кстати очевиден и плюс того что на одних ногах и уарт и программирование - на одном разъёме можно сделать сразу и isp и диагностику и джампер)

Изменено пользователем Ronin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...