система дистанционного управления на ATtiny 2313 "c нуля"
| |
ВитГо | Дата: Вторник, 23.10.2012, 02:00 | Сообщение # 121 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Quote (uwrtey) 1) ты хотел сказать 1 тик таймера = 1 микросекунда ?
ой.. я забыл что у тебя кварц на 20 мгц (у меня обычно на 16 и предделитель таймера 16) - ну значит посчитай предделитель, или поставь такой же как и в передатчике
Quote (uwrtey) 2) основной цикл программы = бесконечный цикл, в котором счетчик считает "тики" (отсчитывает время) ?
нет, основной цикл ничего не делает !
Quote (uwrtey) 3) если второй пункт "верно", то каким образом при входе в прерывание "спрашивать" у таймера до скольки он досчитал ? (если я правильно понимаю, то нужно каким то образом вытащить число из TCNT0 ? ) что то вроде in Temp,TCNT0 ___________так?
а вот это ты будешь делать сразу при входе в прерывании - прочитаешь текущее значение таймера, и потом в зависимости от селектора (ждал фронт или спад импульса) - принимаешь решение как проверять эту длительность и что с ней делать
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 23.10.2012, 10:38 | Сообщение # 122 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| 1) нет такого делителя, что бы 20МГц поделить и получить 1МГц
2) а что таймер начинает считать в самом прерывании?
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Вторник, 23.10.2012, 11:21 | Сообщение # 123 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Quote (uwrtey) 1) нет такого делителя, что бы 20МГц поделить и получить 1МГц
а зачем тебе делитель ? я же написал: применяй такой же делитель как и в передатчике...
Quote (uwrtey) 2) а что таймер начинает считать в самом прерывании? таймер начинает считать сразу после того как ты задал предделитель.. на прерывания, чем занимается процессор - ему пофигу... он такты с тактового генератора считает...
в прерывании (и в любой другой момент) ты можешь его сбросить (TCNT1=0) и тогда он продолжит считать с нуля..
соответственно если ты поймал фронт импульса, то сбрасываешь TCNT1 и выходишь из прерывания (предварительно ставишь флаг что ждешь спад импульса, и меняешь условие входа в прерывание (вход по спаду)... таймер продолжает считать..
потом приходит спад импульса,
оказываешься в прерывании. по флагу фазы - понимаешь что обрабатываем фазу спада импульса, читаем TCNT1, сбрасываем его в ноль (для подсчета длительности следующей фазы), и полученную длительность импульса - проверяешь на эталонную (наш это импульс или нет), если все ОК, то ставишь флаг что ждешь фронт импульса в режиме захвата бита данных (то есть в этой фазе будешь смотреть на длину паузы и решать получил ты 0 или 1), меняешь условие входа в прерывание (на вход по фронту), и выходишь.. таймер продолжает считать
потом приходит фронт импульса,
оказываешься в прерывании, по флагу фазы - понимаешь что обрабатываем фазу паузы между импульсами, паузы а нас значащая, читаем TCNT1, сбрасываем TCNT1, по длительности прочитанной с TCNT1 - принимаем решение получили мы 0 или 1, сохраняем результат (или просто сразу выводим на нужный пин выходного порта), ставим флаг что ждем фронт импульса, ставим настройку входа в прерывание по спаду импульса, ставим флаг обработки импульса...
и так далее..
в этот алгоритм нужно вставить обработку количества принимаемых бит, и обработку четности...
лучше конечно выводить данные на исполнительные устройства после того как проверишь правильность принятого пакета данных... хотя не всегда, бывают такие моменты что лучше плохое управление чем никакого :-)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 23.10.2012, 11:45 | Сообщение # 124 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Quote соответственно если ты поймал фронт импульса, то сбрасываешь TCNT1 и выходишь из прерывания (предварительно ставишь флаг что ждешь спад импульса, и меняешь условие входа в прерывание (вход по спаду)... таймер продолжает считать.. ну, дак я это и говорил Quote основной цикл программы = бесконечный цикл, в котором счетчик считает "тики" (отсчитывает время) ? ... видимо ты не понял, что я имел в виду
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Вторник, 23.10.2012, 11:50 | Сообщение # 125 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну так не совсем правильно говорить.. основный цикл - это просто зацикливание процессора.. - это процесс который выполняет процессор (хоть и фактически это непрерывное выполнение одной команды RJMP)
счетчик - это аппаратное расширение проца, он фактически представляет из себя логическую схему счетчика.. проц с этим расширением общается через регистры портов ввода\вывода, поэтому счетчик не знает ни о каких циклах, переходах, прерываниях, программах...
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 23.10.2012, 12:10 | Сообщение # 126 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ясно... сейчас попробую че нить написать...
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Вторник, 23.10.2012, 12:11 |
|
| |
uwrtey | Дата: Вторник, 23.10.2012, 16:01 | Сообщение # 127 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Ну вот, можешь полюбоваться на мои первые шаги
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Вторник, 23.10.2012, 18:01 | Сообщение # 128 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| определись со значениями флагов по фронтам, должно быть примерно следующее:
0 - первый нарастающий фронт - здесь мы не анализируем паузу как бит (он же первый)
1 - падающий фронт - здесь проверяем длительность импульса и делаем вывод а наши ли это импульсы
2 - последующий нарастающий фронт - вот здесь мы определяем по паузе бит, думаем куда его сунуть, проверяем количество принятых бит, проверяем четность, делаем вывод о правильности посылки, выводим состояния бит-команды на порты
а у тебя ниже только 2 фазы... можно конечно фазы 0 и 2 объединить и внутри их обработчика решать что это за фронт пришел - если уверен что не запутаешься (правда еще нужен будет доп. регистр для определения какая же все таки подфаза (0 или 2) обрабатывается.... в общем думай как тебе понятнее и удобнее
Code ;----------------------------------------------------------------------------------------------------------------
cpi R22,1 ; мы вошли по нарастающему фронту ? brne rising_edge ; если нет, то в следующий раз зайдем по нему
у тебя при старте (первый вход в прерывание) R22=1 - ловим нарастающий фронт... rising_edge - это и есть обработчик нарастающего фронта ! поэтому здесь правильно поставить BREQ ! или ты rising edge понимаешь как падающий ? или я чего то не понял ?
идем далее, ниже мы оказываемся когда ловили падающий фронт Code ;falling_edge ; метка - "падающий фронт"
ldi R16,(1<<ISC01) ; падающий фронт на INT0 генерирует запрос на прерывание out MCUCR,R16
ldi R22,0 ; флаг фазы (0=падающий фронт)
rjmp obrabotka если ты поймал падающий фронт - то какой фронт ты должен будешь поймать следом ? неужели опять падающий ? нет ! следующим будет нарастающий фронт !
соответственно ниже, ты поймал нарастающий фронт, и должен будешь потом ловить падающий ! (а не нарастающий) Code rising_edgee: ; метка - "нарастающий фронт"
ldi R16,(1<<ISC01)|(1<<ISC00) ; нарастающий фронт на INT0 генерирует запрос на прерывание out MCUCR,R16
ldi R22,1 ; флаг фазы (1=нарастающмий фронт)
эхх.. при отладке приемника офигенно не будет хватать инфы что он там поймал... экранчик бы тебе к нему (для отладки).............. у тебя никакого 5110 нет ?
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 23.10.2012, 20:56 | Сообщение # 129 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Quote у тебя при старте (первый вход в прерывание) R22=1 - ловим нарастающий фронт... rising_edge - это и есть обработчик нарастающего фронта ! поэтому здесь правильно поставить BREQ ! или ты rising edge понимаешь как падающий ? или я чего то не понял ? ....все я правильно сделал
rising edge - нарастающий фронт falling_edge - падающий фронт
(добавил комментарии и жирно выделил )
___cpi R22,1______________________; мы вошли в прерывание по нарастающему фронту ? ___brne rising_edge________________; если нет (если вошли по падающему фронту), то в следующий раз зайдем по нарастающему _________________________________; а если мы вошли по нарастающему фронту, то необходимо перенастроить следующий вход в прерывание по падающему фронту _________________________________; что мы и сделаем следующим кодом
;falling_edge______________________; метка - "падающий фронт" ( если вошли по нарастающему фронту, то теперь настроим вход в прерывание по падающему фронту)
___ldi R16,(1<<ISC01)_____________; падающий фронт на INT0 генерирует запрос на прерывание (вот тут настраиваем вход в прерывание на падающий фронт) ___out MCUCR,R16
___ldi R22,0______________________; флаг фазы: 0=падающий фронт.
___rjmp obrabotka
rising_edge:______________________; метка - "нарастающий фронт" ( если вошли по падающему фронту, то теперь настроим вход в прерывание по нарастающему фронту)
___ldi R16,(1<<ISC01)|(1<<ISC00)__; нарастающий фронт на INT0 генерирует запрос на прерывание (вот тут настраиваем вход в прерывание на нарастающий фронт) ___out MCUCR,R16
___ldi R22,1______________________; флаг фазы (1=нарастающмий фронт)
obrabotka:_______________________; тут начинается остальной код
Добавлено (23.10.2012, 20:56) --------------------------------------------- Quote эхх.. при отладке приемника офигенно не будет хватать инфы что он там поймал... экранчик бы тебе к нему (для отладки).............. у тебя никакого 5110 нет ? где то у матери дома валяется какой то экранчик от радиостанции, как буду у нее то захвачу его с собой
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Вторник, 23.10.2012, 21:00 |
|
| |
ВитГо | Дата: Вторник, 23.10.2012, 21:19 | Сообщение # 130 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| дисплей от радиостанции быстро не подключишь.. :-( на него даташит нужно будет найти, драйвер написать. а тот же 5110 уже изучен вдоль и поперек, драйверов под него в инете куча.. стоит он кстати около 3.5 долларов на ebay
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 23.10.2012, 21:51 | Сообщение # 131 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| есть нокиа 3310 (лежит и ждет когда я из нее дисплей вытащу)
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Вторник, 23.10.2012, 21:52 |
|
| |
ВитГо | Дата: Вторник, 23.10.2012, 22:00 | Сообщение # 132 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| оо !! вот это хороший дисплей !:-) вытаскивай ! но сперва проверь где у нее питание и где земля и глянь в инете - совпадает ли распиновка..
в принципе сюрпризы мало вероятны, но мало ли...
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 23.10.2012, 22:13 | Сообщение # 133 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| хорошо, вытащу
только вот сначала с кодом разберусь...
Добавлено (23.10.2012, 22:13) --------------------------------------------- Quote или ты rising edge понимаешь как падающий ? или я чего то не понял ? а - а я понял каким образом мне удалось тебя запутать... rising_edge: это - setup_rising_edge: (я метки не совсем корректно назвал)
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Вторник, 23.10.2012, 22:20 |
|
| |
ВитГо | Дата: Вторник, 23.10.2012, 22:19 | Сообщение # 134 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| аа, ну может быть.. я из за меток и сломал голову :-)
я кстати такой дисплей на STM32 сейчас подключил через аппаратный SPI (но это не сложно было) - теперь вот хочу к нему DMA подключить (чтобы данные с буфера дисплея на дисплей уходили без участия процессора)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 23.10.2012, 22:23 | Сообщение # 135 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Quote я кстати такой дисплей на STM32 сейчас подключил через аппаратный SPI (но это не сложно было) - теперь вот хочу к нему DMA подключить (чтобы данные с буфера дисплея на дисплей уходили без участия процессора) - это пока слишком круто для меня... а тини2313 хватит, что бы еще и графику выводить ?
не успеваю за своими мыслями......
|
|
| |
|