Пятница, 19.04.2024, 09:38
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | система дистанционного управления на ATtiny 2313 "c нуля" - Страница 24 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » система дистанционного управления на ATtiny 2313 "c нуля" (пошаговое изучение строительства систем радиоуправления)
система дистанционного управления на ATtiny 2313 "c нуля"
uwrteyДата: Воскресенье, 25.11.2012, 23:18 | Сообщение # 346
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
я сделал вот такую простенькую программную генерацию прерывания по int0, но она все равно не работает!
зато МК уходит на обработку прерывания, когда на шестой ножке МК изменяются логические состояния ВРУЧНУЮ! не смотря на то что я PD2 настроил на вЫвод
Code

    ldi Temp,0b00000100  ; настраиваем порт "D" (0-ввод, 1-вывод)
    out DDRD,Temp    ; int0 настраиваем на вывод!!! будем програмно генерировать прерывание!!!
Прикрепления: 7010714.asm (6.5 Kb)


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 00:17
 
ВитГоДата: Воскресенье, 25.11.2012, 23:53 | Сообщение # 347
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Quote (uwrtey)

зато МК уходит на обработку прерывания когда на шестой ножке МК изменяются логические состояния! не смотря на то что я PD2 настроил на вЫвод

все правильно. ты познакомился со способом программной генерации аппаратного прерывания biggrin

сначала настроил вывод на int0, а потом прерывания по int0
после этого при выводе в пин порта int0/pd2 - будет генериться аппаратное прерывание int0


Виталий (аka ВитГо)
 
uwrteyДата: Воскресенье, 25.11.2012, 23:55 | Сообщение # 348
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
ни чего не понял... sad , всысле правильно? прерывание же не генерируется программно! sad оно генерируется кода я проводком тычу в ножку !!! при чем PD3 настроен на вывод!!!

не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 00:16
 
ВитГоДата: Воскресенье, 25.11.2012, 23:57 | Сообщение # 349
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
так как ты генеришь прерывание не делается.. так только светодиодом мигают, да и то пока в таймерах не разбирались..
в таймерах ты уже разбирался :-) так что делай как положено:

лучше сделай с ocr1a\ocr1b - с режимом ctc toggle- как мы это делали в передатчике..
если значение регистра ocr1a не менять - то на выводе oc1a можно получить периодический сигнал

вот его и соедини пока с pd2


Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 26.11.2012, 00:03 | Сообщение # 350
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
1)
Quote (ВитГо)
так как ты генеришь прерывание не делается..

как это не делается?
а это кто говорил ?
Quote

я даже больше тебе скажу:
есть такой прием ручной генерации прерывания: это когда пин входного порта (то есть на котором прерывание должно срабатывать когда он является входом) конфигурируешь на ВЫВОД, и конфигурируешь прерывания по нему !
и потом когда тебе в программе нужно прерывание по входному порту (который как ты помнишь сконфигурен на вывод) - ты записываешь в этот пин порта нужное значение (то есть типа на вывод) и вуаля ! - получаешь прерывание как по входному пину от внешнего сигнала...

изврат конечно, но иногда так удобнее (я как то использовал подобное - программа сразу упростилась и даже читаться лучше стала)


2) не получится у меня наверное с ocr1a\ocr1b - таймер же занят! а с другим таймером я еще пока не знаком....


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 00:04
 
ВитГоДата: Понедельник, 26.11.2012, 00:04 | Сообщение # 351
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
гм.. есть еще Т0.. давай посмотрим что на нем можно сделать...

там есть выводы OC0A и OC0B - так что тоже самое !! только сам счетчик 8ми битный!!

ну и бог с ним сделаем ему прескалер побольше... и нам хватит 256 значений счетчика!


Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 26.11.2012, 00:06 | Сообщение # 352
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
хорошо, как скажешь!
объясни только пожалуйста про то, как правильно делать прием ручной генерации прерывания, а то я теперь спать не смогу... biggrin


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 00:06
 
ВитГоДата: Понедельник, 26.11.2012, 00:14 | Сообщение # 353
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: 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
Репутация: 11
Статус: Offline
а-а.
я делал так
Code

  ldi Temp,00000100   
  out PortD,Temp   ; генерируем прерывание по int0 (нарастающий фронт)

а надо было так?

Code
sbi PORTD, PIN_INT2


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 00:30
 
ВитГоДата: Понедельник, 26.11.2012, 00:39 | Сообщение # 355
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну в принципе это равнозначные команды, просто ты еще одновременно изменял состояние других 7 линий порта, я же командой sbi поменял только состояние одного бита порта !

Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 26.11.2012, 00:48 | Сообщение # 356
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
1) ну если равнозначные, то почему же прерывание не генерировалось? где я опять тупанул?
2) и почему прерывание генерировалось кода я проводком тыкал в ножку порта настроенного на вЫвод?


не успеваю за своими мыслями......
 
ВитГоДата: Понедельник, 26.11.2012, 00:51 | Сообщение # 357
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
проверяй настройки! если порт сконфигурен на вывод - то он и подключен должен быть как выходной!! и проводком я бы в него не тыкал во избежании выхода из строя выходных ключей пина !

Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 26.11.2012, 00:55 | Сообщение # 358
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Quote (ВитГо)
проводком я бы в него не тыкал во избежании выхода из строя выходных ключей пина !

блин, точно!!! surprised
я пожалуй пойду спать, мне через 4 часа надо на работу вставать....
завтра сегодня вечером появлюсь....


не успеваю за своими мыслями......
 
ВитГоДата: Понедельник, 26.11.2012, 00:59 | Сообщение # 359
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
давай, я тоже пошел спать :-)

Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 26.11.2012, 22:03 | Сообщение # 360
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Виталий привет!
1) нашел небольшие косяки, исправил их но аппаратное прерывание ни как не хочет генерироваться программно...

2) четвертая студия отругала меня за записи вот такого вида
Code
sbi PORTD, PIN_INT2
и
Code
cbi PORTD, PIN_INT2

пришлось делать как делал раньше
Code
  ldi Temp,00000100     
    out PortD,Temp   ; генерируем прерывание по int0 (нарастающий фронт)
и
Code
  ldi Temp,00000000     
    out PortD,Temp   ; генерируем прерывание по int0 (падающий фронт)
Прикрепления: 4109990.asm (6.7 Kb)


не успеваю за своими мыслями......

Сообщение отредактировал uwrtey - Понедельник, 26.11.2012, 23:33
 
Форум » Разработка электронных устройств » Разрабатываю ! » система дистанционного управления на ATtiny 2313 "c нуля" (пошаговое изучение строительства систем радиоуправления)
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz