Hallo liebe Community, Ich habe das Kompassmodul HDMM01 von Pollin, von dem ich gerne den Winkel (also wo Norden ist sozusagen) auslesen und dementsprechend LEDs zum leuchten bringen möchte. Den Code für die LEDs für den jeweiligen Gradbereich habe ich schon. Jetzt tue ich mich aber schwer, das Auslesen codetechnisch umzusetzen. Hier habe ich schon einen guten Ansatz gefunden: http://playground.arduino.cc/Code/USIi2c allerdings weiß ich nicht, wie ich das genau umsetze, da mich das Datenblatt eher verwirrt als aufgeklärt hat: http://www.pollin.de/shop/downloads/D810164D.PDF Zum programmieren wird ein Arduino Uno als ISP benutzt. Vielen Dank schonmal, Henrik
Also ich habe jetzt ersteinmal die TinyWireM Library für den ATtiny44 zum Laufen gebracht. Jetzt versuche ich eben mir aus dem Datenblatt und dem beispielcode zur Libary was zusammenzubasteln. Die Funktion, die die Gradzahl ermitteln soll, sieht soweit so aus:
1 | void Get_Angle() { |
2 | |
3 | TinyWireM.beginTransmission(HDMM_ADDR); |
4 | TinyWireM.send (00000001); |
5 | TinyWireM.endTransmission(); |
6 | delay(20); |
7 | TinyWireM.beginTransmission(HDMM_ADDR); |
8 | TinyWireM.send (); |
9 | TinyWireM.endTransmission(); |
10 | |
11 | |
12 | } |
Auf Seite 6 der Anleitung wird der ganze Vorgang durchgegangen, die Anleitung ist aber so formatiert, dass man den entsprechenden Teil da nicht heraus kopieren kann... Hier der Link: http://www.pollin.de/shop/downloads/D810164D.PDF Das Nächste, was ich jetzt machen muss (wenn der Anfang überhaupt richtig ist) ist "Cycle Four", wo ich aber keine Ahnung habe, wie ich einen WRITE machen soll, ohne was zu schreiben... Liebe Grüße, Henrik
Ich versteh jetzt das Problem nicht ganz? Zum Auslesen die Adresse des Moduls senden mit write bit, dann ein 00000000 um ins einzige Register des Moduls zu schreiben und in dieses kommt eine 1 um die Messung zu starten. Das ganze natürlich in i2c_start und stop verpackt. würde in code so aussehen: i2c_start(adresse+I2C_WRITE); i2c_write(0); i2c_write(1); i2c_stop(); Jetzt mindestens 5ms warten. Jetzt wieder ein i2c start und die Moduladresse senden wieder mit write bit. Dann schreibste die adresse des register, dass du auslesen willst, sagen wir mal 00000000. Jetzt musst du den is2 restarten und kannst mit dem readbefehl die 5 register auslesen. c code: i2c_start(adresse+I2C_WRITE); i2c_write(0); i2c_rep_start(adresse+I2C_READ); byte0 = i2c_readAck(); byte1 = i2c_readAck(); byte2 = i2c_readAck(); byte3 = i2c_readAck(); byte4 = i2c_readNak(); i2c_stop();
Hallo Martin, vielen Dank! Das hat schon sehr weitergeholfen. Ich verstehe aber nicht wie ich i2c_start(adresse+I2C_WRITE); mit der gegebenen Library umsetze. Hier: http://playground.arduino.cc/Code/USIi2c steht, was man an Befehlen zur Verfügung hat, allerdings gibt es dort kein WRITE per se, man kann irgendwie nur ETWAS schreiben aber nicht einfach SCHREIBEN :-) Danke, Henrik
Bei dem Failduino Müll kann ich dir nicht helfen. Hier ne Atmel Appnote zu I2C mit dme USI Modul: http://www.atmel.com/Images/doc2561.pdf Zur Not machste I2C eben komplett in Software.
Also als "Fail" und "Müll" würde ich das jetzt nicht bezeichnen... Ist halt nicht wirklich das Optimum... Jedenfalls wird mir dann wohl nur übrig bleiben, es "komplett in Software" zu machen. Wie soll ich da denn ansetzen? Danke, Henrik
Für I2C in Software gibts fertige c libs ;) -> http://extremeelectronics.co.in/avr-tutorials/software-i2c-library-for-avr-mcus/ Naja wenn ich alleine schon die Bezeichner bei deiner Failduino lib da lese bekomm ich das blanke kotzen ;) bei I2C heist dast start und stop und NICHT request from oder so...
Also das mit dem Programmieren anderer Controller über die Arduino IDE hab ich jetzt aufgegeben, allerdings habe ich diese Anleitung gefunden: http://pdp11.byethost12.com/AVR/ArduinoAsProgrammer.htm Das heißt, ich müsste mir ja eigentlich keinen neuen ISP kaufen, ich könnte ja den Arduino mit dem entsprechenden Code zum ISP machen und dann mit Atmel Studio oder so den Code schreiben, als hex speichern und dann mit AVRdude auf den Controller flashen. Oder? Meine Frage ist dann aber: Wozu brauche ich denn den Crystal? Mit freundlichen Grüßen Henrik
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.