Пятница, 26.04.2024, 18:25
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | система дистанционного управления на ATtiny 2313 "c нуля" - Страница 5 - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » система дистанционного управления на ATtiny 2313 "c нуля" (пошаговое изучение строительства систем радиоуправления)
система дистанционного управления на ATtiny 2313 "c нуля"
ВитГоДата: Вторник, 09.10.2012, 05:26 | Сообщение # 61
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
Quote (uwrtey)
а вот это выражение
_____st X+,Temp2_______________; сохраним в ОЗУ состояние столбца клавы,
_______________________________; адрес в регстровой паре "X" автоматом увеличится на 1
точно верное ?
значение Temp2 точно сохранится по адресу из Х, и после этого адрес увеличится на единицу
или же адрес сначала увеличится на единицу, а потом, по новому адресу сохранится значение из Temp2 ?


точно верное...

нужно смотреть прерывание генерации.. где то в нем ошибка...

дай как асм файл


Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 09.10.2012, 06:19 | Сообщение # 62
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
прилагаю оба файла.
передача 0b11010011.asm и transmitt1.6.asm
Прикрепления: _0b11010011.asm (10.5 Kb) · transmitt1.7.asm (11.2 Kb)


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

Сообщение отредактировал uwrtey - Вторник, 09.10.2012, 06:21
 
ВитГоДата: Вторник, 09.10.2012, 07:34 | Сообщение # 63
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
а ты проверил просто генерацию прямоугольного сигнала на OC1A ?

для этого при входе в прерывание можно поставить RETI

и в OCR1A записать какое нить значение типа длительности импульса....


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

Добавлено (09.10.2012, 21:31)
---------------------------------------------
нашел косяк в коде

Code
send_nullen:

____OUT OCR1AH,XH____________; установим длительность
____OUT OCR1AH,XL  

сейчас исправлю....


не успеваю за своими мыслями......
 
ВитГоДата: Вторник, 09.10.2012, 21:36 | Сообщение # 65
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ОО! это хороший косяк !! я один раз такой сутки искал ! :-)

Виталий (аka ВитГо)
 
uwrteyДата: Вторник, 09.10.2012, 23:05 | Сообщение # 66
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
и еще один косяк нашел
Code

transmitt_byte:________; фаза начала передачи - передача байта

____ld temp,y+________; прочитаем байт для передачи, увеличим на единицу адрес в "Y" (внимание temp !!!!)

____ldi r18,8__________; количество бит в байте для передачи

transmitt_bite_imp:__________; фаза передачи импульса в передаваемом бите

____LDI R19 ,high(ImpLen)    ___; зададим фиксированную длительность импульса
____OUT OCR1AH, R19_______; и выведем ее в порт сравнения
____LDI R19,low(ImpLen)
____OUT OCR1AL ,R19

____LDI R22, 3    ____________; в следующий раз передаем паузу

int_reti:

______pop temp____________; извлекаем "SREG" (внимание temp !!!!)
______out SREG, temp

______RETI________________; точка выхода из прерывания


отметил (внимание temp !!!!)

---------------------------------------------
и еще разок (еще в одном месте)
Code

send_chetn:

___OUT OCR1AH,XH____________; установим длительность
___OUT OCR1AH,XL


Добавлено (09.10.2012, 22:36)
---------------------------------------------
эти исправления не помогли........ ищу дальше

Добавлено (09.10.2012, 22:59)
---------------------------------------------
******************************
давно хотел спросить
а ни чего, что мы меняем значение в OCR1A прямо во время счета таймера ?

Добавлено (09.10.2012, 23:05)
---------------------------------------------
завтра проверю генерацию прямоугольного сигнала на OC1A ?
(работа отнимает кучу времени, но без неё ни как....)


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

Сообщение отредактировал uwrtey - Вторник, 09.10.2012, 23:02
 
ВитГоДата: Среда, 10.10.2012, 05:29 | Сообщение # 67
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
я не понял в чем криминал с temp sad

то что во время отсчет меняем OCR1A - ничего страшного, так это и делается чаще всего... совпадение проверяется на каждом тике таймера


Виталий (аka ВитГо)
 
uwrteyДата: Среда, 10.10.2012, 07:24 | Сообщение # 68
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Quote
я не понял в чем криминал с temp

____ld temp,y+________; прочитаем байт для передачи и запишем данные в TEMP (скоро они нам понадобятся), увеличим на единицу адрес в "Y"

______pop temp____________; извлекаем "SREG" (у нас же в TEMP записан байт для передачи - тут мы этот байт потеряли.......)
______out SREG, temp

мы записали в TEMP байт для передачи - но еще не воспользовались им...
выходим из прерывания и теряем этот байт востанавливая SREG
я исправил сохранение и востановление SREG через TEMP4 )


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

Сообщение отредактировал uwrtey - Среда, 10.10.2012, 07:35
 
ВитГоДата: Среда, 10.10.2012, 07:42 | Сообщение # 69
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
ОО ! ты прав !! тогда используй вместо тем какой нить другой, свободный регистр !

Виталий (аka ВитГо)
 
uwrteyДата: Среда, 10.10.2012, 10:25 | Сообщение # 70
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Quote
ОО ! ты прав !! тогда используй вместо тем какой нить другой, свободный регистр !

уже ....

все равно не генерит...

вечером (сейчас я на работе) проверю генерацию прямоугольного сигнала на OC1A ....


не успеваю за своими мыслями......
 
uwrteyДата: Среда, 10.10.2012, 22:36 | Сообщение # 71
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
ну вот, сделал я проверку генерации прямоугольного сигнала на OC1A
число в OCR1A оставил как есть

Code
___LDI R19,2_________________; зададим фиксированную длительность импульса ( 0x200 видимо )
___OUT OCR1AH,R19___________; и выведем ее в порт сравнения
___LDI R19,0
___OUT OCR1AL,R19


нет генерации ! surprised

Добавлено (10.10.2012, 22:29)
---------------------------------------------
ошибка закралась где то в цикле вывода информации о состоянии клавиатуры
не могу ее найти....

Code

inform:_______________________________; здесь мы включаем таймер

;+++++++++++++++++++++++++++++++++++ установка вывода OC1A=0   

___ldi R16,(1<<COM1A1)|(0<<COM1A0)___; (то есть мы в "0" устанавливаем не вывод параллельного порта "B", а вывод таймера "OC1A")
___out TCCR1A,R16

___ldi R16,(1<<FOC1A)__________________; принудительно изменить состояние выходов OC1A и OC1B!!!
___out TCCR1C,R16   

___ldi R16,0b00000000___________________; теперь скинули TCCR1C?????????????????????????????????????????????????????????????????????
___out TCCR1C,R16   
;+++++++++++++++++++++++++++++++++++
         

___ldi Temp,(1<<COM1A0)    ______________; переключать ножку "OC1A" по совпадению (PB3- 15 ножка)
___out TCCR1A,Temp    ___________________; *1

___LDI R19,2__________________________; зададим фиксированную длительность импульса ( 0x200 видимо )
___OUT OCR1AH,R19    ___________________; и выведем ее в порт сравнения
___LDI R19,0     
___OUT OCR1AL,R19         

___ldi Temp,0_________________________; обнуление таймера   
___out TCNT1H,Temp
___out TCNT1L,Temp

___ldi Temp,(1<<wgm12)|(1<<cs10)________; подключили режим "CTC" (вместе с *1)   
___out TCCR1B,Temp    ______________________; и установили тактовый сигнал = CK 1:1   
________________________________________; таймер начал считать!!!

___ldi Temp,(1<<OCIE1A)___________________; разрешить прерывание компаратора   
___out TIMSK,Temp
     

___ldi R22, 0______________________________; фаза передачи

loop_wait_transmitt:________________________; цикл ожидания завершения передачи

___cpi R22 , 7
___brne loop_wait_transmitt   

___Rjmp METKA    ___________________________; возврат в главный цикл  (либо можно поставить второй ret[2<] )

Добавлено (10.10.2012, 22:36)
---------------------------------------------
блин, забыл в прерывании SREG сохранить - хотя, в данном случае, это должно быть не критично....

Прикрепления: 1000268.asm (6.0 Kb)


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

Сообщение отредактировал uwrtey - Среда, 10.10.2012, 22:30
 
ВитГоДата: Четверг, 11.10.2012, 08:21 | Сообщение # 72
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
хорошо, такой вопрос: а ты проверял вообще вход в прерывание ?

на прошлой странице я предлагал на входе в прерывание передачи вывести бит в какой нить порт для проверки..

мы в прерывание вообще попадаем ?

нужно проверить инициализацию таймера - потому что генерация по OCR1A может происходить и без прерываний (просто при задании режима ctc, top=ocr1a, oc1a=toggle)
проверь входим ли мы а прерывание и потом проверяй настройки таймера


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 11.10.2012, 18:12 | Сообщение # 73
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
Вот так я проверил вход в прерывание
Code


OCR1A_COMP:

___in temp4,SREG___________________; сохраняем "SREG"/////////////////////////////////////////////////////
___push temp4

       
___ldi Temp,0b00000001______________; выводим в порт "В" индикатор
___andi Temp, 0b00000001____________; где "1" там индикатор, где "0" там ни чего не выводить - потому сбросим ! (маска)    
___out PortB,Temp

___pop temp4_______________________; извлекаем "SREG" ////////////////////////////////////////////////////////////
___out SREG, temp4

reti


при нажатии на кнопку мы попадаем в обработку прерывания
загорается светодиод
Code

___ldi Temp,0b00000001______________; выводим в порт "В" индикатор ////12 ножка!!!!
___andi Temp, 0b00000001____________; где "1" там индикатор, где "0" там ни чего не выводить - потому сбросим ! (маска)    
___out PortB,Temp

... и тут же тухнет! surprised повторное нажатие на кнопку ни к чему не приводит !


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

Сообщение отредактировал uwrtey - Четверг, 11.10.2012, 19:17
 
ВитГоДата: Четверг, 11.10.2012, 19:58 | Сообщение # 74
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
нужно посмотреть вход\выход из прерывания и вызов

по идее светодиод должен тухнуть но при нажатии снова зажигаться..

кстати а в каком месте ты его тушишь ?


Виталий (аka ВитГо)
 
uwrteyДата: Четверг, 11.10.2012, 20:24 | Сообщение # 75
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Репутация: 11
Статус: Offline
ни в каком! не тушу я его совсем!
он сам где то тухнет....
Quote
по идее светодиод должен тухнуть но при нажатии снова зажигаться..

вроде не должен он тухнуть..............

сейчас попробую найти это место


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

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


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