Forum: Mikrocontroller und Digitale Elektronik Source Code für ADC bei Atmega328(Sparkfun ADXL345) für Gyrosensor


von michi (Gast)


Lesenswert?

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!

von Peter D. (pdiener) Benutzerseite


Lesenswert?

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

von Peter D. (pdiener) Benutzerseite


Lesenswert?

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

von michi (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von michi (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von michi (Gast)


Lesenswert?

hi,
du meinst schon das 
tutorial(http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC)?

mfg

von Karl H. (kbuchegg)


Lesenswert?

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