Arduino 10Bit ADC in 8Bit umwandeln

OP #4865760
Lesenswert?
• ▲
▼
Hallo,

ich hab jetzt angefangen mein erstes C Projekt auf Arduino mega (avr) 
2560 zu programmieren.
Es gibt eine Funktion mit der man dem Arduino sagt, dass er 8bit ADC 
lesen kann statt der standart 10bit:
--------------------------------------------
analogReadResolution(8)

analogReadResolution() is an extension of the Analog API for the Arduino 
Due and Zero.

---------------------------------------------

Geht aber nur bei Due und Zero, also nicht auf meinem Board. Das ist 
etwas doof, weil ich schon viel in Assembler gemacht habe weiss ich, 
dass es auch in 8 bit geht beim 2560. Wie erklär ich das meinem Arduino 
dass er das machen soll was der AVR auch kann:

; ADC-Konfiguration
ldi  temp, 0b01100000  ; ADC einstellen - Aref = AVCC | Linksbündig | 
ADC0
out  ADMUX, temp


im grunde macht die analogReadResolution(8) des Arduino Due Zero genau 
das was mein Assembler Code macht.

Oder hat vielleicht jemand ein bischen Code für Arduino da um die int 
10bit in ein byte 8bit zumzuwandeln :) ?

vielen Dank!

gruß
Stefan
OP #4865852
Lesenswert?
• ▲
▼
Peter II schrieb:
> Stefan S. schrieb:
>> Oder hat vielleicht jemand ein bischen Code für Arduino da um die int
>> 10bit in ein byte 8bit zumzuwandeln :) ?

> uint16_t wert10bit = ReadAnalog();
> uint8_t wert8bit = wert10bit >> 2;

also den 10bit Wert einfach durch 2 teilen um 8bit zu bekommen hab ich 
das richtig verstanden ?

    AnalogInput0 = analogRead(analogPin0);
    ADC0 = AnalogInput0 / 2;
OP #4865978
Lesenswert?
• ▲
▼
so geht's :

byte ADC0;

ADCSRA |= (1<< ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);   // ADC 
einschalten Prescaler auf 128

ADMUX |= (1 <<  REFS0) | (1 << ADLAR); // ADC linksbündig / referenz = 
VCC / ADC= 0

ADCSRA |=(1<< ADSC);                             // starte AD convention

while (ADCSRA & (1<<ADSC) ) {     // auf Abschluss der Konvertierung 
warten
    }

   ADC0 = ADCH;
   Serial.println(ADC0);


und so geht's auch:


int AnalogInput0 = analogRead(analogPin0);
byte ADC0 = AnalogInput0 >> 2;
Serial.println(ADC0);

DANKE !

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.