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

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.