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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren