Hi!
Folgendes Setup steht bei mir auf dem Schreibtisch:
- Arduino UNO mit ATMega328p
- AVR ISP mkii, programmiert wird in C mit AtmelStudio
- MPU6050 mit Breakout Board auf Steckbrett. GND an GND, VCC an die 3,3V
vom Arduino, SCL an SCL, SCA an SCA.
- Stromversorgung über USB
Zur Software:
Ich möchte folgende Library benutzen:
http://davidegironi.blogspot.de/2013/02/avr-atmega-mpu6050-gyroscope-and.html
Diese entpacke ich. Dann neues Projekt in AtmelStudio erstellen. Den
Inhalt der main.c aus der Lib kopieren ich in meine projektname.c, die
ich mit AtmelStudio erstellt habe.
Dort ändere ich die Baudrate auf 9600:
1
#define UART_BAUD_RATE 9600
Ausserdem wird noch die CPU Taktfrequenz definiert:
1
#define F_CPU 16000000UL
Mit einem Rechtsklick auf "Projektname" im Solution Explorer => Add =>
Existing Item füge ich die Dateien
1
i2cmaster.h
2
mpu6050.h
3
mpu6050.c
4
mpu6050dmp6.c
5
mpu6050registers.h
6
twimastertimeout.c
7
uart.c
8
uart.h
hinzu.
In der mpu6050.h muss ich dann noch die Zeile
1
#include MPU6050_I2CFLEURYPATH
in
1
#include"i2cmaster.h"
ändern.
Anschließend bekomme ich noch einen Fehler bei:
1
#include"mpu6050/mpu6050.h"
2
#include"uart/uart.h"
Was bewirkt diese Schreibweise? Hab das ehrlich gesagt noch nie gesehen.
Mein Workaround:
1
#include"mpu6050.h"
2
#include"uart.h"
Dann läuft das Programm. Wenn ich mir den Output aber mit HTerm anschaue
(8Databits, 1Stopbit, Parity None, 9600Baud) kommt nur Müll an.
Das Meisste sind Quadrate (Wahrscheinlich nicht darstellbare Symbole).
Kann mir irgendeiner sagen, wo denn mein Fehler liegt? Wäre euch
wirklich sehr dankbar!
Grüße!
Sorry für den Doppelpost, aber ich hab was vergessen:
Der häufige Fehler, dass mit den UART Einstellungen was nicht passt,
kann man denke ich ausschließen. F_CPU und die Baudrate sind richtig
definiert, den Rest macht die Lib von Peter Fleury zum Glück alleine.
Grüße!
>Der häufige Fehler, dass mit den UART Einstellungen was nicht passt,>kann man denke ich ausschließen. F_CPU und die Baudrate sind richtig>definiert, den Rest macht die Lib von Peter Fleury zum Glück alleine.
Dummerweise reicht es aber nicht die im Quellcode zu definieren.
Die Fuses müssen auch dazu passen.
Ansonsten liegt der Fehler wohl in einem Codeteil den keiner
sehen kann.
Hi!
holger schrieb:> Dummerweise reicht es aber nicht die im Quellcode zu definieren.> Die Fuses müssen auch dazu passen.
Daran sollte es eigentlich nicht liegen. Ich habe Heute morgen das
Beispiel der Fleury Lib ausprobiert. Dies hat problemlos funktioniert.
Seitdem hab ich die Fuses nicht mehr angepackt.
Fuses:
BODLEVEL = 2V7
RSTDISBL = [ ]
DWEN = [ ]
SPIEN = [X]
WDTON = [ ]
EESAVE = [ ]
BOOTSZ = 256W_3F00
BOOTRST = [X]
CKDIV8 = [ ]
CKOUT = [ ]
SUT_CKSEL = EXTFSXTAL_16KCK_14CK_65MS
EXTENDED = 0xFD (valid)
HIGH = 0xDE (valid)
LOW = 0xF7 (valid)
Sollte doch soweit passen?
Evtl. kann ja jemand das oben beschriebene Verfahren nachvollziehen...
Grüße!
Hi!
hab jetzt das Problem mit dem UART selber lösen können. Woran es lag,
weiss ich ehrlich gesagt nicht, aber die Funktionen, die in der main()
die Daten ausgeben sollten, haben nicht funktioniert.
Ich habe nun selber etwas Code:
Ein Problem mit dem UART kann ich dabei ausschließen, denn wenn ich in
der main() eine Variable hochzählen lasse, und diese in ax, ay und az
schreibe und das anschließend wie gewohnt ausgeben lasse, sind auch 200
und mehr ausgegebene Zeilen kein Problem.
Ich bin mal wieder ratlos. Irgendjemand eine Idee, an was das liegen
könnte?
Grüße - Ich hoffe ich darf den teilweisen Inhalt der Lib hier so
reinkopieren, Quellenangabe ist ja dabei...
Hi!
Hab nochmal ein wenig rumprobiert, dabei ist mir folgendes aufgefallen:
Obs funktioniert ist von der Zeit des Delays abhängig. Bei 500ms zickt
das Teil rum.
Gerade läufts mit 100ms Delay, da funktioniert alles bestens.
Bei 50ms Delay gibts nach wenigen Zeilen nur noch -1 als
Beschleunigungswert, ebenso bei 80ms und 150ms.
Warum bekomme ich nur bei 100ms Delay reproduzierbare Werte heraus?
Mir erscheint das ganze mehr als komisch. Hat irgendjemand noch eine
Idee, an was das liegen könnte? Ich bin mit meinem Latein am Ende.
Grüße!