Пятница, 29.03.2024, 01:01
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | система дистанционного управления на ATtiny 2313 "c нуля" - Страница 11 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » система дистанционного управления на ATtiny 2313 "c нуля" (пошаговое изучение строительства систем радиоуправления)
система дистанционного управления на ATtiny 2313 "c нуля"
ВитГоДата: Пятница, 26.10.2012, 23:17 | Сообщение # 151
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Quote (uwrtey)
так можно записывать ?
Code
;******************************************************************************    
.EQU ImpLen=0xCE4    ; длина импульса   (165 мкс)    
.EQU OneLen=0xCE4    ; длина паузы для единицы  (165 мкс)    
.EQU NulLen=0x19C8   ; длина паузы для нуля  (330 мкс)    
;******************************************************************************    
                       in YH,ImpLenH   ; записываем в регистровую пару "Y" число из "ImpLen"    
                       in YH,ImpLenL

?

Нее, ты что ! так не правильно, для выделения младшей\старшей части есть спец команды транслятора
должно быть:
Code
                    LDI YH,high(ImpLen)   ; старшая часть
                       LDI YL, low(ImpLen)   ; младшая часть

почему у тебя вместо LDI (присваивание) применено IN (чтение из порта)?

Quote (uwrtey)
вот тут
Code
sub XL, YL    
sbc XH, YH    
breq XeqY ; переход на обработку когда X=Y    
brcs XHY ; переход на обработку когда X<Y    
; здесь обработка когда X>Y

вычитается без переноса младшая часть
а с переносом вычитается старшая часть
все правильно ? не наоборот ли ?

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


Виталий (аka ВитГо)
 
uwrteyДата: Суббота, 27.10.2012, 00:40 | Сообщение # 152
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
успел уже ответить ?!
я сначала тут спросил, потом гуглить пошел, нагуглил ответ и удалил вопрос... biggrin
но все равно спасибо....

Добавлено (27.10.2012, 00:40)
---------------------------------------------

Quote
почему у тебя вместо LDI (присваивание) применено IN (чтение из порта)?

туплю... confused


не успеваю за своими мыслями......
 
uwrteyДата: Суббота, 27.10.2012, 15:44 | Сообщение # 153
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
вот тут накидал немного кода который определит равно ли число из TCNT1 эталону импульса ImpLen=0xCE4 (+/- 10%)
если да то мы попадаем на метку breq X_ravno_Y
если число больше эталона то на метку metka_dlinnyi_TCNT1
если меньше то metka_korotkiy_TCNT1

Добавлено (27.10.2012, 15:44)
---------------------------------------------
сейчас еще добавлю проверку на равенство с 0x19C8....

Прикрепления: 8351027.asm (3.6 Kb)


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

Сообщение отредактировал uwrtey - Суббота, 27.10.2012, 00:52
 
uwrteyДата: Воскресенье, 28.10.2012, 00:12 | Сообщение # 154
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
сделал проверку равенства/неравенства с 3300 и 6600 (с десятипроцентным допуском)
Прикрепления: 4514026.asm (8.8 Kb)


не успеваю за своими мыслями......
 
uwrteyДата: Воскресенье, 28.10.2012, 01:11 | Сообщение # 155
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
вот тут объединил
но почему то мне кажется что я опять слишком много всего понаписа'л и все это можно сделать компактнее
Прикрепления: _0-2.asm (13.2 Kb)


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

запись в регистры счетчиков TCNTx всегда производить со старшего байта (TCNTxH) и потом младший (TCNTxL), а чтение наоборот с младшего ! где то в документации даже есть про это...

может быть сделать обработку отдельными процедурами ? для проверки длительности импульса и для проверки импульса паузы ? (чтобы не делать селектор вначале процедуры)

по поводу сравнений: - а зачем ты сравниваешь длительность с эталонной ?
сразу сравнивай со значением на 10% меньше эталона (должен получить результат больше) и потом с 10% больше эталона (должен получить результат меньше) - если проверку прошел - значит делаем какие то действия...
а с серединой можно не сравнивать - не совпадет !
причем это сравнение (+-10%) я бы выделил в отдельную процедуру - чтобы на выходе получать результат в флагах - типа на флаге C например: С=0 проверку не прошел, С=1 проверка прошла успешно
соответственно потом эту проверку вызываем по RCALL и по возвращению анализируем флаг С
входные параметры: X - полученная длительность, Y на 10% меньше эталона Z на 10% больше эталона (эти параметры устанавливать перед RCALL)
тогда и код будет проще..

результат как будешь хранить? побитово (гемора больше) или побайтово?
может быть сделать просто 20 байт в ОЗУ под каждый принятый канал ? - тогда можно будет проще сохранять результат (и не париться со сдвигом :-)))


Виталий (аka ВитГо)
 
uwrteyДата: Воскресенье, 28.10.2012, 14:21 | Сообщение # 157
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
Quote
результат как будешь хранить? побитово (гемора больше) или побайтово?
может быть сделать просто 20 байт в ОЗУ под каждый принятый канал ? - тогда можно будет проще сохранять результат (и не париться со сдвигом :-)))

чем проще тем лучше biggrin


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


Виталий (аka ВитГо)
 
uwrteyДата: Среда, 31.10.2012, 10:40 | Сообщение # 159
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
1)
Quote
запись в регистры счетчиков TCNTx всегда производить со старшего байта (TCNTxH) и потом младший (TCNTxL), а чтение наоборот с младшего ! где то в документации даже есть про это...

и
2)
Quote
по поводу сравнений: - а зачем ты сравниваешь длительность с эталонной ?
сразу сравнивай со значением на 10% меньше эталона (должен получить результат больше) и потом с 10% больше эталона (должен получить результат меньше) - если проверку прошел - значит делаем какие то действия...
а с серединой можно не сравнивать - не совпадет !
причем это сравнение (+-10%) я бы выделил в отдельную процедуру - чтобы на выходе получать результат в флагах - типа на флаге C например: С=0 проверку не прошел, С=1 проверка прошла успешно
соответственно потом эту проверку вызываем по RCALL и по возвращению анализируем флаг С
входные параметры: X - полученная длительность, Y на 10% меньше эталона Z на 10% больше эталона (эти параметры устанавливать перед RCALL)
тогда и код будет проще..

исправил, смотри вложенный файл

Добавлено (28.10.2012, 22:10)
---------------------------------------------
3)
Quote
может быть сделать обработку отдельными процедурами ? для проверки длительности импульса и для проверки импульса паузы ? (чтобы не делать селектор вначале процедуры

а как лучше ???
4)
Quote
результат как будешь хранить? побитово (гемора больше) или побайтово?
может быть сделать просто 20 байт в ОЗУ под каждый принятый канал ? - тогда можно будет проще сохранять результат (и не париться со сдвигом :-)))

и
Quote
тогда делай по байтно... чтобы не возиться с битами...
соответственно заведи какой нить счетчик номера принимаемого канала, и по нему будешь делать вывод - все принял или нет

вот тут я в обще ни чего не понял! какой такой "результат" ?

Добавлено (31.10.2012, 10:40)
---------------------------------------------
Виталий, а надо ли делать программную часть проверки на помехи (импульсы/паузы) длиной менее 2 мкс ???
где то читал что INT_0 не реагирует на такие короткие колебания ( но я могу ошибаться)

Прикрепления: _1-0.asm (12.1 Kb)


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

Сообщение отредактировал uwrtey - Воскресенье, 28.10.2012, 23:11
 
ВитГоДата: Среда, 31.10.2012, 18:41 | Сообщение # 160
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
отвечать буду с конца biggrin

Quote (uwrtey)
Виталий, а надо ли делать программную часть проверки на помехи (импульсы/паузы) длиной менее 2 мкс ???
где то читал что INT_0 не реагирует на такие короткие колебания ( но я могу ошибаться)


это потом, сейчас делаем идеальные условия, потом подключим приемник\передатчик и будем смотреть реальные

Quote (uwrtey)

Quote
результат как будешь хранить? побитово (гемора больше) или побайтово?
может быть сделать просто 20 байт в ОЗУ под каждый принятый канал ? - тогда можно будет проще сохранять результат (и не париться со сдвигом :-)))

и
Quote

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


вот тут я в обще ни чего не понял! какой такой "результат" ?


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

Quote (uwrtey)
Quote

может быть сделать обработку отдельными процедурами ? для проверки длительности импульса и для проверки импульса паузы ? (чтобы не делать селектор вначале процедуры


а как лучше ??

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


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 01.11.2012, 00:16 | Сообщение # 161
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline


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

1) Не 20, а 40+1 ( 5 байт по 8 бит каждый + бит четности )
2) Ты предлагаешь каждый принятый бит записать в отдельный байт ОЗУ. При условии, что этот бит удовлетворяет равенству [3300+/-10%] или [6600+/- 10%]? я правильно понял ?


не успеваю за своими мыслями......
 
ВитГоДата: Четверг, 01.11.2012, 07:19 | Сообщение # 162
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
да, именно это и предлагаю :-)

ну пока 41 байт, а потом будем править передатчик чтобы передавал только нужные биты и пропускал пустые


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 01.11.2012, 15:42 | Сообщение # 163
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
я понять ни как не могу - надо ли проверять пауза это у нас или импульс ( перед тем как записать в ОЗУ )? и для чего это делать ? ведь запись в ОЗУ будет производиться только с импульса...

не успеваю за своими мыслями......
 
uwrteyДата: Четверг, 01.11.2012, 17:01 | Сообщение # 164
Генерал-майор
Группа: Администраторы
Сообщений: 3256
Репутация: 11
Статус: Offline
вот накидал немного...

Добавлено (01.11.2012, 17:01)
---------------------------------------------
есть маленький вопрос:
при сравнении "cpi" значение регистра теряется ?
и вот такой код работать не будет ?

Code

__ldi Temp,0
Metka_1

__inc Temp
__cpi Temp,10
__brec Metka_2
__rjmp Metka_1

Metka_2:
Прикрепления: _1-1.asm (13.6 Kb)


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

Сообщение отредактировал uwrtey - Четверг, 01.11.2012, 16:37
 
ВитГоДата: Четверг, 01.11.2012, 17:06 | Сообщение # 165
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
В смысле теряется? регистра temp что ли ?
нет конечно ! на то это и сравнение !
все регистры до и после CPI остаются в своих значениях, меняются только флаги !


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


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