ADC, Timer pollt, Interrupt ...

Gast #182369
Hallo!

Versuche mich gerade an einer Zeitverzögerung.
Und weil ich das nachfolgend Beschriebene zum ersten Mal mache, gibt's
natürlich ein paar Probleme:

Habe einen ATtiny 26

ADC0 ist mein Eingang für eine variable, über Poti einstellbare
Spannung.
AREF=VCC(5V)
Der Wandler gibt mir einen 10bit-Wert.
8bit-Genauigkeit langt. Deswegen möchte ich auch nur ADCH auslesen.
Auslesen soll Timer 0, bzw. an diesen weitergegeben werden.
Dieser soll dann eine Zeitverzögerung auslösen bzw. nach Ablauf
derselben ein Programm steuern.
Am besten wäre es, wenn das Programm hierauf pollt.
Die Zeitverzögerung hängt ab vom eingelesenen Wert.
z.B. dezimale 1024 des AD sollen 0,5min Verzögerung beim Timer
bewirken.
Wäre nett, wenn Ihr mir ein paar Tipps geben könntet, wie ich das in
C-Code transferiere bzw. worauf ich achten muß, und welche Schritte
nötig sind.
Ist für mich absolutes Neuland.
Gruß,
Andreas
Gast #182370
"8bit-Genauigkeit langt. Deswegen möchte ich auch nur ADCH auslesen."
Falsch.

In ADCH stehen nur die oberen 2 Bit des 10 Bit Wertes. Nimm einfach nen
int und schreibe temp = ADC.

Zu den Timerberechnungen fehlt die Quarzfrequenz. Wenn 30s dein Maximum
sind, dann sollte der Timer ca. alle 30s/1024 aufgerufen werden. In der
ISR vergleichst du ADC-Wert und den Wert einer zu inkrementierenden
Variablen. Sind beide gleich setzt du die Variable zurück und beendest
dein Delay.
Gast #182371
Der Tiny hat ein ADLAR, bedeutet daß das Resultat Right - oder
Leftadjust abgelegt werden kann. Also doch nur das High-Register
auslesen.

Was den Rest angeht, das ist eine Timer-Aufgabe. Die genaue
Spezifikation richtet sich aber stark nach dem verwendeten Quarz.

Einen Timer so initialisieren, daß er ohne Analogwert die
Minimalverzögerung darstellt und dann mittels Vorteiler (AD-Wert)
runterteilen, indem die Variable bei jedem Timerinterrupt runtergezählt
wird. Wenn die Variable 0 ist, geht's los.

MW

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.