mikrocontroller.net

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


Autor: michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ich habe das Sparkfun ADXL345 Eval 
Board(http://www.sparkfun.com/commerce/product_info.php?...) 
und wollte es mit einem 2-Achs 
Gyrosensor(http://www.sparkfun.com/commerce/product_info.php?...) 
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!

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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-Tu...

Grüße,

Peter

Autor: michi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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ö ...
uint16_t x_gyro(void)              //wird in x_gyro() ausgegeben!! muss ich dann zur visualisierung öffnen!
{
  uint16_t  xl;// xlow register
  uint16_t  xh;// xhigh register
  
  // x-axis
  
  //ADMUX = (1 << REFS0);        // Referenzspannung
    ADMUX = 0b11000110;
  //ADMUX |= ((1 << MUX1)|(1 << MUX2)); // 0110 =ADC6 -> MUX0=0; MUX1=1; MUX2=1; MUX3=0;
   
  ADCSRA = ((1<<ADPS1)|(1<<ADPS0));     // ADPS2 und ADPS1 sind die Prescaler mit division factor 64
  ADCSRA |= (1 << ADEN); //ADEN schaltet ADC ein; ADSC =startet conversion; ADPS2 und ADPS1 sind die Prescaler mit division factor 64
  ADCSRA |= (1 << ADSC); //ADSC =startet conversion
  
  while(ADCSRA & (1 << ADSC)){};
  xl = ADCL;
  xh = ADCH & 0x03;
  xh = xh << 8;
  xh = xh + xl;

  //ADMUX &= 0xF0;
    
  return xh;  
}

... 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.

Autor: michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: michi (Gast)
Datum:

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

mfg

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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-Tu...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.