www.mikrocontroller.net

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


Autor: Andreas (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

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

Autor: Michael Wilhelm (Gast)
Datum:

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

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.