Пятница, 26.04.2024, 07:31
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | система дистанционного управления на ATtiny 2313 "c нуля" - Страница 10 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » система дистанционного управления на ATtiny 2313 "c нуля" (пошаговое изучение строительства систем радиоуправления)
система дистанционного управления на ATtiny 2313 "c нуля"
ВитГоДата: Вторник, 23.10.2012, 22:35 | Сообщение # 136
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ну мы сильно разбегаться не будем..
сделаем по минимуму только вывод каких нить символов (цифр?) чтобы максимально уменьшить знакогенератор..

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

p.s. покупай отладочную плату с хотя бы мегой 16........ в принципе мою точку зрения ты знаешь :-))) на отладочной бы реализовал и график и знакогенератор весь бы уместил точно....

p.p.s зантриговал ты меня своей тинькой, сейчас попробую написать, интересно самому стало в какой размер можно уместиться :-)))


Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 23.10.2012, 22:56 | Сообщение # 137
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Quote
p.p.s зантриговал ты меня своей тинькой, сейчас попробую написать, интересно самому стало в какой размер можно уместиться :-)))
спс


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

Сообщение отредактировал uwrtey - Вторник, 23.10.2012, 23:09
 
uwrteyДата: Вторник, 23.10.2012, 23:51 | Сообщение # 138
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Quote
0 - первый нарастающий фронт - здесь мы не анализируем паузу как бит (он же первый)

1 - падающий фронт - здесь проверяем длительность импульса и делаем вывод а наши ли это импульсы

2 - последующий нарастающий фронт - вот здесь мы определяем по паузе бит, думаем куда его сунуть, проверяем количество принятых бит, проверяем четность, делаем вывод о правильности посылки, выводим состояния бит-команды на порты

...ну вот что то вроде сделал (смотри вложение приемник_0,1.asm)
Прикрепления: _0-1.asm (4.5 Kb)


не успеваю за своими мыслями......
 
ВитГоДата: Среда, 24.10.2012, 00:08 | Сообщение # 139
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
я тоже вроде сделал, нужно только сейчас оформить красиво.. и один эксперимент сделать по сокращению линий дисплея... код получился около 100 байт...

Виталий (аka ВитГо)
 
uwrteyДата: Среда, 24.10.2012, 19:58 | Сообщение # 140
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
up
---------------------------------------------
число из 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 smile


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

Сообщение отредактировал uwrtey - Среда, 24.10.2012, 11:38
 
ВитГоДата: Среда, 24.10.2012, 20:07 | Сообщение # 141
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
нужно Х сравнивать на попадание в диапазон значений..
бери наверно +\- 10% от значений передатчика и сравнивай..

p.s. по дисплею - еще отлаживаю, вернее отладил, но хочу сделать легко настраиваемую библиотеку - сегодня постараюсь закончить и выложить

сфоткай вид своего 3310... ч


Виталий (аka ВитГо)
 
uwrteyДата: Среда, 24.10.2012, 20:48 | Сообщение # 142
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
сфоткать телефон или экранчик ?
---------------------------------------------
вот фотки экранчика в архиве


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

Сообщение отредактировал uwrtey - Среда, 24.10.2012, 23:44
 
ВитГоДата: Среда, 24.10.2012, 22:20 | Сообщение # 143
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Конечно экранчика ! нафиг мне телефон, кстати а где архив то ?

написал статью про драйвер Отладочное подключение LCD NOKIA 5110, 3310 на PCD8544 к АVR

почитай кстати описание внутри архива с драйвером - понятно написано ?


Виталий (аka ВитГо)
 
uwrteyДата: Среда, 24.10.2012, 23:47 | Сообщение # 144
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: 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% от значений передатчика и сравнивай..

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

например 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:
....
...
Прикрепления: 9050647.rar (363.6 Kb) · 1854075.rar (407.6 Kb)


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

Сообщение отредактировал uwrtey - Четверг, 25.10.2012, 01:18
 
ВитГоДата: Четверг, 25.10.2012, 06:55 | Сообщение # 145
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
блин, написал тебе ответ, а он не сохранился angry

пишу заново

Напрямую сравнивать 16ти битные значения на ассемблере AVR нельзя, приходиться немного извращаться biggrin

поскольку в программе придется сравнивать разные значения, то лучше написать процедуру сравнения 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)

хватит этих вариантов ? cool


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 25.10.2012, 23:53 | Сообщение # 146
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: 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
Репутация: 20
Статус: 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
Репутация: 11
Статус: Offline
1)
Quote
а вот размер кода (122 байта) - пойдет в flash - там 2 кб
точно, что то я запарился...
2)
Quote
причем в программе все равно по какой части делался вывод о большем\меньшем числе главное общий результат

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

                     brcs XHY                ; переход на обработку когда X<Y  
                     ; здесь обработка когда X>Y

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


не успеваю за своими мыслями......
 
ВитГоДата: Пятница, 26.10.2012, 08:49 | Сообщение # 149
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
а в чем проблема ? после сравнения можно вычесть первое из второго или второе из первого (в зависимости от того что больше) и получить погрешность..

либо сразу сравнивать с границами погрешности...


Виталий (аka ВитГо)
 
uwrteyДата: Пятница, 26.10.2012, 23:06 | Сообщение # 150
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: 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
 
Форум » Разработка электронных устройств » Разрабатываю ! » система дистанционного управления на ATtiny 2313 "c нуля" (пошаговое изучение строительства систем радиоуправления)
Поиск:


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