- LiTime Speicher und Akkus         
Ergebnis 1 bis 9 von 9

Thema: Ausgabe einer Uhrzeit an ein Display

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.02.2007
    Beiträge
    62

    Ausgabe einer Uhrzeit an ein Display

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich experimentiere gerade mit einem LCD-Display. Die Ansteuerung des Displays funktioniert. Normalen festen Text ausgeben, welchen ich mit .db "Standardtext" hinterlege, funktioniert und Zahlen bis 65536 ist auch kein Problem.

    Wie aber stelle ich z.B. eine Uhrzeit dar? Die Stunden und Minuten der Uhrzeit wären in Registern hinterlegt.


    Kann mir da mal jemand auf die Sprünge helfen?

    Ciao Lothar

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Indem du die Position des Platzes angibst wo du etwas hinschreiben willst oder alles nacheinander mit den entsprechenden Trennzeichen. Wenn du es allerdings in Bascom machst kann ich dir nicht sagen.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    ich würde einfach einen String aus "Stunden", ":" und "Minuten" zusammenbasteln und dann ab aufs display!
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    23.02.2007
    Beiträge
    62
    Hi,

    na ja, das würde ich auch - wenn ich nur wüßte wie genau ich das machen muss.

    Gruß Lothar

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Welcher Kontroller, welches Display, welche Sprache ?

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    23.02.2007
    Beiträge
    62
    Ähm, der Controller ist ein AtTiny2323 (oder meinst Du den Controller des Displays?). Die Sprache ist Assembler und das Display? Hm - keine Ahnung - ich verwende ein einzeiliges 16stelliges Displaj. Das wird s wie alle anderen üblichen angesteuert. Hab ich mal bei Reichelt gekauft. Es sollte ein 161A sein.

    MfG Lothar

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo,
    da Du oben irgendwas von Registern gesagt hast, gehe ich davon aus, daß es sich
    un Assembler handelt ?
    Sowas ist denkbar einfach, wenn man mit BCD oder besser gepackte BCD arbeitet.
    Angenommen es ist 12:34:45 um das darzustellen braucht man 3 Register wo jede Zifer in einem Nibble liegt in diesem Fall etwa so
    Register 1 : 1 2
    Register 2 : 3 4
    Register 3 : 4 5
    Die Wandelroutine könnte so etwa aussehen:
    XYZ Zeiger auf RAM Ausgabepuffer stellen
    Oberes Nibble von Register 1 Holen, mit 0x30 verodern in Ram Ablegen XYZ Zeiger inkrementieren
    Unteres Nibble holen mit 0x30 verodern in Ram Ablegen......
    Doppelpunkt ':' in Ram Zeiger erhöhen
    Das gleiche mit Minuten und Sekunden, noch ein '\0' hinten dran und ab auf das Display...

    Ich hoffe, daß es verständlich war.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    23.02.2007
    Beiträge
    62
    Hi,
    ehrlich gesagt - mir raucht der Kopf. Mit der ganzen Materie habe ich eher nicht so viel am Hut. BCD, Nibble und Register verstehe ich ja noch, aber XYZ Zeiger verstehe ich jetzt nicht so. Hast Du vielleicht ein klitzekleines Sample für mich?

    MfG Lothar

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Sorry, ich versuche mal verständlicher, also meine Idee ist die Uhrzeit in BCD zu packen, um es einfacher zu machen nehmen wir für jede Ziffer ein Register und machen es mit Sekunden.

    Du hast sicherlich eine Taktquelle, wo Du Deinen Sekundenregister inkrementierst, dort verwenden wir jetzt 2 Register, einer für 10-er Sekunden und einer für 1-er etwa so:
    Code:
    ....
    .def sekeiner = r16
    .def sekzehn = r17
    ...
    
    ;Taktquelle
    inc sekeiner
    cpi sekeiner,60
    brne raus
    clr sekeiner
    inc sekzehn
    raus:
    ret
    Um das alles auf LCD zu schicken muß jetzt alles in ASCII und nich bin vorliegen hier kann man ein Stück RAM nutzen um die Daten zwischenzuspeichern jetzt kommen die Zeiger zum einsatz also:
    Code:
    .def tmp = r18
    .equ RAMPUFFER = 0x0060 ;das sollte die erste Ramzelle sein
    
    wandeln:
    ldi XH,HIGH(RAMPUFFER)
    ldi XL,LOW(RAMPUFFER)
    mov tmp,sekzehn
    ori tmp,0x30
    st X+,tmp
    mov tmp,sekeiner
    ori tmp,0x30
    st X+,tmp
    ldi tmp,'\0'
    st X,tmp
    ret
    Jetzt liegt im Ram an der Adresse 0x60 die Zehner Zahl 0x61 einer Zahl und 0x62 die Nullterminierung.
    Puh, jetzt ausgabe
    Code:
    ldi XH,HIGH(RAMPUFFER)
    ldi XL,LOW(RAMPUFFER)
    lesen:
    ld tmp,X+
    cpi tmp,'\0'
    breq ende
    ;Hier Ausgabe von tmp an LCD
    rjmp lesen
    ende:
    ret
    Zugegeben für normale BCD ist das Quatch, da könnte man direkt in ASCII rechnen, aber denke mal an die gepackten BCDs

    So jetzt klarer ?

    Gruß Sebastian

    P.S. Ich habe das alles "Online" geschrieben und nicht geteste, sollte aber funktionieren
    Software is like s e x: its better when its free.
    Linus Torvald

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus