Forum: Compiler & IDEs ADC, Timer pollt, Interrupt ...


von Andreas (Gast)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

"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.

von Michael Wilhelm (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.