Gast
#2133757
hallo leute,
ich bin vor ein paar wochen angefangen mich mit avr microkontrollern zu
befassen und habe mir ein myavr einsteiger set gekauft und mit dem
lehrbuch schon viel gearbeitet und die beispiele nach programmiert.
Jetzt wollte ich mal etwas selbst erstellen aber habe da so ein paar
probleme mit.
Ich habe vor eine zugangskontrolle für einen raum zu bauen. als sensoren
für den eingang habe ich zwei lichtschranken, eine soll zum hoch zählen
sein und eine zum runter zählen. wenn der zähler oder register ungleich
0 ist soll ein ausgang auf 1 sein.
Ich habe jetzt mal versucht etwas zu programmieren. die 2 taster auf dem
testboard habe ich statt der lichtschranken genommen und um den ausgang
an zu zeigen habe ich eine led auf dem testboard verwendet.
nun mein problem: wenn ich starte ist die led aus, betätige ich kurz
einen taster geht die led an aber wenn ich den anderen taster wieder
drücke der den register um 1 verringern soll, geht die led nicht mehr
aus.
könnt ihr mir vielleicht helfen und sagen wie ich das problem lösen
kann.
wahrscheinlich muss ich die Taster entprellen aber ich weiß nicht wie es
Softwaretechnisch am besten geht und an welcher stelle ich die Befehle
einsetzen muss.
MfG meino
hier mein Programm
;-----------------------------------------------------------------------
---
; Title : Assembler Grundgerüst für myAVR-Board
;-----------------------------------------------------------------------
---
; Funktion : ...
; Schaltung : ...
;-----------------------------------------------------------------------
---
; Prozessor : ATmega8
; Takt : 3,6864 MHz
; Sprache : Assembler
; Datum : ...
; Version : ...
; Autor : ...
;-----------------------------------------------------------------------
---
.include "AVR.H"
;-----------------------------------------------------------------------
----
; Reset and Interrupt vector Beschreibung
begin: rjmp main ;POWER ON RESET
reti ;Int0-Interrupt
reti ;Int1-Interrupt
reti ;TC2 Compare Match
reti ;TC2 Overflow
reti ;TC1 Capture
reti ;TC1 Compare Match A
reti ;TC1 Compare Match B
reti ;TC1 Overflow
reti ;TC0 Overflow
reti ;SPI, STC Serial Transfer
Complete
reti ;UART Rx Complete
reti ;UART Data Register Empty
reti ;UART Tx complete
reti ;ADC Conversion Complete
reti ;EEPROM Ready
reti ;Analog Comparator
reti ;TWI (I²C) Serial Interface
reti ;Store Program Memory Redy
;-----------------------------------------------------------------------
----
; Start, Power ON, Reset
main: ldi r16, lo8(RAMEND)
out SPL, r16
ldi r16, hi8(RAMEND)
out SPH, r16
cbi DDRD, 2
sbi PORTD, 2
cbi DDRD, 3
sbi PORTD, 3
ldi r16, 0b11111111
out DDRB, r16
ldi r17, 0b00000000
;-----------------------------------------------------------------------
----
mainloop: wdr
sbis PIND, 2
rjmp zplus
sbis PIND, 3
rjmp zminus
rjmp mainloop
;-----------------------------------------------------------------------
----
zplus: inc r17
rjmp vergleich
zminus: dec r17
rjmp vergleich
vergleich: cpi r17, 0
brcc ausgabe
ldi r16, 0b00000000
out PORTB, r16
rjmp mainloop
brcc ausgabe
rjmp mainloop
ausgabe: ldi r16, 0b00000001
out PORTB, r16
rjmp mainloop