www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC 10bit auslesen


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if bit in wert gleich eins
   setze ausgang
ansosnten
   lösche ausgang

das ganze für die beiden Bits.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du das auch als Code beispiel angeben?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, das ist soweit schon formuliert.
Der Rest ist nachschauen bei Bitoperationen und if-Abfrage.
Das lernst du selber :-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl
hört sich gut an. Das Problem ist nur das ich in C ein absoluter 
Änfanger bin. Kannst du mir das auch als Code angeben?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> @Karl
> hört sich gut an. Das Problem ist nur das ich in C ein absoluter
> Änfanger bin. Kannst du mir das auch als Code angeben?

Siehe AVR-GCC-Tutorial

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay dann wende ich mich mal dem Tuturial zu, trotzdem Danke.

mfg peter

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke an sowas hab ich noch gar nicht gedacht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.