- 12V Akku mit 280 Ah bauen         
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 Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Deine Zeitverzögerungen habe ich mal versucht anhand des Datenblatts nachzurechnen:

    Vorab:
    Die CPU arbeitet intern (startet) mit einem 8 MHz Clock, dieser wird standardmäßig durch 8 geteilt,
    somit bleibt ein Clock von 1 MHz bestehen.
    Durch die "single pipeline" Struktur benötigen die meisten der Befehle dann auch entsprechend nur 1 Mikrosekunde.

    Nehme ich jetzt mal deine Wartefunktion LCD_DLYL die 46ms dauern soll:

    Es wird der Wert Hex 0xDAE0 dezimal 56032 ins X register geladen und in der Schleife kontinuierlich runtergezählt.
    sbiw XH_XL,1 benötigt 2 Zyklen
    brne ldl1 benötigt 2 Zyklen ausser beim letzten Durchlauf, dann nur einen.

    Das sind also 56032 mal 4 Zyklen = 224128-1


    nun kommen noch die anderen Befehle dazu
    2 push XH
    2 push XL
    2 ldi
    2 ldi
    2 pop
    2 pop
    3 ret
    3 der Aufruf der Funktion mit rcall
    Also insgesamt 18 Zyklen

    Das sind dann 224127+18 = 224145 also 224,145 Millisekunden
    Bei 8 MHz wären es 28,0018125 Millisekunden

    Jetzt können wir rückwärts rechnen welchen Wert wir wirklich brauchen für 46 ms
    46000 - 18 = 45982

    geteilt durch 4 für die innere Schleife
    jedoch vorher noch einen abziehen
    45981 / 4 = 11495,25

    somit müste der Wert für das Laden des X Registers 11495 dezimal bzw. 0x2CE7 sein.

    -----
    Für die 2ms Sekunden wäre es dann
    20000-18-1=19981 / 4 = 4994,25 also 49995 bzw. Hexadezimal 0x1383

    ----
    Ich habe auf meinem Rechner nichts mit Atmel drauf,
    aber das kann sicher mal jemand überprüfen mit dem Simulator.

    Siro

    Dies löst zwar nicht dein Problem, aber das Timing der Wartefunktionen sollte damit stimmen, sofern ich nix falsch gemacht habe...


    Dein WAIT_KEY: hat aber ein Problem:
    Du fragst den Pin ab und dann wird die entsprechende Funktion danach ausgeführt.
    Das geht aber SOOOO schnell, das bei der nächsten WAIT_KEY die Taste noch garnicht losgelassen wurde
    und somit wartet er garnicht mehr und führt die nächste Funktion sofort aus.
    Thema Tastenentprellung.
    So kommt leider immer ein Problem zum nächsten. Aber der Ansatz ist doch schonmal gut.
    Bau mal einfach in die WaitKey eine lange Schleife rein bzw. rufe dort nur deine LCD_DLY funktion auf, unabhängig ob Taste gedrueckt ist.
    und versuche es erneut.

    Könnte es auch sein, dass der Watchdog zuschlägt ?
    Das WDE Bit im Register WDTCSR mus auf 0 gesetzt sein.
    Laut Datenblatt ist es undefiniert ??, hab ich aber auch noch nicht verstanden wie das geht.....
    Geändert von Siro (02.01.2019 um 14:28 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    175
    Gut dein LCD zeigt nen Balken an, ohne Init, also ist erstmal die Versorgung i.O..
    Kontrast mal ganz auf Anschlag gedreht ?

    Ebenso ein Bild vom Aufbau oder Stromlaufplan, ich sag mal so ich sehe nichts... Und das LCD heißt auch wirklich 1602 ?
    Hast du deine Programmierhwardware mal abgezogen von dem ISP Sockel?
    RESET ist wie bescaltet ?

    Nur mal so:
    die Datenleitung sind zufälliger Weise nicht irgendwie vertauscht mit DB0-DB3 ?
    Oder
    DB04 = PA07
    Db05 = PA06
    DB06 = PA05
    DB07 = PA04

    Der RW-Pin liegt auf Masse und auch mit RS oder Enable nicht vertauscht ?
    Oder Masse/Plusschluss eines Pins ?

    Ebenso mal die Frage was ist von den Bits am Controller eingestellt ?


    Mit dem Wait_Key, wenn dein Taster nicht entprellt per Hardware oder nach der Tasterabfrage keine >150ms Wartezeit drin sind, LASS ES!

    Den weiteren Text hab ich vernommen aber das führt uns erstmal nicht weiter und sind viel Schönheitsdinge....

    Wie sieht denn dein aktueller Code aus ?

    Zitat Zitat von Siro Beitrag anzeigen
    Könnte es auch sein, dass der Watchdog zuschlägt ?
    Das WDE Bit im Register WDTCSR mus auf 0 gesetzt sein.
    Laut Datenblatt ist es undefiniert ??, hab ich aber auch noch nicht verstanden wie das geht.....
    Wenn der nicht aktiviert ist passiert auch erstmal nichts !
    Angehängte Dateien Angehängte Dateien
    Geändert von avr_racer (02.01.2019 um 15:47 Uhr)

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    @ Siro,
    Für die Zeiten hab ich mir vor Jahren eine Excel-Tabelle erstellt mit der ich die Zeiten errechne.
    Bislang hat das noch immer (annähernd) gestimmt (diverse Laufzeiten nicht berücksichtigt) und alle Anwendungen funktionieren damit. Allerdings hab ich noch keine Schleifen mit Doppelregistern realisiert. Vielleicht gibt es da einen größeren Unterschied.

    Was die Tastensache betrifft, so sehe ich meine Routine als abgesichert.
    Denn:
    WAIT_KEY:
    in XL,key_pin ;solange eine Taste gedrückt ist, geht's
    cpi XL,0 ;nicht weiter. Somit kann kein versehentlicher
    brne wait_key ;"Durchlauf" passieren. Erst nach dem Loslassen
    ;gehts weiter und ...

    WK1:
    in XL,key_pin
    ;... steht dann hier an, bis wieder eine Taste
    cpi XL,0 ;gedrückt wurde.
    breq wk1
    ret


    Somit gehts nur Schritt für Schritt von Befehl zu Befehl.

    Zum Thema "watchdog":
    Ich hab noch nie ein watchdog-Bit bewusst gesetzt. Weder 0 noch 1. Und es gab noch nie Probleme deshalb.

    @ avr_racer,
    die Sache mit den ISP-Pins wäre mir neu!
    Bei allen meinen Projekten habe ich auch die ISP-Pins verwendet.
    Teils auch für ISP. Und ich hatte noch nie Probleme damit.
    Das einzige was Zores macht ist JTAG (M16). Das gibts beim T24 aber nicht.

    Zitat Zitat von avr_racer Beitrag anzeigen
    Gut dein LCD zeigt nen Balken an, ohne Init, also ist erstmal die Versorgung i.O..
    Kontrast mal ganz auf Anschlag gedreht ?
    Ja, 1. Zeile bleibt leer bzw. ohne Blöcke.
    Zitat Zitat von avr_racer Beitrag anzeigen
    Ebenso ein Bild vom Aufbau oder Stromlaufplan, ich sag mal so ich sehe nichts... Und das LCD heißt auch wirklich 1602 ?
    Hast du deine Programmierhwardware mal abgezogen von dem ISP Sockel?
    RESET ist wie bescaltet ?
    Morgen mach ich ein Bild vom Aufbau zum besseren Verständnis.
    es ist eine kleine Steckplatine ohne ISP und "reset" ist nicht beschaltet.
    Zitat Zitat von avr_racer Beitrag anzeigen
    Nur mal so:
    die Datenleitung sind zufälliger Weise nicht irgendwie vertauscht mit DB0-DB3 ?
    Oder
    DB04 = PA07
    Db05 = PA06
    DB06 = PA05
    DB07 = PA04
    Auch aus Angst was versehentlich vertausch zu haben - x-mal geprüft = ok.
    Zitat Zitat von avr_racer Beitrag anzeigen
    Der RW-Pin liegt auf Masse und auch mit RS oder Enable nicht vertauscht ?
    Oder Masse/Plusschluss eines Pins ?
    Nichts vertauscht und RW ist offen.
    Zitat Zitat von avr_racer Beitrag anzeigen
    Ebenso mal die Frage was ist von den Bits am Controller eingestellt ?
    Welche sollten das sein??
    Da wurde nichts eingestellt, keine Fuses geändert oder dergleichen.
    Zitat Zitat von avr_racer Beitrag anzeigen
    Wie sieht denn dein aktueller Code aus ?
    Siehe Anhang letzter post.

    [edit]
    Werde morgen noch RW auf GND setzen.
    Ob's was bringt?
    [endedit]
    Geändert von HeSt (02.01.2019 um 19:29 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Digitale Eingänge sollten immer beschalten sein, teilweise müssen diese auch Beschalten sein (entweder mit Widerständen oder direkt). Wenn die Pins als Ein- und Ausgang verwendet wird muss ein Widerstand verwendet werden.

    Der Reset sollte auch beschalten sein (mindestens ein Pullup-Widerstand). Ohne Widerstand kann es funktionieren, muss aber nicht. Hast du auch eine Led o.Ä. angeschlossen die du zum Testen verwenden kannst? So könntest du feststellen ob Resets auftreten bzw ob das Programm überhaupt läuft.

    MfG Hannes

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Wenn ein Pin nicht beschaltet ist, dann zieht ein interner Pullup im Prozessor den Pin nach High, sofern er als Eingang configuriert wurde.
    Der R/W Pin vom Display muss auf Low sonst steht das Display immer auf Read Mode. Ich weis nicht ob die einen Pullup haben,
    ein Pulldown vermutlich aber nicht. Ich mess das mal bei meinem....

    Mein R/W Pin am Display liegt ohne Beschaltung auf High. Das würde demnach dann nicht funktionieren.

    Ich hoffe, Du hast nicht mein Display erwischt, das verleitet regelrecht dazu es falsch anzuschliessen,
    das ist mir nämlich auch passiert....Man beachte die Zählweise der Pins....
    Klicke auf die Grafik für eine größere Ansicht

Name:	LCD-Pinbelegung.jpg
Hits:	5
Größe:	8,8 KB
ID:	33909
    Geändert von Siro (03.01.2019 um 08:09 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Standardmäßig sind bei den AVRs (zumindest die ich kenne) die Ports als Eingang ohne Pullup-Widerstand konfiguriert. Den Pullup schaltet man ein wenn man ins Portregister schreibt (den jeweiligen Pin auf 1 setzen).

    MfG Hannes

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Erst muss ich mich für eine Fehlmeldung entschuldigen,
    denn beim Umbau von µC auf absolut händisch ist mir bewusst
    geworden, dass ich das LCD verkehrt rum "gesehen" hab.
    Weil ich das LCD so im Board hab, dass die Anschlüsse unten
    sind und nicht oben. Zeile 1 ist bei den Anschlüssen.
    Somit hat die Zeile 1 die Blöcke und nicht Zeile 2!
    Zeile 2 ist leer.
    DIE LCD-ANSCHLÜSSE WAREN/SIND IMMER RICHTIG BESCHALTEN!!
    Hab nur die Zeilen vertauscht gesehen!

    Aufbau mit T24:
    Hab RS + R/W gegroundet.
    Resultat: keine Änderung.

    Pullup hin, pullup her ....

    Aufbau manuell:
    Nun hab ich statt dem µC ein Mäuseklavier installiert und
    die entsprechenden commands darüber eingegeben.
    RS + RW immer auf GND - also nur Befehle.
    EN mit 4,7k gegen GND.
    Per Taste + auf EN, bei Loslassen - über R.
    CMD-Abfolge (x = per Taste EN > +/-):
    $30 3x
    $20 1x noch im 8-Bit Mode (4-Bit-Mode)
    $28 2x erst 2 dann 8 (4-Bit, 2 Zeilen, 5x7)
    $0F 2x erst 0 dann F (DSP on, Cursor on blink)
    $06 2x erst 0 dann 6 (DSP fest, C autoincr)
    $01 2x erst 0 dann 1 (clr DSP, C > home)
    Pegel/V-levels an den Anschlüssen mit V-Meter kontrolliert - ok.
    Somit sollte der Zeitfaktor (Warteschleifen zu kurz) eliminiert sein.
    Oder "vergisst" das LCD nach gewisser Zeit, welche Befehle es schon erhalten hat!?

    Resultat: keine Änderung ggü. µC oder keiner Beschaltung.
    Es tut sich ggü. dem Status nach dem Spannung anlegen einfach ...
    NICHTS, GAR NICHTS am LCD!!!
    Die Blöcke bleiben unverändert und keine weitere Reaktion.

    Bin ratlos ... Was nun?
    Doch LCD defekt??

    Und damit ihr euch den Testaufbau vorstellen könnt, die Fotos dazu.

    Werde morgen noch DB4-DB7 mit R gegen GND hängen.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 1602_T24.jpg   1602_MK.jpg   1602_BL.jpg   1602_Pin.jpg  
    Geändert von HeSt (03.01.2019 um 15:54 Uhr)

Ä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
  •  

LiFePO4 Speicher Test