система дистанционного управления на ATtiny 2313 "c нуля"
| |
uwrtey | Дата: Воскресенье, 25.11.2012, 23:18 | Сообщение # 346 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| я сделал вот такую простенькую программную генерацию прерывания по int0, но она все равно не работает! зато МК уходит на обработку прерывания, когда на шестой ножке МК изменяются логические состояния ВРУЧНУЮ! не смотря на то что я PD2 настроил на вЫвод Code ldi Temp,0b00000100 ; настраиваем порт "D" (0-ввод, 1-вывод) out DDRD,Temp ; int0 настраиваем на вывод!!! будем програмно генерировать прерывание!!!
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 00:17 |
|
| |
ВитГо | Дата: Воскресенье, 25.11.2012, 23:53 | Сообщение # 347 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Quote (uwrtey) зато МК уходит на обработку прерывания когда на шестой ножке МК изменяются логические состояния! не смотря на то что я PD2 настроил на вЫвод все правильно. ты познакомился со способом программной генерации аппаратного прерывания
сначала настроил вывод на int0, а потом прерывания по int0 после этого при выводе в пин порта int0/pd2 - будет генериться аппаратное прерывание int0
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Воскресенье, 25.11.2012, 23:55 | Сообщение # 348 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ни чего не понял... , всысле правильно? прерывание же не генерируется программно! оно генерируется кода я проводком тычу в ножку !!! при чем PD3 настроен на вывод!!!
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 00:16 |
|
| |
ВитГо | Дата: Воскресенье, 25.11.2012, 23:57 | Сообщение # 349 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| так как ты генеришь прерывание не делается.. так только светодиодом мигают, да и то пока в таймерах не разбирались.. в таймерах ты уже разбирался :-) так что делай как положено:
лучше сделай с ocr1a\ocr1b - с режимом ctc toggle- как мы это делали в передатчике.. если значение регистра ocr1a не менять - то на выводе oc1a можно получить периодический сигнал
вот его и соедини пока с pd2
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 26.11.2012, 00:03 | Сообщение # 350 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| 1) Quote (ВитГо) так как ты генеришь прерывание не делается.. как это не делается? а это кто говорил ? Quote я даже больше тебе скажу: есть такой прием ручной генерации прерывания: это когда пин входного порта (то есть на котором прерывание должно срабатывать когда он является входом) конфигурируешь на ВЫВОД, и конфигурируешь прерывания по нему ! и потом когда тебе в программе нужно прерывание по входному порту (который как ты помнишь сконфигурен на вывод) - ты записываешь в этот пин порта нужное значение (то есть типа на вывод) и вуаля ! - получаешь прерывание как по входному пину от внешнего сигнала...
изврат конечно, но иногда так удобнее (я как то использовал подобное - программа сразу упростилась и даже читаться лучше стала)
2) не получится у меня наверное с ocr1a\ocr1b - таймер же занят! а с другим таймером я еще пока не знаком....
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 00:04 |
|
| |
ВитГо | Дата: Понедельник, 26.11.2012, 00:04 | Сообщение # 351 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| гм.. есть еще Т0.. давай посмотрим что на нем можно сделать...
там есть выводы OC0A и OC0B - так что тоже самое !! только сам счетчик 8ми битный!!
ну и бог с ним сделаем ему прескалер побольше... и нам хватит 256 значений счетчика!
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 26.11.2012, 00:06 | Сообщение # 352 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| хорошо, как скажешь! объясни только пожалуйста про то, как правильно делать прием ручной генерации прерывания, а то я теперь спать не смогу...
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 00:06 |
|
| |
ВитГо | Дата: Понедельник, 26.11.2012, 00:14 | Сообщение # 353 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| прерывание вручную генерируется так:
вывод прерывания (int0\int1) конфигурируем на выход (выводом "1" в соответствующий бит DDRx регистра)
далее настраиваем прерывание по нужному нам событию (фронт, спад, любое изменение - ну это ты делал вроде уже, должен помнить)
после этого пишем обработчик прерывания (int0\int1), не забываем его вставить в таблицу векторов прерываний переход (это то что вначале программы)
теперь в программе, когда нам нужно оказаться в прерывании int0\int1 мы просто выдаем нужный нам сигнал на выводе int1\int0 например если прерывание настроено по фронту сигнала на int1\int0 то мы устанавливаем вывод в "1" например командой: sbi PORTx, PIN_INTx - это команда установки бита в PORTx (для 2313 - PORTD) бита с номером PIN_INTx (int1 - 3, int0 - 2) при входе в прерывание сбрасываем пин !!! это команда cbi PORTx, PIN_INTx - и дальше обрабатываем прерывание в обычном порядке..
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 26.11.2012, 00:25 | Сообщение # 354 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| а-а. я делал так Code ldi Temp,00000100 out PortD,Temp ; генерируем прерывание по int0 (нарастающий фронт) а надо было так?
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 00:30 |
|
| |
ВитГо | Дата: Понедельник, 26.11.2012, 00:39 | Сообщение # 355 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну в принципе это равнозначные команды, просто ты еще одновременно изменял состояние других 7 линий порта, я же командой sbi поменял только состояние одного бита порта !
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 26.11.2012, 00:48 | Сообщение # 356 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| 1) ну если равнозначные, то почему же прерывание не генерировалось? где я опять тупанул? 2) и почему прерывание генерировалось кода я проводком тыкал в ножку порта настроенного на вЫвод?
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Понедельник, 26.11.2012, 00:51 | Сообщение # 357 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| проверяй настройки! если порт сконфигурен на вывод - то он и подключен должен быть как выходной!! и проводком я бы в него не тыкал во избежании выхода из строя выходных ключей пина !
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 26.11.2012, 00:55 | Сообщение # 358 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Quote (ВитГо) проводком я бы в него не тыкал во избежании выхода из строя выходных ключей пина ! блин, точно!!! я пожалуй пойду спать, мне через 4 часа надо на работу вставать.... завтра сегодня вечером появлюсь....
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Понедельник, 26.11.2012, 00:59 | Сообщение # 359 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| давай, я тоже пошел спать :-)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 26.11.2012, 22:03 | Сообщение # 360 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Виталий привет! 1) нашел небольшие косяки, исправил их но аппаратное прерывание ни как не хочет генерироваться программно...
2) четвертая студия отругала меня за записи вот такого вида и пришлось делать как делал раньше Code ldi Temp,00000100 out PortD,Temp ; генерируем прерывание по int0 (нарастающий фронт) и Code ldi Temp,00000000 out PortD,Temp ; генерируем прерывание по int0 (падающий фронт)
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 23:33 |
|
| |
|