www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC18 C18 I2C


Autor: Andreas Riegebauer (blackpuma)
Datum:

Bewertung
0 lesenswert
nicht 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:

unsigned char EEByteWrite(
   unsigned char control,
   unsigned char address,
   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

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

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

Weiß einer von euch da weiter?

LG
Andreas

Autor: Andreas Riegebauer (blackpuma)
Datum:

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

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

LG
Andi

Autor: Andreas Riegebauer (blackpuma)
Datum:

Bewertung
0 lesenswert
nicht 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.
unsigned int EERandomRead( unsigned char x, unsigned char y)
{
.
.
.
return( -2 );
}

void main( void )
{
  unsigned int temp;

  test = EERandomRead( 0xA0, 0x00 );

  if( test == '-1' )
    putsUSART( "Bus collition" );
  else if( test == '-2' )
    putsUSART( "Not ACK Error" );    
  else if( test == '-3' )
    putsUSART( "write collision" );
  else
.
.
.
}

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

Bitte um Hilfe.

Autor: nols (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf den ersten Blick würde ich jetzt sagen:

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

Autor: Joel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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üß

Autor: Andreas Riegebauer (blackpuma)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die Microchip Bibliothek umgeschrieben. Mein EERandomRead sieht 
jetzt so aus:
test = EERandomRead( 0xA0, 0x02, 0x03 );
// EERandomRead( Bauteiladresse, HighAdresse, LowAdresse );

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

LG
Andreas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.