INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
ADC Register korrekt auslesen
16.08.2015, 23:24 (Dieser Beitrag wurde zuletzt bearbeitet: 17.08.2015 00:02 von Laura.)
Beitrag #1
ADC Register korrekt auslesen
Guten Abend,

zwecks hoher Samplingrate möchte ich das Ergebnis einer Analog-Digital-Wandlung direkt aus den Registern ADCH und ADCL auslesen. Diese sind dabei links ausgerichtet (ADLAR = 1 S.284 der Dokumentation des Mega2560).
Code:
byte lowbyte = ADCL;
byte highbyte = ADCH;
unsigned int erg = 0;
erg = lowbyte>>6;
erg = highbyte<<2;

So hab ichs bisher versucht, was aber wohl falsch ist. Da sich die eingelesenen Werte aber immer nur in 4er Schritten ändern, vermute ich, dass ich die beiden least significant bits verliere.

Gedanklich stelle ich mir einen Unsigned Integer so vor:

MSB --> 00111000 11001100 <---LSB und ein byte entsprechend MSB ---> 11000000 <--- LSB

Wegen der linksausrichtung sind nun für ADCH alle bits hoffentlich in dieser Reihenfolge belegt und für ADCL nur MSB --->11------ <--- LSB.

Also ergäbe sich mit ADCH = abcdefgh und ADCL = ijklmnop doch aus
Code:
erg = 0; // erg = 00000000 00000000
erg = highbyte<<8; // erg = 00000000 abcdefgh
erg = lowbyte<<2;  // erg = 000000ab cdefghij

erg = 000000ab cdefghij.

Leider passt das nicht dazu, dass ich mit obigen Zeilen scheinbar korrekt messe, nur eben mit 8bit Auflösung statt mit 10.

Ich bin verwirrt, kann wer helfen? Schöne Grüße

PS: Wird ADLAR irgendwann zurückgesetzt, abgesehen von einem Reset des Arduino insgesamt
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.08.2015, 06:16 (Dieser Beitrag wurde zuletzt bearbeitet: 17.08.2015 06:35 von Bitklopfer.)
Beitrag #2
RE: ADC Register korrekt auslesen
Hi,
also mit dem auslesen der beiden Ergebnisregister ist es ja nicht getan.
Dir ist der Ablauf wie man einen ADC zu Fuß bedient soweit klar ?
Auswahl der Referenzspannung - reicht im Setup
Kanal setzen,
Start Conversion
Warten auf E'nd O'ff C'onversion
Daten abholen
Daten in Integer Variable übergeben.

Wenn du das in C häcken willst kannste gleich die Funktion analogRead() nehmen, ansonsten eben alles in Assembler schreiben. Was ich selber noch nicht eroiert habe ist die Übergabe von Werten in eine Variable in C/Arduino Sketch.
Wobei ich den Zeitgewinn als gering einschätze da viele Librarys oder wohl auch Funktionen bei solchen Hardwarenahen Funktionen auch auf Assembler zurückgreifen. Auch darf man nicht außer acht lassen das die CPU Register möglicherweise durch das Betriebssystem belegt sind was dann erfordert diese Register vor der Nutzung erst mal auf den Stack zu pushen und am Ende von dort wieder herzustellen.

Zu deinem Bastelcode, ich weis nicht was dich da getrieben hat so einen Unsinn zu schreiben....das riecht für mich nach Beschäftigungstherapie fürs Forum Angry
Dabei ist das doch ganz einfach, ADLAR = 0 und dann ist ADCH das Upper Byte im unsigned Integer und ADCL das Lower Byte, die Befehle dazu wie man das zusammensetzt findet man bei arduino.cc unter Reference.

lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.08.2015, 09:44 (Dieser Beitrag wurde zuletzt bearbeitet: 17.08.2015 09:46 von Laura.)
Beitrag #3
RE: ADC Register korrekt auslesen
Danke, deine Antwort war insgesamt nicht hilfreich.

Ich stelle die richtige Rechnung trotzdem kurz vor, die ich gestern Nacht einfach nichtmehr zustande gebracht habe:

Code:
erg = 0; // erg = 00000000 00000000
erg = highbyte<<2; // erg = 000000ab cdefgh00
erg |= lowbyte>>6;  // erg = 000000ab cdefghij
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.08.2015, 11:06
Beitrag #4
RE: ADC Register korrekt auslesen
(17.08.2015 09:44)Laura schrieb:  Danke, deine Antwort war insgesamt nicht hilfreich.

Ich stelle die richtige Rechnung trotzdem kurz vor, die ich gestern Nacht einfach nichtmehr zustande gebracht habe:

Code:
erg = 0; // erg = 00000000 00000000
erg = highbyte<<2; // erg = 000000ab cdefgh00
erg |= lowbyte>>6;  // erg = 000000ab cdefghij

hilfreich, ach du willst uns weiters beschäftigen....weil zu bequem das Datenblatt zu lesen...zumal ich den Weg allgemeinverständlich aufgezeigt habe.
..und deine Bitschiebereien in den Bytes sind aber so was von daneben das es schon zum Himmel schreit Big GrinBig GrinBig Grin
Viel Spaß noch, ich bin hier dann draußen Tongue
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.08.2015, 11:10 (Dieser Beitrag wurde zuletzt bearbeitet: 17.08.2015 11:16 von Laura.)
Beitrag #5
RE: ADC Register korrekt auslesen
(17.08.2015 11:06)Bitklopfer schrieb:  
(17.08.2015 09:44)Laura schrieb:  Danke, deine Antwort war insgesamt nicht hilfreich.

Ich stelle die richtige Rechnung trotzdem kurz vor, die ich gestern Nacht einfach nichtmehr zustande gebracht habe:

Code:
erg = 0; // erg = 00000000 00000000
erg = highbyte<<2; // erg = 000000ab cdefgh00
erg |= lowbyte>>6;  // erg = 000000ab cdefghij

hilfreich, ach du willst uns weiters beschäftigen....weil zu bequem das Datenblatt zu lesen...zumal ich den Weg allgemeinverständlich aufgezeigt habe.
..und deine Bitschiebereien in den Bytes sind aber so was von daneben das es schon zum Himmel schreit Big GrinBig GrinBig Grin
Viel Spaß noch, ich bin hier dann draußen Tongue
lgbk

Hättest du meinen ersten Post gelesen, wäre dir aufgefallen, dass ich offensichtlich dass Datenblatt gelesen habe und Probleme mit dem bitshiften habe. Leider sind mir deine unsinnigen Antworten voller Hohn hier bereits mehrmals aufgefallen. Es führt dazu, dass du nicht auf die eigentliche Frage antwortest, sondern mir sagst, welche Register ich noch bearbeiten muss. Ein kleiner Hinweis ist sicher richtig, falls das nicht bedacht wurde, so wäre es hier aufgefallen. In meinem Fall trigger ich eine ADC Conversion per Timer Compare Match Interrupt und lese das Ergebnis in der Interrupthandling Routine des Conversion Complete Interrupts aus.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.08.2015, 17:50
Beitrag #6
RE: ADC Register korrekt auslesen
[OT]
@bk:
IMO gibt es so etwas wie "Beschäftigungscode" nicht.
Es gibt nur FRAGEN.

Wer sich mit der/den Frage(n) beschäftigen will, mag produktiv antworten ,
wer dazu Tipps geben will, mag dies (freundlich) tun,
und wer nicht, möge bitte schweigen.

Das verbessert insgesamt die Forums-Atmosphäre und auch die Effizienz der Topics.

my2ct.
[/OT]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Mit dem Arduino JSON Webseiten auslesen seb201 3 97 05.12.2016 22:25
Letzter Beitrag: Tommy56
  Messchieber auslesen mit nem UNO roadcaptain 8 317 15.11.2016 14:30
Letzter Beitrag: Tommy56
  U-blox Neo 6M GPS auslesen Matthias_Arduino 15 880 09.11.2016 16:40
Letzter Beitrag: AvrRobot
  mit Attiny85 Feuchtigkeitssensor auslesen toto1975 17 581 19.08.2016 22:40
Letzter Beitrag: hotsystems
  SoftwareSerial Baudrate automatisch korrekt erkennen - geht das? Gelegenheitsbastler 5 534 21.04.2016 12:32
Letzter Beitrag: SkobyMobil
  Encoder auslesen Phil333 1 670 23.03.2016 21:40
Letzter Beitrag: hotsystems
  "WORT" über die serielle Schnittstelle auslesen hannes77 1 539 08.03.2016 12:13
Letzter Beitrag: Binatone
  Probleme beim Auslesen eines IR Empfängers linuxpaul 7 577 06.03.2016 14:44
Letzter Beitrag: hotsystems
  Elro HIS20m Wandsender 433MHz auslesen mayrst 6 953 10.02.2016 12:33
Letzter Beitrag: mayrst
  Wetterdaten von Yahoo auslesen nowak222 12 1.289 08.02.2016 16:33
Letzter Beitrag: ardu_arne

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste