PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2c Bus und ATMega..manchmal aussetzer



modtronic
14.05.2011, 09:05
Guten Morgen
Ich baue gerade für eine Kollegen eine Modellbahnsteuerung per AT-Mega, i2c und SPS.
Geplant ist das die SPS steuerbefehle auf den AT-Mega sendet, oder dieser zurück an die SPS gibt.
Die Verbraucher in der Anlage werden dann über denn I2c Bus geschaltet.
Das geschieht mit dem PCF 8574 in DIP-Form.

Einige Platinen sind bereits fertig programmiert.
Manchmal lauft aber der Bus einfach nciht mehr, das heißt keine Signale kommen mehr an oder gehen raus an den Bus.

Woran kann das liegen ?
Habe folgendes mal gemacht, als der Fehler auftrat ..
Adresse bei laufendem betrieb und nicht vorhandem baustein umgeschaltet
Bodlevel und boden fusebits aktiviert
oder muß ich eine programmschleife ändern ? arbeite mit der sprache c.
der AT-Mega läuft mit 16 Mhz.

Der bus selber ist auf der CPU Platine und auf der Portplatine mit 2,2 Widerständen als Pull-Up geschaltet.
Meine Vermutung war noch, wenn man die Betriebsspannung schnell aus und wieder einschaltet das der Controller nicht immer sauber hochläuft.

Weiß jemand rat ??

Danke
Patrick

TobiKa
14.05.2011, 13:05
Woran kann das liegen ?
An mehreren Dingen.


Adresse bei laufendem betrieb und nicht vorhandem baustein umgeschaltet
Bodlevel und boden fusebits aktiviert
Ja und, irgendwelche Änderungen?!


oder muß ich eine programmschleife ändern ?
Sollen wir raten wie die Schleife aussieht um dir darauf ne Antwort geben zu können?!


arbeite mit der sprache c.
Siehe eine Antwort weiter oben.


Der bus selber ist auf der CPU Platine und auf der Portplatine mit 2,2 Widerständen als Pull-Up geschaltet.
2,2 was?! Wenn du kOhm meinst sollte das eigentlich passen.


Meine Vermutung war noch, wenn man die Betriebsspannung schnell aus und wieder einschaltet das der Controller nicht immer sauber hochläuft.
Jein, bedenke dabei das er eine bestimmte Zeit zum Booten braucht. Je nach Programm noch länger... aber wie gesagt, keiner kennst dein Programm.


Weiß jemand rat ??
Das wäre in diesem Fall nur "raten", also bitte mehr Details.

modtronic
14.05.2011, 13:26
Hallo

Ja..pull up 2,2 Kohm
einmal auf dem treiberboard wo der atmega sitzt
und einmal jeweils auf dem pcf.board...dürfte daher nichts passieren

ich habe zusätzlich noch einen 470 kohm wiederstand zwischen +5volt und gnd gelötet damit der elko für die spannungsversorgung sich richtig entladen kann.
ich hatte da mal ein problem in der vergangenheit.

ich habe die vermutung das die initialisierung der eingänge des pcf8574 nicht richtig ist.
ich habe jetzt zusätzlich noch eine routine programmiert wo alle bausteine erst einmal auf 0 geschrieben werden.

bei den fusebits hatte ich keine änderungen bemerkt.
ich programmiere aber und schalte nicht immer die spannungsversorgung aus.
meist kommt dieser fehler nach dem einschalten..daher die vermutung mit der init-phase.

der at-mega und die karten sind über ein 10poliges flachbandkabel mit einander verbunden
wie lang dürfte dieses maximal sein ?
die auslastung des mega 16 liegt programmtechnis bei ca. 80%..ist ein sehr umfangreiches programm
besser auf den mega 32 wechseln ???
die stromversorgung für die PCFs sind jeweils auf den karten mit untergebracht.
um spannungsverlust vorzubeugen

danke erstmal für die antwort

Bernhard667
14.05.2011, 19:09
Hallo,

wenn es bevorzugt nach dem Einschalten passiert, könnte es ja sein, daß Slaves noch nicht bereit sein.
Warte doch einfach etwas, bevor das Programm mit der Übertragung loslegt.

Du schreibtst, es läuft nichts mehr auf dem Bus.
Hängt das Programm im Controller wegen völlig anderer Bugs und kommt deswegen nicht dazu, was auf I2C zu senden?
Mach doch ein paar Debug Ausgaben mit ins Programm rein, dann kannst Du die Stelle eingrenzen, wo das Programm hängen bleibt.
Wenn Du I2C Transfers verdächtigst, dann als z. Bsp ein 1 senden über RS232 wenn Du die I2C Routinen betrittst, 2 wenn Du wieder verlässt.
Dann erkennst Du, wo es hängt.

Ist Deine I2C Routine robust gegen Fehler auf dem Bus?
Wenn ein Slave angesprochen wird, der aber nicht antwortet, wartest Du dann unendlich auf Acknowlege oder kommst Du geordnet aus so einem Fehler wieder raus.

Bernhard