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

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