PIC24FJ, XC16 I2C

OP #3730543
Lesenswert?
• ▲
▼
Ich möchte den HMC5883L Kompass Sensor mit meinem PIC24FJ64GA002 über 
I2C ansteuern. Ich habe gesehen, dass es von Microchip mit dem XC16 
Compiler eine  I2C Library mitbringt, nur habe ich leider nicht 
verstanden wie ich sie anwende. Hat jemand zufällig einen Beispielcode 
oder weiß wo ich einen finde der die Anwendung dieser Lib zeigt?

Vielen Dank
Max
#3730560
Lesenswert?
• ▲
▼
Hier findest du die nötigen Beispiele:
http://www.microchip.com/CodeExamplesByFunc.aspx

An den Post angehängt habe ich meine eigene I2C Implementierung sowie 
die Ansteuerung des Magnetsensors für einen PIC24FJ256GB108.
Angehängte Dateien:
OP #3730699
Lesenswert?
• ▲
▼
Ich habe mit der Lib von Microchip einen Code geschrieben, der aber 
leider nicht funktioniert:
1
    StartI2C1();  //Send the Start Bit
2
    IdleI2C1();    //Wait to complete
3

4
    MasterWriteI2C1(HMC5883L_Address_Write);  //transmit write command
5
    IdleI2C1();
6
    MasterWriteI2C1(0x0A);
7
    IdleI2C1();
8

9
    RestartI2C1();
10
    IdleI2C1();
11
    MasterWriteI2C1(HMC5883L_Address_Write);  //transmit write command
12
    IdleI2C1();
13

14
    readbuf=MasterReadI2C1();
15
    NotAckI2C1();
16
    StopI2C1();  //Send the Stop condition
17
    IdleI2C1();  //Wait to complete
18
    LATB=readbuf;
Ich versuche das "Identification Register A", in dem 0x48 stehen sollte, 
auszulesen, der µC gibt mir aber immer 0x5C aus. Hat jemand eine Ahnung 
woran das liegen könnte?
#3730784
Lesenswert?
• ▲
▼
Frank M. schrieb:
> Solltest beim dritten MasterWriteI2C1 vielleicht ein Lesebefehl
> anstatt
> Schreibbefehl senden?!

Nein, nach dem Repeated-Start kommt erstmal wieder die Bus-Adresse. Was 
allerdings richtig zu setzen (oder zu löschen) wäre, ist das Write-Bit 
beim ersten Schreib-Zugriff (oder eben beim 3., man sieht ja leider 
nicht wie "HMC5883L_Address_Write" definiert ist) :)

Andernfalls wird die interne Schreib-/Leseadresse nicht auf die 
gewünschte 0x0A gesetzt.
Ich würde übrigens empfehlen die I²C-Sachen selbst zu schreiben, die 
Makros/Funktionen von Microchip sind furchtbar und zusätzlich auch noch 
blocking...
#3730839
Lesenswert?
• ▲
▼
Michael H. schrieb:
> Frank M. schrieb:
>> Solltest beim dritten MasterWriteI2C1 vielleicht ein Lesebefehl
>> anstatt
>> Schreibbefehl senden?!
>
> Nein, nach dem Repeated-Start kommt erstmal wieder die Bus-Adresse. Was
> allerdings richtig zu setzen (oder zu löschen) wäre, ist das Write-Bit
> beim ersten Schreib-Zugriff (oder eben beim 3., man sieht ja leider
> nicht wie "HMC5883L_Address_Write" definiert ist) :)

Naja, das meinte ich auch mit Lesebefehl senden 
(MasterWriteI2C1(HMC5883L_Address_Read), sofern definiert), aber stimmt 
war blöd und missverständlich von mir ausgedrückt.

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.