mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lauflicht mit 16f88 pic


Autor: Denis (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hey zusammen,

ich habe mein lauflicht so weit Programmiert das die Led nach der
Reihe an gehen und bleiben ann ,jetzt komm ich nur nicht mehr aus
der schleife raus .So das alle led´s wieder ausgehen und von vorne
das Lauflicht loslegt. Vill hat jemand von euch eine ansatz lösung oder 
so

Autor: Holger W. (holgerw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mach dir um die Befehle
call schleife ; Wartezeit
rlf PORTB,f ; laufen zur nächsten LED

eine Schleife, ähnlich wie in den Wartezeiten,
also neue Variable mit Wert laden, deinen Port bedienen, danach die 
Variable erniedrigen und wenn nicht 0 dann wieder deinen Port bedienen.
Ist die Schleife 0 dann kannst du so ähnlich die LED in einer weiteren 
Schleife wieder zurücklaufen lassen.

Ganz am Ende springst du wieder nach m1 und der Ablauf geht von vor los.

Das wäre zumindest erstmal der einfachste Ansatz.
Später dann mit Statemachine und Timer...

Holger

Autor: Denis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey

habe versucht deine Idee um zu setzten habe es leidern icht hin 
bekommen,
stehe immer noch vor dem Problem das Lauflicht von vorne Starten zu 
lassen.
Vill kurz schreiben un mir zeigen wie es aussehen soll oder so
danke

gruß
denis

Autor: Holger W. (holgerw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also ein Listing als PDF dranzuhängen ist keine gute Idee, das kann man 
nicht richtig rauskopieren.
Da ich nur noch mit 18F programmiere hoffe ich die Befehle vom 16F 
stimmen noch. Das unten ist ungetestet, sollte aber zumindest das 
Prinzip erklären.
Was du mit der LED machst, vorher setzen, löschen usw. musst du dir 
selbst ausdenken und testen.

DECFSZ zieht von counter1 immer 1 ab und wenn das 0 ergibt (Zero 
gesetzt) wird der nächste Befehl übersprungen, ansonsten springt er 
immer wieder zu m1 bzw. m2 zurück.

RLF und RCF rotieren immer durchs Carry, du kannst also das was 
reingeschoben wird (0 oder 1, vorn oder hinten, LOL) durch setzen und 
rücksetzen des Carry Flag bestimmen. Da das Carry von der vorhergehenden 
Operation beeinflusst werden kann, solltest du es im Code direkt immer 
setzen oder löschen.


Also versuch mal selbst das einzufügen, wenn es nicht klappt dann als 
Textfile anhängen

- neue variable z.b. counter1  im cblock einfügen
mainloop:

     bcf PORTB,0 ; LED an RB0 einschalten
    
     movlw 0x08  ; 8 x durchlaufen lassen
     movwf counter1

m1:  call schleife ; Wartezeit
     bsf STATUS,C  ; immer eine log. 1 nachschieben
     rlf PORTB,f ; laufen zur nächsten LED
     decfsz counter1  ; counter1 - 1 und übergehe nächst. befehl, wenn 0
     goto  m1
     

     bcf PORTB,7 ; LED an RB0 einschalten (sicherheitshalber)

     movlw 0x08  ; 8 x durchlaufen lassen
     movwf counter1

m2:  call schleife ; Wartezeit
     bsf STATUS,C  ; immer eine log. 1 nachschieben
     rrf PORTB,f   ; zurückrotieren
     decfsz counter1  ; counter1 - 1 und übergehe nächst. Befehl, wenn 0
     goto  m2

; weitere spielereien.....

     goto mainloop


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.