PIC18 C18 I2C

OP #956418
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
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
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
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
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üß
OP #959865
Ich habe die Microchip Bibliothek umgeschrieben. Mein EERandomRead sieht 
jetzt so aus:
1
test = EERandomRead( 0xA0, 0x02, 0x03 );
2
// EERandomRead( Bauteiladresse, HighAdresse, LowAdresse );

Also kann ich bis zu 64k Speicherstellen des EEProms beschreiben.

LG
Andreas

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.