www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lauflicht auf Matrixdisplay


Autor: Jackson02 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Magnus M. (magnetus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichwort Stacküberlauf

Du machst alle Sprünge mit GOSUB, hast aber keine RETURNs drin.

Gruß,
Magnetus

Autor: Jackson02 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.