Мелкие вопросы по МК и ПЛИС.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
В железе(вкладка периферии), после конфигурации биты устанавливаются? Там какая-то особая процедура работы с вач-догом, нельзя его просто так биты установить - делать это надо в несколько этапов, защита от случайного изменения.
Попробуй, когда отладку запутишь сразу после конфигурации остановить и посмотреть состояние "железа" если не установились биты, установи вручную и убедись в пошаговой отладке что прерывание сработало.
у мена такая последоватльность срабатывает:
WDR
set_io WDTCSR, 0b00011000
set_io WDTCSR, 0b00001111
но только у меня конфигурация рассчитана на аппаратный сброс.
Заметь, что сброс вач-дога перед операцией тоже обязателен.
Попробуй, когда отладку запутишь сразу после конфигурации остановить и посмотреть состояние "железа" если не установились биты, установи вручную и убедись в пошаговой отладке что прерывание сработало.
у мена такая последоватльность срабатывает:
WDR
set_io WDTCSR, 0b00011000
set_io WDTCSR, 0b00001111
но только у меня конфигурация рассчитана на аппаратный сброс.
Заметь, что сброс вач-дога перед операцией тоже обязателен.
Re: Мелкие вопросы по МК и ПЛИС.
Прогнал еще раз, вот что у меня:

В регистр числа 0x18 и 0x48 записываются. Протеус выдает сообщение о срабатывании ватчдога, значение в его регистре WDTCR изменяется на C8, т. е. торчит флаг прерывания, а бит WDIE не сброшен. Прога так и крутится на вайле. Т. е. видно, что прерывание есть, но обработчик не вызван (флаг WDIE и WDIF не сброшены).
Еще крайне странно, что проц бесконечно НЕ уходит в ресет, т. к. именно это и должно было произойти (команды пока WDR не написаны).
Фьюз WDTON=1 (не запрограммирован), но я так понял, он на это не влияет, т. к. ватчдог я включаю программно.
Может надо где-то глобально разрешить прерывания от ватчдога типа МЦУЦР ТИМСК и т п?
Что я хочу: 1 раз при включении питания выполнить обработчик прерывания ватчдога, в нем проинициализировать генератор случайных чисел (биения между таймером 0 и ватчдогом) и дальше ватчдог работает только как ватчдог, т. е. защищает от зависания и не генерит преревания.
В регистр числа 0x18 и 0x48 записываются. Протеус выдает сообщение о срабатывании ватчдога, значение в его регистре WDTCR изменяется на C8, т. е. торчит флаг прерывания, а бит WDIE не сброшен. Прога так и крутится на вайле. Т. е. видно, что прерывание есть, но обработчик не вызван (флаг WDIE и WDIF не сброшены).
Еще крайне странно, что проц бесконечно НЕ уходит в ресет, т. к. именно это и должно было произойти (команды пока WDR не написаны).
Фьюз WDTON=1 (не запрограммирован), но я так понял, он на это не влияет, т. к. ватчдог я включаю программно.
Может надо где-то глобально разрешить прерывания от ватчдога типа МЦУЦР ТИМСК и т п?
Что я хочу: 1 раз при включении питания выполнить обработчик прерывания ватчдога, в нем проинициализировать генератор случайных чисел (биения между таймером 0 и ватчдогом) и дальше ватчдог работает только как ватчдог, т. е. защищает от зависания и не генерит преревания.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
эээ... прогони этот код для начала в студии, кстати в студии есть плагин позволяющий использовать в качестве отладчика протеус. Вот только щас не скажу точно как называется, кажется "Proteus VSM".
В студии что удобно - периферия вся отображена в удобном для восприятии виде.
Фьюз WDTON отвечает только за начальное состояние вачдога, программно с ним можно делать все что угодно.
Обрати внимание еще на флаг I в регистре статуса, может у тебя глобальные прерывания запрещены?
Когда вач-дог запрещен фьюзами, режим его работы - только прерывание, и если запретить глобально - работать не будет. Кстати, а почему ты уверен что он бесконечно крутится внутри цикла? может и сбрасывается - ведь он тут же входит в тот же самый цикл. У него есть еще один режим работы - если не обработать прерывание от него, и второй раз выйдет таймаут - происходит аппаратный сброс.
В студии что удобно - периферия вся отображена в удобном для восприятии виде.
Фьюз WDTON отвечает только за начальное состояние вачдога, программно с ним можно делать все что угодно.
Обрати внимание еще на флаг I в регистре статуса, может у тебя глобальные прерывания запрещены?
Когда вач-дог запрещен фьюзами, режим его работы - только прерывание, и если запретить глобально - работать не будет. Кстати, а почему ты уверен что он бесконечно крутится внутри цикла? может и сбрасывается - ведь он тут же входит в тот же самый цикл. У него есть еще один режим работы - если не обработать прерывание от него, и второй раз выйдет таймаут - происходит аппаратный сброс.
Re: Мелкие вопросы по МК и ПЛИС.
Alexeyslav писал(а):Обрати внимание еще на флаг I в регистре статуса, может у тебя глобальные прерывания запрещены?
Нет. Помимо этого прерывания в проге есть прерывание по переполнению таймера, которое генерится с частотой 31,25 кГц и тактирует прогу. Я пробовал ставить точку останова в этом прерывании - на нее прога вылетает. А вот на точку останова в прерывании ватчдога - нет. На скриншоте видно, что прога работала значительное время - 0,6 "микроконтроллерных" секунды (симуляция не совсем в реал-тайме идет). В реале я и больше держал.
Еще что странно - что все время ватчдог не срабатывает не ресет. Обычно, когда пишешь прогу и забываешь поставить команду wdr, в этом окне сообщений начинает бежать куча фраз по каждому ресету от ватчдога.
Студией я пользуюсь редко, там вроде даже Си не по умолчанию ставится. Эта прога написана в IAR AVR. Листинг с ассемблером просмотрел - вктор прерывания правильный, команды на месте. Может глюк Протеуса?
***
Что-то вообще ерунда какая-то... В протеусе даже простой резет не наблюдается - ни при программной установке WDE, ни при установке фьюза WDTON.
Пипец кароче...
Взял написал тупо на асме в АВР студио:
Код: Выделить всё
ldi temp1, 0x18
out WDTCR, temp1
ldi temp1, (1<<WDE)|(1<<WDIE)
out WDTCR, temp1
cbi PORTB,0
sei ;разрешение прерываний
main:
inc R16
rjmp main
watch:
ldi R18,7
reti
Не пашет!!!
Когда пишу инициализацию вида:
Код: Выделить всё
ldi temp1, 0x18
out WDTCR, temp1
ldi temp1, (1<<WDE)
out WDTCR, temp1Ватчдог ресетит проц как ему и положено через каждые 16 мс. Я в ах*е уже...
И главное, статья есть по теме: http://gendocs.ru/v256/?cc=13
Написано, что для включения вроде вообще не обязательно 2 2 приема записывать в WDTCR.
Попробовал - Протеус пишет, что таймаут настройки ватчдога истек. Конфигурация не изменениа - вообще ватчдог не пашет(((
Пробовал по разному. Висит флаг прерывания от ватчдога (последний бит (WDIF) в регистре WDTCR), но на обработчик проц не выходит! То же самое творится если прогнать прогу в АВР Студио
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Это может глюк в модели контроллера, попробуй другую модель. Да и на реальном, говоришь не срабатывает?
А ты перед инициализацией вачдога сбрасываешь его? В документации говорится что вачдог можно установить не позже 4-х тактов после его сброса, или как-то так. Даташит-то читал? Там есть пример инициализации его, и переключения режимов. Отклонение от прописанной процедуры чревато...
А ты перед инициализацией вачдога сбрасываешь его? В документации говорится что вачдог можно установить не позже 4-х тактов после его сброса, или как-то так. Даташит-то читал? Там есть пример инициализации его, и переключения режимов. Отклонение от прописанной процедуры чревато...
Re: Мелкие вопросы по МК и ПЛИС.
Реальный пока не спаян)
Я пробовал только в Протеусе и в АВР Студио. Проц у меня ТИНИ2313.
Там про сброс нет, а про бит WDCE и выключение есть. И в ДШ про выключение тоже. Сбрасывать надо "на всякий случай" чтобы при переконфигурировании ватчдог случайно не резетнул проц.
Я по-разному пробовал - нифига.
Ватчдог то у меня настроен. Я же говорю - у меня в проге после его срабатывания начинает висеть флаг прерывания в WDTCR. Бит WDIE тоже стоит. Т. е. это признак того, что прерывание-то прошло, но почему-то не обработано, т. к. именно обработчик должен аппаратно сбрасывать оба эти бита в ноль, после чего ватчдог переходит в режим сброса и по следующему прерыванию должен произойти ребут:
If WDE is set, WDIE is automatically cleared by hardware when a time-out occurs. After the WDIE bit is cleared, the next time-out will generate a reset.
У меня же этого не происходит.
Устанавливается же бит WDIE у меня однократно в начале проги ДО цикла, т. е. если бы он был сброшен аппаратно, то снова восстановиться не может.
Я пробовал только в Протеусе и в АВР Студио. Проц у меня ТИНИ2313.
Alexeyslav писал(а):В документации говорится что вачдог можно установить не позже 4-х тактов после его сброса, или как-то так
Там про сброс нет, а про бит WDCE и выключение есть. И в ДШ про выключение тоже. Сбрасывать надо "на всякий случай" чтобы при переконфигурировании ватчдог случайно не резетнул проц.
Я по-разному пробовал - нифига.
Ватчдог то у меня настроен. Я же говорю - у меня в проге после его срабатывания начинает висеть флаг прерывания в WDTCR. Бит WDIE тоже стоит. Т. е. это признак того, что прерывание-то прошло, но почему-то не обработано, т. к. именно обработчик должен аппаратно сбрасывать оба эти бита в ноль, после чего ватчдог переходит в режим сброса и по следующему прерыванию должен произойти ребут:
If WDE is set, WDIE is automatically cleared by hardware when a time-out occurs. After the WDIE bit is cleared, the next time-out will generate a reset.
У меня же этого не происходит.
Устанавливается же бит WDIE у меня однократно в начале проги ДО цикла, т. е. если бы он был сброшен аппаратно, то снова восстановиться не может.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Попробуй этот алгоритм на модели ATMEGA8, может и правда модель плохая?
Приведенный мною код на ATMEGA48A точно работает и в протеусе и в железе. А точно у тебя вачдог настроен на INT-RESET? Ведь есть режим "только прерывание".
Посмотри еще в даташите в конце раздела про вач-дог, там должны быть перечислены все регистры к нему причастные, может все-таки что-то упустил и есть какая-то еще особенность?
Приведенный мною код на ATMEGA48A точно работает и в протеусе и в железе. А точно у тебя вачдог настроен на INT-RESET? Ведь есть режим "только прерывание".
Посмотри еще в даташите в конце раздела про вач-дог, там должны быть перечислены все регистры к нему причастные, может все-таки что-то упустил и есть какая-то еще особенность?
Re: Мелкие вопросы по МК и ПЛИС.
Ватчдог точно настроен, т к я писал одновременно и WDE и WDIE как написано в ДШ. Кроме того, флаги все вздернуты, т. е. что-то с прерываниями. Щас глянул вектора - вроде все правильно, причем 2313А отличается от 2313 только двумя дополнительными PCINT, но эти процы обратно совместимы. Но с другой стороны, вектора объявлены в соответствующих INCLUDE... Естественно, имя я правильно написал. Интересно посмотреть как PC изменяется и на какой адрес он уходит...
Проще наверно будет спаять и посмотреть что в живую будет. Тем более все равно ведь паять.
***
Попробовал скомпилировал и смоделировал на Тини13. Там тоже очень интересно все. Прерывание вызывается, обрабатывается, но после команды reti прога уходит на ресет, причем даже если в прерывании я выполнил команду wdr. Причем ватчдог трассируется правильно - сообщение о сбросе есть, но проц ресетится.
Пора паять...
Проще наверно будет спаять и посмотреть что в живую будет. Тем более все равно ведь паять.
***
Попробовал скомпилировал и смоделировал на Тини13. Там тоже очень интересно все. Прерывание вызывается, обрабатывается, но после команды reti прога уходит на ресет, причем даже если в прерывании я выполнил команду wdr. Причем ватчдог трассируется правильно - сообщение о сбросе есть, но проц ресетится.
Пора паять...

-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Нахимичил что-то в прерывании, не установил стек...
Re: Мелкие вопросы по МК и ПЛИС.
Так я же на Си писал исходную прогу.
Короче, залил прогу в живой проц - он работает. При каждом включении питания числа меняются вполне рандомно (инициализирую функцию rand() содержимым TCNT0). Чтобы окончательно убедиться попробую еще в этом прерывании поставить маркер (например, мигнуть светодиодом) и посмотреть что будет. Но если бы прерывание на сработало, проц завис бы на вайле, в котором тестируется сброс бита WDIE, но он вроде работает согласно программе.
Вот такой вот глючный протеус
Короче, залил прогу в живой проц - он работает. При каждом включении питания числа меняются вполне рандомно (инициализирую функцию rand() содержимым TCNT0). Чтобы окончательно убедиться попробую еще в этом прерывании поставить маркер (например, мигнуть светодиодом) и посмотреть что будет. Но если бы прерывание на сработало, проц завис бы на вайле, в котором тестируется сброс бита WDIE, но он вроде работает согласно программе.
Вот такой вот глючный протеус
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
А, кстати, в протеусе не забыл выставить соответственно фьюзы? Там ведь они тоже работают...
На С тоже можно нехило нахимичить
На С тоже можно нехило нахимичить

Re: Мелкие вопросы по МК и ПЛИС.
Во всяком случае там трудно нахимичить со стеком или забыть сохранить SREG при входе в прерывание
А какие фьюзы? Ведь там только один фьюз, отвечающий за ватчдог, ито если его выставить, то ватчдог ВСЕГДА включен аппаратно и ВСЕГДА ТОЛЬКО на сброс. Соответственно, в моем случае этот фьюз незапрограммирован (ватчдог аппаратно не включен).
А какие фьюзы? Ведь там только один фьюз, отвечающий за ватчдог, ито если его выставить, то ватчдог ВСЕГДА включен аппаратно и ВСЕГДА ТОЛЬКО на сброс. Соответственно, в моем случае этот фьюз незапрограммирован (ватчдог аппаратно не включен).
Re: Мелкие вопросы по МК и ПЛИС.
Кто-нибудь знает, в какой системе (RC5, NEC или еще что) работают такие пульты:

?
У меня такого нет и посмотреть осцилом не могу.

?
У меня такого нет и посмотреть осцилом не могу.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
У меня есть. Обычный RC5, на некоторые кнопки срабатывает ТВ-тюнер.
Вот выход сигнала кнопки "ON" со стандартного фотоприемника:
Вот выход сигнала кнопки "ON" со стандартного фотоприемника:
Re: Мелкие вопросы по МК и ПЛИС.
Большое спасибо!
Только вот что-то стартовые биты совсем не RC5товские... Больше на NEC смахивает.
А фотоприемник у вас на сколько килогерц?
Только вот что-то стартовые биты совсем не RC5товские... Больше на NEC смахивает.
А фотоприемник у вас на сколько килогерц?
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
Стандартный, с телевизора.
- oleg63m
- Друг Кота
- Сообщения: 20132
- Зарегистрирован: Чт сен 01, 2011 12:53:27
- Откуда: ТьмуТаракания. Почетный житель подмостовья
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
мненя поставили в тупик, таким заявлением
подскажите пжалста, ато я думал по другому, так как не имел онных, дабы проверить, а в адаптере вроде для них есть место,
да и мега 64 программировал
Привет! В ATmega64 и ATmega128 выводы MOSI и MISO не применяют для ISP Внимательно смотрите ДатаШит ! Например для ATmega128 сигналы MISO подключают к ножке PE1, MOSI подключают к ножке PE0.....или не так?
подскажите пжалста, ато я думал по другому, так как не имел онных, дабы проверить, а в адаптере вроде для них есть место,
да и мега 64 программировал

Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Мелкие вопросы по МК и ПЛИС.
Правильно сказали, читайте даташит, SPI-интерфейс этих мег сидит на порту B, а программируются (ISP) они через порт E.
- oleg63m
- Друг Кота
- Сообщения: 20132
- Зарегистрирован: Чт сен 01, 2011 12:53:27
- Откуда: ТьмуТаракания. Почетный житель подмостовья
- Контактная информация:
Re: Мелкие вопросы по МК и ПЛИС.
спасибо, век живи век учись
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Re: Мелкие вопросы по цифровой технике.
Всем привет.
В связи с похолоданием захотелось собрать схему электронного термометра.
Но не как не могу найти схему под имеющиеся радиодетали.
Что есть (основа);
МК PIC16f628A, Atmega 8, Attiny 85, Attiny 2313.
семи сегментный светодиодный индикатор на две циферки их у меня 2 шт.
и в качестве датчика температуры есть только терморезисторы 10 к и 100 к.
Подскажите можно ли собрать измеритель уличной температуры, пускай и с невысокой точностью.
В связи с похолоданием захотелось собрать схему электронного термометра.
Но не как не могу найти схему под имеющиеся радиодетали.
Что есть (основа);
МК PIC16f628A, Atmega 8, Attiny 85, Attiny 2313.
семи сегментный светодиодный индикатор на две циферки их у меня 2 шт.
и в качестве датчика температуры есть только терморезисторы 10 к и 100 к.
Подскажите можно ли собрать измеритель уличной температуры, пускай и с невысокой точностью.
Последний раз редактировалось Gudd-Head Чт сен 05, 2013 12:23:37, всего редактировалось 1 раз.
Причина: Сюда перенёс
Причина: Сюда перенёс