hi, ich habe das Sparkfun ADXL345 Eval Board(http://www.sparkfun.com/commerce/product_info.php?products_id=9814) und wollte es mit einem 2-Achs Gyrosensor(http://www.sparkfun.com/commerce/product_info.php?products_id=9094) bestücken. Leider krieg ich das Ding nicht zum laufen, weil ich jetzt nicht weiß was für register ich genau beschreiben muss um den ADC zu aktivieren. Die Register im ADXL345 Manual überschneiden sich mit dem des Atmega 328. Habe große Sorge dass wenn ich diese falsch beschreibe ich das Board nicht mehr zum laufen bekomme. Hat irgend jemand vielleicht Erfahrungen damit gemacht oder schon einen ferigen Source Code? Vielen Dank!
Der ADC im ATmega wird nicht benötigt, die Daten werden über SPI oder I²C ausgelesen. Wie das geht, steht im Datenblatt vom ADXL345 und hängt davon ab, ob er über I²C oder SPI angeschlossen ist. Grüße, Peter
Achso, jetzt verstheh ich die Frage erst... Es soll ja der IDG500 zusätzlich zum ADXL345 ausgelesen werden. Für den ADXL345 gibt es ja auf der verlinkten Seite schon einen Beispielcode, ich nehme an, dass dieser funktioniert. Der IGD500 hat natürlich einen Analogausgang und muss an den ADC vom ATmega angeschlossen werden. Der Beispielcode sollte spätestens nach kleinen Anpassungen auf dem 328 laufen: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Nutzung_des_ADC Grüße, Peter
hallo, also ich hab jetzt diese dateien auf das board geloaded. über tera term werden jetzt zwar alle 5 kanäle (3x beschleunigungssensor und 2x gyrosensor)angezeigt, jedoch bleiben die gyro-werte immer konstant bei x:0197 und y:01d2. ist meine main datei fehlerhaft oder kann das board keine 2 sensoren gleichzeitig auslesen? merci
michi schrieb: > und 2x gyrosensor)angezeigt, jedoch bleiben die gyro-werte immer > konstant bei x:0197 und y:01d2. Und, was sagt dein Voltmeter? Ändert sich die Spannung überhaupt am Eingang? Ach nö ...
1 | uint16_t x_gyro(void) //wird in x_gyro() ausgegeben!! muss ich dann zur visualisierung öffnen! |
2 | {
|
3 | uint16_t xl;// xlow register |
4 | uint16_t xh;// xhigh register |
5 | |
6 | // x-axis
|
7 | |
8 | //ADMUX = (1 << REFS0); // Referenzspannung
|
9 | ADMUX = 0b11000110; |
10 | //ADMUX |= ((1 << MUX1)|(1 << MUX2)); // 0110 =ADC6 -> MUX0=0; MUX1=1; MUX2=1; MUX3=0;
|
11 | |
12 | ADCSRA = ((1<<ADPS1)|(1<<ADPS0)); // ADPS2 und ADPS1 sind die Prescaler mit division factor 64 |
13 | ADCSRA |= (1 << ADEN); //ADEN schaltet ADC ein; ADSC =startet conversion; ADPS2 und ADPS1 sind die Prescaler mit division factor 64 |
14 | ADCSRA |= (1 << ADSC); //ADSC =startet conversion |
15 | |
16 | while(ADCSRA & (1 << ADSC)){}; |
17 | xl = ADCL; |
18 | xh = ADCH & 0x03; |
19 | xh = xh << 8; |
20 | xh = xh + xl; |
21 | |
22 | //ADMUX &= 0xF0;
|
23 | |
24 | return xh; |
25 | }
|
... schon wieder das Rumgefrickel auf Bitebene. Warum hast du denn nicht fürs erste die Tutorialroutinen so übernommen, wie sie im Tutorial sind? Eventuell noch die Referenzspannung anpassne, mehr aber auch nicht.
ich hab die main datei doch nach dem tutorial gemacht. admux usw. auf interne und die mux pc6 und pc7 zugewiesen. hab leider keine ahnung wie du das gemeint hast, da man doch sämtliche einstellungen nur über die bit verschiebung ändern kann, oder?
michi schrieb: > ich hab die main datei doch nach dem tutorial gemacht. Im Tutorial gibt es eine wunderbare ADC_Read Funktion. Der übergibt man die Kanalnummer und sie liest den Wert aus. Eine noch bessere Steilvorlage kann es wohl kaum geben. Es ist nicht verboten, die Routinen ADC_Init und ADC_Read aus dem Tutorial einfach 1:1 zu übernehmen und die Einstellung der Referenzspannung anzupassen.
michi schrieb: > hi, > du meinst schon das > tutorial(http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC)? Das ist das Assembler Tutorial. Du schreibst aber in C. Daher ist das C-Tutorial zuständig http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Nutzung_des_ADC
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.