Собственно сталкнулся с такой проблеммой как внешние прирывания в 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 ;по спадающему фронту
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Заголовок сообщения: Re: Помогите новичку с внешними прирываниями ATMEGA48
Добавлено: Ср янв 12, 2011 21:47:59
Первый раз сказал Мяу!
Зарегистрирован: Сб май 30, 2009 00:51:42 Сообщений: 39 Откуда: Россия, г. Курск
Рейтинг сообщения:0
Во-первых, надо в начале своей программы подключать заголовочный файл с адресами регистров и прочими объявлениями для конкретного камня - в данном случае это m48def.inc Во-вторых, у вас ошибка в коде, при записи в регистр EIMSK.
_________________ "Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо. А если отступил и сдал немного, то, считай, душа продалась и сдохла! Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Во-первых, надо в начале своей программы подключать заголовочный файл с адресами регистров и прочими объявлениями для конкретного камня - в данном случае это 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;
Неужели так трудно проверить код самому?
_________________ "Никогда не опускайся чего б тебе ни стоило, как бы ни было плохо. А если отступил и сдал немного, то, считай, душа продалась и сдохла! Честь и кровь - сохрани свою совесть, свобода и любовь - вот она русская гордость"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения