PIC18 C18 I2C

OP #956418
Lesenswert?

Hallo erstmal!

Es ist mir schon fast Peinlich aber ich bin schon wieder da mit einem 
anderen Problem! Ich versuche gerade den I2C Bus zu bedienen. Ich 
verwende die von Microchip bereitgestellten Libraries.

Was ich dabei nicht verstehe ist das Beispiel aus dem Handbuch. Zu 
verwenden ist der Befehl so:

1
unsigned char EEByteWrite(
2
   unsigned char control,
3
   unsigned char address,
4
   unsigned char data );

Ok wenn ich nun ein kleines EEProm habe komme ich mir meinen 255 
Adressen aus. Ich habe aber ein 24CC256. Dabei brauche ich eine High und 
eine Low Adresse. Wie kann ich die höheren Adressen aber damit 
ansprechen? Mit

1
EEByteWrite(0xA0, 0x30, 0xA5);

komme ich ja nur bis 255 wenn ich mich nicht täusche.

Weiß einer von euch da weiter?

LG
Andreas
OP #956503
Lesenswert?

Hab da nochwas gefunden in dem UserGuide für die Libraries. Also so wie 
das da steht funktioniert das aber nicht oder?
1
EEByteWrite( 0xA0, 0x30, 0xA5 );
2
.
3
.
4
.
5
EERandomRead( 0xA0, 0x30 );

Also Kommando wird hier doch immer schreiben übergeben oder? Da kann ja 
nie was zurückkommen?!

LG
Andi
OP #956974
Lesenswert?

Hab das jetzt mal soweit gelöst. Es können nur 255 Speicherstellen 
angesprochen werden mit dem EEByteWrite. Jetzt habe ich die C Bibliothek 
von Microchip umgeschrieben das ich eine High und ein Low Adresse senden 
kann. Habe aber noch Probleme.

Es wird ein Fehlercode zurückgegeben.

-1 bei bus collsion
-2 bei not ack
-3 bei write collision

Wie kann ich diese Fehlercodes auswerten?

Also zB.
1
unsigned int EERandomRead( unsigned char x, unsigned char y)
2
{
3
.
4
.
5
.
6
return( -2 );
7
}
8

9
void main( void )
10
{
11
  unsigned int temp;
12

13
  test = EERandomRead( 0xA0, 0x00 );
14

15
  if( test == '-1' )
16
    putsUSART( "Bus collition" );
17
  else if( test == '-2' )
18
    putsUSART( "Not ACK Error" );    
19
  else if( test == '-3' )
20
    putsUSART( "write collision" );
21
  else
22
.
23
.
24
.
25
}

So habe ich es versucht aber funktioniert nicht. Führt immer das else 
aus.

Bitte um Hilfe.
Gast #958891
Lesenswert?

Auf den ersten Blick würde ich jetzt sagen:

Vergleich den Rückgabewert mit einem Int und nicht mit einer 
Zeichenkette:
1
  if( test == -1 )
2
    putsUSART( "Bus collition" );
3
  else if( test == -2 )
4
    putsUSART( "Not ACK Error" );    
5
  else if( test == -3 )
6
    putsUSART( "write collision" );
7
  else
also die einfachen Anführungszeichen weg und es sollte funktionieren
Gast #959685
Lesenswert?

Hallo zusammen, ich habe dasselbe Probleme.
Wie habtihr das gelöst. bei mir mit der funktion test = EERandomRead( 
0x05, 0x68 ); komm immer raus test=0xFD und bei der SSPBUF=0x05;
wie habt ih das Problem gelöst.
Grüß

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren