Forum: Mikrocontroller und Digitale Elektronik Bascom I2CREAD, ACK


von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

Hallo,

ich lese über einen 2. Atmega-Prozessor von einem myAVR-Ethernet das 
shared-RAM aus, das funktioniert so:
1
         i2cstart
2
         I2cwbyte 0
3
         Print "i2cwbyte 0"
4
         I2cstart
5
         Print "i2cstart"
6
         I2cwbyte Eth_read
7
         Print "Eth_read"
8
         I2crbyte I , Ack
9
         Print "1-Ack";i
10
         i2crybte I,nack
11
         I2cstop

Funktioniert alles soweit problemlos, jetzt drücke ich den Reset-Taster 
beim myAvr-Board (was in etwa einem Absturz simuliert) und dann bleibt 
mein Programm beim I2Crbyte,Ack hängen und wartet ewig...

Mit Hilfe eines Watchdog-Timers kann ich einen Reset erzwingen, aber 
gibts nicht eine andere Möglichkeit zu erkennen, dass I2Crbyte ewig 
wartet

von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

So Fehler gefunden,

Tja - da sind halt die Grenzen von Bascom erreicht.
Der Befehl I2CRByte i, ACK liefert immer ERR=1,
obwohl die Bytes im Normalbetrieb korrekt gelesen werden.
Eine Überprüfung auf ERR=1 ist daher sinnlos.

Da der myAVR-Ethernet nicht ein ganz korrektes Timing liefert,
versagt der Standard-I2CRByte mit Ack in Bascom. Mit Bascom-Mitteln sind 
keine Fehlerdiagnosen möglich.

Ich hab den Programmcode auf lauter einzelne I2CStart...I2CRByte mit 
NACK geändert und es geht!

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.