Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как правилно это сделать с прерыаниями
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Vny4ek
Ребят, подскажите плиз, вопрос таков: Atmega8, CV
Приходит сигнал на ножку INT1 я хочу что бы при нарастающем фронте происходили (обнуление и запуск таймера) а при спадающем фронте (остановка таймера и запись его значения в переменную) и дальше опять что бы при нарастающем фронте (выполнялись какие либо операции), а при спаде (другие)?
ВСЕ что в скобках я с помощью ВАС уже понял как сделать. За это большое спасибо, но как остальное сделать ума не приложу. Какие регистры отвечают за выполенение прерывания по нарастанию и спаду знаю
// INT1: On
// INT1 Mode: Rising Edge
GICR|=0x80;
MCUCR=0x0C;
GIFR=0x80;

// INT1: On
// INT1 Mode: Falling Edge
GICR|=0x80;
MCUCR=0x08;
GIFR=0x80;
Vishv
Попробуйте сделать следующее:
1. Прерывание INT0 по любому изменению.
2. В обработчике прерывания проверяйте состояние вывода (ножка "INT0").
3. Если состояние низкое, значит прерывание вызвано спадающим фронтом, если высокое - наоборот.
Ну и в зависимости от результата делайте что нужно.
Vny4ek
Я пробовал так в CV ставил any change и подовал сигнал, в обработчике прерывания писал функцию вывода на дисплей она не выполнялась почему то. Хотя когда ставил rising или faling edge выполнялось. Подавал прямоугольные импульсы амплитудой 5В в протеусе.
rezident
Цитата(Vny4ek @ Jul 30 2009, 20:53) *
Подавал прямоугольные импульсы амплитудой 5В в протеусе.
Вам вроде уже объясняли, что не нужно симулировать периферийые модули МК в моделирующей программе - этом вашем ... гм... Протеусе. Проверяйте в "железе". Потому как "практика - критерий истины". А при симуляции на ваши собственные ошибки в программе накладываются ошибки модели и/или моделирующей программы. И получается то, что у вас получается, а у других в железе работает.
Vny4ek
Не ну я понимаю что многие вещи в протеусе не коректно работать могут, но что бы такие элементарные, просто в железе я не смогу отладить дальше программу. Уж очень много в протеусе нужных штуковин
SasaVitebsk
Цитата(Vny4ek @ Jul 30 2009, 19:10) *
Не ну я понимаю ...

Да при чём здесь некорректно? 2+2=5 это некорректно? Прерывания не вызываются - это некорректно? А может в изделии наоборот лишние будут вызываться - это некорректно?

Это просто даром потраченное время. Мало того, что результату отладки нельзя доверять, так вы ещё и не получите знаний/опыта отладки в реальном железе. И за ради чего? Вот этого я не понимаю.

Протеус нужен либо
а) Людям, которые проффессионально с ним работают. А именно: знают в подробностях как это всё работает, знают и могут создать свою переферию либо отладить изменить работающую, покупают официальные проверенные модели, гарантированно рабочие.
б) Людям, которые хотят поверхностно, в общих чертах, ознакомится с электроникой и/или программированием. То есть конечный результат "в железе" их вообще не интересует. Возможно даже и не запланирован.

Во втором случае, выбирается примитивная задача, с любым МК и проверенной переферией. Если что-то не катит, то меняют.
singlskv
Цитата(SasaVitebsk @ Jul 30 2009, 23:37) *
Протеус нужен либо
а) Людям, которые проффессионально с ним работают. А именно: знают в подробностях как это всё работает, знают и могут создать свою переферию либо отладить изменить работающую, покупают официальные проверенные модели, гарантированно рабочие.
б) Людям, которые хотят поверхностно, в общих чертах, ознакомится с электроникой и/или программированием. То есть конечный результат "в железе" их вообще не интересует. Возможно даже и не запланирован.
Во втором случае, выбирается примитивная задача, с любым МК и проверенной переферией. Если что-то не катит, то меняют.
На самом деле не все так печально, и уж все что нужно автору топика в протеусе
делается вроде как адекватно.
Я например им пользуюсь довольно часто в случае невозможности получить (достаточно простую)железку для тестирования

Если автор топика даст свой проект(со всеми исходниками) могу глянуть,
тока конечно если там все адекватно и не потребует много времени на "лезть в даташит чтоб узнать значение битика"...
haker_fox
Цитата(Vny4ek @ Jul 31 2009, 01:10) *
Уж очень много в протеусе нужных штуковин

Интересно услышать, каких?
Goodefine
Цитата(haker_fox @ Jul 31 2009, 04:00) *
Интересно услышать, каких?

-Обширная база элементов, МК в том числе
-Точные инструменты. Вольтметр&амперметр показывают действительно действующее значение, а не среднепотолочное. Осциллограф тоже весьма неплох. Разнообразные генераторы сигналов - само собой
-Дебагеры SPI и I2C
-Возможность работать прямо из модели с реальным rs232, а для некоторых МК и с USB
-Доступна пошаговая отладка на Си, со всеми видимыми переменными.
- Как бонус возможность экспортировать схему в лайот редактор
-Исключительно точная симуляция ШИМа
-Очень быстрая симуляция, во многих случаях в реальном времени (даже в шахматы не в напряг играть)
...
Хватит?
На самом деле, есть и некоторые подводные камни, но они непринципиальны. Легко обходятся практически без ущерба. Не следует, например ожидать, что если включите светодиод в 220В то он сгорит. Будет нормально светить, даже без предупреждений...
За все время припоминаю только один существенный глюк - не вызывался обработчик прерывания по захвату таймера от компаратора в m16.
Proteus - это инструмент, которым надо уметь пользоваться, имеющий свои достоинства и недостатки. Хороший инструмент...
_Pasha
Цитата(Vny4ek @ Jul 30 2009, 16:21) *
... и дальше опять что бы при нарастающем фронте (выполнялись какие либо операции), а при спаде (другие)?

А вот это уже сложняк-с. Если хочется вменяемого времени реакции на прерывание, такое надо выпиливать на ассемблере, причем полный текст прерывания.
Rst7
Цитата(Goodefine @ Jul 31 2009, 09:16) *
Цитата(haker_fox @ Jul 31 2009, 04:00) *

Интересно услышать, каких?

-Обширная база элементов, МК в том числе
....
Хватит?


Это все не то. Самое главное, что в нем есть - это SPICE-симулятор аналоговых делов, скрещенный с симуляцией микроконтроллеров. Я вот приловчился в нем импульсные источники питания на основе микроконтроллеров симулить и отлаживать. Немного с бубном (из-за кривоватой симуляции МК), но работает.
Vny4ek
Вот я положил архив там 2 файла исходник на С для кодвижена и проект в протеусе. В проекте можно использовать и генератор импульсов и аудио файл закинуть (ну это я просто имея файл где есть импульсы разной длительностью 400мкс -800мкс)
singlskv
Цитата(Vny4ek @ Jul 30 2009, 18:53) *
Я пробовал так в CV ставил any change и подовал сигнал, в обработчике прерывания писал функцию вывода на дисплей она не выполнялась почему то. Хотя когда ставил rising или faling edge выполнялось. Подавал прямоугольные импульсы амплитудой 5В в протеусе.
Простите, но в присланом архиве намека на какую-нить программу я не обнаружил,
там только "скелет" инициализации сделаный CV...
haker_fox
Цитата(Rst7 @ Jul 31 2009, 15:59) *
Немного с бубном (из-за кривоватой симуляции МК), но работает.

Насколько я понимаю, источники питания не любят, когда их ошибочно проектируют. Особенно силовые) Видимо Ваш опыт позволяет видеть некоторые глюки симулятора и обходить их?
Rst7
Цитата
Видимо Ваш опыт позволяет видеть некоторые глюки симулятора и обходить их?


Да причем тут опыт. Оно ж видно все. Особенно, в крайних случаях (ATtiny25, TMR1 затактирован от PLL)
Код
res_ovf_minus:
    CLR    VL
#ifdef PROTEUS
    INC    VL
#endif
    OUT    OCR1A,VL


Совсем ему худо в протеусе при нолике в OCR wink.gif
Vny4ek
Да это исходник просто. весь проект не стал выкладывать. Неужели никто не подскажет, как на Атмега8 в Кодвижене сделать это??? Уверен что это возможно просто я чегото не догоню smile.gif Помогите плиз, все изучение застопорилось.
INT1
Устройте в обработчике прерывания проверку бита ISC10 MCUCR в конструкции if((MCUCR&0x04)!=0) {/*прерывание произошло по положительному перепаду*/делаем тото;MCUCR&=~0x04;}//устанавливаем ISC10 в "0" else{делаем тото;MCUCR|=0x04;}// устанавливаем ISC10 в "1"
Или что нужно, может я не понял? smile.gif
Vny4ek
спасибо попробую
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.