Hi, ich verwende gerade die überarbeitete LIB von Frank und habe Probleme beim Schreiben auf dem I2C. (Atmega88 mit internen 8Mhz) Dabei habe ich die Adresse mittels Suchroutine ermittelt/validiert und komme bei meinem China-I2C-2-HD44780-Adapter (4-Bit Modus only - siehe Bucht) auf die 125 bzw. 0x7D. - 4k7 als Pullup auf beiden Leitungen. - Belegung vom PCF8574X zum LCD geprüft (aber das Problem liegt wohl eher davor) Da der Prozessor genau zwischen diesen beiden Zeilen einfriert: i2c_init(); //bis hier und nicht weiter... lcd_init(); Oder noch genauer: i2c_start_wait(LCD_I2C_DEVICE+I2C_WRITE);//(nicht mal bis hier, wenn !=0x7D) //bis hier und nicht weiter...(mit 0x7D) i2c_write(data); Liegt es fast auf der Hand, dass ich folgendes Problem haben könnte: Beitrag "Re: I2C am ATMega88" Doch ich arbeite mit der C-Version und nicht mit Assembler und finde einfach die beiden "SDA_PORT" & "SCL_PORT" oder ähnliche nirgends in der Lib. Wo liegt mein Denkfehler? Der Port müsste doch irgendwo in der LIB definiert oder verwendet worden sein?? osterliste Grüße Oekel
:
Bearbeitet durch User
Da Frank das Bsp. ja auf dem Atmega8 laufen hatte, bin ich gerade das folgende Dokument am durchstöbern. Atmega 8 Vektor: 18 0x011 TWI Atmega88 Vektor: 25 0x018 TWI nur wo meine Änderungen im Code Anwendung finden, habe ich noch immer nicht auf dem Schirm :(
@D a v i d K. (oekel) >ich verwende gerade die überarbeitete LIB von Frank und habe Probleme Frank? Soso . . . >Dabei habe ich die Adresse mittels Suchroutine ermittelt/validiert und >komme bei meinem China-I2C-2-HD44780-Adapter (4-Bit Modus only - siehe >Bucht) >auf die 125 bzw. 0x7D. Glaub ich nicht ganz. in i2clcd.h steht
1 | #define LCD_I2C_DEVICE 0x4E /**< 8 bit address of port expander, bit#0 must be zero */ |
https://www.mikrocontroller.net/articles/Port-Expander_PCF8574#I.C2.B2C_Kommunikation Der PCF8574A hat den Adressraum 0x70 + A[2:0]*2 + R/W Gültige 8-Bit Adressen sind also 0x70 0x72 0x74 0x76 0x78 0x7A 0x7C 0x7E >i2c_start_wait(LCD_I2C_DEVICE+I2C_WRITE);//(nicht mal bis hier, wenn >!=0x7D) >//bis hier und nicht weiter...(mit 0x7D) >i2c_write(data); Dann scheint keiner auf deine Adresse 0x7D zu antworten. >Liegt es fast auf der Hand, dass ich folgendes Problem haben könnte: >Beitrag "Re: I2C am ATMega88" Was bei dir so alles auf der Hand liegt . . . .? >Doch ich arbeite mit der C-Version und nicht mit Assembler und finde >einfach die beiden "SDA_PORT" & "SCL_PORT" oder ähnliche nirgends in >der Lib. Logisch, denn diese Lib arbeitet mit den I2C Modul des AVR, dabei sind die Pins SDA/SCL fest vorgegeben, also muss man sie auch nicht einstellen.
Falk B. schrieb: > @D a v i d K. (oekel) > >>ich verwende gerade die überarbeitete LIB von Frank und habe Probleme > > Frank? Soso . . . Sorry Falk, so oft schon geschrieben und dann doch den Namen vertauscht. >
1 | > #define LCD_I2C_DEVICE 0x4E /**< 8 bit address of port |
2 | > expander, bit#0 must be zero */
|
3 | >
|
Den Wert hatte ich auch überschrieben... Seltsam, dass er mir mittels
1 | void findTWI(){ |
2 | for(uint8_t i = 0; i<255; i++){ |
3 | uint8_t ret = i2c_start(DevHD44780+I2C_READ); |
4 | if ( ret ) { |
5 | /* failed to issue start condition, possibly no device found */
|
6 | i2c_stop(); |
7 | }else { |
8 | ret = i2c_readNak(); |
9 | i2c_stop(); |
10 | blinkSlow(); |
11 | }
|
12 | |
13 | }
|
14 | blinkFast(); |
15 | }
|
Adresse 0x7D auswertet. (Schon sch... wenn man keinen richtigen Debug-Port hat) > https://www.mikrocontroller.net/articles/Port-Expander_PCF8574#I.C2.B2C_Kommunikation > > Logisch, denn diese Lib arbeitet mit den I2C Modul des AVR, dabei sind > die Pins SDA/SCL fest vorgegeben, also muss man sie auch nicht > einstellen. Gut, auf dieser Basis werde ich die > Gültige 8-Bit Adressen sind also.... Noch mal durchgehen. Hoffe es läuft dann. (Werde berichten) Hatte die i2c-lib schon öfters verwendet und bisher nie Probleme. Es fehlt wie immer wohl einfach nur an der Übung. :(
@ D a v i d K. (oekel) >Seltsam, dass er mir mittels >void findTWI(){ >for(uint8_t i = 0; i<255; i++){ > uint8_t ret = i2c_start(DevHD44780+I2C_READ); Tja, hier liegt das Problem. Zur Adresse wird der I2C_READ addiert. 0x7D+1=0x7E Richtigerweise sollte es eigentlich heißen. i2c_start(DevHD44780 | I2C_READ); Dann passiert sowas nicht. Ich weiß, das ist in der Lib so drin. Wenn man sich an den Hinweis hält und nur gerade Adressen angibt, dann passt das auch. > Adresse 0x7D auswertet. (Schon sch... wenn man keinen richtigen >Debug-Port hat) Es gibt schlimmeres.
Falk B. schrieb: > 0x7D+1=0x7E Passt! Ich danke dir für die Anmerkungen. Nun kann ich doch noch raus das Wetter genießen! Wo lag mein Problem abgesehen von dem +1: Hab mir den Chip nicht genau genug angeschaut und das "A" in PCF8574A übersehen. Folgefehler: Habe mir nur KURZ-Datenblätter angeschaut, wo ich dann mit A3=A4=0 nur auf die 0x4E kam. Folglich war ich völlig verwirrt mit der großen Abweichung von der Testschleife zum Datenblatt und habe weitläufigere Fehler gesucht. Grüße Oekel
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.