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

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.