I2C master libraryVON pfleury [Fehlersuche]

OP Persönliche Seite #4522400
Lesenswert?
• ▲
▼
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
#4522423
Lesenswert?
• ▲
▼
@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.
OP Persönliche Seite #4522448
Lesenswert?
• ▲
▼
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. :(
#4522455
Lesenswert?
• ▲
▼
@ 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.
OP Persönliche Seite #4522523
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.