Forum: Mikrocontroller und Digitale Elektronik mega8 und ADXL345 an Fleury Soft- I2C / TWI


von Matze N. (hupe123)


Angehängte Dateien:

Lesenswert?

Hi,

ich versuche einen ADXL345 (Beschleunigungssensor) an einen ATmega8 mit 
4,0Mhz per SOFT I2C anzubinden.
Ich benutze die Bibliothe von Fleury und programmiere eingentlich in C 
mit WINAVR.
Ich habe die master.s in die Makefile eingebunden und die i2cmaster.h in 
meine main.h.
Der Compiler schmeisst keine Fehlermeldung aus.

Die Init vom soft-i2c läuft auch durch, allerdings die init von Sensor 
nicht. Wenn ich allerdings am Kabel wackel, dann läuft die durch. Es 
kommen auch nur dann Messwerte, wenn ich am Kabel wackel. Klar, auch 
mein erster Gedanke: Kabel im Arsch... Aber NEIN:
Die Messwerte sind gewürfelt. Sogar wenn ich meinen Finger an den Port 
halte, kommen Messwerte an - und ich glaube nicht, daß mein Zeigefinger 
eine ordentliche I2C-Kommunikation hinbekommt.

Wo liegt mein Fehler? Der Quellcode inkl. Makefile und hex sind im 
Anhang.

Danke! Grüß,
Matze

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Matze Niemand schrieb:

> Sogar wenn ich meinen Finger an den Port
> halte, kommen Messwerte an - und ich glaube nicht, daß mein Zeigefinger
> eine ordentliche I2C-Kommunikation hinbekommt.

Braucht er ja auch nicht.

Der Portpin wird brutal einfach abgefragt und der dann ermittelte Wert 
wird an die aufrufenden Funktion als Wert weitergegeben.

Die Absicherung, dass es gültige I2C Daten sind, können die 
angeschlossenen Geräte machen, wenn sie zusätzlich Prüfsummen  oder 
CRC-Byte(s) übermitteln.

von Matze N. (hupe123)


Lesenswert?

Und wie löse ich dann das Problem?

Hast du da eine Lösung für mich?

Grüße

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ich würde als erstes die Hardware kontrollieren. Selbst wenn das I2C 
Gerät richtige Daten liefern würde, kann es doch nicht angehen, dass ein 
Rumpacken am Kabel die eingelesenen (illegalen) Daten ändert. Oder ist 
der ADXL345 (Beschleunigungssensor) so empfindlich montiert, dass diese 
Bewegung schon auf den Sensor übertragen und ausgewertet wird? Ggf. 
Schaltplan und Foto vom Aufbau zeigen (Bildformate beachten).

Wenn das steht, würde ich nachsehen, ob das I2C Gerät richtig 
angeschlossen und angesteuert wird. Dazu ist bestimmt ein I2C Analyzer 
(Sniffer, Monitor) oder ein LA oder ein Oszi hilfreich. Vielleicht 
fallen anderen bei den Protokollen und Timing-Screenshots was auf. Wenn 
diese Tools nicht vorhanden sind, Bescheid sagen.

Link zum Datenblatt des I2C Geräts ist vielleicht auch nützlich, wenn 
man die Ansteuerung kontrollieren will.

von Matze N. (hupe123)


Angehängte Dateien:

Lesenswert?

das i2c-gerät funktioniert ordnungsgemäß. ich habe es an einem Hardware 
i2c bus getestet.
ich kann mir das wirklich nicht erklären. ich habe eben, einfach mal 
spaßeshalber, probiert den sensor mit einer falschen adresse 
anzusprechen und selbst dann kriege ich gewürfelte werte...
komische messwerte bekomme ich auch, wenn ich SCL und SDA vertausche - 
da dürfte dann eigentlich gar nichts mehr kommen.
ich kriege auch nur "messwerte" wenn ich am kabel wackel, sonst nicht...

anbei das datenblatt des sensors.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Datenblatt und Archiv habe ich geladen und schaue mir den Code am 
Abend/Wochenende in Ruhe an.

Bisher habe ich nur mit der Fleury Hardware-TWI Library experimentiert 
(Atmega8 und DS1621 
Pollin Funk-AVR-Evaluationsboard: Temperaturmessung mit DS1621) aber 
das Beispiel habe ich noch aufgebaut und ich werde das auf die Fleury 
Software-TWI Library umstellen.

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.