Forum: Mikrocontroller und Digitale Elektronik PIC24FJ, XC16 I2C


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Max H. (hartl192)


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

von Frank M. (frank_m35)


Angehängte Dateien:

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.

von Max H. (hartl192)


Lesenswert?

Wow, das ging schnell. Werde mit dem Code mal ansehen.
Danke

von Max H. (hartl192)


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?

: Bearbeitet durch User
von Frank M. (frank_m35)


Lesenswert?

Solltest beim dritten MasterWriteI2C1 vielleicht ein Lesebefehl anstatt 
Schreibbefehl senden?!

von Michael H. (morph1)


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...

: Bearbeitet durch User
von Frank M. (frank_m35)


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.

von Max H. (hartl192)


Lesenswert?

Ich hatte "HMC5883L_Address_Read" und dabei ist der oben genannte Fehler 
aufgetreten, ich habe es nur für was anderes geändert und vergessen es 
vor dem Posten zurückzuändern.

von Michael H. (morph1)


Lesenswert?

Naja, aber wir wissen immernoch nicht was du denn damit definiert 
hast... Da hier eine potenzielle Fehlerquelle liegt, wäre es nicht 
verkehrt uns mal zu sagen was hinter der Variablen/dem Makro steckt ;)

von Frank M. (frank_m35)


Lesenswert?

Ebenso wissen wir nicht wie du den I2C Bus initialisiert hast.
Woher weisst du dass 0x5C ausgegeben werden? Hast du die Variable mal 
direkt über den Debugger ausgelesen?

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]
  • [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.