ADC 10bit auslesen

Gast #2024328
Lesenswert?

Hallo,

ich habe ein kleines Problem.
Ich hab ein Programm in C geschrieben um einen ADC Wert auszulesen und 
an PortC habe ich mit Widerständen einen DA-Wandler aufgebaut.
Das Programm schaltet also den Analogen Wert 1 zu 1 durch. Dazu habe ich 
nur eine 8 Bit Auflösung benutzt, jetzt würde ich gerne auf 10 Bit 
erhöhen. Dazu wollte ich noch PORTD PIN6 und PIN7 zum DA-Wandler dazu 
schalten.
Jetzt die Frage: Wie krieg ich den inhalt von ADCL auf die zwei PINS?
Bis jetzt habe ich einfach (ADCH = PORTC) benutzt.
Schon mal danke für die Antworten die hoffentlich kommen.

mfg peter
#2024338
Lesenswert?

Peter schrieb:

> Jetzt die Frage: Wie krieg ich den inhalt von ADCL auf die zwei PINS?

INdem du den ADC wie jeder andere über ADCW ausliest, dir also den 
10-Bit Wert in eine uint16_t Variable holst.

die untersten beiden Bits dieser Variable gibst du auf deinen 
D-Leitungen aus. Und für den Rest schiebst du in der Variablen alles um 
2 Stelle nach rechts und gibst sie wie bisher aus.
#2024344
Lesenswert?

Peter schrieb:
> Kannst du das auch als Code beispiel angeben?

Dein Codebeispiel beginnt damit, dass du dir aus dem AVR-GCC-Tutorial 
die ADC Funktionen holst und davon Abstand nimmst den ADC Wert direkt 
aus den ADC Registern auf die Ports klatschen zu wollen.
Denn nur so klappt es dann auch mit zb einem Mittelwert über mehrere ADC 
Werte bzw irgendwelchen Umrechnungen des ADC Wertes.
Gast #2024372
Lesenswert?

Hier mal der von mir geschreibene Code, es funktioniert so nicht.

    if (ADCL = 0b0000001)
      PORTD |= (1 << PD6);
    else
    PORTD &= ~(1 << PD6);

    if (ADCL = 0b00000010)
    PORTD |= (1 << PD7);
    else
    PORTD &= ~(1 << PD7);
#2024376
Lesenswert?

Peter schrieb:
> Hier mal der von mir geschreibene Code, es funktioniert so nicht.
>
>     if (ADCL = 0b0000001)

Das sind Zuweisungen und keine Vergleiche

ABfrage auf Gleichheit schreibt sich in C als ==

Ausserdem wird dein ADCL Register nicht den Wert 0b00000001 haben.

Ist das wirklich so schwer, sich aus dem Tutorial die ADC Routinen zu 
holen und dann das Tut von Anfang an reinzuziehen und erst mal über 
Bitverarbeitung nachzulesen?
Gast #2024394
Lesenswert?

>jetzt würde ich gerne auf 10 Bit
>erhöhen. Dazu wollte ich noch PORTD PIN6 und PIN7 zum DA-Wandler dazu
>schalten.

Zum Glück willst du die unteren Bits damit umschalten.
PORTC und PORTD können nicht gleichzeitig gesetzt werden.
Es geht zwar relativ schnell, aber beim umschalten der
unteren Bits wird es zu so was wie Umschaltrauschen kommen.
Ein kleiner Kondensator um 100pF am Ausgang vom DAC sollte
das aber platt bekommen.

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