Hallo, Für mein Projekt muss ich eine I2C-Kommunikation zwischen ATMEGA88A und Beschleunigungssensor ADXL345 etablieren. Ich habe eine I2C-Library probiert, aber ich denke funktioniert nicht !!, weil der Mikrocontroller keine Daten von dem Sensor ausliest. Habt Ihr vielleicht eine nützliche I2C-Bibliothek? Im Anhang findet Ihr die I2C-Bib, die ich benutzt habe.
Kevin A. schrieb: > Ich habe eine I2C-Library > probiert, aber ich denke funktioniert nicht !! Aber ich denke die funktioniert schon. Der Auto hat da etwas ganz niedliches Universelles kreiert, eine Soft-I2C-Library! Kevin A. schrieb: > weil der Mikrocontroller keine Daten von dem Sensor ausliest. Nein sondern weil du die Library nicht richtig benutzt. Zeige dein Programm, zeige was du beobachtest und was du dagegen erwartest. Kevin A. schrieb: > Habt Ihr vielleicht eine nützliche I2C-Bibliothek? Die dir vorliegende Bibliothek ist sehr nützlich!
Kevin A. schrieb: > Ich habe eine I2C-Library > probiert, aber ich denke funktioniert nicht !!, weil der Mikrocontroller > keine Daten von dem Sensor ausliest. Antwortet der Sensor nicht oder erscheinen keine/falsche Signale auf dem Bus? Mit welcher Spannung betreibst du den µC, mit welcher den ADXL345?
Kevin A. schrieb: > Habt Ihr vielleicht eine nützliche > I2C-Bibliothek? ja http://www.peterfleury.e(pi)zy.com/avr-software.html?i=1 http://www.peterfleury.e(pi)zy.com/lcdlibrary.zip http://www.peterfleury.e(pi)zy.com/doxygen/avr-gcc-libraries/group__pfleury__ic2master.html !!!!! ( ) aus den Links ENTFERNEN !!!!! I2C Master Interface This library consists of a C include file i2cmaster.h and an assembler module i2cmaster.S. It can be used to communicate with I2C devices (serial EEPROM, serial RTC etc) from any AVR device. nur muss man die auch richtig einbinden!
:
Bearbeitet durch User
Joachim B. schrieb: > nur muss man die auch richtig einbinden! Daran wird der TO auch scheitern wenn er schon an der ersten unspezifischen Fehlfunktion seiner Implementierung verzweifelt.
Ohne Scope geht da gar nichts. Nur damit kannst du sehen, was auf dem Bus raus geht. Welche Adresse benutzt wird. Und ob der ADXL auch darauf antwortet. Alles andere ist Stochern im Nebel. Anbinden von Hardware ist mehr als Copy&Paste bzw Austauschen eine Library, weil die andere nicht ging. Du musst den Grund des Fehlverhaltens finden, und das kann auch an der Hardware liegen. Also Messen und Analysieren. Alles andere ist blauäugig. Also mach bitte auch keinen dritten Thread auf, nur weil du es mit der zweiten Bibliothek auch nicht schaffst.
Ach noch was. In dem lustigen C-Code kann ich nirgends finden, wo die Slave-Adresse (laut Datenblatt 0x1D) benutzt wird. Habe ich das Übersehen? Kannst du mir das noch erklären, wo das gemacht wird? Ich finde nur Register und Data in einer Kommunikation, aber nicht die Slave-Adresse. Ist das normal beim AT-Mega?
Kevin A. schrieb: > aber ich denke funktioniert nicht Kevin A. schrieb: > Habt Ihr vielleicht eine nützliche I2C-Bibliothek? Nicht denken, messen! Besorge dir einen Logic Analyzer und schau nach, was los ist. Kostet keine 10 Euro! Zusätzlich ist ein Oszilloskop hilfreich, um die Signalqualität zu überprüfen. Dafür reicht schon so ein billiges DSO150, falls du sparen musst. Wenn du uns deinen Schaltplan und Fotos vom Aufbau zeigst, können wir dir auch dabei helfen. Ist besser als einfach blind davon auszugehen, dass die Schaltung schon OK sei. By the way: Den gleichen Code hatten wir vor wenigen Tagen schon einmal diskutiert. Beitrag "ATMEGA88A/Beschleunigungssensor (ADXL345)" Auch da wurde auf den Schaltplan und Logic Analyzer hingewiesen. Meinst du wir schreiben das nur, um dich zu verapplen?
Schau dir http://stefanfrings.de/mikrocontroller_buch/index.html an, insbesondere Band 2 Kapitel 5.9. Im Anhang 12.2 findest du einen Beispielcode den ich ziemlich intensiv auf einem ATmega16 verwendet hatte. Theoretisch geht der auf jedem ATmega.
Lötlackl *. schrieb: >> zu verapplen > veräppeln auf denglisch? Kleiner Seitenhieb gegen meine liebste Lästerfirma.
Stefan ⛄ F. schrieb: > Kleiner Seitenhieb gegen meine liebste Lästerfirma. Achso. Fleurys Lib verwende ich übrigens auch gerne. Habe mir noch was sinnvolles dazugebastelt.
1 | #include "i2cmaster.h" |
2 | |
3 | uint8_t i2c_write_chunk(uint8_t device_addr, uint8_t address, uint8_t *pChunk, uint8_t nBytes) |
4 | {
|
5 | uint8_t retval; |
6 | i2c_start_wait(device_addr+I2C_WRITE); // set device address and write mode |
7 | retval = i2c_write(address); // write address |
8 | while(nBytes--) |
9 | {
|
10 | retval += i2c_write(*pChunk++); // write data to address |
11 | }
|
12 | i2c_stop(); // set stop conditon = release bus |
13 | return retval; |
14 | }
|
15 | |
16 | uint8_t i2c_read_chunk(uint8_t device_addr, uint8_t address, uint8_t *pChunk, uint8_t nBytes) |
17 | {
|
18 | uint8_t retval; |
19 | i2c_start_wait(device_addr+I2C_WRITE); // set device address and write mode |
20 | retval = i2c_write(address); // write address |
21 | retval += i2c_rep_start(device_addr+I2C_READ); // set device address and read mode |
22 | while (nBytes--) |
23 | { // read data from address |
24 | *pChunk++ = i2c_read( (nBytes) ? I2C_ACK : I2C_NAK ); |
25 | } // 1 send ack, request more data from device, 0 send nak, read is followed by a stop condition |
26 | i2c_stop(); // set stop condition = release bus |
27 | return retval; |
28 | }
|
Vielleicht kanns wer brauchen.
Kevin A. schrieb: > Im Anhang findet Ihr die I2C-Bib, die ich benutzt habe. ... und hier findet man den ersten erfolglosen Ansatz sein Problem zu lösen: Beitrag "ATMEGA88A/Beschleunigungssensor (ADXL345)" Immer das gleiche Spiel: nebulöse, unvollständige Angaben zur Problemstellung. Keine vollständige Source, kein Schaltplan, kein Foto vom Versuchsaufbau, etc. Diese Arbeitsweise ist zum Scheitern verurteilt.
Joachim B. schrieb: > !!!!! ( ) aus den Links ENTFERNEN !!!!! Kevin A. schrieb: > Website ist nicht erreichbar !! Liest du die Posts eigentlich?
PittyJ schrieb: > Ohne Scope geht da gar nichts. Mist, was habe ich falsch gemacht? Ich nahm die erste I2C Lib von Fleury ohne Scope in Betrieb! kaum macht mans richtig funktioniert es zu oft. Bei HW Fehler gebe ich dir Recht!
:
Bearbeitet durch User
123 schrieb: > Joachim B. schrieb: >> !!!!! ( ) aus den Links ENTFERNEN !!!!! > > Kevin A. schrieb: >> Website ist nicht erreichbar !! > > Liest du die Posts eigentlich? vielen Dank . Mittels dieser Bib kann jetzt den Mikrocontroller die Werte auslesen.
Joachim B. schrieb: > Bei HW Fehler gebe ich dir Recht! Ob es ein HW-Fehler oder ein SW-Fehler ist, zeigt sich oft leider erst, wenn man den Dingen mit Messtechnik und Debugger auf die Finger schaut ;-)
PittyJ schrieb: > Ohne Scope geht da gar nichts. Joachim B. schrieb: > Mist, was habe ich falsch gemacht? > Ich nahm die erste I2C Lib von Fleury ohne Scope in Betrieb! Joachim, ich bin in letzter Zeit echt über die Qualität deiner Kommentare enttäuscht. Wenn du nicht helfen willst, dann halte dich doch einfach raus! Du stichelst nur noch. In diesem Fall hast du sogar einen einzelnen Satz aus dem Zusammenhang gerissen, nur um den Pitty blöd da stehen zu lassen. Dabei hat er diesen Absatz völlig korrekt und sinnvoll fortgeführt: > Ohne Scope geht da gar nichts. > Nur damit kannst du sehen, was auf dem Bus raus geht. Welche Adresse > benutzt wird. Und ob der ADXL auch darauf antwortet. > Alles andere ist Stochern im Nebel. Wenn die Kommunikation bei dir Joachim geklappt hat, dann hast du natürlich keinen Grund, Messgeräte aufzubauen. Aber hier in diesem Thread geht es nicht um deinen guten Fall. Was ist los mit dir?
soft lib user schrieb: > ... und hier findet man den ersten erfolglosen Ansatz sein > Problem zu lösen: > > Beitrag "ATMEGA88A/Beschleunigungssensor (ADXL345)" > Das wäre nicht schlimm, manchmal braucht man mehrere Anläufe aus unterschiedlichen Startpositionen. Anscheinend war das zu langweilg, dort mit dem bisher erzielten Stand weiter machen zu wollen. Und Du hast erneut den genau gleichen Quelltext gepostet, der den Sensor nicht mit seiner Adresse anspricht und läßt somit keine Eigeninitiative und keinen Lernfortschritt erkennen. Das muß man sich erst mal trauen. " Created: 12/26/2021 11:56:58 AM * Author: hamza" >Für mein Projekt muss ich Für eine von außen aufgewungene Aufgabe kann man nur schwerlich Elan und Hingabe entwickeln. Na wenigstes geht's jetzt. mfG
Ist der Controller korrekt gefused und die Frequenz des Quarzes richtig im Code angegeben? Wenn die Timings aus irgendeinem Grunde nicht stimmen, weil der Vorteiler nicht richtig gesetzt ist oder eine andere Taktfrequenz dem Compiler übergegebn wird, dann ist das Ergebnis ebenfalls für den Popo!
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.