Hallo, ich habe hier ein kleines Problem mit einem Attiny2313 und einem Lauflicht auf einem Dot-Matrix Display. Und zwar wäre im Programm alles soweit richtig; Display und Attiny2313 sind ebenfalls ordnungsgemäß verdrahtet bzw. beschaltet. Wie bereits erwähnt schließe ich einen Fehler im Programmablauf aus, da dies sehr übersichtlich und für jeden leicht verständlich in BASIC formuliert wurde. Nun zum eigentlichen Problem: Bei besagtem Programm springt er ab ca. der Mitte des Ablaufs (Nach "Strich4") wieder auf "Strich" zurück und stoppt und zeigt ein zufälliges Bild (meistens die gesamte rechte Linie von oben nach unten auf dem Matrix Display) an. Werte für HWstack, SWstack etc. hab ich schon alle möglichen Kombinationen getestet - Leider erfolglos. Ich poste mal hier mein Programm - in der Hoffnung, dass mir jemand einen Fehler nennen kann. ------------------------------------------------------------------------ - $regfile = "attiny2313.dat" $crystal = 1200000 $noramclear ' RAM nicht initialisieren $hwstack = 0 ' Stackinitialisierung wird durch $TINY unterdrückt $swstack = 0 ' Software 0 $framesize = 0 ' Framesize = 0 Dim A As Long A = 0 Config Portd = Output Config Portb = Output Do Strich01: A = A + 1 If A < 10 Then Gosub Strich Else Gosub Null Gosub Strich02 End If Strich02: A = A + 1 If A < 10 Then Gosub Strich2 Else Gosub Null Gosub Strich03 End If Strich03: A = A + 1 If A < 10 Then Gosub Strich3 Else Gosub Null Gosub Strich04 End If Strich04: A = A + 1 If A < 10 Then Gosub Strich4 Else Gosub Null Gosub Strich05 End If Strich05: A = A + 1 If A < 10 Then Gosub Strich5 Else Gosub Null Gosub Strich06 End If Strich06: A = A + 1 If A < 10 Then Gosub Strich6 Else Gosub Null Gosub Strich07 End If Strich07: A = A + 1 If A < 10 Then Gosub Strich7 Else Gosub Null Gosub Strich01 End If Loop End Strich: Portd = 1 : Portb = &B01111111 : Waitms 1 Portd = 2 : Portb = &B00000001 : Waitms 1 Portd = 4 : Portb = &B00000001 : Waitms 1 Portd = 8 : Portb = &B00000001 : Waitms 1 Portd = 16 : Portb = &B01111111 : Waitms 1 Gosub Strich01 Strich2: Portd = 1 : Portb = &B01111111 : Waitms 1 Portd = 2 : Portb = &B00000010 : Waitms 1 Portd = 4 : Portb = &B00000010 : Waitms 1 Portd = 8 : Portb = &B00000010 : Waitms 1 Portd = 16 : Portb = &B01111111 : Waitms 1 Gosub Strich02 Strich3: Portd = 1 : Portb = &B01111111 : Waitms 1 Portd = 2 : Portb = &B00000100 : Waitms 1 Portd = 4 : Portb = &B00000100 : Waitms 1 Portd = 8 : Portb = &B00000100 : Waitms 1 Portd = 16 : Portb = &B01111111 : Waitms 1 Gosub Strich03 Strich4: Portd = 1 : Portb = &B01111111 : Waitms 1 Portd = 2 : Portb = &B00001000 : Waitms 1 Portd = 4 : Portb = &B00001000 : Waitms 1 Portd = 8 : Portb = &B00001000 : Waitms 1 Portd = 16 : Portb = &B01111111 : Waitms 1 Gosub Strich04 Strich5: Portd = 1 : Portb = &B01111111 : Waitms 1 Portd = 2 : Portb = &B00010000 : Waitms 1 Portd = 4 : Portb = &B00010000 : Waitms 1 Portd = 8 : Portb = &B00010000 : Waitms 1 Portd = 16 : Portb = &B01111111 : Waitms 1 Gosub Strich05 Strich6: Portd = 1 : Portb = &B01111111 : Waitms 1 Portd = 2 : Portb = &B00100000 : Waitms 1 Portd = 4 : Portb = &B00100000 : Waitms 1 Portd = 8 : Portb = &B00100000 : Waitms 1 Portd = 16 : Portb = &B01111111 : Waitms 1 Gosub Strich06 Strich7: Portd = 1 : Portb = &B01111111 : Waitms 1 Portd = 2 : Portb = &B01000000 : Waitms 1 Portd = 4 : Portb = &B01000000 : Waitms 1 Portd = 8 : Portb = &B01000000 : Waitms 1 Portd = 16 : Portb = &B0111111 : Waitms 1 Gosub Strich07 Null: Portd = 1 : Portb = &B00000000 : Waitms 1 Portd = 2 : Portb = &B00000000 : Waitms 1 Portd = 4 : Portb = &B00000000 : Waitms 1 Portd = 8 : Portb = &B00000000 : Waitms 1 Portd = 16 : Portb = &B00000000 : Waitms 1 A = 0 Return ------------------------------------------------------------------------ - Da es sich nur um ein Testprogramm handelt bitte nicht über diese Funktion wundern. Mit den besten Grüßen und der Hoffnung auf ne baldige Antwort Manuel
Stichwort Stacküberlauf Du machst alle Sprünge mit GOSUB, hast aber keine RETURNs drin. Gruß, Magnetus
Danke erstmal für die schnelle Antwort. Die Gosubs, mit denen ich zum nächsten "Abschnitt" z.B. Strich02 springe kann ich ja weglassen. Müsste deshalb genauso funktionieren. Kann ich vllt. statt den Gosub07 unten bei den Musterfeldern Goto07 verwenden? Oder hätte das den selben Fehler als Folge? Grüßle
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.