Пятница, 26.04.2024, 16:29
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | система дистанционного управления на ATtiny 2313 "c нуля" - Страница 9 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » система дистанционного управления на ATtiny 2313 "c нуля" (пошаговое изучение строительства систем радиоуправления)
система дистанционного управления на ATtiny 2313 "c нуля"
ВитГоДата: Вторник, 23.10.2012, 02:00 | Сообщение # 121
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: 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
Репутация: 11
Статус: Offline
1) нет такого делителя, что бы 20МГц поделить и получить 1МГц sad

2) а что таймер начинает считать в самом прерывании?


не успеваю за своими мыслями......
 
ВитГоДата: Вторник, 23.10.2012, 11:21 | Сообщение # 123
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: 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
Репутация: 11
Статус: Offline
Quote
соответственно если ты поймал фронт импульса, то сбрасываешь TCNT1 и выходишь из прерывания (предварительно ставишь флаг что ждешь спад импульса, и меняешь условие входа в прерывание (вход по спаду)...
таймер продолжает считать..

ну, дак я это и говорил
Quote
основной цикл программы = бесконечный цикл, в котором счетчик считает "тики" (отсчитывает время) ?

wacko
... видимо ты не понял, что я имел в виду


не успеваю за своими мыслями......
 
ВитГоДата: Вторник, 23.10.2012, 11:50 | Сообщение # 125
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну так не совсем правильно говорить.. основный цикл - это просто зацикливание процессора.. - это процесс который выполняет процессор (хоть и фактически это непрерывное выполнение одной команды RJMP)

счетчик - это аппаратное расширение проца, он фактически представляет из себя логическую схему счетчика.. проц с этим расширением общается через регистры портов ввода\вывода, поэтому счетчик не знает ни о каких циклах, переходах, прерываниях, программах...


Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 23.10.2012, 12:10 | Сообщение # 126
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
ясно...
сейчас попробую че нить написать...


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

Сообщение отредактировал uwrtey - Вторник, 23.10.2012, 12:11
 
uwrteyДата: Вторник, 23.10.2012, 16:01 | Сообщение # 127
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Ну вот, можешь полюбоваться на мои первые шаги
Прикрепления: 1804882.asm (3.8 Kb)


не успеваю за своими мыслями......
 
ВитГоДата: Вторник, 23.10.2012, 18:01 | Сообщение # 128
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: 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
Репутация: 11
Статус: 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
Репутация: 20
Статус: Offline
дисплей от радиостанции быстро не подключишь.. :-( на него даташит нужно будет найти, драйвер написать.
а тот же 5110 уже изучен вдоль и поперек, драйверов под него в инете куча..
стоит он кстати около 3.5 долларов на ebay


Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 23.10.2012, 21:51 | Сообщение # 131
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
есть нокиа 3310 (лежит и ждет когда я из нее дисплей вытащу) happy

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

Сообщение отредактировал uwrtey - Вторник, 23.10.2012, 21:52
 
ВитГоДата: Вторник, 23.10.2012, 22:00 | Сообщение # 132
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
оо !! вот это хороший дисплей !:-) вытаскивай !
но сперва проверь где у нее питание и где земля и глянь в инете - совпадает ли распиновка..

в принципе сюрпризы мало вероятны, но мало ли...


Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 23.10.2012, 22:13 | Сообщение # 133
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: 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
Репутация: 20
Статус: Offline
аа, ну может быть.. я из за меток и сломал голову :-)

я кстати такой дисплей на STM32 сейчас подключил через аппаратный SPI (но это не сложно было) - теперь вот хочу к нему DMA подключить (чтобы данные с буфера дисплея на дисплей уходили без участия процессора)


Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 23.10.2012, 22:23 | Сообщение # 135
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Quote
я кстати такой дисплей на STM32 сейчас подключил через аппаратный SPI (но это не сложно было) - теперь вот хочу к нему DMA подключить (чтобы данные с буфера дисплея на дисплей уходили без участия процессора)

- это пока слишком круто для меня...
а тини2313 хватит, что бы еще и графику выводить ?


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


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