система дистанционного управления на ATtiny 2313 "c нуля"
| |
ВитГо | Дата: Суббота, 24.11.2012, 11:10 | Сообщение # 331 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| еще замечание по коду
вот так включать файл библиотеки нельзя!
Code ;***************************************************************************************************** ; Выход из прерывания ;*****************************************************************************************************
out_1: ; сюда попадаешь для выхода ; и потом сразу выполняешь код библиотеки !!! там сначала идет код инициализации !!!
.include "lcd5110mini.asm" ; подключение драйвера дисплея
pop temp4 ; извлекаем "SREG" //////////////////////////////////////////////////// out SREG, temp4
RETI ; точка выхода из прерывания ;*****************************************************************************************************
правильнее код библиотеки включить как нить так: Code ;***************************************************************************************************** ; Выход из прерывания ;*****************************************************************************************************
out_1:
pop temp4 ; извлекаем "SREG" //////////////////////////////////////////////////// out SREG, temp4
RETI ; точка выхода из прерывания
.include "lcd5110mini.asm" ; подключение драйвера дисплея ;*****************************************************************************************************
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 24.11.2012, 17:09 | Сообщение # 332 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ну вот...
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Суббота, 24.11.2012, 17:57 | Сообщение # 333 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| и что видим на экране ? импульсы регистрируются ?
опять таки а где вывод длительности паузы?
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 24.11.2012, 18:31 | Сообщение # 334 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Quote (ВитГо) опять таки а где вывод длительности паузы? а это что? Code
proverka_flaga_fazy:
cpi R22,1 ______________________ ; мы вошли по нарастающему фронту ? brne setup_rising_edge ___________ ; если мы вошли по падающему фронту, то переходим...
_____________________________________________; здесь обработка если мы вошли по нарастающему фронту.
setup_falling_edge: _____________________________ ; метка - "установка прерывания на падающий фронт"
ldi R16,(1<<ISC01) _____________ ; устанавливаем прерывание на падающий фронт "INT0" out MCUCR,R16
ldi R22,0 ______________________ ; устанавливаем флаг фазы (0=падающий фронт)
rcall out_disp ______________________ ; выводим на дисплей ( вот тут вывод на дисплей длительности паузы)
loop: rjmp loop ___________________________ ; все! тут программа зациклится и "повиснет в прерывании до полной перезагрузки"
Quote (ВитГо) и что видим на экране ? импульсы регистрируются ?
еще не попробовал... чуть позже...
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Суббота, 24.11.2012, 19:01 |
|
| |
uwrtey | Дата: Суббота, 24.11.2012, 20:17 | Сообщение # 335 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| мда, на экран выводится 000C000B всегда! и ни как не зависит от реальной длительности импульса и паузы.....
длительность импульса и паузы контролирую вручную! я припаял провод к int_0 и тычу им в +5 вольт, (так же между int_0 и общим постоянно висит резюк в 1 кОм )
немного изменил настройку портовДобавлено (24.11.2012, 20:17) --------------------------------------------- а-а, я кажется понял! сейчас исправлю..
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Суббота, 24.11.2012, 20:07 |
|
| |
ВитГо | Дата: Суббота, 24.11.2012, 20:32 | Сообщение # 336 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| значит чтото не работает ! проверяй настройку портов задающих событие прерывания
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 24.11.2012, 20:58 | Сообщение # 337 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| я вышел из положения вот так
не успеваю за своими мыслями......
|
|
| |
uwrtey | Дата: Суббота, 24.11.2012, 21:03 | Сообщение # 338 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| а можно было так
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Суббота, 24.11.2012, 21:39 | Сообщение # 339 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| второй способ вроде нормальный..
а вот первый.. :-(
Code out_disp:
mov R16,XH swap R16 ; меняем местами старший полубайт и младший полубайт (SWAP - поменять нибблы местами) andi R16, 0x0f ; маска 00001111 (печатаем младший полубайт) rcall lcd_char ; переходим на печать цифры
; !!! вот здесь что у тебя в R16 ? учти что ты уже как минимум вызывал lcd_char (посмотри портит ли она r16). ; но даже если не портит - ты же делал andi 0x0f - то есть в старшем полубайте точно ноль !!!!
swap R16 ; меняем местами старший полубайт и младший полубайт (SWAP - поменять нибблы местами) andi R16, 0x0f ; маска 00001111 (печатаем младший полубайт) rcall lcd_char ; переходим на печать цифры
в общем первый способ ничего нормального не выведет
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 24.11.2012, 23:02 | Сообщение # 340 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| вот поправил первый способ
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Суббота, 24.11.2012, 23:05 | Сообщение # 341 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| как минимум вывод на экран правильный :-)
что дает проверка ?
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Суббота, 24.11.2012, 23:11 | Сообщение # 342 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Quote ; !!! вот здесь что у тебя в R16 ? учти что ты уже как минимум вызывал lcd_char (посмотри портит ли она r16). ; но даже если не портит - ты же делал andi 0x0f - то есть в старшем полубайте точно ноль !!!! 1) да портит -это я уже заметил, кода разбирался с тем как работает дисплей 2) об andi 0x0f я даже не подумал, а если быть точнее то я до конца не понимаю как работает andi
__________________________________________________
какой вариант лучше использовать? первый или второй?
__________________________________________________
вместо того, что бы тыкать проводком вручную в +5 вольт может настроить шестую ножку МК ( int0 / PD2 ) на вывод и выводить по очереди на нее лог_0 и лог_1 через задержку, что бы прерывание по int0 генерировалось программно ( как ты учил на четвертой странице этого форума )
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Суббота, 24.11.2012, 23:35 |
|
| |
ВитГо | Дата: Воскресенье, 25.11.2012, 01:45 | Сообщение # 343 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| мне второй больше понравился... а так дело вкуса :-)
andi r16,0x0f работет так: берется содержимое регистра R16 и проводится побитное И ... таким образом в битах 7 6 5 4 - будет 0 (так как у нас второй операнд в этих битах имеет нули, и в битах 3 2 2 1 - будут единицы только в том случае если у нас единица будет в R16 в соответствующем бите...
то есть останется только 4 младших бита
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Воскресенье, 25.11.2012, 20:45 | Сообщение # 344 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| 1) Quote (ВитГо) мне второй больше понравился... а так дело вкуса :-) значит, будем использовать второй !
2) Quote (uwrtey) вместо того, что бы тыкать проводком вручную в +5 вольт может настроить шестую ножку МК ( int0 / PD2 ) на вывод и выводить по очереди на нее лог_0 и лог_1 через задержку, что бы прерывание по int0 генерировалось программно ( как ты учил на четвертой странице этого форума )
тут что скажешь?
3) Quote (ВитГо) andi r16,0x0f работет так: берется содержимое регистра R16 и проводится побитное И ... таким образом в битах 7 6 5 4 - будет 0 (так как у нас второй операнд в этих битах имеет нули, и в битах 3 2 2 1 - будут единицы только в том случае если у нас единица будет в R16 в соответствующем бите...
я понял, andi R16, ob00001111 там где нули значения регистра r16 очистятся, а где единицы там они останутся не изменёнными
то-есть если R16=ob10101010 то после маски andi R16, ob00001111 от содержимого R16 останется ob00001010 то-ест старший ниббл (полубит) мы безвозвратно потеряем!
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Воскресенье, 25.11.2012, 20:47 |
|
| |
ВитГо | Дата: Воскресенье, 25.11.2012, 21:22 | Сообщение # 345 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Quote (uwrtey) 2) Quote (uwrtey) вместо того, что бы тыкать проводком вручную в +5 вольт может настроить шестую ножку МК ( int0 / PD2 ) на вывод и выводить по очереди на нее лог_0 и лог_1 через задержку, что бы прерывание по int0 генерировалось программно ( как ты учил на четвертой странице этого форума )
тут что скажешь?
это и нужно делать ! вручную точно ничего хорошего не получиться...
Виталий (аka ВитГо)
|
|
| |
|