PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [gelöst] I2C sendet keine Bytes / Programm bleibt stehen.



Jaecko
23.05.2008, 10:59
Moin.

Hab an einem ATMega8 das Problem, dass ich über den I2C-Bus keine Bytes senden kann. Die Startbedingung wird noch korrekt gesetzt, das Nachfolgende Byte wird jedoch nicht mehr gesendet.
Pullups sind je 2x 2,2K.

Hier die betreffende SUB:


Sub FormatEEPROM
'................................................. ............................
' Format EEPROM (all bytes to 0xFF)
'................................................. ............................
Config SCL = PORTC.5
Config SDA = PortC.4

tmpWord = 0
LED_EEPROM = Led_On
BarOff 'LED-Bargraph off
Bar10 = LED_ON 'Last LED on Bargraph on
Print #1 , "F-"

Pages = EEPROMSIZE / PAGESIZE 'EEPROMSIZE = 8192, PAGESIZE = 32

For w2 = 1 to pages
Print "W2:" ; w2
INCR tmpword
If tmpWord = 10 Then
tmpWord = 0
Toggle Bar10
EndIf
Print "a";
EEAddress = PAGESIZE * w2
EEAddress = EEAddress - PAGESIZE
Print "b";
I2CStart
Print "c";
I2CWByte SID_EEPROMW
Print "d";
I2CWByte EEAddressH
Print "e";
I2CWByte EEAddressL
Print "f";
For w1 = 1 to PAGESIZE
Print "W1:" ; w1
Print "g";
' I2CWByte CTRL_EMPTY
next
I2CStop
waitms 1
Print "e";
next
PRINT #1 , "F!"
LED_EEPROM = Led_Of
Bar10 = LED_OFF

End Sub


Über RS232 wird "c" noch ausgegeben, danach steht das Programm.
Sieht da jemand nen Fehler?

PicNick
23.05.2008, 13:27
Bei TWI bleibt man eigentlich nur hängen, wenn irgendeiner die Clock-Leitung auf low hält (Bit-stretching) und nicht mehr ausläßt.
Verwendest du HW-TWI ?

Mach doch nach I2CStart eine Kontrolle, ob das überhaupt geklappt hat.
(if ERR = 1 ). Sonst schickst du ihn ja in den Krieg.

. Messen, ob im Normalzustand beide Leitungen wirklich auf High sind
. Test auf Durchlauf OHNE EEprom

Jaecko
23.05.2008, 14:11
Also verwendet wird Hardware-TWI. ERR ist nach dem Start = 0.
Nachgemessen hab ich auch nochmal, da ist es so, dass bei I2CStart beide Leitungen (SCL + SDA) auf Low gezogen werden, danach rührt sich nichts mehr. Vor I2CStart ist es wie's sein soll auf 5V.

Das ganze ist auch noch unabhängig davon ob ein EEPROM drinsteckt oder nicht. Tritt auch dann auf, wenn andere Geräte am Bus angesprochen werden sollen (LM75, RNKeyLCD...)


NACHTRAG: GELÖST!
In der Software war garkein Fehler. Die übriggebliebene Dimension-Layer hat tatsächlich noch unter einem D-Sub-Stecker nen Kurzschluss gebaut...

PicNick
23.05.2008, 14:24
mmmmhhh. blöde Fragen :

Kriegt der TWI auch einen Takt ?
Config Twi = 400000 'I2C Speed wahlweise

Config SCL = PORTC.5
Config SDA = PortC.4
kannst du dir bei HW-TWI sparen, der kennt da keine Variationen.

noch blödere Fragen, bitte nicht schlagen:
Ich nehm' doch an, daß du die Original-Pins verwendest ?
(und nicht SCL/ SDA vertauscht hast)

Jaecko
23.05.2008, 15:59
Also taktmässig stimmt alles. Wie im Edit: Die Software selbst funktioniert, der Bus läuft. An genau einer einzigen Stelle hab ich beim Platinen absägen die Dimension-Layer übersehen => Dünner Kupferrand, der für nen Kurzen zwischen SDA + SCL gereicht hat.