Poti zur Dateneingabe verwenden

Gast #2867
Lesenswert?

Moin moin Axel,

in der einfachsten Form gehts folgendermaßen:

Ersten Anschluß des Potis an 1,245V legen.
Zweiten Anschluß des Potis an Masse.
Schleifer (mittlerer Anschluß) an ADC 0.

In der Codesammlung findest du bestimmt Routinen, mit denen du den AVR 
füttern kannst.
Dann (wie gesagt im einfachsten Fall) einen Port als Ausgang wählen und 
dort 8 LED`s anschliessen. LED`s so anordnen, das Bit 0 rechts steht 
(LSB) und Bit 7 am weitesten links (MSB). Die anderen 6 LED`s dazwischen 
anordnen.  Je nach angelegter Spannung geben die LED`s jetzt das 
Bitmuster der Spannung wieder.

Gruß,
Günter
Gast #2870
Lesenswert?

Die Eingabe von Werten via Poti
ist für Hobbyanwendungen ein clevere Sache.
Ich versuche es so einfach wie möglich.


Das Poti mit einem Bein an 0V und mit dem
anderen Bein an +5V. Den Schleifer verbindest
Du mit dem AD-Eingang z.B. bei mir AD7.
Die Referenzspannung von 5V muß auch angelegt werden.

Dieser Pseudocode für den 8535 funktioniert bei mir.

Per Interrupt holst Du den AD-Wert in zwei Hilfsvariablen

SIGNAL (SIG_ADC)  // Interrupt kommt wenn der Wandler mit der Conversion 
fertig ist
  {
  lo_val = inp(ADCL);
        // Wert des AD-Wandlers in Variable            transferieren
  hi_val = inp(ADCH);
        // Wichtig: immer zuerst
               das low-byte lesen
  }


main()

Hiermit schaltest Du einen Analogeingang (hier 7) intern auf den 
AD-Wandler

outp(7, ADMUX);    // Den Analog Eingangsmultiplexer auf Eingang AD7 
stellen


z.B. in einer Schleife startest Du die Wandlung

outp((1<<ADEN)|(1<<ADSC)|(0<<ADFR)|(1<<ADIE)|(1<<ADPS0)|(1<<ADPS1)|(1<<A 
DPS2),ADCSR);
  // AD-Wandler einschalten => ADEN
  // AD-Wandlung starten => ADSC
  // AD-Wandlung 1 = free running, 0 = single conversion => ADFR
  // AD Complete Interrupt freigeben => ADIE
  // ADPS0-2 bei 8MHz die Konversationsfrequenz auf 8MHz/128= 62500 Hz 
stellen
  // ADCSR = AD-Steuerregister

Irgendwann ist dann der Wandler fertig...
und Du kannst den 10Bit Wert auf 8Bits umwandeln.

ad = 0;
ad = (hi_val<<6) | (lo_val>>2);

in ad ist dann Dein Wert

Ich hoffe Du es ist klar geworden?
Angehängte Dateien:
Gast #2871
Lesenswert?

Ich würde gerne einen analogen Joystick an den ADC anschliessen.

Wie kann ich das machen, da ja die Potis dort nicht als Spannungsteiler 
sondern nur als einstellbarer Widerstand beschaltet sind?

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