система дистанционного управления на ATtiny 2313 "c нуля"
| |
ВитГо | Дата: Вторник, 23.10.2012, 22:35 | Сообщение # 136 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну мы сильно разбегаться не будем.. сделаем по минимуму только вывод каких нить символов (цифр?) чтобы максимально уменьшить знакогенератор..
наверное я завтра напишу тебе библиотеку на асме кратенькую, чтобы использовать для отладки этот дисплей..
p.s. покупай отладочную плату с хотя бы мегой 16........ в принципе мою точку зрения ты знаешь :-))) на отладочной бы реализовал и график и знакогенератор весь бы уместил точно....
p.p.s зантриговал ты меня своей тинькой, сейчас попробую написать, интересно самому стало в какой размер можно уместиться :-)))
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 23.10.2012, 22:56 | Сообщение # 137 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Quote p.p.s зантриговал ты меня своей тинькой, сейчас попробую написать, интересно самому стало в какой размер можно уместиться :-))) спс
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Вторник, 23.10.2012, 23:09 |
|
| |
uwrtey | Дата: Вторник, 23.10.2012, 23:51 | Сообщение # 138 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Quote 0 - первый нарастающий фронт - здесь мы не анализируем паузу как бит (он же первый)
1 - падающий фронт - здесь проверяем длительность импульса и делаем вывод а наши ли это импульсы
2 - последующий нарастающий фронт - вот здесь мы определяем по паузе бит, думаем куда его сунуть, проверяем количество принятых бит, проверяем четность, делаем вывод о правильности посылки, выводим состояния бит-команды на порты ...ну вот что то вроде сделал (смотри вложение приемник_0,1.asm)
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Среда, 24.10.2012, 00:08 | Сообщение # 139 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| я тоже вроде сделал, нужно только сейчас оформить красиво.. и один эксперимент сделать по сокращению линий дисплея... код получился около 100 байт...
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Среда, 24.10.2012, 19:58 | Сообщение # 140 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| --------------------------------------------- число из TCNT1 сохранил в регистровую пару "X" Code in XH,TCNT1H ; записываем в регистровую пару "X" число из "TCNT1" in XL,TCNT1L что-то не соображу, как дальше нужно обрабатывать длину импульса/паузы? в передатчике я использовал числа Code .EQU ImpLen=0xCE4 ; длина импульса (165 мкс) .EQU OneLen=0xCE4 ; длина паузы для единицы (165 мкс) .EQU NulLen=0x19C8 ; длина паузы для нуля (330 мкс) если я правильно понимаю то число из TCNT1 теперь нужно сравнивать с этими константами исключая все помехи и сделать допуск на небольшую погрешность.... (мы ведь при входе в прерывание сохраняем SREG, потом сохраняем число из "TCNT1" и потом обнуляем таймер - а это все, то-же занимает какое то время...)Добавлено (24.10.2012, 19:58) --------------------------------------------- я выковырял экранчик из nokia 3310
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Среда, 24.10.2012, 11:38 |
|
| |
ВитГо | Дата: Среда, 24.10.2012, 20:07 | Сообщение # 141 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| нужно Х сравнивать на попадание в диапазон значений.. бери наверно +\- 10% от значений передатчика и сравнивай..
p.s. по дисплею - еще отлаживаю, вернее отладил, но хочу сделать легко настраиваемую библиотеку - сегодня постараюсь закончить и выложить
сфоткай вид своего 3310... ч
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Среда, 24.10.2012, 20:48 | Сообщение # 142 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| сфоткать телефон или экранчик ? --------------------------------------------- вот фотки экранчика в архиве
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Среда, 24.10.2012, 23:44 |
|
| |
ВитГо | Дата: Среда, 24.10.2012, 22:20 | Сообщение # 143 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Конечно экранчика ! нафиг мне телефон, кстати а где архив то ?
написал статью про драйвер Отладочное подключение LCD NOKIA 5110, 3310 на PCD8544 к АVR
почитай кстати описание внутри архива с драйвером - понятно написано ?
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Среда, 24.10.2012, 23:47 | Сообщение # 144 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ой, вот архив (не отправилось первый раз видимо из за большого размера - урезал) ЗЫ экранчик у меня оригинальный NOKIA ( не аналог, вот визуальные отличия "https://sites.google.com/site/samocoder/variantes/nokia3310_unoriginal" //программные то-же имеются....) надо бы панельку соорудить как тут http://avrproject.ru/publ/rabota_s_displeem_ot_nokia3310/1-1-0-21 и на ней разместить "драйвер" питания для подключения в сеть 5V (стабилитрон наверно ....)
-------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------- Quote нужно Х сравнивать на попадание в диапазон значений.. бери наверно +\- 10% от значений передатчика и сравнивай.. как это сделать то? ( меня смущает, что данные записаны двумя байтами )
например CE4 (3300)+-10% [2970=>...x...<3630] = [B9A=>...x...<E2E]
___cpi X, B9A ___BRSH metka_1___________;если больше или равно ___rjmp metka_ne_udovletvoryaet_usloviu
metka_1:
___cpi X, E2E ___BRLO obrabotka__________; если меньше ___rjmp metka_ne_udovletvoryaet_usloviu
obrabotka: .... ...
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Четверг, 25.10.2012, 01:18 |
|
| |
ВитГо | Дата: Четверг, 25.10.2012, 06:55 | Сообщение # 145 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| блин, написал тебе ответ, а он не сохранился
пишу заново
Напрямую сравнивать 16ти битные значения на ассемблере AVR нельзя, приходиться немного извращаться
поскольку в программе придется сравнивать разные значения, то лучше написать процедуру сравнения X и например Y
ВАРИАНТ 1 - сравнение при помощи операций сравнения Code compareXY16: cp XH, YH ; сравниваем старшие части регистров breq xh_eq_yh ; значения старших регистров равны, нужно сравнить младшие xl и yl ; флаг С - установлен когда X<Y ; флаг С - сброшен когда X>Y ret xh_eq_yh: cp XL, YL ; флаг Z=1 когда X=Y ; флаг С - установлен когда X<Y ; флаг С - сброшен когда X>Y ret
использовать проверку можно следующим образом: Code ; перед вызовом загружаем значения X и Y rcall compareXY16 ; сравниваем... breq XeqY ; переход на обработку когда X=Y brcs XHY ; переход на обработку когда X<Y ; здесь обработка когда X>Y
ВАРИАНТ 2 - вычитанием одного значения из другого применяется когда значение регистра X уже не понадобиться, поэтому этот вариант не оформляется подпрограммой а вычисляется "на ходу" Code sub XL, YL sbc XH, YH breq XeqY ; переход на обработку когда X=Y brcs XHY ; переход на обработку когда X<Y ; здесь обработка когда X>Y
преимущество первого варианта - то что значения в регистрах X и Y не меняются, преимущество второго варианта - простота, возможно большая наглядность, и отсутствие вызова подпрограммы
в принципе, вариант 2, можно оформить в виде процедуры, перед операциями вычитания сохранять регистр X на стеке и перед выходом восстанавливать его значение со стека (операции записи\чтения значения со стека не изменяют состояния флагов) - получим блок по функциям аналогичный варианту 1
ВАРИАНТ 2, модернизированный - вычитанием одного значения из другого с сохранением значений регистров Code compareXY16: push XL push XH sub XL, YL sbc XH, YH pop XH pop XL ret обработка результата такая же как и в варианте 1
при написании быстрых вариантов сравнения вариант 1 будет почти в 2 раза быстрее модернизированного варианта 2, ну а самым быстрым будет простой вариант 2 (без сохранения значения регистра X)
хватит этих вариантов ?
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 25.10.2012, 23:53 | Сообщение # 146 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| да вроде хватит, после работы повнимательнее посмотрю... заодно и по драйверу дисплея пару вопросов задам
--------------------------------------------- Quote например, в той же tiny2313 всего 128 байт...Теперь самое интересное - размер программы управления дисплеем получился 122 байта ! и остается у нас всего 6 байт... что же можно туда запихать? или я что то не понимаю ?....Добавлено (25.10.2012, 23:53) --------------------------------------------- что то с первым вариантом мне не совсем все понятно 1) Code brcs XHY ; переход на обработку когда X<Y ; здесь обработка когда X>Y а что, тут без разницы - что сравнивали, старшую часть или младшую ???
2) Code breq XeqY ; переход на обработку когда X=Y вряд ли они буду когда ни будь равны - это же радио передача
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Четверг, 25.10.2012, 23:21 |
|
| |
ВитГо | Дата: Пятница, 26.10.2012, 06:45 | Сообщение # 147 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Quote (uwrtey) и остается у нас всего 6 байт... что же можно туда запихать? или я что то не понимаю ?....
там речь шла об ОЗУ (в тиньке 2313 128 байт оперативной памяти) а вот размер кода (122 байта) - пойдет в flash - там 2 кб
Quote (uwrtey) --------------------------------------------- что то с первым вариантом мне не совсем все понятно 1) Code
brcs XHY ; переход на обработку когда X<Y ; здесь обработка когда X>Y а что, тут без разницы - что сравнивали, старшую часть или младшую ??? почему без разницы ? алгоритм такой - если старшие части не равны - то вывод делаем по ним, если равны то вывод делаем по младшим частям... флаги будут верными после возврата из подпрограммы, причем в программе все равно по какой части делался вывод о большем\меньшем числе главное общий результат
Quote (uwrtey) вряд ли они буду когда ни будь равны - это же радио передача
ну я тебе дал общий подход, а ты применяй то что тебе подходит, конечно не все условия можно обрабатывать... но важен порядок их обработки (на равенство нужно проверять в самую первую очередь)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Пятница, 26.10.2012, 07:39 | Сообщение # 148 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| 1) Quote а вот размер кода (122 байта) - пойдет в flash - там 2 кб точно, что то я запарился... 2) Quote причем в программе все равно по какой части делался вывод о большем\меньшем числе главное общий результат вот я и говорю, что по коду получается без разницы... просто меня все ни как не покидает мысль о том, что нужно сразу в этом участке кода сделать диапазон погрешности. то-есть если старшая часть не равна, то Code brcs XHY ; переход на обработку когда X<Y ; здесь обработка когда X>Y а если младшие части не равны, то нужно проверить входят ли они в диапазрон допустимой погрешности... ....... хотя это (входят ли они в диапазрон допустимой погрешности) можно и потом проверить тут мне надо еще покумекать...
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Пятница, 26.10.2012, 08:49 | Сообщение # 149 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| а в чем проблема ? после сравнения можно вычесть первое из второго или второе из первого (в зависимости от того что больше) и получить погрешность..
либо сразу сравнивать с границами погрешности...
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Пятница, 26.10.2012, 23:06 | Сообщение # 150 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| так можно записывать ? Code ;******************************************************************************
.EQU ImpLen=0xCE4 ; длина импульса (165 мкс) .EQU OneLen=0xCE4 ; длина паузы для единицы (165 мкс) .EQU NulLen=0x19C8 ; длина паузы для нуля (330 мкс)
;****************************************************************************** .... .... in YH,ImpLenH ; записываем в регистровую пару "Y" число из "ImpLen" in YH,ImpLenL ?
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Пятница, 26.10.2012, 23:14 |
|
| |
|