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.