Четверг, 28.03.2024, 23:11
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | система дистанционного управления на ATtiny 2313 "c нуля" - Страница 7 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » система дистанционного управления на ATtiny 2313 "c нуля" (пошаговое изучение строительства систем радиоуправления)
система дистанционного управления на ATtiny 2313 "c нуля"
ВитГоДата: Суббота, 13.10.2012, 22:56 | Сообщение # 91
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Quote (uwrtey)
вот осциллограмма снятая с разных кнопок


ну вот теперь верю что работает :-)))

считай процентов 20 задачи сделано :-)
теперь самый гемор это приемник :-)


Виталий (аka ВитГо)
 
uwrteyДата: Суббота, 13.10.2012, 23:17 | Сообщение # 92
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
я очень надеюсь на Твою помощь....

не успеваю за своими мыслями......
 
ВитГоДата: Воскресенье, 14.10.2012, 01:58 | Сообщение # 93
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну а куда я денусь ? :-)

Виталий (аka ВитГо)
 
uwrteyДата: Воскресенье, 14.10.2012, 09:44 | Сообщение # 94
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
с чего стоит начать ?
вот схемку накидал, а какой ногой лучше читать данные ?


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

Сообщение отредактировал uwrtey - Воскресенье, 14.10.2012, 09:46
 
ВитГоДата: Понедельник, 15.10.2012, 06:37 | Сообщение # 95
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
нужно посмотреть даташит, помоему ICP в идеале (туда таймер вешается), но для приемников радиоканала к сожалению это слабо применимо, так как очень часто бывают помехи, которые делят импульс\паузу на кучку миниимпульсов с минипаузами между ними :-)

поэтому лучше всего работает (и применялся в обычных аналоговых приемниках радиоуправления) метод непрерывного опроса сигнала с приемника и по длительности полученного импульса\паузы формирование вывода о том на самом деле это импульс или нет.

для нашего случая, у нас импульс длиной например Imp мкс.
следовательно по приходу прерывания с ноги микроконтроллера, мы сбрасываем таймер (пусть это будет тоже Т1) и ждем изменения сигнала на входе.
причем если это изменение сигнала - приход паузы на входе, будет за время меньше чем за Imp мкс - то мы ждем снова появления импульса и замеряем время полученной паузы - если она меньше определенной величины (например 1-2 мкс) то значит это помеха, и мы считаем что импульс длится дальше и никакой минипаузы небыло..

вот корявая картинка (извиняюсь что такая страшная, в паинте рисовал)


длительности импульсов\пауз:
1. менее 2 мкс
2. Imp мкс (правильный импульс)
3. Imp мкс (правильная пауза)
4. два импульса, с общим временем Imp1 + Pausa1 +Imp2 = Imp (причем время Pausa1 < 2 мкс) - регистрируем правильный импульс
5. две паузы с общим временем Pausa2 + Imp3 + Pausa3 = 2*Imp (причем Imp3 < 2 мкс) - регистрируем правильную паузу
6. импульс длинны меньшей чем Imp на большую чем ImpDevi погрешность ! - фактически мы получили импульс длительностью например Imp - 5 мкс - скорее все это либо помеха либо вообще не пачка нашего передатчика - бракуем всю посылку !

соответственно у нас должен быть примерно такой алгоритм:
1.- ждем изменения на входе (причем ждем импульс!)
-> дождались:
2.-- сбрасываем таймер времени, и ждем изменения на входе (ждем паузу)
--> дождались:
3.--- если длительность нашего импульса <3 мкс - то этот импульс помеха, идем на шаг 1.
----- если длительность нашего импульса < (Imp-ImpDevi) - то этот импульс не нашей длительности, возможно не наш передатчик или сильные помехи или еще чтото не понятное, идем на шаг 1
----- если длительность импульса >3 мкс, но меньше Imp - то ждем снова прихода импульса, и когда он придет идем на шаг 3 (ждем опять паузу) так мы захватываем импульсы с помехами в виде паузы внутри
----- если наш импульс вывалился за (Imp + ImpDevi) то это импульс не нашей длительности, идем на шаг 1
----- здесь длительность импульса +- равна Imp - регистрируем получение импульса и ждем паузу (переходим на прием паузы)

вот примерно так, нарисуй себе где нить сигнал и расставь шаги приема.

импульсы\паузы помехи можно взять до 1-2 мкс (вообще это зависит от приемника)
ImpDevi можно взять в в размере 90% от длительности Imp (может быть даже меньше - процентов до 80.. тоже зависит от приемника)

попробуй написать программу по алгоритму на любом удобном языке (не обязательно асме)... посмотри, может быть где нить можно будет сделать оптимизацию, как сделать чтобы проверялось несколько помех при приеме импульса (паузы)

дальше, нам нужно чтобы по приходу импульса тинька генерила прерывание - какая ножка для этого подходит ?
в принципе конечно можно в бесконечном цикле опрашивать, но возможно что с прерываниями будет чуть проще...
так что начинай листать даташит и интернет :-)
Прикрепления: 7073699.gif (9.1 Kb)


Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 15.10.2012, 21:34 | Сообщение # 96
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
Interrupt Vectors in ATtiny2313 стр 43 http://www.promelec.ru/pdf/ATTINY2313.pdf

External Interrupt Request 0 / INT0 / 6-ая ножка
External Interrupt Request 1 / INT1 / 7-ая ножка
ICP / 11-ая ножка

а можно и на самом деле постоянно опрашивать какой-нибудь пин

*********************************************************
кроме ассемблера ни чего не изучал

*********************************************************


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

Сообщение отредактировал uwrtey - Понедельник, 15.10.2012, 22:11
 
ВитГоДата: Понедельник, 15.10.2012, 22:05 | Сообщение # 97
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну вот и выбирай среди int 0 \ int 1 какой тебе больше нравиться...

Виталий (аka ВитГо)
 
uwrteyДата: Понедельник, 15.10.2012, 22:17 | Сообщение # 98
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
пускай будет int 0
все таки не будем в бесконечном цикле опрашивать ?

*******************************************************************
Quote

----- если длительность нашего импульса < (Imp-ImpDevi) - то этот импульс не нашей длительности, возможно не наш передатчик или сильные помехи или еще чтото не понятное, идем на шаг 1
----- если длительность импульса >3 мкс, но меньше Imp - то ждем снова прихода импульса, и когда он придет идем на шаг 3 (ждем опять паузу) так мы захватываем импульсы с помехами в виде паузы внутри

| если длительность нашего импульса < (Imp-ImpDevi)| = |если длительность импульса >3 мкс, но меньше Imp | biggrin


не успеваю за своими мыслями......
 
ВитГоДата: Вторник, 16.10.2012, 12:38 | Сообщение # 99
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
большого смысла в бесконечном цикле нет..

прочитай про возможные варианты генерации прерывания по int 0


Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 16.10.2012, 17:57 | Сообщение # 100
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
читаю про Внешние прерывания http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh128/8.htm

не успеваю за своими мыслями......
 
ВитГоДата: Вторник, 16.10.2012, 20:26 | Сообщение # 101
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ок,
как почитаешь сделай тестовый проект

нужно протестить генерацию прерывания в следующих вариантах настроек:
- на спад импульса
- на фронт
- при любом изменении

в качестве индикатора как всегда - светодиод

(это будет базовое прерывание приемника - все расчеты и действия будут делаться в этом прерывании)


Виталий (аka ВитГо)
 
ВитГоДата: Четверг, 18.10.2012, 19:29 | Сообщение # 102
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну что там ? куда пропал ?

Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 18.10.2012, 23:42 | Сообщение # 103
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
напряженка на работе - приходил домой и падал спать.... (я 2/2 работаю)
сегодня только пришел с работы... сейчас попробую посоображать...

---------------------------------------------
я так понимаю нас интересует регистр MCUCR ( страница 59 датащита http://www.promelec.ru/pdf/ATTINY2313.pdf ) ///далее речь про INT0///
биты 0 и 1 (ISC00 и ISC01)

Any logical change on INT0 generates an interrupt request. (ISC00=1, ISC01=0)

то есть это будет выглядеть так:

ldi R16,(1<<ISC00)_______; Любое логические изменения на INT0 генерирует запрос на прерывание
out MCUCR,R16


---------------------------------------------
General Interrupt Mask
Register – GIMSK - глобальное разрешение внешнего прерывания

ldi R16,(1<<INT0)____________;глобальное разрешение внешнего прерывания INT0
out GIMSK ,R16


---------------------------------------------
вот с EIFR что то я не понял
(зачем этот регистр ???? и нужно ли нам устанавливать INTF0 ???)

---------------------------------------------
вот PCMSK точно нам не надо - это разрешает прерывание на той или иной ноге Порта "Б" ( внешние прерывания PCINT)

---------------------------------------------
еще вот тут нарыл очень полезную информацию http://habrahabr.ru/post/131908/

---------------------------------------------
вот тут про EIFR (External Interrupt Flag Register) http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_23.htm

Quote
В случае поступления запроса на прерывание на какой либо из выводов INT7 - INT4, будет установлен в 1 соответствующий флаг прерывания (INTF7 - INTF4). Если бит I регистра SREG и соответствующий бит разрешения (INT7 - INT4) в EIMSK будут установлены, то MCU перейдет к вектору прерывания. По завершению подпрограммы прерывания флаг очищается. Кроме того, его можно очистить, записав в него логическую 1.


EIMSK у нас нету, зато есть GIMSK

вот тут можно почитать про GIMSK и GIFR http://nikolaew.org/avr_old/IOGIMSK.htm

Quote
Если ваша программа работает с прерываниями, то регистр GIFR вам, в общем-то, и не нужен. В нем устанавливается в "1" флаг INTFx в том случае, если прерывание запрещено, а ситуация возникновения прерывания имеется. Программа может опрашивать эти флаги и предпринимать какие-либо действия.


GIFR у нас то же нету, зато есть EIFR ( ну вот пришел к тому с чего начал....)

---------------------------------------------
мысли вслух:

TIMSK = Регистр масок прерывания по таймерам/счетчикам - TIMSK (Timer/Counter Interrupt Mask Register)
EIMSK = Регистр масок внешних прерываний - EIMSK - (External Interrupt Mask Register)
GIMSK = Генеральный регистр маски прерывания - GIMSK (General Interrupt Mask Register) видимо равноправен с EIMSK ???
****
EIFR = Регистр флагов внешних прерываний - EIFR (External Interrupt Flag Register)
GIFR = Генеральный регистр флагов прерываний (General Interrupt Flag Register) видимо равноправен с EIFR ???
****

---------------------------------------------
а-а, я кажется понял
Quote

Регситр отвечающий за испольнение прервыания, если логика на ножке изменилась, то в регистре появляется запись, и вектор прервыания начинает обрабатываться.


то есть, при хардварном ( от слова "hardware" ) событии (нажатие кнопки например), биты сами записываются в EIFR .
А если событие нужно указать софтварно ( от слова "software"), то биты в EIFR нужно установить/сбросить "вручную" програмно...


то есть получается ни чего не надо делать с EIFR ?!?!?!

а еще я понял что лучше всего читать даташит, чем лазить по справкам типа http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_13.htm
(можно сравнить 59 страницу датащита против двух этих сылок http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_13.htm + http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh /mega103_24.htm )
одни и те-же настройки делаются в разных регистрах !!!! (видимо зависит от семейства мк)


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

Сообщение отредактировал uwrtey - Суббота, 20.10.2012, 21:18
 
ВитГоДата: Пятница, 19.10.2012, 17:12 | Сообщение # 104
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну так когда я увижу пример кода обработки прерывания по int ? smile

Виталий (аka ВитГо)
 
uwrteyДата: Пятница, 19.10.2012, 19:21 | Сообщение # 105
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
сегодня постараюсь сделать

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


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