Hallo zusammen, ich habe ein kleines batteriebetriebenes Projekt, und zwar einen Datenlogger, der regelmäßig zwei Temperatursensoren (DS1820) ausliest und deren Temperatur samt Timestamp in einer CSV-Datei auf einer SD-Karte speichert. Das SD-Karten-Modul ist ein vorgefertigtes mit Tristates zum ein- und ausschalten. Mein Problem ist aber das Ein- bzw. Ausschalten des Displays. Ich habe festgestellt, dass bei der aktuellen Beschaltung, nachdem LCD-ON auf 0 geschaltet wurde, der Text noch lesbar ist, wenn man den Kontrast entsprechend einstellt. Meine Vermutung ist also, dass irgendwo noch ungewollt Strom fließt. Kann es daran liegen, dass ich die Transistoren an die GND Seite und nicht an die 5V Seite gesetzt habe? Oder ist es weil die Datenleitungen einen anderen Spannungsbereich haben als die Stromversorgung? Dummerweise ist die Hardware schon gelötet und ich komme jetzt nur noch schwer dran. Wird es helfen, wenn ich R/W und D0 bis D3 auch an den Kollektor anschließe, damit sie keinen Kontakt mehr zu GND haben, wenn der Transistor dicht macht? Ich würde am Aufbau nur ungern größere Änderungen machen... Da man den Text bei normalen Kontrasteinstellungen so gut wie nicht sieht ist meine andere Frage, ob man es vielleicht einfach dabei belassen kann, bzw. was das längere "ausgeschaltetsein" für Auswirkungen auf das Display haben kann. Danke schonmal und liebe Grüße Swen
Hallo, wenn du GND abschaltest, dann musst du am µC alle Daten-/Steuerleitungen auf High schalten oder als Eingang konfigurieren. Kannst auch +5V abschalten, dann eben die Signale auf Low. Den Transistor zum abschalten kannst du Dir warscheinlich sparen bei den paar mA die das Display braucht. Sascha
Gast
#3117473
Tja, da muss man sich mögliche Strompfade überlegen: D0...D3 liegen an GND. Die haben bestimmt Schutzdioden, mit denen sich ungewollte Pfade gegen Masse ergeben. Nachdem alle Datenleitungen µC -> LCD beim µC auf Eingang gesetzt sind, kann man einen p-FET in der +5 V Speiseleitung zum LCD und zum Backlight abschalten. Dann fließt nichts mehr durch den Kontrast-Spannungsteiler. - Und auch nichts mehr durch die Schutzdioden an den Eingangs-Pins des Displays.
Bei sämtlichen Displays (zumindest die in meiner Sammlung) sind die Backlight-Anschlüsse elektrisch komplett separat vom Display herausgeführt, kann also auch separat betrachtet und geschaltet werden. Bleibt das Display selbst: HD44780-basierte Displays ziehen so 1 - 5 mA, da ist eine Versorgung direkt aus einem Portpin kein Problem, die meisten Controller, z.B. AVR, haben ein paar 20mA-fähige Portpins. Das Display einfach daraus versorgen. Der Transistor ist unnötig. 0V vom Display an GND, +5V-Anschluß vom Display an den Portpin. Einschalten: Alle Portpins auf 0V. Versorgungsportpin auf 5V schalten, die im Datenblatt vom Display angegebene Mindestwartezeit abwarten, dann normal initialisieren. Und zwar jedesmal nach dem Einschalten des Displays. Ausschalten: Alle Displayportpins einschließlich dem Versorgungspin gleichzeitig auf 0V setzen. Die Eingänge des Display-Kontrollers sind mit Dioden geschützt, deshalb müssen alle Pins auf 0V, bei 5V auf einer der Steuer- oder Datenleitungen würde bei abgeschalteter Versorgung der Display-Kontroller über die Schutzdioden versorgt, die machen das nicht unbedingt mit. Bei Displays, die eine negative Kontrastspannung benötigen, ist dieser Wandler mit abzuschalten. Gruß Jadeclaw.
Gast
#3117580
moin moin, man kann das LCD auch per Befehl on/off schalten siehe P.5 of 17 4ter Befehl.
Gast
#3117588
Swen Wenzel schrieb: > ich habe ein kleines batteriebetriebenes Projekt es ging aber darum, das Display stromlos zu schalten, um Energie zu sparen...
chris schrieb: > moin moin, > > man kann das LCD auch per Befehl on/off schalten siehe P.5 of 17 4ter > Befehl. sicher, dann zeigt es zwar nichts mehr an, aber der Stromverbrauch verringert sich nicht so weit wie man sich das für Batteriebetrieb wünschen würde. Sascha
Danke für die schnellen Antworten :) Jadeclaw Dinosaur schrieb: > 0V vom Display an GND, +5V-Anschluß vom Display an den Portpin. Gesagt, getan. Was mache ich mit den +5V vom Poti? Hab sie jetzt mal mit an den Portpin geschaltet. Scheint zu funktionieren. Der Text kam immer dann zum Vorschein, wenn ich den Abgreifer vom Poti richtung GND bewegt habe, und jetzt ist die Kontrastspannung nach dem Abschalten ja genau GND und es wird nix mehr angezeigt. Nun muss ich nur noch dieses garstige Modul komplett abschalten können, aber da frage ich mal den Support vom Hersteller. Mal was anderes. Wenn ich mir so die Diagramme mit Taktrate und Stromverbrauch vom atm168 anschaue, kommt es mir so vor, als würde ich bei hoher Taktung mehr Takte pro mAs bekommen als bei niedriger. Macht es also Sinn, den Controller auf 20Mhz zu takten oder hab ich mich da verrechnet? Während der Benutzereingabe braucht er dann zwar sicher mehr Strom, aber das ist ja nur ganz selten und nicht so lange. Er wäre dann halt beim loggen schneller und das Verhältnis active/pwrsave wäre kleiner.
Gast
#3118049
Swen Wenzel schrieb: > Wird es helfen, wenn ich R/W und D0 bis D3 auch an den Kollektor > anschließe, damit sie keinen Kontakt mehr zu GND haben, wenn der > Transistor dicht macht? Ja, es würde aber auch schon helfen die Pins offen zu lassen oder gegen +5V zu legen. Das Display hat intern Pull-up-Widerstände an den Datenleitungen. Pro Pin fließen ca 33uA wenn man sie an 0V anschließt. Swen Wenzel schrieb: > es also Sinn, den Controller auf 20Mhz zu takten In der Regel: nein. Gruß Anja
Swen Wenzel schrieb: > Jadeclaw Dinosaur schrieb: >> 0V vom Display an GND, +5V-Anschluß vom Display an den Portpin. > Gesagt, getan. > Was mache ich mit den +5V vom Poti? Hab sie jetzt mal mit an den Portpin > geschaltet. Das ist korrekt so. Alle Anschlüsse müssen stromlos, d.h. auf 0V(GND) liegen, wenn das Display abgeschaltet wird. Gruß Jadeclaw.
Sascha Weber schrieb: > chris schrieb: >> moin moin, >> >> man kann das LCD auch per Befehl on/off schalten siehe P.5 of 17 4ter >> Befehl. > sicher, dann zeigt es zwar nichts mehr an, aber der Stromverbrauch > verringert sich nicht so weit wie man sich das für Batteriebetrieb > wünschen würde. > > Sascha Richtig erkannt, da veringert sich nichts. Und ist das Display größer als 1 x 16 oder 2 x 8 Zeichen, dann kommen zusätzliche Treiber (HD44100) dazu, die laufen ebenfalls weiter. Ergo ist Saft weg und alle Anschlüsse auf 0V die beste Lösung. Gruß Jadeclaw.
Anja schrieb: > Swen Wenzel schrieb: >> es also Sinn, den Controller auf 20Mhz zu takten > In der Regel: nein. Warum nicht?
Gast
#3119440
Swen Wenzel schrieb: > Warum nicht? Soll er denn so die ganze Zeit laufen?
Swen Wenzel schrieb: > Anja schrieb: > >> Swen Wenzel schrieb: >>> es also Sinn, den Controller auf 20Mhz zu takten >> In der Regel: nein. > > Warum nicht? Weil es sich nicht lohnt. Es gibt nur 2 Fälle, wo 20MHz angesagt sind: Mathematik, z.B. Grafikberechnung, sowie Zähleranwendung. Der Grund hier: Die controllerinternen Zähler sind nur bis zum Halben des CPU-Taktes nutzbar. Einen separaten taktunabhängigen Prescaler wie bei den PIC-Controllern gibt es hier nicht, bei 20MHz-Takt ist deshalb bei 10MHz Schluß. Bei anderen Anwendungen ist es wohl eher sinnvoller, erstmal den Programmcode zu optimieren, bevor man den Takt hochschraubt. Gruß Jadeclaw
Gast
#3119774
Erläutere doch mal wie du dir das ganze Energiesparkonzept vorgestellt hast, da können wir bestimmt noch einiges optimieren ;)
Eumel schrieb: > Erläutere doch mal wie du dir das ganze Energiesparkonzept vorgestellt > hast, da können wir bestimmt noch einiges optimieren ;) Naja, das Konzept ist recht einfach: Der Controller ist aktiv, wenn der Benutzer Einstellungen vornimmt, wie zum Beispiel Datum/Uhrzeit oder Messintervall. Kommt länger als eine Minute keine Eingabe geht er in den Schlafmodus (geht auch per Tastendruck). Das SD-Kartenmodul wird unmittelbar vorm schreiben ein- und direkt danach auch wieder ausgeschaltet. Hier die zwei wichtigen Programmabläufe in Kurzform (Zugriffe auf Counter-Register sind über Update-Busy-Flags abgesichert) Die Methode Sleep:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
Hauptroutine:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
Ich hoffe, dass man daraus schlau wird. Hier ist auch noch der Quellcode von der sleep() Methode... da sind ein Paar Fragen drin, vielleicht kann die mir auch jemand beantworten.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
Was mir jetzt spontan zum Stromsparen einfällt wäre ein Bufferarray für die Temperaturen und Messzeitpunkte(2*2+4 = 8 Byte pro Feld). Dadurch müsste das SD-Modul nicht bei jeder Messung eingeschaltet werden. Allerdings weiß ich nicht wie viel Platz ich im Arbeitsspeicher noch habe...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
