- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 173

Thema: Portbelegung auf ATMega für LCD1602

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    @avr_racer

    Hab mich mit deinem "Mathe.asm" Programm auseinander gesetzt.
    Vieles ist mir jetzt klar(er), alles noch nicht ...
    Was ich gefunden hab, hab ich dir bereits in der PN geschrieben.

    Was mir noch nicht klar ist, wozu die SWAPs in HEX_DEC gut sein sollen?
    Das macht die Umwandlung in ASCII schwieriger!
    Beispiel:
    34515: 03 40 05 15 (besser: 03 04 05 01 05 ohne swap und ZE getrennt)

    Wie kann ich ZE gemeinsam in ASCII umwandeln/anzeigen?
    Da ich die Ziffern am LCD einzeln ausgebe, müssen die getrennt sein.
    Das ist zumindest mein Gedankengang.
    Oder liege ich hier falsch?

  2. #2
    HaWe
    Gast
    Zitat Zitat von HeSt Beitrag anzeigen
    @avr_racer

    Hab mich mit deinem "Mathe.asm" Programm auseinander gesetzt.
    Vieles ist mir jetzt klar(er), alles noch nicht ...
    Was ich gefunden hab, hab ich dir bereits in der PN geschrieben.

    Was mir noch nicht klar ist, wozu die SWAPs in HEX_DEC gut sein sollen?
    Das macht die Umwandlung in ASCII schwieriger!
    Beispiel:
    34515: 03 40 05 15 (besser: 03 04 05 01 05 ohne swap und ZE getrennt)

    Wie kann ich ZE gemeinsam in ASCII umwandeln/anzeigen?
    Da ich die Ziffern am LCD einzeln ausgebe, müssen die getrennt sein.
    Das ist zumindest mein Gedankengang.
    Oder liege ich hier falsch?
    ich fürchte, du hast immer noch nicht verstanden, dass du eine auf dem µC gespeicherte Zahl (z.B. 0xAE) nicht direkt in ASCII als Dec Zahl ausgeben kannst, denn weder 0xA noch 0xE sind Dezimalziffern.
    also musst du erst durch eine Reihe von Rechenoperationen (Division, Modulo) eine Dezimalsystem-Stellen-Zerlegung erzeugen (Hunderter, Zehner, Einer, hier also: 1*100 + 7*10 + 4*1)

    Code:
    Hunderter: 0xAE/100
    Zehner: (0xAE mod 100) / 10
    Einer: (0xAE mod 100) mod 10
    und erst DIESE kannst du dann (per ASCII offset=48 ) als Ziffern ausgeben (1 7 4 , einzeln oder gemeinsam als string).
    Geändert von HaWe (16.01.2019 um 10:14 Uhr) Grund: typo

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Ich hab sehr wohl verstanden WIE Ziffern/Zahlen/Zeichen angezeigt werden können!
    Offenbar kann ich mich nicht so ausdrücken, dass ihr das so versteht, wie ich es meine!
    Die Rechenoperationen sind bis auf die ASCII-Umwandlungen durch (34515).
    Diese Registerinhalte 03 04 05 01 05 (15 bereits getrennt) müssen klarerweise noch in ASCII umgewandelt werden um sie anzeigen zu können.
    Es geht nur darum, dass die einzelnen Register nurmehr mit $30 addiert werden müssen, dann kann man sie einzeln anzeigen.
    Aber 40 oder 15 mit $30 addiert ergibt kein anzeigbares Zeichen!! Zumindest nicht die Ziffer, die es sein soll!
    Also auf "low-nibble" = 04!
    Und 15 trennen auf 01 05!
    Hast mich jetzt??
    Geändert von HeSt (15.01.2019 um 11:48 Uhr)

  4. #4
    HaWe
    Gast
    Hast mich jetzt??
    sorry, leider nein.
    Alle ASCII-Zeichen ab dec 48 ($30) sind anzeigbar, und natürlich dürfen es dezimal nur die Werte 48-57 sein (48+0 bis 48+9).
    Wschl muss es dir ein asm-Progger erklären.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Damit ich die Zahl 34515 auf dem LCD anzeigen kann, muss ich jede einzelne Ziffer dieser Zahl (jede Ziffer steht in einem eigenen Register) in anzeigbare Zeichen umwandeln = Ziffer + $30:
    3 = $33, 4 = $34, 5 = $35, 1 = $31 und 5 = $35.
    Entweder ich geb das zusammengefasst als String aus (wobei ich nicht weiß, wie ich das zu einem String zusammenstellen kann) oder eben jedes einzeln.
    Ein "03" oder "05", .... wie es im Register steht ist nicht anzeigbar!
    Jetzt??
    Geändert von HeSt (15.01.2019 um 11:46 Uhr)

  6. #6
    HaWe
    Gast
    Jetzt??
    nein, sorry, ich muss mich ausklinken, (edit) deine Rechnungen sind sogar ok (so rechne ich selber ja auch), aber dein Problem ist für mich als C-Programmierer so als wäre es in sumerischer Keilschrift geschrieben
    Geändert von HaWe (15.01.2019 um 11:28 Uhr)

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Ist ja auch gut !!
    avr_racer verstehts schon

  8. #8
    HaWe
    Gast
    letzter Versuch - kannst du direkt nacheinander die Konstanten
    $30
    $31
    $32
    $33
    $34
    ausgeben?
    Wenn nein, funktioniert deine lcd-Ausgabe nicht.
    Wenn ja, hast du dich vlt oben verrechnet bei der Dezimalstellen-Zerlegung...
    Geändert von HaWe (15.01.2019 um 11:37 Uhr) Grund: typo

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Alle $xx ja,
    §33 ist nicht anzeigbar.

    C und Assembler sind nicht identisch!!
    Vergiss es!

  10. #10
    HaWe
    Gast
    typo, sollte ntl $33 heißen.

    Aber dann liegt wohl der 2. Fall vor (Rechenfehler)
    C erzeugt denselben Maschinencode wie asm und rechnet mit denselbern Registerwerten.

Ähnliche Themen

  1. [ERLEDIGT] Atmega 644 & atmega8 parallel am ISP ... Reset beider atmega notwendig ..
    Von Ritchie im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 29.03.2013, 11:18
  2. CCPRO M128: Portbelegung
    Von Dirk im Forum Robby RP6
    Antworten: 0
    Letzter Beitrag: 22.05.2009, 22:26
  3. Portbelegung bei diesem Display [erledigt]
    Von Rob.Anfänger im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 18.11.2006, 18:12
  4. Portbelegung ATmega32
    Von Rob.Anfänger im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 15.11.2006, 19:59
  5. Antworten: 4
    Letzter Beitrag: 12.11.2006, 16:40

Berechtigungen

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

Labornetzteil AliExpress