www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zeitschleife mit Variablen


Autor: Fabian Kluge (fabian1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,
Ich programmiere gerade den Atmega 8 mit Bascom mit einem selbstgebauten 
seriellen Programmieradapter.
Ich bin noch recht unerfahren im Programmieren und habe deshalb eine 
Frage: Wie mache ich das, dass ich eine Schleife habe die z.B. 4 Leds 
abwechselnd einschaltet bzw auslässt :
Do
waitms 2
Portd.0 = A    // LED 1 wenn A = 1 led an
Waitms 2
Portd.0 = 0
Portd.1 = B    // LED 2
Waitms 2
Portd.1 = 0
Portd.2 = C    // LED 3
Waitms 2
Portd.2 = 0
Portd.3 = D    // LED 4
Waitms 2
Portd.3 = 0
Loop

Und das nebenbei ein anderes Programm läuft das die Variablen ABCD 
verändert um so ein Muster oder ein Lauflicht zu erzeugen! Allerdings 
sollte der Schaltvorgang mit den LEDs so schnell gehen das man kein 
Flackern oder dergleichen sieht! Im Grunde ist das nur kleines 
Multiplexing da ich mir demnächst einmal einen LED Cube programmieren 
will. Ich habe schon im Internet gesucht und Teillösungen gefunden, wie 
Unterprogramme oder der Gleichen. Ich will das auch versthen und nicht 
ein komplettes fertiges Programm für das Multiplexen. Oder geht das noch 
einfacher und ich mache mir da zu viel Aufwand?
Leider bin ich gerade noch am Einarbeiten in die Programmiersprache 
daher solch eine Frage


MFG Fabian

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird so nichts.
Du brauchst einen Timer, der dir in regelmässigen Zeitabständen eine ISR 
aufruft. In dieser ISR schaltest du dann um zur nächsten LED. Immer 
reihum.

Sieh dir mal dieses Tutorial an. Das sollte dir einiges weiterhelfen
http://www.rowalt.de/mc/index.htm

Autor: Fabian Kluge (fabian1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Danke für die schnelle Antwort!
Werde mir das jetzt gleich durchlesen

Fabian

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der für dich interessante Teil beginnt im Abschnitt 3. Um Timer und 
Interrupts gehts im Abschnitt 5

Autor: Fabian Kluge (fabian1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!
habe das nun auch umgesetzt und wollte jetzt mal fragen ob das auch no 
kürzer geht, wiel die Outputs X und y die die leds dann auf ground 
ziehen mittels transistor jedesmal ein aus und so  zu schalten, 
verbraucht eine Menge an Flashspeicher
Code :
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim X As Byte
Dim Y As Byte

Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portc.5 = Output
Config Portc.4 = Output

Config Timer0 = Timer , Prescale = 256
Enable Timer0
On Timer0 Timer0_isr

Enable Interrupts


Do
X = 1
A = 1
Waitms 200
X = 0
Y = 1
Waitms 200
Y = 0
A = 0
X = 1
B = 1
Waitms 200
X = 0
Y = 1
Waitms 200
Y = 0
B = 0
X = 1
C = 1
Waitms 200
X = 0
Y = 1
Waitms 200
Y = 0
C = 0
X = 1
D = 1
Waitms 200
X = 0
Y = 1
Waitms 200
Y = 0
D = 0

Loop
End




Timer0_isr:
 Portc.5 = X
 Portc.4 = Y
 Portd.0 = A
 Waitms 2
 Portd.0 = 0
 Portd.1 = B
 Waitms 2
 Portd.1 = 0
 Portd.2 = C
 Waitms 2
 Portd.2 = 0
 Portd.3 = D
 Waitms 2
 Portd.3 = 0
 Portc.5 = 0
 Portc.4 = 0



Return

Sry wegen der Länge!
Gruß Fabian

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super Idee, in einer ISR Delays o.dergl. zu benutzen...
Das macht man einfach nicht.

Autor: Fabian Kluge (fabian1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja wie dann? das ist ja die Frage!
Gruß Fabian

Autor: Falk Brunner (falk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@  Fabian Kluge (fabian1)

>habe das nun auch umgesetzt und wollte jetzt mal fragen ob das auch no
>kürzer geht, wiel die Outputs X und y die die leds dann auf ground

Logisch, man nehme ein Array. Und wie bereits gesagt, du musst dich mal 
grundlegend über Interrupts informieren. So geht das nicht.

Und lange Codes gehören in den Anhang. Augen auf! Steht direkt hier 
drüber!

Siehe Anhang. Ist NICHT getestet, es fehlt auch noch die Initialisierung 
des Array, hab ich auf die Schnelle im Handbuch von BASCOM nicht 
gefunden.

MFG
Falk

Autor: Fabian Kluge (fabian1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bzw wenn icht sind die LEDs garnicht mehr zu sehen!

Autor: pfft.. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kein delay in einer ISR. Punkt.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Kein delay in einer ISR. Punkt.

Blödsinn. Nicht das ich ein Verfechter davon bin. Aber diese 
kategorische Aussage ist falsch.

MfG Spess

Autor: pfft.. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Allenfalls ein NOP. Mehr nicht. Mach n'timer mit 1ms,
und zaehle dort.

ISR Timer0
{
 reload Timer register
 timerflag=true;
}

main
 while true
 {
 if timerflag
  {
  LED=0
  ..
  ..
  ..
  ..
  timerflag=false
  }
 }

Autor: Fabian Kluge (fabian1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank!
werde das nun gleich mal versuchen
Gruß FAbian

Autor: Falk Brunner (falk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sooo, nach einigen BASCOM-Stolperfallen (Arrayindex fängt bei 1 an!, 
Hexzahlen werden mit &H und nicht $ angegeben, steht nirgendwo im 
Handbuch :-( hab ich das mal fehlerfrei simuliert.

MFG
Falk

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.