kann mir mal jemand sagen was ich hier falsch gemacht habe? es geht
alles fehlerfrei zu assemblieren und auch bei der simulation ist
eigentlich alles so wie es sein soll.
jedoch wenn ich mit dem multimeter an den pins nachmesse, schwankt die
spannung ununterbrochen nur hin und her.
was ist da falsch, bin am verzewifeln. habe es auch mit mehreren
gleichen microcontrollern ausprobiert zund es geht trotzdem nichts :(
mfg
Code:
;***************************************
.include "m16def.inc"
;***************************************
.def temp = r16
init: ldi temp, LOW (RAMEnD) ; Stackpointer initialisieren
out SPL, temp
ldi temp, HIGH (RAMEnD)
out SPH, temp
LDI R22, 255 ;initialisieren
OUT DDRA, r22
OUT DDRB, r22
OUT DDRC, r22
OUT DDRD, r22
LDI r18, 0
LDI r19, 255
main: LDI R17, 0b00000001 ;aufbau in rot
main1: ROR r17
out PORTA, r17
CPI r17, 255
BRNE main1
main2: LDI R17, 0b00000001
main3: ROR r17
out PORTB, r17
CPI r17, 255
BRNE main3
call warten ;warten
out PORTA, r18 ;alles aus
out PORTB, r18
main4: LDI R17, 0b00000001 ;aufbau in grün
main5: ROR r17
out PORTC, r17
CPI r17, 255
BRNE main5
main6: LDI R17, 0b00000001
main7: ROR r17
out PORTD, r17
CPI r17, 255
BRNE main7
call warten ;warten
out PORTC, r18 ;alles aus
out PORTD, r18
main8: LDI R17, 0b00000001 ;aufbau in orange
main9: ROR r17
out PORTA, r17
out PORTC, r17
CPI r17, 255
BRNE main9
main10: LDI R17, 0b00000001
main11: ROR r17
out PORTB, r17
out PORTD, r17
CPI r17, 255
BRNE main11
call warten ;warten
out PORTA, r18 ;alles aus
out PORTB, r18
out PORTC, r18
out PORTD, r18
nop
call warten ;warten
out PORTA, r19 ;schrift rot
out PORTB, r19
nop
call warten ;warten
out PORTA, r18 ;alles aus
out PORTB, r18
out PORTC, r19 ;alles grün
out PORTD, r19
nop
call warten ;warten
out PORTC, r18 ;alles aus
out PORTD, r18
out PORTA, r19 ;alles orange
out PORTB, r19
out PORTC, r19
out PORTD, r19
nop
call warten ;warten
out PORTA, r18 ;alles aus
out PORTB, r18
out PORTC, r18
out PORTD, r18
rjmp main
warten: sbiw XL, 1 ; Zähler dekrementieren 2 Takte
brne warten
reti
Hallo Spyro, was soll das Programm denn machen - weshalb verwendest Du ein "reti" am Ende ? Otto
und wie sieht die hardware dazu aus. (z.b. diverse widerstände (pull-up) an den ein- und ausgängen)
wie schnell ist den das ganze getaktet? In main 1-3 gehen die Pins am Port A und B nacheinander auf High bis alle auf High stehen und zwar so schnell das du auch dieses Schieben gar nicht sehen wirst(falls da Leds dranhängen) und auch einfach 255 an die beiden Port geben könntest. Danach gehts per call in die Warteschleife (65535 Takte bei 8 Mhz dauert das gerade mal 8mSek) um da rauszukommen muss statt des reti ein ret benutzt werden, mit Reti steigt man aus einer Interruptroutine aus. Im AVR-Studio wirds zwar wie ein ret simuliert wie es aber der AVR selbst macht weiß ich nicht. Der rest wiederholt sich dann ja alles nur mit anderen Ports. Selbst wenn du das Ding mit dem geringsten internen Takt(1 MHz) taktest bis du gerade mal bei 65mSek wo alle Pins High sind, also mit einem Multimeter ist da nichts zu machen, mit ein paar Leds wäre da schon etwas zu sehen. Oder aber du taktest das Ding mal extern mit wenigen kHz um die Effekte beobachten zu können. Schalte mal im Simulator unter View->Toolbars->Processor hinzu dann kannst du mittels Breakpoint an einer stelle im Programm anhalten die Stoppuhr auf 0 setzen und beim nächten Breakpoint die Zeit ablesen die das ganze benötigt hat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.