Первый раз пытаюсь применить такую "жирную" микросхему, однако засада...
Код сгенерирован автоматически, пытаюсь проверить как сработает Watchdog. Для этого закомментировал строчку // #asm("wdr") и ничего ((((( , ранее это на меге 8 работало. ..... Подскажите что для этого МК нужно делать чтобы работал Watchdog Спойлер
Код:
/***************************************************** CodeWizardAVR V2.05.3 Standard Chip type : ATmega32A AVR Core Clock frequency: 4,000000 MHz
Я в протеусе не работал никогда, но может вы просто тех двух секунд не дожидаетесь? Я не знаю с какой скоростью протеусовский симулятор работает. Попробуйте заменить WDTCR=0x0F; на WDTCR=0x08;. Это должно уменьшить интервал примерно до 20 мс.
Да нет симуляция загрузка 67% время реальное без разницы WDTCR=0x0F; или WDTCR=0x08; не перегружается и все. Тут еще такое дело CodeVisionAVR V2.05.3 с "просторов интернета" может это что то значит?
Вложения:
Комментарий к файлу: Проект в протеусе Exe.rar [13.46 KiB]
Скачиваний: 411
uk8amk это понятно что не дождусь, тем более как я писал для сборки проекта пользуюсь автоматической генерацией проекта, не могу соблюсти формальности использования функций, пользуюсь только результатом , типа как в пословице "или шашечки или ехать"... как это оставить пустым while(1); в смысле код там не писать, так смысл тогда этой программы....
Смысл собачьего таймера не в том, чтобы он всегда срабатывал, а только когда Мк завис. Так что можно не заморачиваться насчет стандартной задержки. Если есть желание проверить правильность настройки можно и оставить пустым цикл while(1), что и было предложено товарищем uk8amk
Извините товарищи, но я вас совсем как-то не пойму:-\. Если позволите я еще раз попробую объяснить с чем я тут столкнулся... Сделал проект , по моим меркам "громадный" в нем уже 1950 строк кода. И он даже прекрасно )) работает в железе, но иногда он имеет такой глюк (раз в 2 а то и 5 дней) у температуры происходит сбой показаний (на ЖКИ отображает -0.1С), МК в это время работает. дальше ВКЛ - ВЫКЛ сетью и все опять нормально.... Так вот, хотел я, по этому событию ( с задержкой по -0.1С) делать reset для МК , подключил для этого watchdog , а тут странность он в моем коде reset для МК не делает никак. Я вот взял упростил код до минимума ( ясное дело в листинге 2000 строк , никто голову ломать ни будет че там боком стоит...) так вот упростил код до минимума , и на этом примитиве сброса Мк все равно нет!. К сообщению приложил этот примитив с исходником и протеусом, комплимируется в CodeVisionAVR V2.05.3 . Как я уже писал, ранее на меге 8 я делал программно Watchdog, работало , проверял просто закоментировал строчку // #asm("wdr") и видно что все активно , а тут вот никак.....
Скачал Ваш проект - проходим в директорию и открываем файл list/0x08_mega32A.asm - нажимаем Ctrl+F - вводим "wdr" и жмем Enter находит два места во всем файле: 1) #asm("wdr"), но эта строчка закоментирована 2) в теле функции _delay_ms
- нажимаем опять Ctrl+F - вводим "_delay_ms", изучаем результаты на возможный вызов функции (ключевые слова "jmp" "rjmp" "call" icall") - находим строчку "JMP _delay_ms" в теле функции SUBOPT_0x3 - смотрим функцию полностью с целью выяснения ее предназначения - в самом начале функции строчка "CALL __lcd_write_data" Вас ни на какую мысль не наводит?
Ого, я в такие директории не ходок, мне что CALL _delay_ms , что JMP _delay_ms , так что ни на какую мысль не наводит... (могу только сказать что, это там, не я написал:))))
Не знаю, вы что хотите сказать, что каждый кто воспользовался функцией , "вольного" распределения ног для ЖКИ , на Watchdog может не рассчитывать?
Все что я написал значит, что при вызове функции __lcd_write_data, вызывается функция _delay_ms, которая содержит в себе команду wdr, которая и сбрасывает сторожевой таймер. Функцию __lcd_write_data вы вызываете в цикле, поэтому ваш сторожевой таймер никогда не сработает.
Заголовок сообщения: Проблемы со сторожевым таймером. Что я делаю неправильно?
Добавлено: Ср сен 11, 2013 12:15:26
Грызет канифоль
Карма: 2
Рейтинг сообщений: 6
Зарегистрирован: Вт мар 11, 2008 06:22:36 Сообщений: 256 Откуда: Волгоград
Рейтинг сообщения:0
Всем привет! ATmega48pa, проблема с работой сторожевого таймера - задолбался я уже с ним. В одной части программы работает, а после прерывания INT1 - уже не пашет. Причем даже если заново его инициализовать. В чем дело то? Вот упрощенная часть программы:
// External Interrupt(s) initialization // INT0: Off // INT1: On // INT1 Mode: Low level // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-14: Off // Interrupt on any change on pins PCINT16-23: Off EICRA=0x00; EIMSK=0x02; EIFR=0x02; PCICR=0x00;
LED = 1; delay_ms(25); LED = 0; // когда контроллер спит, строж. таймер работает как надо, тому подтверждение работа этого светодиода (кратковременное моргание раз в 4 секунды)
SMCR = 0b00000101; // Power-down Mode - страница 43 мануала ATmega48 #asm("sleep"); //Вводит контроллер в режим энергосбережения // Просыпаемся от прерыванием INT1 и сразу на обработчик
while (1) { LED = 1; // Вот тут строж. таймер уже не работает - светодиод постоянно светиться } }
// External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { ... // что тут, не важно }
Заголовок сообщения: Re: Проблемы со сторожевым таймером. Что я делаю неправильно
Добавлено: Ср сен 11, 2013 12:44:52
Грызет канифоль
Карма: 2
Рейтинг сообщений: 6
Зарегистрирован: Вт мар 11, 2008 06:22:36 Сообщений: 256 Откуда: Волгоград
Рейтинг сообщения:0
Power-Down - тут останавливается практически всё, кроме обработки внешних прерываний, интерфейса TWI и сторжевого таймера. Да и в программе я красным пометил место, где видно что таймер работает из режима сна.
Заголовок сообщения: Re: Проблемы со сторожевым таймером. Что я делаю неправильно
Добавлено: Ср сен 11, 2013 14:17:11
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19844 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Чё-то я требуемой логики не улавливаю. Моё видение вашей проги: 1 — Разрешаете прерывания 2 — Засыпаете 3 — Сторож ресетит МК, переход к п.1
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Проблемы со сторожевым таймером. Что я делаю неправильно
Добавлено: Ср сен 11, 2013 14:29:26
Грызет канифоль
Карма: 2
Рейтинг сообщений: 6
Зарегистрирован: Вт мар 11, 2008 06:22:36 Сообщений: 256 Откуда: Волгоград
Рейтинг сообщения:0
Ну сейчас совсем не об этом. Нужно понять почему таймер не ресетит МК в основном цикле (когда прога находится там).
P.S. Логика этого каркаса-проги такая: МК спит и ждет внешнего прерывания (параллельно работает ст. таймер для индикации этого режима). Когда внеш. прерывание заканчивается прога уходит в основной цикл. И тут то таймер перестает работать - не ресетит МК.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения