Forum: Mikrocontroller und Digitale Elektronik I2C-Bibliothek für ATMEGA88A


von Kevin A. (kev003)


Angehängte Dateien:

Lesenswert?

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.

von Crazy Harry (crazy_h)


Lesenswert?

Wie ist der ADXL angeschlossen?

von soft lib user (Gast)


Lesenswert?

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!

von Wolfgang (Gast)


Lesenswert?

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?

von Joachim B. (jar)


Lesenswert?

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
von soft lib user (Gast)


Lesenswert?

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.

von Wie immer... (Gast)


Lesenswert?

hast du Pullup Widerstände verbaut?

von PittyJ (Gast)


Lesenswert?

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.

von Kevin A. (kev003)


Lesenswert?

Website ist nicht erreichbar !!

von PittyJ (Gast)


Lesenswert?

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?

von Stefan F. (Gast)


Lesenswert?

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?

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> zu verapplen

veräppeln auf denglisch?
OMG

von Stefan F. (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

Lötlackl *. schrieb:
>> zu verapplen
> veräppeln auf denglisch?

Kleiner Seitenhieb gegen meine liebste Lästerfirma.

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

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.

von soft lib user (Gast)


Lesenswert?

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.

von 123 (Gast)


Lesenswert?

Joachim B. schrieb:
> !!!!! ( ) aus den Links ENTFERNEN !!!!!

Kevin A. schrieb:
> Website ist nicht erreichbar !!

Liest du die Posts eigentlich?

von SCNR (Gast)


Lesenswert?

123 schrieb:
> Liest du die Posts eigentlich?

Lesen alleine reicht oft nicht ...

von Joachim B. (jar)


Lesenswert?

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
von Kevin A. (kev003)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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 
;-)

von Stefan F. (Gast)


Lesenswert?

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?

von Christian S. (roehrenvorheizer)


Lesenswert?

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

von Gerald B. (gerald_b)


Lesenswert?

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
Noch kein Account? Hier anmelden.