Forum: Mikrocontroller und Digitale Elektronik Ganz schräges Reset-Problem mit ATMega324 und Drucksensor an I2C


von Norbert S. (norberts)


Lesenswert?

Hi,

ich habe hier einen ATMega324, der einen Drucksensor MS5611 per ausliest 
und das dann anzeigt. Wie das angezeigt wird dürfte nicht wichtig sein, 
das funktioniert, habe ich auch nach Belieben im Griff.
Ich rechne das in die Höhe relativ zur Höhe beim Start um.
Das funktioniert alles im Prinzip sehr gut.

Erstes Symptom: Das Ding zeigt Blödsinn an.
Alles mögliche auskommentiert, nur noch die Rohdaten (letzte 4 Stellen 
des Drucks in Pa anzeigen) - keine Änderung. Die Anzeige springt auch 
gelegentlich.
Mache ich nach anklemmen der Versorgung aber nochmal manuell einen Reset 
(Hardware!), passt alles!
Power weg und wieder ran, wieder falsch.
Absolut sicher reproduzierbar.
Alle Berechnungen (relative Höhe, Druck) auskommentiert, keine Änderung.
Hardwarereset - alles gut und stabil.
Power weg und wieder ran, wieder falsch.
Ewige Warteschleifen ganz am Anfang haben auch nichts gebracht.

Da sind noch ein paar andere Sensoren an I2C und die funktionieren 
tadellos!

BOD ist korrekt auf 2,7V eingestellt, ATMega und I2C läuft alles an 
3,3V.

Nun habe ich folgenden absurden Code eingefügt, bevor der Drucksensor 
das erste Mal angesprochen wird:

Dim Dummy As Byte
Dim Edummy As Eram Byte

Dummy = Edummy
Incr Dummy
Edummy = Dummy
If Dummy.0 = 1 Then
   Config Watchdog = 2048
   Start Watchdog
   Do
   Loop
End If

Ja, Bascom, das dürfte aber mit der Problematik nichts zu tun haben.
Das macht nichts weiter, als bei jedem zweiten Start den Watchdog vor 
die Wand laufen zu lassen.
Also:
1. Power on -> Dummy.0 ist 0 -> Werte falsch.
2. Power off und wieder on -> Dummy.0 ist 1 -> Watchdogreset -> Neustart 
->  Dummy.0 ist 0, Programm läuft -> Werte richtig!
3. Power off und wieder on -> Dummy.0 ist 1 -> Watchdogreset -> Neustart 
- Dummy.0 ist 0, Programm läuft -> Werte richtig!

Das kann ich beliebig wiederholen, damit funktioniert es.
Alternativ kann ich das Ganze ohne den Teil zum Funktionieren bringen, 
indem ich nach dem Start nochmal einen Hardwarereset mache.

Was zum Teufel kann das sein?
Einer ne Idee?

Gruß,
Norbert

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Norbert S. schrieb:
> Was zum Teufel kann das sein?
Welche Anstiegszeit hat deine Versorgungsspannung? Klemmst du direkt 
stabile 5V auf die Schaltung, oder steigt die Spannung über z.B. 500ms 
von 0 auf 5V?

von Schlumpf (Gast)


Lesenswert?

Lothar Miller schrieb:
> Welche Anstiegszeit hat deine Versorgungsspannung?

Darauf würde ich auch tippen.. dass mit der Spannung beim Einschalten 
etwas nicht sauber ist.

von Weingut P. (weinbauer)


Lesenswert?

jaaa ... Bascom und I2C ist auch so ne Sache ...

weiß jetzt nicht mehr obs bei der Verwendung vom Hardware oder Software 
I2C war, aber in einem der Modi macht Bascom beim I2Cstart tatsächlich 
elektrisch nen I2Crestart, das hat mir auch mal schlaflose Nächte 
beschert das zu finden, weil ein Baustein das nicht mochte. Also auch 
mal checken mit dem Oszi ...

Der Unterschied ist, dass bei Restart erst ein Stop, dann sofort der 
Start kommt.

: Bearbeitet durch User
von Norbert S. (norberts)


Lesenswert?

Hi,

Spannungsanstieg: Zugegeben, es riecht etwas danach aber das müsste ja 
mit der Warterei ganz am Anfang gegessen sein. Hilft aber nichts.

Fhutdhb Ufzjjuz schrieb:
> aber in einem der Modi macht Bascom beim I2Cstart tatsächlich
> elektrisch nen I2Crestart

Das kommt schon eher hin. Auch wenn es komisch wäre, denn das hat ja 
schon funktioniert. Und warum geht es, wenn ich vorher (vor dem I2C 
Krams) einen zweiten Reset mache?

Das kann alles nur sein, wenn Bascom sich nicht um die Reihenfolge im 
Quellcode schert und die Initialisierung immer gleich am Anfang macht.

Ich werde Beides nochmal genau verfolgen.

Gruß,
Norbert

von Norbert S. (norberts)


Lesenswert?

Moin,

alles falsch, inkl. meiner Beobachtungen ;-)
Auch mit dem 2. Reset spinnt das weiterhin.

Die Betriebsspannung war immerhin die richtige Fährte.
Steigt zwar in < 100µs an aber ist dann total versaut.
Der kleine Regler im TO-92 ist einfach an der Stromgrenze.
Als LDO von 5 auf 3,3V wird er nicht warm aber kann eben auch nur 100mA.
Da jetzt alle Sensoren dran sind kommt das hin, daß es etwas zuviel ist.

Das ergibt dann auch ein rundes Bild und erklärt auch noch andere 
komische Dinge. Hätte ich erwähnt, daß eine gemessene Spannung in der 
Anzeige hopst, sobald ich eine LED blinken lasse, wäre vielleicht auch 
ein Anderer eher drauf gekommen.
Asche auf mein Haupt.

Bascom und I2C: Ich nutze Hardware und die Lib "i2c_twi.lbx".
In der sieht es so aus als wenn der Start korrekt nur ein Start ist.
Laut Simulation macht er bei der Initialisierung auch nur das was man 
erwarten würde. Naja, wenn das falsch gewesen wäre, hätte das ja auch 
nie funktionieren dürfen.

Ich bringe jetzt erstmal die 3,3V in Ordnung und erwarte eigentlich, daß 
es dann rennt.

Nur blöd, daß ich ausser LM317 im TO220 nix im Haus habe (oder grad 
nicht finde). Der muß dann an 12V und naja, wird er bei gut 100mA eben 
etwas wärmer. Sollte noch ok sein.
An den 5V ist mir das zu knapp und es schadet nicht wenn ich die etwas 
entlaste.

Gruß,
Norbert

von Norbert S. (norberts)


Lesenswert?

Hi,

kaum macht man's richtig, schon gehts.
Mit dem LM317 stehen die 3,3V und schon rennt alles problemlos.
Vielen Dank an die "Anstieg der Versorgungsspannung" Fraktion, das war 
zumindest der Wink in die richtige Richtung.

Ich hatte auch noch eine Uart von 5V, die im Idle ständig in den 3,3V 
Mega reingedrückt hat. Das war bestimmt auch nicht so doll.

Der I2C Start bei Hardware ist übrigens korrekt. I2C per Software mit 
Bascom - da würde ich auch im Traum nicht dran denken.

Gruß,
Norbert

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.