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...
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 !
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.
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?
Geändert von HeSt (02.02.2019 um 07:52 Uhr)
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:
2.Code:in Register , SREG PUSH Register Prgrammcode POP REGISTERWenn du den ADC jedesmal nach der Wandlung deaktivierst:Code:WADC: ;Schleife bis Messung sbic ADCSRA,ADSC ;abgeschlossen = ADSC=0 rjmp wadc cbi ADCSRA,ADEN ;ADC ausschalten out SREG,savr pop savr ret
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
Wenn man dann in den Sleep wechseln will wird vor dem Sleep der ADC deaktiviert und nach dem Sleep neu initalisiert.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
3. Wann wird denn ein Key gepresst ?
Lass die Routine komplett durchlaufen und mach die Keyabfrage ausserhalb dieser Routine (Wahrscheinlich auch beabsichtigt)Code:rjmp bri ;loop until any key pressed
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!
Verbesserungsvorschlag:Code:rjmp pc-1
Ein weiterer Hinweis betrifft: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
Was keinerlei Nährwert hat und kann komplett in allen Routinen entfernt werden.Code:push savr in savr,SREG . . . . out SREG,savr pop savr
Hi,
DANKE, dass du dir die Mühe gemacht hast, das Progrämmchen durchzusehen!
Das Register ersparst du dir nicht, man braucht es sowieso in den ISRs.
Deinen Vorschlag zur Sicherung nehme ich an.
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?
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 15:51 Uhr)
Lesezeichen