-         
Seite 15 von 18 ErsteErste ... 51314151617 ... LetzteLetzte
Ergebnis 141 bis 150 von 173

Thema: Portbelegung auf ATMega für LCD1602

  1. #141
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    122
    Anzeige

    Bin wieder da ...

    Frage:
    Wie schalte ich ein LCD aus/ab, damit es keinen Strom mehr zieht - also nichts mehr verbraucht???

    Der Grund - eine etwas kuriose Sache:
    Ich hab ein Labornetzgerät, das ich zum Testen auf 5V und 65mA eingestellt hab.
    Ich möchte das LCD nur dann in Betrieb haben, wenn ich Werte/Parameter anzeigen oder ändern, oder des Solarpanel manuell steuern will.
    Schalte ich VDD (+) ab (gegen -), geht die Spannung etwas in die Knie = die Schaltung zieht mehr Strom.
    Lege ich VDD oder VSS "floating" (also nirgendwo angeschlossen), bleibt zwar die Spannung stabil, dafür bleibt die Anzeige am LCD aktiv, wenn auch ein bisschen schwächer.

    Der Suntracker wird an einem Akku betrieben.
    Der Akku wird zwar bei genügend Sonnenenergie immer wieder geladen, aber trotzdem möchte ich den Stromverbrauch so gering wie möglich halten.
    Die Schaltung wird zudem nachts oder bei zu wenig Sonnenenergie schlafen gelegt.

    Sonst schaut's einstweilen gut aus

    [edit]
    Rätsel gelöst!
    Solange am Datenport des LCD irgend ein Bit ein ist (=+):
    1. Wenn VDD (+) gegen VSS (-) geschaltet wird, fließt offenbar über den Datenport Strom.
    Deshalb auch der Spannungseinbruch (Sicherheitsschaltung des Labornetzgerätes).
    2. Wenn VDD (+) oder VSS (-) "floating" sind, bekommt das LCD über den Datenport noch genug Strom um die Anzeige (schwächer) aufrecht zu erhalten.
    Lösung:
    Alle Bits des Datenport auf aus (-) setzen, dann VDD auf aus (-) und alles ist gut
    [endedit]
    Geändert von HeSt (29.01.2019 um 09:01 Uhr)

  2. #142
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    165
    Hey hallo,

    Es gibt ein extra Befehl was das LCD bzw nur die Anzeige selbst ausschaltet. Muss dann aber trotzdem mit Spannung versorgt werden.

    Wenn du das LCD komplett spannungslos machst, muss es auch neu initalisiert werden.

    Spanung anlegen an ein Bauteil was in der Versorgungsspannung weggeschaltet ist, sollte man tunlichst vermeiden aussser das DB erlaubt es.

  3. #143
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    122
    Zitat Zitat von avr_racer Beitrag anzeigen
    Es gibt ein extra Befehl was das LCD bzw nur die Anzeige selbst ausschaltet. Muss dann aber trotzdem mit Spannung versorgt werden.
    Ja, ich weiß. Mach ich auch bevor ich das LCD stromlos setze.
    Zitat Zitat von avr_racer Beitrag anzeigen
    Wenn du das LCD komplett spannungslos machst, muss es auch neu initalisiert werden.
    Ist auch klar.
    Zitat Zitat von avr_racer Beitrag anzeigen
    Spannung anlegen an ein Bauteil was in der Versorgungsspannung weggeschaltet ist, sollte man tunlichst vermeiden ausser das DB erlaubt es.
    Nun, das weiß ich nicht. Aber warum sollte es ein Problem sein, wenn man das LCD von der Versorgungsspannung kappt??
    Es funktioniert jedenfalls einwandfrei.

  4. #144
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    165
    Okay war mir nicht sicher dir es bewusst war/ist...

    LCD ausschalten per Befehl und nicht stromlos schalten Verbrauch wenige µA....
    LCD bleibt eingeschaltet Strom ca. max. 3mA ohne LED-Beleuchtung.

    Einige Pins/IC mögen eben die Kriechstöme nicht die an den Pins wirken wenn die UB fehlt. Je nach Schaltungsart können diese Kriechströme Umwege über die +Rail nehmen und somit weitere Teile des IC versorgen womit dieser aber nicht richtig funktioniert...

  5. #145
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.754
    Zitat Zitat von avr_racer Beitrag anzeigen
    Einige Pins/IC mögen eben die Kriechstöme nicht die an den Pins wirken wenn die UB fehlt. Je nach Schaltungsart können diese Kriechströme Umwege über die +Rail nehmen und somit weitere Teile des IC versorgen womit dieser aber nicht richtig funktioniert...
    Nun, es sind keine "Kriechströme", es ist der Strom durch die Substratdioden. Diese entstehen bei der Herstellung des Chips und werden vom Marketing gerne als ESD-Schutzdioden verkauft. In manchen Datenblättern ist ein Diagramm einer typischen I/O-Struktur, da sind sie eingezeichnet. Deswegen findet man vielfach auch die Angabe, daß die Spannung an einem I/O Pin nicht größer als die Versorgung + 0,5V oder nicht kleiner als GND - 0,5V sein darf, damit diese Dioden nicht anfangen zu leiten. Ist dann auch noch ein Abblockkondensator am Chip, bildet das einen Halbbrückengleichrichter, der selbst aus wechselden Signalen eine unzuverlässige Versorgung erzeugt. I/O Pins ohne diese Dioden sind schwerer (teurer) herzustellen und werden daher extra beworben, z.B. mit "over the rail".

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  6. #146
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    122
    Ok, danke für die Erklärungen!
    Da ich alle Pins des LCD-Ports am µC für und somit auch die des LCDs auf GND lege, sollte es zu keinen der oben beschriebenen Problemen kommen.

  7. #147
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    122
    So, ein Problem, das ich seit Tagen zu klären versuche ...
    Ich komm nicht dahinter
    Deshalb bitte ich um eure Hilfe.

    Das angehängte Progrämmchen ist ein Auszug aus meinem SunTracker Projekt.
    Es soll in einer Schleife die Spannungen am LCD anzeigen und aktuell halten.
    Angezeigt wird in der zweiten Zeile links der 8-Bit ADCH-Wert im ADLAR-Modus und
    rechts der umgerechnete Wert im 10-Bit Modus in Volt (Basis: 15V = 1024).
    Funktioniert super, ABER NUR DANN , wenn die in der Routine DSPVALS die zwischen den beiden ;???? Zeilen stehenden Befehle aktiv sind.

    Werden die Befehle für die Anzeige im 8-Bit Modus deaktiviert, funktioniert die 10-Bit Anzeige/Umrechnung nicht mehr.
    Beim ersten Durchlauf wird zwar die richtige Spannung angezeigt, aber nicht mehr aktualisiert. Die Schleife läuft zwar, aber warum vom ADC nichts mehr kommt oder woran es sonst liegt ????????????

    Poti auf ADC7 hängen oder welchen ihr auch immer testen wollt/könnt.

    Kann mir da jemand weiter helfen?
    Angehängte Dateien Angehängte Dateien
    Geändert von HeSt (02.02.2019 um 08:52 Uhr)

  8. #148
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    165
    Hallo,

    1. Warum erst SAVR pushen und dann das SREG sichern in einer normalen Unterroutine ? Register SAVR dient der bloßen Sicherung was der Stack genauso machen könnte und man so wieder ein Register frei hätte falls benötigt.
    Sonst nur notwendig wenn man mit Interrupts arbeitet und z.B. Rechenoperatonen durchführt dann muss/sollte das SREG in der ISR gesichert werden wie folgt:
    Code:
    in      Register , SREG
    PUSH Register
    Prgrammcode
    POP   REGISTER
    2.
    Code:
     WADC:                ;Schleife bis Messung
        sbic    ADCSRA,ADSC    ;abgeschlossen = ADSC=0
        rjmp    wadc
        cbi    ADCSRA,ADEN    ;ADC ausschalten
        out    SREG,savr
        pop    savr
        ret
    Wenn du den ADC jedesmal nach der Wandlung deaktivierst:
    1. braucht der ADC jedesmal bei der ersten Wandlung 25 Zyklen alle weiteren ca 13 Zyklen
    2. das erste Ergebniss ist meist Müll
    3. Die Wandlungsgeschwindigkeit sollte zwischen 50kHz - 200kHz betragen, bei dir ist es 7812,5Hz
    4. Erst alles einstellen und dann ADEN auf 1 setzen ist ungünstig da Spannungsreferenz und Kannalum/einstellung nicht angenommen werden!!!!

    Also richtig
    Code:
    ADC_Init: 
    1. ADEN setzen
    2. Kanal auf GND setzen
    3. Referenz einstellen
    4. Testwandlung starten, auslesen, Ergebniss verwerfen
    ret
    
    WADC:
    1. Kanal GND auf Kanal X setzen
    2. Wandlung anstoßen
    3. Wandlungszeit warten
    4. Ergebnis auslesen
    (5. Kanal X auf Kanal GND setzen aber kein muss)
    ret
    Wenn man dann in den Sleep wechseln will wird vor dem Sleep der ADC deaktiviert und nach dem Sleep neu initalisiert.

    3. Wann wird denn ein Key gepresst ?
    Code:
    rjmp    bri        ;loop until any key pressed
    Lass die Routine komplett durchlaufen und mach die Keyabfrage ausserhalb dieser Routine (Wahrscheinlich auch beabsichtigt)
    Ebenso bau dir mal eine Zeitverzögerung ein sonst springen deine Werte auf dem LCD zu stark.

    4. Vorsichtig mit irgenwelchen Sprungadressen dieser Art mit dem jetzigen Wissensstand!
    Code:
    rjmp    pc-1
    Verbesserungsvorschlag:

    Code:
    Init:
    1. STACK
    2. Power
    3. PORTS
    4. ADC_INIT (ADEN = 1, REF = 5V, Chanel = 11111, Testwandlung
    5. LCD_ON
    
    Hauptprogramm:
    0. 150ms warten
    1. Pinabfrage(SBIS/SBIC ?) wenn Bedingung erfüllt Sprung zu 2. sonst 3.
    2. dspvals
    3. rjmp Hauptprogramm
    
    dspvals:
    dein Programm
    ret
    Ein weiterer Hinweis betrifft:
    Code:
    push    savr
    in    savr,SREG
    .
    .
    .
    .
    out    SREG,savr
    pop    savr
    Was keinerlei Nährwert hat und kann komplett in allen Routinen entfernt werden.

  9. #149
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    122
    Hi,
    DANKE, dass du dir die Mühe gemacht hast, das Progrämmchen durchzusehen!
    Zitat Zitat von avr_racer Beitrag anzeigen
    1. Warum erst SAVR pushen und dann das SREG sichern in einer normalen Unterroutine ? Register SAVR dient der bloßen Sicherung was der Stack genauso machen könnte und man so wieder ein Register frei hätte falls benötigt.
    Das Register ersparst du dir nicht, man braucht es sowieso in den ISRs.
    Deinen Vorschlag zur Sicherung nehme ich an.
    Zitat Zitat von avr_racer Beitrag anzeigen
    Wenn du den ADC jedesmal nach der Wandlung deaktivierst:
    1. braucht der ADC jedesmal bei der ersten Wandlung 25 Zyklen alle weiteren ca 13 Zyklen
    2. das erste Ergebniss ist meist Müll
    3. Die Wandlungsgeschwindigkeit sollte zwischen 50kHz - 200kHz betragen, bei dir ist es 7812,5Hz
    4. Erst alles einstellen und dann ADEN auf 1 setzen ist ungünstig da Spannungsreferenz und Kannalum/einstellung nicht angenommen werden!!!!
    Gut. Verstanden.
    Allerdings hab ich nirgendwo im Datenblatt gelesen, dass die erste Messung Müll ist (beim Tiny13 wird z.B. dezidiert darauf hingewiesen). Zudem ist es zumindest bei dieser Routine egal, weil sowieso laufend gemessen und nur angezeigt wird.
    Zu 3. An der Wandlungsgeschwindigkeit kann es nicht liegen. Sie ändert sich nicht, ob nur eine Wandlung oder beide erfolgen (8Bit+10Bit). Bei beiden funktioniert es ja und die 8Bit alleine auch. Weiter runter drehen kann man nicht. /128 ist der größte Teiler!
    Was meinst du bei 4. mit "erst alles einstellen"?
    Wie soll ich den Kanal auf GND setzen, wenn da Dauerspannung anliegt?
    Zitat Zitat von avr_racer Beitrag anzeigen
    3. Wann wird denn ein Key gepresst ?
    In dieser Testroutine gar nicht. Wird im Gesamtprogramm abgefragt. Der Kommentar ist beim Kopieren mitgegangen ...

    Werd deine Vorschläge einbauen. Mal sehen, wie weit sie Wirkung zeigen.
    Komm allerdings erst in 10 Tagen dazu ...
    Geändert von HeSt (02.02.2019 um 16:51 Uhr)

  10. #150
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    165
    Zitat Zitat von HeSt Beitrag anzeigen
    Das Register ersparst du dir nicht, man braucht es sowieso in den ISRs.
    Doch meistens schon bzw du kannst es doppelt nutzen einmal ausserhalb der ISR und innerhalb der ISR. Frage hast du denn im Originalcode ISR in der Benutzung?

    Zitat Zitat von HeSt Beitrag anzeigen
    Allerdings hab ich nirgendwo im Datenblatt gelesen, dass die erste Messung Müll ist (beim Tiny13 wird z.B. dezidiert darauf hingewiesen). Zudem ist es zumindest bei dieser Routine egal, weil sowieso laufend gemessen und nur angezeigt wird.
    Ja eben nicht wenn du nach der Wandlung sofort den ADEN = 0 setzt danach passiert mit dem ADC gor nix mehr der ist AUS.

    Zitat Zitat von HeSt Beitrag anzeigen
    Zu 3. An der Wandlungsgeschwindigkeit kann es nicht liegen. Sie ändert sich nicht, ob nur eine Wandlung oder beide erfolgen (8Bit+10Bit). Bei beiden funktioniert es ja und die 8Bit alleine auch. Weiter runter drehen kann man nicht. /128 ist der größte Teiler!
    Naja du undersamplest eben deshalb soll ja diese Sample/Abtastfreweunz bei 50kHz bis 200kHz liegen damit der Hold-Kondensator nicht zu stark belastet wird. Und zum Ende der Wandlung das Ergebnis verfälschen kann.

    Zitat Zitat von HeSt Beitrag anzeigen
    Was meinst du bei 4. mit "erst alles einstellen"?
    Wie soll ich den Kanal auf GND setzen, wenn da Dauerspannung anliegt?
    Wenn du schläfst kannst du denn Daten aufnehmen also aktiv lernen ? (Der Mensch kanns schon nur die Digitaltechnik nicht wenn was ausgeschaltet wurde) oder anders kannst du was auf CD schreiben wenn der Motor abgeschaltet wird der die CD bewegt ?
    Im AVR ist nur EIN Wandler enthalten der durch umschalten der Eingänge auf die verschiedenen Pins zwischen verschiedenen Spannungen messen kann oder eben auf Kanal GND/Bandgabspannung wird der Eingang des Wandlers gelegt.
    Hoffe du nimmst es mir nicht übel wenn ich meine das auch hier wieder Grundlagen zum ADC im AVR fehlen...

    Zitat Zitat von HeSt Beitrag anzeigen
    In dieser Testroutine gar nicht. Wird im Gesamtprogramm abgefragt. Der Kommentar ist beim Kopieren mitgegangen ...

    Werd deine Vorschläge einbauen. Mal sehen, wie weit sie Wirkung zeigen.
    Komm allerdings erst in 10 Tagen dazu ...
    Noch ein Hinweis dein Text ist im Moment ein mix aus Spagehtticode und halbsinnvoller Routinen, zumindest könnte man noch weitere Teile in Unterroutinen auslagern um so die "mittleren Routinen" lesbarer zu gestalten...

Seite 15 von 18 ErsteErste ... 51314151617 ... LetzteLetzte

Ä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, 12:18
  2. CCPRO M128: Portbelegung
    Von Dirk im Forum Robby RP6
    Antworten: 0
    Letzter Beitrag: 22.05.2009, 23:26
  3. Portbelegung bei diesem Display [erledigt]
    Von Rob.Anfänger im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 18.11.2006, 19:12
  4. Portbelegung ATmega32
    Von Rob.Anfänger im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 15.11.2006, 20:59
  5. Antworten: 4
    Letzter Beitrag: 12.11.2006, 17:40

Berechtigungen

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