Hallo allerseits, Ich betreibe in meiner Schaltung drei EEPROMs über I2C. Die Versorgungsspannungen für die EEPROMs bekommen ich aus 3 Pins des ATMega168, damit ich sie ein- und ausschalten kann. Soweit - sogut! Funktioniert auch prima! Nur stelle ich mir jetzt die Frage, ob diese Art der Spannungsversorgung schädlich für den uC sein kann. Die benötigten Ströme der EEPROMs sind alle im zulässigen Bereich des Atmels. Nur, was ist, wenn ich die EEPROMs immer ausgeschaltet habe. Ist das für irgendwelche Baugruppen im Controller schädlich? Danke für eure Antworten! mfg Andy
Geht, nur auf zwei Dinge musst du achten 1.) der AVR Pin liefert genügend Strom und die Spannung ist ausreichend 2.) wenn deine EEPROMs ohne Strom sind sollten die restlichen Steuerleitungen zum EEPROM auf GND oder HIGH-Z sein damit diese wenn sie interne Schutzdioden nach VCC hätten nicht über diese Pins die EEPROMs mit Strom füttern. Theoretisch könnte man sogar ganz auf die Spannungsversorgung der EEPROMs aus einem Pin verzichten, also VCC der EEPROMs unbeschaltet lassen. Wenn diese nämlich zb. ein HIGH Aktives Chipselect hätten das über Inputprotection Dioden den Strom nach VCC intern ableiten, dann würde man die EERPOMs bei ChipSelect=HIGH mit Saft versorgen. Nebenbei bemerkt habe ich AVRs auch schon über einen ADC Pin der nach VCC geschaltet ist und an dem ein Solarpanel hängt mit Saft versorgt. Der Strom floß dann durch den AVR vom Solarpanel nach VCC an dem ein LiPo-Akku angeschlossen ist, quasi als Solarcharge Controller. Ist natürlich eine sehr exotische Konstruktion, funktioniert aber ;) Gruß hagen
Besten Dank erstmal, für deine rasche Antwort. Zu 1: Ja, der Strom aus dem uC reicht für die Potis! Zu 2: Die SDA und SCL Leitung sind per Definition mit einem 4k7 auf VCC - auch wenn die EEPROMs nicht mir Spannung versorgt sind. Problem? Weiters habe ich einmal gehört, dass durch andauerndes "0" schalten eines Pins interne Dioden beansprucht werden. Ist da was dran?? mfg Andy
Andreas Posch wrote: > Zu 2: Die SDA und SCL Leitung sind per Definition mit einem 4k7 auf VCC > - auch wenn die EEPROMs nicht mir Spannung versorgt sind. Problem? Wird dazu führen, dass ein abgeschaltetes EEPROM diese Pins belastet und entsprechend runterzieht. Müsstest du nachmessen können. Da diese Leitungen bei abgeschalteten EEPROMs ohnehin nicht verwendet werden, kannst du sie in dem Zustand allerdings auch auf 0 legen, dann passiert nichts.
Andreas Posch wrote: > Weiters habe ich einmal gehört, dass durch andauerndes "0" schalten > eines Pins interne Dioden beansprucht werden. Ist da was dran?? Nichts. Quelle? Hast du darüber irgendwelche Details? Eingänge von (bipolaren) TTLs ziehen bei 0 mehr Strom als bei 1, aber das ist alles was mir dazu einfällt.
Was sind denn das für komische gewaltig Strom schluckende EEPROMs, daß man sie abschalten muß? z.B. ein AT24C512 braucht im Standby max 0,2µA (1,8V) ... 6µA (5,5V). Das dürfte neben dem AVR-Verbrauch überhaupt nicht auffallen. Peter
@Andreas Kaiser: Nein, ich hab das irgendwann mal gelesen und gerade daran gedacht. Wenns nichts ausmacht, dann passt das schon. @Peter: Das Problem ist nicht der Stromverbrauch, sondern die Adresse der EEPROMs. Alle 3 haben dieselbe. Und man kann diese nicht einstellen. Also muss ich beim Lesen das jeweilige EEPROM einschalten und die beiden anderen ausgeschaltet lassen. mfg Andy
Batteriebetriebene Geräte verbrauchen doch immer zu viel Strom, daher muss man schon beim Kleinen anfangen. Und so wie beschrieben benötigt man dazu nicht mal zusätzliche Komponenten. Finde das eine coole Lösung, die EEPROMs vom uC zu versorgen.
Andreas Posch wrote: > Das Problem ist nicht der Stromverbrauch, sondern die Adresse der > EEPROMs. Alle 3 haben dieselbe. Und man kann diese nicht einstellen. > Also muss ich beim Lesen das jeweilige EEPROM einschalten und die beiden > anderen ausgeschaltet lassen. Dann hast du aber genau das Problem, dass die Pullups der I2C-Leitungen die beiden anderen abgeschalteten mit Teilzeit-Strom versorgen. Das geht also eigentlich nicht. Was hast du denn da für EEPROM-Typen erwischt? Haben die keine Leitungen zur Adresseinstellung? Hast du schon mal überlegt, an Stelle einer Batterie EEPROMs ein einzelnes Dataflash (SPI) zu verwenden?
@Andreas: Da hast du recht - hab jetzt gar nicht dran gedacht, dass ich ja doch die Datenleitungen auch im ausgeschalteten Zustand benutze ups Das sind EEPROMs von Microchip im SOT23-5 Gehäuse. Deshalb keine Adressleitungen. Die Lösung funktioniert aber einwandfrei! mfg
Die externen Pullups kannst du meistens weglassen, benutzte mal die internen Pullups der AVRs, ich hatte damit bei I2C EEPROMs noch nie Probleme, besonders weil die Zuleitungen zum EEPROM ja verhältnismäßig sehr kurz gehalten werden. Beachte aber das wenn du EEPROM #1 von VCC getrennt hast und nun mit EEPROM #2 eine I2C Kommunikation durchführst du niemals SDA/SCL auf logisch HIGH ziehst, dann versorgt nämlich der AVR wiederum den EEPROM #1 über SDA/SCL mit Saft, sollte aber in einer guten I2C Lib nicht vorkommen. Gruß Hagen
Hagen Re wrote: > Beachte aber das wenn du EEPROM #1 von VCC getrennt hast und nun mit > EEPROM #2 eine I2C Kommunikation durchführst du niemals SDA/SCL auf > logisch HIGH ziehst, dann versorgt nämlich der AVR wiederum den EEPROM > #1 über SDA/SCL mit Saft, sollte aber in einer guten I2C Lib nicht > vorkommen. Was hat das mit einer guten oder schlechten I2C-Lib zu tun? Die Leitungen kriegst du mit dem Pullup locker hochgezogen, denn die paar µA tun dem Pullup nicht weh. Es wird so sein, dass die übrigen EEPROMs über diese Leitungen und die Schutzdioden mit Strom versorgt werden, aber nicht permanent und eben deshalb werden die sich auch nicht angesprochen fühlen, allein schon weil sie das Startbit nicht mitkriegen, in dem beide Leitungen zeitweilig 0 sind. Daher funktioniert das also, aber sauber ist das wirklich nicht.
>Was hat das mit einer guten oder schlechten I2C-Lib zu tun? Die >Leitungen kriegst du mit dem Pullup locker hochgezogen, denn die paar µA >tun dem Pullup nicht weh. Naja, hängt halt vom EEPROM ab, falls sie wirklich nur µA benötigen dann reicht der Strom über die Pullups auch aus. Ich meinte mit schlechter Lib zb. eine die SDA/SCL auf Ausgang/High schalten, was aber nicht sein dürfte. >Daher funktioniert das also, aber sauber ist das wirklich nicht. jo meine Meinung. Gruß hagen
@Andreas Posch: Schaltest du die Ausgänge, wie den Strom der EEPROMs liefern, auf hochohmig (Eingang) oder auf 0, wenn abgeschaltet wird? Wenn Ausgang 0, dann stellt das einen Kurzschluss für die Pullups dar. Dürfte dann eigentlich nicht funktionieren, und die I2C-Leitungen sollten im inaktiven Zustand gemessene ~0,7V anzeigen. Muss also wohl so sein, dass du die hochohmig schaltest.
>Wenn Ausgang 0, dann stellt das einen Kurzschluss für die Pullups dar. >Dürfte dann eigentlich nicht funktionieren, und die I2C-Leitungen >sollten im inaktiven Zustand gemessene ~0,7V anzeigen. Eben deswegen empfehle ich die exteren Pullups durch die internen zu ersetzen. So kann man nämlich sauber SDA/SCL auf GND ziehen (ohne aktiviere Pullups). Was auch noch par µA Strom spart. Gruß Hagen
Eigentlich schalte ich die Ausgänge auf "0". Wenn ich auf hochohmig schalte, dann könnte es doch sein, dass der Vcc-Pin eines EEPROMs "schwimmt" und irgendwas macht, oder? Nicht, dass da noch Daten verloren gehe... Wie könnte ich das "sauberer" lösen?? mfg
Andreas Posch wrote: > Das Problem ist nicht der Stromverbrauch, sondern die Adresse der > EEPROMs. Alle 3 haben dieselbe. Und man kann diese nicht einstellen. Dann gib doch jedem seinen eigenen SDA-Pin und mach das I2C in Software (Auswahl des SDA per Bitmaske). Das ist kaum aufwendiger als HW-I2C. > Also muss ich beim Lesen das jeweilige EEPROM einschalten und die beiden > anderen ausgeschaltet lassen. Schließe mich den anderen an, auch wenn es zu funktionieren scheint, ist das keine saubere Lösung. Was sind denn das für Chips und was fürne maximale Eingangsspannung bezogen auf VCC steht denn im Datenblatt? Peter
Andreas Posch wrote: > Eigentlich schalte ich die Ausgänge auf "0". Mir ist nicht klar, wie das dann funktionieren kann. > Wie könnte ich das "sauberer" lösen?? Ein grösseren EEPROM oder Dataflash an Stelle der 3 EEPROMs verwenden. Oder lass den Strom dran und verwende die eingesparten Pins für Peters getrennte Software-I2Cs.
>Wie könnte ich das "sauberer" lösen?? Erstmal indem du die SDA Leitungen statt VCC Leitungen separierst und dann eine Soft-TWI benutzt. Oder idem du AND/MUX Gatter über deine jetzigen VCC Pins schaltest. Diese schalten die SDA Leitungen vom AVR SDA Pin zu den SDA Pins der EEPROMs. Aber vielleicht auch indem du GND statt VCC der EPROMs schaltest, könnte aber eine noch verrücktere Idee sein ;) Gruß Hagen
>habne die EEPROMs nicht nen Enable oder Chipselect?
bei SOT23-5 entweder Writeprotect oder Enable oder NC.
Gruß hagen
Hagen Re wrote: > Aber vielleicht auch indem du GND statt VCC der EPROMs schaltest, könnte > aber eine noch verrücktere Idee sein ;) Ja, denn bisher habe ihn die Pullups vor dem niederohmigen Kurzschluss gerettet. Dann nicht mehr, d.h. bei SDA=0 und GND=1 qualmt es.
>>Dann nicht mehr, d.h. bei SDA=0 und GND=1 qualmt es.
nene, nicht GND=1 das wäre fatal, sondern den GND der E2 auf High-Z =
Input.
Gruß Hagen
OK, das sind ja mal nicht so rosige Nachrichten - d.h. dass es funktioniert ist eigentlich nur Glück? Der Vorschlag mit dem AND-Gatter gefällt mir jedoch. D.h. ich könnte das EEPROM dauerhaft mit 3,3V versorgen - die SDA-Leitung und ein "Enable-Pin" vom Mega zu einem AND und dessen Ausgang an den SDA-Pin des EEPROMs. Würde das gehen?? mfg
Bei soviel Zusatzaufwand frag man sich natürlich: Warum kein größeres EEPROM (wie schon mehrfach gefragt...) Oder nutz software TWI, dan hast du 1 Dataleitung und 3xSCK für jedes EEPROM einen..
Ich muss drei separate EEPROMs verwenden, da diese nicht auf derselben Platine wie der Atmel sitzen. Sie sind unabhängig voneinander angeornet. Anbei hab ich schnell eine Skizze angefertigt, würde das so gehen? Kann ich den SDA-Pin so auf die ANDs aufteilen? THX
SDA mit Gattern aufzutrennen ist nicht so genial, denn SDA geht in beide Richtungen. So kannst du zwar Daten reinschreiben, aber nie wieder auslesen. Wenn Gatter, dann SDA an alle, aber SCL in dieser Weise auftrennen. Und hoffen, dass die EEPROMs nicht selber SCL runterziehen, denn rein formal dürfen die das wenn sie grad ein bischen mehr Zeit brauchen (clock stretching). Tun sie aber wahrscheinlich nicht, also sollte das machbar sein. Völlig korrekt geht es mit Analogschalter 74HC4051 für SDA und hochohmigen Pullups dahinter (für definierten Zustand von SDA).
Stimmt, natürlich muss ich SCL aufsplitten. Und das dürfte ich dann einfach so auf 3 ANDs aufteilen, oder brauch ich da noch irgendwelche Logik-Gatter dazwischen??
Zum 74HC4051: Gibts den auch kleiner? Ich brauch nur 3 Channel IN/OUT. Gibts den? Hab platzmäßig schon Probleme! THX
Spricht was gegen Soft TWI und dan jeder sein eigenen Pin für SCL? Dan brauchts nichtmal nen neues Bauteil + eine Leitung gespart..
Andreas Posch wrote:
> Gibts den auch kleiner? Ich brauch nur 3 Channel IN/OUT.
Möglicherweise gibt es 4fache, aber nicht unter den Standard-ICs. Musst
dann mal bei den üblichen Verdächtigen für Analogkram suchen (Analog
Devices, Maxim, ...).
Könnte ich die Datenleitungen auch mit einem Transistor bei Bedarf durchschalten??
Könnte funktionieren, ähnlich Beitrag "Re: 1 Transitor + 2 Widerstände = Verwirrung", nur muss der Basisanschluss via R1 dann an den Enable-Pin statt an 3,3V (nicht aber R2,R3 - das sind ja die üblichen I2C-Pullups).
Mit den internen Pullups des AVR habe ich bei I²C EEPROMS schon schlechte Erfahrungen gemacht. Die Flanken werden so flach, das es nicht mehr unter allen Umständen (Temperatur ...) zuverlässig funktioniert. Die internen Pullups des AVR haben immerhin rund 20K, das ist weit jenseits der Spezifikationen für I²C. Gruß, Marcus
Also ich habe mit 3.6V gearbeitet und die E2s waren für 2.7V ausgelegt und da gabs bisher keine Probleme mit internen Pullups, selbst bei extremeren Temperaturen, allerdings 100KHz SCL. Ich habe dabei den E2, alleine am I2C, ebenfalls über einen Pin versorgt und um weiter Strom zu sparen eben die internen Pullups verwendet. Aber man sollte auf Nummer sicher gehen. Gruß Hagen
OK, mit Transistoren würds dann so aussehen, oder... Welche Transistoren wären dafür geeignet. Zum SW-I2C: Müsste ich dann bei jeder SDA-Leitung einen Pull-Up dranmachen, oder?
Erst wenn du jetzt noch die SDA Leitungen der EEPROM auch mit Pullups versiehst. Typ beispielsweise BC547/847. Pullups: ja klar. SDA muss definierten 1-Pegel haben, wenn nicht verwendet. Sonst ist das Verhalten undefiniert. Das gilt für alle Varianten, egal ob Muxer, Transistoren oder Software.
OK, dann werd ich das ganze Mal mit SW-I2C versuchen. Leider kenn ich mich da nicht so aus. Wird aber sicher genug Beispiele hier geben, oder? Kann ich dann jeden beliebigen Pin als SDA definieren?
>Kann ich dann jeden beliebigen Pin als SDA definieren?
nö, GND,VCC und evtl. RESET gehen nicht, alle anderen frei steuerbare
Pins schon ;)
Aber nochmal meinerseits nachgefragt: Was wäre nun wenn man GND der E2 per Pin schalten würde, also Pin=GND oder Pin=Input/ohne Pullups ? Könnte es Ströme geben die dann zwischen SDA und SCL am E2 fließen ? Gruß Hagen
Der I²C Takt ist natürlich bei den Pullups ein Thema - da ich teilweise größere Datenmengen aus dem EEPROM durchsuchen muß, arbeite ich mit dem max. Takt - bei 8MHz AVR Takt waren das 400kHz wenn ich mich recht entsinne. Da ist natürlich die Anstiegszeit nur noch ein viertel im Vergleich zu 100kHz. Außerdem lief da alles mit 5V - macht wahrscheinlich auch was aus. Gruß, Marcus
Hagen Re wrote: > Nebenbei bemerkt habe ich AVRs auch schon über einen ADC Pin der nach > VCC geschaltet ist und an dem ein Solarpanel hängt mit Saft versorgt. Ich komme nicht ganz dahinter was du damit bezweckst.
1 | .-------------------. |
2 | | | |
3 | | _____ | |
4 | | .----|- +|--' |
5 | --- | -| |- |
6 | Lipo - | -| ADC|-----. |
7 | | | -|_____|- | |
8 | | | AVR --- <-- |
9 | | | Solarz. - <-- |
10 | | | | |
11 | '----------------------' |
Und der Strom fließt dann über die Schutzdiode zum Lipo?
Nicht Schutzdiode sondern wenn der AVR es möchte fließt der Strom über den intenernen P-MOSFET des Pins vom Solarpanel nach VCC -> Akku. Wenn der AVR aber diesen Pin auf Ausgang/GND setzt dann schließt er das Solarpanel kurz (übliche Vorgehensweise bei Solaranlagen wenn die Akkus voll geladen wurden). Nun, der Spannungsabfall beim Laden über den internen P-MOSFET ist weitaus geringer als über eine Shottkydiode. Somit hat der AVR 5 Möglichkeiten: 1.) er kann Solarpanelspannung ausmessen, dazu Pin auf Eingang und per ADC Spannung messen 2.) er kann VCC=Akku gegen interne AREF messen, sprich den Akkufüllstand, dabei wird Solarpanel nach GND kurzzeitig kurzgeschlossen geschlossen 3.) er kann Solarpanel nach GND kurzschließen falls der Akku voll ist 4.) er kann Solarpanel nach VCC schalten und somit versorgt sich der AVR fast ohne Verluste direkt aus dem Solarpanel, Rest des Stroms fließt in Akku Man hat damit einen Solar-Akku-Charger mit geringstem Aufwand. Allerdings setzt das alles bestimmte Rahmenbedinungen an Akku und Solarpanel. Als Solarpanel eines aus den Gartenlampen, als Akku ein robuster Typ wie zb. 3x 1.2 NiMH oder wie bei meinen Test (die übrigens jetzt schon par Wochen laufen) ein LiPo Akku. Nur auf eines muß man aufpassen: Niemals die Schaltung ohne Akku treiben und dann das Solarpanel mit voll Power, vielleicht noch ohne Spannungsbegrenzung nach oben. Das kann den AVR zerschießen. Sollte aber das Solarpanel nicht mehr als 5V liefern, oder aber der Akku ist angeschlossen und damit am Solarpanel immer auch eine Grundlast so funktioniert das wunderbar. Wiegesagt, meine Testschaltung läuft seit Wochen und lädt den Akku. Natürlich ist das ebenfalls eine der verückteren Schaltungen und man sollte wissen was man tut ;) Übrigens sind wir auf die Idee durch mein Glühwürmschenprojekt hier in der CodeLib gekommen. Erst nach Nachfrage bei anderen Experten habe ich mich überhaupt getraut dieses Idee lauter auszusprechen ;) Falls man einen Tiny benutzt hat man so sogar noch einen Pin im Vergleich zu meiner Glühwürmchenschaltung mehr frei und kann nun 20 LEDs ansteueren. Gruß Hagen PS: ist aber hier im Thread fehl am Platze, sorry das ich mal wieder OT bin. PPS: bin mir nicht sicher aber ich denke das die internen Schutzdioden nichts anderes sind als die Dioden des P/N-MOSFETS des Ausgangstreibers
Hagen Re wrote: > Nicht Schutzdiode sondern wenn der AVR es möchte fließt der Strom über > den intenernen P-MOSFET des Pins vom Solarpanel nach VCC -> Akku. Über dessen interne Substratdiode wohl eher.
>Über dessen interne Substratdiode wohl eher.
Sind das separate Dioden am Pin oder die der Ausgangstreiber-MOSFETs ?
Gruß Hagen
So halbwegs hab ich das jetzt kapiert. Aber du kannst die Solarspannung nicht unbelastet messen, wegen der Schutzdiode. Und wie Simon anmerkte ist die Substratdiode auch noch parallel zu der Schutzdiode. Hagen Re wrote: > 2.) er kann VCC=Akku gegen interne AREF messen, sprich den > Akkufüllstand, dabei wird Solarpanel nach GND kurzzeitig kurzgeschlossen Wohl kaum über den selben Pin?
Akku=VCC misst man gegen die interne AREF, oder anderst ausgedrückt du misst die interne AREF gegen VCC, da aber AREF stabil zb. 1.1 Volt ist rechnet man einfach in umgekehrter Richtund die variable VCC aus. Für diese Messung muß also nur der Akku direkt an VCC angeschlossen sein. In diesem speziellen Fall sollte man das SOlarpanel aber kurzzeitg kurzschließen indem der Pin an dem das Solarpanels angeschlossen ist gegen GND zieht, also Ausgang/GND. Somit belastet das Solarpanel nicht VCC und somit Akku+ und kann sauber gemessen werden. Solarpanel kann denoch direkt am Pin gemessen werden, solang es ein ADC Pin ist. Dazu wird der Pin als Eingang geschaltet und gemessen mit AREF=VCC=Akku. Als Information gekommt man entweder raus das Solarspannung=VCC=Akkuspannung ist, ergo die Solarspannung ist mindestens so hoch wie die des Akkus. Ansonsten gibts nur noch eine Möglichkeit nämlich das die Solarspannnung < VCC =Akku ist. IN diesem Fall haben wir ja vorher VCC gegen AREF gemessen und wissen wie hoch VCC=Akkuspannung ist. Nun können wir mit dieser Referenz auch die Solarspannung ausrechnen falls sie < VCC ist. Bei korrekt gewähltem Solarpanel kann dieses niemals den Akku überladen da dessen Innenwiderstand von ~3k dies verhindert (vom SOlarpanel der Innenwiderstand beträgt meistens 3k). Das Solarpanel wird bei vollem Akku so stark belastet das nur noch par hundert µA fließen können. Solange der ADC Pin auf Input ist kann kein Strom vom Akku=VCC zurück ins Solarpanel fließen, selbst wenn dessen Spannung kleiner VCC ist. Bei richtiger Softwaresteuerung fließt also niemals ein Strom über die internen Schutzdioden vom SOlarpanel nach Akku=VCC, und selbst wenn werden das selbst bei voll bestahltem Panel nicht mehr als 10-20mA sein. Dieser Strom über die Dioden würde sowieso nur für kurze Zeit der ADC Messung fleißen, nach der Messung schaltet man ja sofort diesen Pin als Ausgang entweder nach VCC oder GND. Wenn also der AEDC Pin auf Inout ist muß die Solarspannung mindestens um +.5V größer sein als die an VCC, wegens dem Spanungsabfall an der Schutzdiode. Setzt man den Pin auf Ausgang/High so überbrückt man quasi die interne Schutzdiode mit einem P-MOSFET und umgeht so den Spannnungsabfall an der Schutzdiode. Da es ein P-MOSFET ist wird dieser leitend wenn dessen Gat auf GND gezogen wird, ergo ebenfalls keine Problem damit das nun Drain > Source ist. Gruß Hagen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.