Forum: Mikrocontroller und Digitale Elektronik Temperaturdatenlogger OK? (Mega328,DS3231,I2C-EEPROM)


von Matze (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Habe noch eine Schaltung, diesmal soll es ein Temperaturdatenlogger 
sein.

Er besteht aus einem Atmega 328, einem DS3231 RTC und einem 24AA256 oder 
vergleichbarem I2C-EEPROM.

Die Schaltung soll mit 3V Batteriebetrieben werden.
Dabei soll der uC dem DS3231 sowie dem EEPROM die Versorgungsspannung 
wegnehmen können.
Dauerhaft sollen nur der Atmega sowie der Batterieanschluss des DS3231 
an Spannung liegen.

Der Atmega soll normalerweise Schlafen, jedoch durch den INT-Pin des 
DS3231 alle 10Min aufgeweckt werden. Die beiden I2C-ICs mit Spannung 
versorgen, die Temperatur/Uhrzeit auslesen und in das EEPROM schreiben, 
neue Weckzeit einstellen, wieder schlafen gehen.

Der Atmega soll über UART mit dem PC kommunizieren können und somit die 
im EEPROM gespeicherten Daten senden.

Können die I2C-Pullups eventuell auch mit einem Portpin des Atmegas 
versorgt werden?

von Peter R. (pnu)


Lesenswert?

Matze schrieb:
> Können die I2C-Pullups eventuell auch mit einem Portpin des Atmegas
> versorgt werden?

 Ist außerhalb der Spezifikation des I2C-Bus. Je nach IC kann das aber 
gutgehen.
 I2C ist, soweit ich weiß, für LS-TTL-Technik spezifiziert worden.
Die heute in MOS-Technik gebauten ICs könnten solch einen Verstoß gegen 
die Regeln eventuell verkraften.

Also im Datenblatt des 2AA256 nachsehen, ob die einen genügend kleinen 
Eingangsstrom im H-Zustand haben. Der Kontrollerpin bringt (z.B.) 50 µA 
pullup-Strom und da darf das EEPROM und das DS3231 mit seinem 
Eingangsstrom die Leitungen SDA oder SCL nicht aus dem H-Bereich 
herunterziehen.

Oder halt mit dem Scope nachsehen, ob die Pegel auf SDA und SCL richtig 
erreicht werden.

Man kann aber auch die Pullups durch einen extra-Pin des µC einschalten, 
sobald man Signale auf den Bus geben will.(Aber Vorsicht, dass da keine 
falsche Start- oder Stop-Bedingung entsteht)
> und sonst:
Das EEPROM von der Betriebsspannung zu nehmen halt ich für kritisch. Da 
müsste man doch jedesmal beim Wieder-Einschalten den I2C-Bus neu 
initialisieren. Oder, was macht das EEPROM ohne Spannung mit anliegenden 
I2C-Signalen?

Der Atmega hat doch ein eigenes EEPROM bzw. sogar eigenes RAM.
Warum nicht dort die Messergebnissse speichern und nur blockweise an das 
externe EEPROM übertragen, wenn der nötige Augenblick da ist.
Also, wenn: EEPROM schlafen lassen und dann, wenn  es gebraucht wird 
ordnungsgemäß hochfahren mit allem Initialisierungstheater.

Auch besser, EEPROM und 3231 nicht an einen gemeinsamen Bus, sondern 
jedes IC an eigene Anschlüsse des Kontrollers. Dann kann man das EEPROM 
gefahrloser Abschalten ohne auf das DS3231 Rücksicht nehmen zu müssen.

: Bearbeitet durch User
von Matze (Gast)


Lesenswert?

Peter R. schrieb:
> Der Kontrollerpin bringt (z.B.) 50 µA
> pullup-Strom und da darf das EEPROM und das DS3231 mit seinem
> Eingangsstrom die Leitungen SDA oder SCL nicht aus dem H-Bereich
> herunterziehen.

So meine ich das nicht, die 3,3V-Symbole an denen die 4K7-Pullups hängen 
sollen durch einen Portpin ersetzt werden, der beim Schlafen nach 
abschlaten beider Bausteine auf GND geht.

Ich möchte Backpowering über Body-Dioden verhindern.

Peter R. schrieb:
> Man kann aber auch die Pullups durch einen extra-Pin des µC einschalten,
> sobald man Signale auf den Bus geben will.(Aber Vorsicht, dass da keine
> falsche Start- oder Stop-Bedingung entsteht)

Ja genau so meinte ich es ;)

Peter R. schrieb:
> Der Atmega hat doch ein eigenes EEPROM bzw. sogar eigenes RAM.

Stimmt das kann ich vollschreiben und dann einige Datensätze gemeinsam 
in das EEPROM schieben.

Peter R. schrieb:
> Auch besser, EEPROM und 3231 nicht an einen gemeinsamen Bus, sondern
> jedes IC an eigene Anschlüsse des Kontrollers. Dann kann man das EEPROM
> gefahrloser Abschalten ohne auf das DS3231 Rücksicht nehmen zu müssen.

Könnte man auch machen, aber man müsste Software-I2C machen, das möchte 
ich möglichts nicht.

Worin siehst du das große Problem?
Der Bus ist schnell wieder Initialisiert, ich muss das EEPROM ja nicht 
immer ansprechen.

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
Noch kein Account? Hier anmelden.