сбой порта ввода вывода на attiny2313
- Сообщения: 18
- Зарегистрирован: Чт ноя 24, 2016 20:16:46
Добрый день. Есть самодельная плата с тини2313, к порту D этой платы подключено 5 кнопок и один валкодер. На порту B на ножках со 2 по 6 висят светодиоды, также стоит кварц на 20 МГц. Проблема заключается в следующем: написана простейшая программа для мигания диодами по очереди через промежутки времени. В этой программе порт B разумеется настроен на выход, порт D на вход, но сигналы с него никак не обрабатываются. Светодиоды мигают как положено ровно до тех пор, пока не начинаем крутить валкодер, после этого порядок рушится полностью. Кнопки подтянуты к питанию, как и валкодер. В чём может быть проблема?
- Реклама
в программеkrash_artem писал(а):В чём может быть проблема?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
- Сообщения: 18
- Зарегистрирован: Чт ноя 24, 2016 20:16:46
Вот код программы. Порт D просто переключается на чтение, больше про него ни слова.
rjmp RESET ; Reset Handler
.org 0x0001 ;rjmp INT0 ; External Interrupt0 Handler
reti
.org 0x0002
reti ;rjmp INT1 ; External Interrupt1 Handler
.org 0x0003 ;rjmp TIM1_CAPT ; Timer1 Capture Handler
reti
.org 0x0004
reti ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
.org 0x0005
reti ;rjmp TIM1_OVF ; Timer1 Overflow Handler
.org 0x0006
reti ;rjmp TIM0_OVF ; Timer0 Overflow Handler
.org 0x0007
reti ;rjmp USART0_RXC ; USART0 RX Complete Handler
.org 0x0008
reti ;rjmp USART0_DRE ; USART0,UDR Empty Handler
.org 0x0009
reti ;rjmp USART0_TXC ; USART0 TX Complete Handler
.org 0x000A
reti ;rjmp ANA_COMP ; Analog Comparator Handler
.org 0x000B
reti ;rjmp PCINT ; Pin Change Interrupt
.org 0x000C
reti ;rjmp TIMER1_COMPB ; Timer1 Compare B Handler
.org 0x000D
reti ;rjmp TIMER0_COMPA ; Timer0 Compare A Handler
.org 0x000E
reti ;rjmp TIMER0_COMPB ; Timer0 Compare B Handler
.org 0x000F
reti ;rjmp USI_START ; USI Start Handler
.org 0x0010
reti ;rjmp USI_OVERFLOW ; USI Overflow Handler
.org 0x0011
reti;rjmp EE_READY ; EEPROM Ready Handler
.org 0x0012
reti ;rjmp WDT_OVERFLOW ; Watchdog Overflow Handler;
RESET:
ldi r16, low(RAMEND); Main program start
out SPL,r16 ;Set Stack Pointer to top of RAM
ldi r16,0b01111100
out ddrB,r16 ; настройка ножек порта В на выход
ldi r16,0b00000000
out ddrD,r16 ; настройка ножек порта D на вход
sei ; Enable interrupts
main:
ldi r16, 62
ldi r17, 187
ldi r18, 66
rcall Delay2 ;задержка 0,5с
sbi portB,3 ; зажечь диод 2
ldi r16, 62
ldi r17, 187
ldi r18, 66
rcall Delay2
cbi portB,3 ; погасить диод 2
sbi portB,5 ; зажечь диод 4
ldi r16, 62
ldi r17, 187
ldi r18, 66
rcall Delay2 ;задержка 0,5с
cbi portB,5 ; погасить диод 4
rjmp main
Delay2: ; цикл задержки
mov r19, r16
mov r20, r17
da1_2:
inc r18
breq dexit_2
mov r17, r20
da2_2:
inc r17
breq da1_2
mov r16, r19
da3_2:
inc r16
breq da2_2
rjmp da3_2
dexit_2: ret
Спойлер
.org 0x0000rjmp RESET ; Reset Handler
.org 0x0001 ;rjmp INT0 ; External Interrupt0 Handler
reti
.org 0x0002
reti ;rjmp INT1 ; External Interrupt1 Handler
.org 0x0003 ;rjmp TIM1_CAPT ; Timer1 Capture Handler
reti
.org 0x0004
reti ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
.org 0x0005
reti ;rjmp TIM1_OVF ; Timer1 Overflow Handler
.org 0x0006
reti ;rjmp TIM0_OVF ; Timer0 Overflow Handler
.org 0x0007
reti ;rjmp USART0_RXC ; USART0 RX Complete Handler
.org 0x0008
reti ;rjmp USART0_DRE ; USART0,UDR Empty Handler
.org 0x0009
reti ;rjmp USART0_TXC ; USART0 TX Complete Handler
.org 0x000A
reti ;rjmp ANA_COMP ; Analog Comparator Handler
.org 0x000B
reti ;rjmp PCINT ; Pin Change Interrupt
.org 0x000C
reti ;rjmp TIMER1_COMPB ; Timer1 Compare B Handler
.org 0x000D
reti ;rjmp TIMER0_COMPA ; Timer0 Compare A Handler
.org 0x000E
reti ;rjmp TIMER0_COMPB ; Timer0 Compare B Handler
.org 0x000F
reti ;rjmp USI_START ; USI Start Handler
.org 0x0010
reti ;rjmp USI_OVERFLOW ; USI Overflow Handler
.org 0x0011
reti;rjmp EE_READY ; EEPROM Ready Handler
.org 0x0012
reti ;rjmp WDT_OVERFLOW ; Watchdog Overflow Handler;
RESET:
ldi r16, low(RAMEND); Main program start
out SPL,r16 ;Set Stack Pointer to top of RAM
ldi r16,0b01111100
out ddrB,r16 ; настройка ножек порта В на выход
ldi r16,0b00000000
out ddrD,r16 ; настройка ножек порта D на вход
sei ; Enable interrupts
main:
ldi r16, 62
ldi r17, 187
ldi r18, 66
rcall Delay2 ;задержка 0,5с
sbi portB,3 ; зажечь диод 2
ldi r16, 62
ldi r17, 187
ldi r18, 66
rcall Delay2
cbi portB,3 ; погасить диод 2
sbi portB,5 ; зажечь диод 4
ldi r16, 62
ldi r17, 187
ldi r18, 66
rcall Delay2 ;задержка 0,5с
cbi portB,5 ; погасить диод 4
rjmp main
Delay2: ; цикл задержки
mov r19, r16
mov r20, r17
da1_2:
inc r18
breq dexit_2
mov r17, r20
da2_2:
inc r17
breq da1_2
mov r16, r19
da3_2:
inc r16
breq da2_2
rjmp da3_2
dexit_2: ret
- Реклама
А верно ли подключен валкодер? Не коротит ли он питание?
Docendo discimus
- Сообщения: 18
- Зарегистрирован: Чт ноя 24, 2016 20:16:46
Сигнальные ножки подтянуты к питанию резисторами 10кОм. И ещё поставлены конденсаторы 10нФ между резисторами и землёй.pyzhman писал(а):А верно ли подключен валкодер? Не коротит ли он питание?
Криминала в программе нет. Значит проблемы с подключением. Чудес не бывает.
Отключить валкодер совсем и поподавать землю на эти лапки. Смотреть.
Docendo discimus
- Сообщения: 18
- Зарегистрирован: Чт ноя 24, 2016 20:16:46
А на что надо обратить внимание? Потому если валкодер не крутить, то диодики мигают как им и положено. Причём заметил, что если поставить мигать два диода, валкодер будет мешать только им. А если заставить мигать все 5, то он сбивает порядок для них всех. Думал из-за ресета, но он вроде подтянут через резистор к питанию.pyzhman писал(а):Отключить валкодер совсем и поподавать землю на эти лапки. Смотреть.
в тексте нет валкодера. поэтому не известно, как валкодер может мешать...krash_artem писал(а):Вот код программы.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- Сообщения: 18
- Зарегистрирован: Чт ноя 24, 2016 20:16:46
В том то и проблема. В программе он не настроен и никак не обрабатывает, но каким-то образом на выходы порта B влиять умудряется.Starichok51 писал(а):в тексте нет валкодера. поэтому не известно, как валкодер может мешать...krash_artem писал(а):Вот код программы.
Попробовали? А обратить внимание на реакцию светодиодов. Предположение такое - валкодер распаян неверно и бякает питание. В итоге программа перезапускается.pyzhman писал(а):Отключить валкодер совсем и поподавать землю на эти лапки. Смотреть.
Docendo discimus
- Сообщения: 18
- Зарегистрирован: Чт ноя 24, 2016 20:16:46
Пока не попробовал, в универе к плате и паяльнику попаду только во вторник. Выпаяли с него конденсаторы, теперь вроде если крутить потихоньку в одну сторону он не мешает.pyzhman писал(а):Попробовали? А обратить внимание на реакцию светодиодов. Предположение такое - валкодер распаян неверно и бякает питание. В итоге программа перезапускается.pyzhman писал(а):Отключить валкодер совсем и поподавать землю на эти лапки. Смотреть.
- Сообщения: 18
- Зарегистрирован: Чт ноя 24, 2016 20:16:46
Убрал конденсаторы между сигнальной ножкой и землей, между ножкой земли и землей поставил резистор 3кОм. Теперь энкодер вроде не мешает работать.


