система дистанционного управления на ATtiny 2313 "c нуля"
| |
ВитГо | Дата: Вторник, 09.10.2012, 05:26 | Сообщение # 61 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Quote (uwrtey) а вот это выражение _____st X+,Temp2_______________; сохраним в ОЗУ состояние столбца клавы, _______________________________; адрес в регстровой паре "X" автоматом увеличится на 1 точно верное ? значение Temp2 точно сохранится по адресу из Х, и после этого адрес увеличится на единицу или же адрес сначала увеличится на единицу, а потом, по новому адресу сохранится значение из Temp2 ?
точно верное...
нужно смотреть прерывание генерации.. где то в нем ошибка...
дай как асм файл
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 09.10.2012, 06:19 | Сообщение # 62 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| прилагаю оба файла. передача 0b11010011.asm и transmitt1.6.asm
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Вторник, 09.10.2012, 06:21 |
|
| |
ВитГо | Дата: Вторник, 09.10.2012, 07:34 | Сообщение # 63 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| а ты проверил просто генерацию прямоугольного сигнала на OC1A ?
для этого при входе в прерывание можно поставить RETI
и в OCR1A записать какое нить значение типа длительности импульса....
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 09.10.2012, 21:31 | Сообщение # 64 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ечером попробую Добавлено (09.10.2012, 21:31) --------------------------------------------- нашел косяк в коде Code send_nullen:
____OUT OCR1AH,XH____________; установим длительность ____OUT OCR1AH,XL сейчас исправлю....
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Вторник, 09.10.2012, 21:36 | Сообщение # 65 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ОО! это хороший косяк !! я один раз такой сутки искал ! :-)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 09.10.2012, 23:05 | Сообщение # 66 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: 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
Статус: Offline
| я не понял в чем криминал с temp
то что во время отсчет меняем OCR1A - ничего страшного, так это и делается чаще всего... совпадение проверяется на каждом тике таймера
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Среда, 10.10.2012, 07:24 | Сообщение # 68 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: 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
Статус: Offline
| ОО ! ты прав !! тогда используй вместо тем какой нить другой, свободный регистр !
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Среда, 10.10.2012, 10:25 | Сообщение # 70 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Quote ОО ! ты прав !! тогда используй вместо тем какой нить другой, свободный регистр ! уже ....
все равно не генерит...
вечером (сейчас я на работе) проверю генерацию прямоугольного сигнала на OC1A ....
не успеваю за своими мыслями......
|
|
| |
uwrtey | Дата: Среда, 10.10.2012, 22:36 | Сообщение # 71 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ну вот, сделал я проверку генерации прямоугольного сигнала на OC1A число в OCR1A оставил как есть
Code ___LDI R19,2_________________; зададим фиксированную длительность импульса ( 0x200 видимо ) ___OUT OCR1AH,R19___________; и выведем ее в порт сравнения ___LDI R19,0 ___OUT OCR1AL,R19
нет генерации !
Добавлено (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 сохранить - хотя, в данном случае, это должно быть не критично....
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Среда, 10.10.2012, 22:30 |
|
| |
ВитГо | Дата: Четверг, 11.10.2012, 08:21 | Сообщение # 72 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| хорошо, такой вопрос: а ты проверял вообще вход в прерывание ?
на прошлой странице я предлагал на входе в прерывание передачи вывести бит в какой нить порт для проверки..
мы в прерывание вообще попадаем ?
нужно проверить инициализацию таймера - потому что генерация по OCR1A может происходить и без прерываний (просто при задании режима ctc, top=ocr1a, oc1a=toggle) проверь входим ли мы а прерывание и потом проверяй настройки таймера
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 11.10.2012, 18:12 | Сообщение # 73 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: 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 ... и тут же тухнет! повторное нажатие на кнопку ни к чему не приводит !
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Четверг, 11.10.2012, 19:17 |
|
| |
ВитГо | Дата: Четверг, 11.10.2012, 19:58 | Сообщение # 74 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| нужно посмотреть вход\выход из прерывания и вызов
по идее светодиод должен тухнуть но при нажатии снова зажигаться..
кстати а в каком месте ты его тушишь ?
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 11.10.2012, 20:24 | Сообщение # 75 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ни в каком! не тушу я его совсем! он сам где то тухнет.... Quote по идее светодиод должен тухнуть но при нажатии снова зажигаться.. вроде не должен он тухнуть..............
сейчас попробую найти это место
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Четверг, 11.10.2012, 20:30 |
|
| |
|