Собственно сталкнулся с такой проблеммой как внешние прирывания в MEGA48. Вот простая программа которая нехочет работать в PROTEUS: При нажатия кнопки ,увеличивается TEMP,и выводится на выход PORTC а также поясните для чего pcicr , pcmsk0, pcifr -а даташите нечего непонял( И еще хотел спросить INTO и PCINT0 отдельно? тоесть для PCINTO ненадо заполнять eicra EIMSK EIfr тоесть для INTO ненадо заполнять pcicr pcmsk0 pcifr Файлы прикрепленны
ldi temp,0b00000001 ;устанавливаем контроль sts pcicr,temp; ; прирывания на PCINT0-7
ldi temp,0b00000001 sts pcmsk0,temp;
ldi temp,0b00000000 ; Флаг устанавливается автоматически sts pcifr,temp; ; при возникновения событии на PCINT0 ; сбрасывается в 0 при прирывании ; после снова устанавливается в 1
;разрешаем прерывание sei
start: out portc,temp; rjmp start;
;прерывание !!!!! PCINTo: !!!!!!!!!!!!!! - в АВР выдает ошибку EXT_INT0: inc temp; reti
сталкнулся с такой проблеммой как внешние прирывания в MEGA48
- проблема в том, что плохо читал datasheet. В PROTEUS не работаю, так что пардон....
1 INT0 и PCINT0 различные прерывания. 2 Много лишних(бесполезных) команд и директив ассемблера 3 Если пишешь 3 JMPa на обработку прерывания, то и обработчиков должно быть столько-же. 4 Если работаешь с кнопками неплохо-бы обрабатывать и "дребезг контактов" ...
советую почитать книжку Евстифеева про Мегу, там все доходчиво описано. Успехов...
Заголовок сообщения: Re: Помогите новичку с внешними прирываниями ATMEGA48
Добавлено: Пн янв 10, 2011 01:39:51
Первый раз сказал Мяу!
Зарегистрирован: Сб май 30, 2009 00:51:42 Сообщений: 39 Откуда: Россия, г. Курск
Рейтинг сообщения:0
Пожалуйста, поподробнее: какую именно ошибку выдаёт?
_________________ "Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо. А если отступил и сдал немного, то, считай, душа продалась и сдохла! Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
здравствуйте и снова я)на счет ошибки ладно разобрался - просто я думал что надо писать именно PCINTo: - а оказывается это обычный безусловный переход. Спасибо за книжку!!!! - много узнал) - относительно)
даже почти получилось настроить PCINT - проблемма: при подачи sin сигнал на ножку(PROTEUS!!!!!) он как и должен прерывается по изменению сигнала, а вот при подключение через кнопку, она срабатывает 1 раз,и все стоит на месте(- это очень надо)
и неполучается настроить int0 - вроде просто но неполучается - несрабатывает,код программы:
.org 0x000 rjmp unit; .org 0x0001 rjmp sydi;настраиваем прерывание into
unit : clr temp; out DDRB,temp; out DDRD,temp; ser temp; out DDRc,temp;
ldi r16,high(RAMEND) ; устанавливаем область стека out SPH,r16 ; ldi r16,low(RAMEND) ; out SPL,r16 ;
ldi temp,0b00000010 ;INT0 ISC11=1,SC10=0 sts eicra,temp ;по спадающему фронту
Заголовок сообщения: Re: Помогите новичку с внешними прирываниями ATMEGA48
Добавлено: Ср янв 12, 2011 21:47:59
Первый раз сказал Мяу!
Зарегистрирован: Сб май 30, 2009 00:51:42 Сообщений: 39 Откуда: Россия, г. Курск
Рейтинг сообщения:0
Во-первых, надо в начале своей программы подключать заголовочный файл с адресами регистров и прочими объявлениями для конкретного камня - в данном случае это m48def.inc Во-вторых, у вас ошибка в коде, при записи в регистр EIMSK.
_________________ "Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо. А если отступил и сдал немного, то, считай, душа продалась и сдохла! Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
Во-первых, надо в начале своей программы подключать заголовочный файл с адресами регистров и прочими объявлениями для конкретного камня - в данном случае это m48def.inc Во-вторых, у вас ошибка в коде, при записи в регистр EIMSK.
simpleX большое спасибо.Ошибка была всего лишь вместо sts надо было написать out для EMISK(это написанно в даташите?). У меня есть вопросы возможно глупые но тем неменее должен задать):- зачем сопротивление?,что там за стрелка(около сопротивления)? И ГЛАВНЫЙ вопрос: кнопки присоединяются между земля-ножка,или можно питание-ножка? поидее мы изменяем напряжение(уровень) на ножке - питанием?
Заголовок сообщения: Re: Помогите новичку с внешними прирываниями ATMEGA48
Добавлено: Чт янв 13, 2011 18:50:47
Первый раз сказал Мяу!
Зарегистрирован: Сб май 30, 2009 00:51:42 Сообщений: 39 Откуда: Россия, г. Курск
Рейтинг сообщения:0
спящий писал(а):
Ошибка была всего лишь вместо sts надо было написать out для EMISK(это написанно в даташите?). У меня есть вопросы возможно глупые но тем неменее должен задать):- зачем сопротивление?,что там за стрелка(около сопротивления)? И ГЛАВНЫЙ вопрос: кнопки присоединяются между земля-ножка,или можно питание-ножка? поидее мы изменяем напряжение(уровень) на ножке - питанием?
Написано, но не так прямо, как вы только что вывели =) Даташит, пункт 5 "About code examples", второй абзац.
Резистор подтягивает ногу МК к питанию, устанавливает высокий уровень на выводе МК. Стрелка - ето символ для обозначения + питания.
Можно питание-ножка, главное надо так исхитриться в схеме, чтобы при нажатии кнопки КЗ не было и уровень на выводе МК поменялся. Поетому я нарисовал самый простой (на мой взгляд) вариант.
_________________ "Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо. А если отступил и сдал немного, то, считай, душа продалась и сдохла! Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
и снова здравствуйте. Совсем запутался с настройками watchdog - вроде и просто - но неполучаестья. . . Программа простая, специально сократил,урбал из нее ненужное)
Суть программы : прерывание по "Собаке" ,увеличиваем содержимое в регистре и на "выход"(порт)
Заголовок сообщения: Re: Помогите новичку с внешними прирываниями ATMEGA48
Добавлено: Сб янв 29, 2011 20:44:56
Первый раз сказал Мяу!
Зарегистрирован: Сб май 30, 2009 00:51:42 Сообщений: 39 Откуда: Россия, г. Курск
Рейтинг сообщения:0
Сбрасывать WDT нужно для того, чтобы (если вы уж решили использовать WDT) МК работал непрерывно. В этом и суть WDT: не сбросите в своей программе таймер, сбросится МК.
Похоже, вы совсем не читали даташит...
Цитата:
ldi temp,0b11000001;
Не нужно здесь устанавливать флаг WDIF. Он сам установится, когда произойдёт прерывание.
Цитата:
sbr temp,(1<<wdce) + (1<<wde); сбрасываем таймер
Таймер сбрасывается специальной инструкцией WDR и не в прерывании, когда переполнение таймера УЖЕ произошло, а заранее! Это у вас режим interrupt, а если бы был interrupt+reset, то ето был бы первое и последнее прерывание от WDT...
_________________ "Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо. А если отступил и сдал немного, то, считай, душа продалась и сдохла! Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
несовсем понял -а точнее совсем непонял) Я пытаюсь настраивать по книжки Евстифеева MEGA Там написано (страница 393): если WDE установлен в 1 - включен стороживой таймер,в 0- выключен выключен стороживой таймер
тут же снизу таблица: wde - 0,wdie - 1 режим работы по прерыванию,
Думаю вы иммели ввиду так?
ldi temp,0b01011001;насройка перевода в interrupt sts wdtcsr,temp; ldi temp,0b01000001; перевод в interrupt sts wdtcsr,temp; sei;
start: out portB,r17; out portd,r18; rjmp start;
WDT: inc r17; subi r18,10; reti
программа делает 1 прерывание и все ( может думаю WDT надо сбросить или он автоматически сбрасывается?
и еще раз здравствуйте, коряво - очень ,но вроде получилось :
ldi temp,0b01011000;насройка перевода в interrupt sts wdtcsr,temp;
ldi temp,0b01100111; перевод в interrupt sts wdtcsr,temp; sei;
start:
out portd,r17; out portb,r18; rjmp start;
WDT: inc r17; subi r18,10; wdr; может какнибудь подругому его сбросить? reti
В цикле(основной программе) сбрасывать нельзя! -он у меня колеблица от 0.02с до 3с - неровно получится. едиственное непонял: по даташиту прерывания должны быть через 8 сек, у меня 256033 циклов,это 2 сек,если частота 125кГЦ?
Заголовок сообщения: Re: Помогите новичку с внешними прирываниями ATMEGA48
Добавлено: Вс янв 30, 2011 12:16:22
Первый раз сказал Мяу!
Зарегистрирован: Сб май 30, 2009 00:51:42 Сообщений: 39 Откуда: Россия, г. Курск
Рейтинг сообщения:0
может проще его совсем не использовать? %)
_________________ "Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо. А если отступил и сдал немного, то, считай, душа продалась и сдохла! Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
Заголовок сообщения: Re: Помогите новичку с внешними прирываниями ATMEGA48
Добавлено: Вс янв 30, 2011 14:03:07
Первый раз сказал Мяу!
Зарегистрирован: Сб май 30, 2009 00:51:42 Сообщений: 39 Откуда: Россия, г. Курск
Рейтинг сообщения:0
А вообще для чего вы хотите использовать WDT?
_________________ "Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо. А если отступил и сдал немного, то, считай, душа продалась и сдохла! Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
для дипломного проекта: Регулирование скорость двигателя частотным преобразованием от регулятора 10 -0 В,программа примерно выглядит так:
старт: таблица синусов ; тут изменяется время -процесс непрерывный и время меняется от 0.02 до 1 с rjmp старт
WDT: -прерывание собаки ,равномерно независящее от время... изменяем время в зависимости от входа с регулятора reti
чтото типо этого,перед входом в AVR будет стоять деоитель напряжения до 5 В. А нельза сделать прерывание от счетчмка T0? - хотя неполучиться, при T1(16 разрядный) будет спрашивать при частоте кварца 10Мг будет опрашивать каждые 0.0065с - тоесть почти все время( - а там и шумы и все прочее...
Последний раз редактировалось спящий Вс янв 30, 2011 15:14:25, всего редактировалось 1 раз.
у каждого таймера есть предделитель - это раз, т.е. входную частоту можете получить практически много меньше чем тактовая контроллера. во вторых вам никто не запрещает в хоть 16битный счетчик при первом пуске (и при каждом прерывании) записать 65530 - тогда прерывания будут вызываться каждые 6 тактов таймера при достижении значения 65536 (ноль по-другому )
Заголовок сообщения: Re: Помогите новичку с внешними прирываниями ATMEGA48
Добавлено: Вс янв 30, 2011 18:38:43
Первый раз сказал Мяу!
Зарегистрирован: Сб май 30, 2009 00:51:42 Сообщений: 39 Откуда: Россия, г. Курск
Рейтинг сообщения:0
И опять неправильно используете инструкцию sts...
Цитата:
sts tccr0b,temp;
Неужели так трудно проверить код самому?
_________________ "Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо. А если отступил и сдал немного, то, считай, душа продалась и сдохла! Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения