Hallo allemaal,
weer een klein project van mijn kant waar ik weer niet uitkom.
Op de een of andere manier weigerd mijn AVR2313 om de data die ik aanbied op port D te kopieren naar port B.
De schakeling is super simpel, op port D staan schakelaars die de port aan de +5V of aan de massa hangen, aan port B hangen ledjes.
Als ik FF naar port B stuur gaan alle ledjes branden, dus dat werkt.
Ik heb de onderstaande paar regels als programma.
.nolist
.include 2313def.inc
.list
ldi r16,0x00
out ddrb,r16 ;port b is uitgang
ldi r16,0xff
out ddrd,r16 ;port d is ingange
lus: in r16,portd ;lees port d -> r16
out portb,r16 ;schrijf r16 -> port b
rjmp lus ;en nog een keer
heeft er iemand een idee wat ik hier over het hoofd zie?
alvast bedankt.
Ronald
Benadski
Kom eens langs bij RevSpace of één van de andere spaces!
Je doet het net verkeerdom!
ldi r16,0xff
out ddrd,r16 ;port d is ingangeDat moet dus ldi r16, 0x00 zijn en andersom!!!
EDIT: Dat de LEDs wel aan en uit gaan komt doordat je de pullups aan het schakelen bent van de ingang.
Je hebt trouwens kans dat je nu PORTD hebt opgeblazen! Je hebt ze als uitgang gezet en daar met schakelaars hard een waarde opgezet. Het veiligste is altijd een weerstandje te nemen na de schakelaar, dan kan het niet veel kwaad.
[Bericht gewijzigd door Benadski op ]
Er zijn volgens mij 2 fouten :
-De configuratie van de datadirectie registers moet inderdaad omgekeerd zijn
en
lus: in r16,portd ;lees port d -> r16
werkt niet maar wel
lus: in r16,pind ;lees port d -> r16
omdat je met portd het uitgangsregister leest en niet het ingangsregister.
RES
RES
.nolist
.include 2313def.inc
.list
rjmp reset
reset:
ldi temp, RAMEND ;stack space -> end SRAM
out SPL, temp
clr r16
out ddrd,r16 ;port d is input
ser r16
out ddrb,r16 ;port b is output
lus: in r16,PIND ;lees pinnen port d -> r16
out portb,r16 ;schrijf r16 -> port b
rjmp lus ;en nog een keer
Zo zou ie moeten werken. Data op de pinnen van PORTD direct op de pinnen van PORTB.
(verders was de reset er niet en de stack setup)
[Bericht gewijzigd door RES op ]
Benadski
Kom eens langs bij RevSpace of één van de andere spaces!
allereerst iedereen bedankt voor het meedenken.
aan het schakelen met een weerstandje had ik wel gedacht, dus poort D is nog gewoon in leven.
Het probleem zat hm voor al in het lezen van de port met het commando pind, maar das nu ook weer duidelijk en opgelost.
Bedankt