ATMega8 ADC benutzen

Gast #227849
Hallo an alle,

bin absoluter Anfänger in Assembler mit folgendem Problem:
Atmega8 AVCC und ARef an 5V, 1kohm Poti mit Schleifer an PC5, und zum
testen eine Diode an PB0(Müsste doch eigentlich passen?!). Jedenfalls
sollte die Diode doch irgendwann leuchten wenn die eingelesene Spannung

größer (brlo) bzw. kleiner (brge) als meine Vergleichszahl ist. Wenn
ich
den Mikrokontroller auslese und nachschaue im ADCL steht immer 0x04
drin, egal in welcher Position das Poti zur Zeitpunkt des Auslesens
stand. Bitte bei den Antworten um Nachsicht und Erklärung, da ich wie
gesagt Neuling bin. Ach ja Programmier mit Atmel AVRStudio
Vielen Dank im voraus.

MfG Martin
Angehängte Dateien:
Gast #227850
zuerst solltest du getrennt vom rest klären, ob du ein lauffähiges
programm hinbekommst. zuerst solltest du daher versuchen die led
rhythmisch zum leuchten zu bringen. dann hast du das schlimmste hinter
dir. dann würde ich an deiner stelle einen schalter an einem pin
abfragen und entsprechend die led leuchten lassen.

ansosnten zu beginn möglichst von anderen erprobte software
ausprobieren und dann entsprechend abändern.
Gast #227853
wozu soll denn das "rcall ausgabe" gut sein? Generell benutzt du an
mehreren Stellen rcall, aber nirgends ein ret. Zu jedem rcall muß auch
genau ein ret ausgeführt werden. Also abgesehen davon, daß du deinen
stackpointer nicht initialisiert hast, läuft der Stack ständig über, da
die rcalls dauernd neue Rücksprungadressen auf den Stack werfen, die nie
wieder zurückgeholt werden.
Gast #227854
Hallo nochmal,
erst mal Danke für die schnellen und guten Antworten.

1. Ja, ich habe eine LED schon rythmisch zum leuchten gebracht.
Sogar ein LCD kann ich ansteuern. (hab das Tutorial bisschen
durchgearbeiten)

2. Hab tausend Sachen schon ausprobiert, will nicht funzen.
Wenn es nicht zu viel Aufwand wäre, könnte mir jemand ein kleines
Programm schicken, mit Aufbauskizze, um eine LED zum Leuchten zu
bringen, wenn der eingelesene Wert größer bzw kleiner als der
Vergleichswert ist? Poti 1000 Ohm, Atmega8

MfG Martin
#227855
Ein solches Programm wird niemand fertig vorrätig haben. Du wirst dir
die benötigten Fragmente schon aus im Forum vorhandenen Codebeispielen
zusammensuchen müssen. Dein oben geposteter Code ist ja auch
zusammengesucht. Dummerweise hast du einige wichtige Codezeilen
weggelassen weil du sie vermutlich nicht nachvollziehen konntest.

Analysieren wir doch erstmal, was dein Programm tun muss.

Einmal zum Programmstart:
- Interrupt-Sprungtabelle anlegen (sonst gibt es durch unvermeidliche
  Anfänger-Programmierfehler unvorhersehbare Reaktionen)
- Stackpointer initialisieren (sonst kann man weder Interrupts noch
  Unterprogramme benutzen, also quasi nicht programmieren)
- Ports initialisieren (Datenrichtung, Startwert)
- Interne Peripherie initialisieren (je nach Bedarf Timer, ADC...)

Dann in einer Schleife:
- ADC auslesen
- Wert mit einer definierten Referenz vergleichen
- In Abhängigkeit vom Ergebnis Schalthandlungen ausführen

...
#227856
Achja, im Anhang dieses Beitrags:
http://www.mikrocontroller.net/forum/read-1-236259.html#236288
wird der ADC benutzt. Es wird die Stellung eines Potis eingelesen und
als Verweilzeit im EEPROM abgespeichert.

An dem Beispiel sieht man auch, wie man die Interrupt-Sprungtabelle
einrichtet, den Stackpointer initialisiert, Ports initialisiert,
Register (als Variablen) definiert, Eingabetaster entprellt, einen
Schrittmotor auf einfache Art ansteuert, einen Port toggelt, einen
Timer als Zeitnormal (Taktgeber) nutzt usw. usf... Man sieht auch, wie
man Programm-Quelltext einigermaßen lesbar formatieren kann.

...

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.