Forum: Mikrocontroller und Digitale Elektronik ATMega8 ADC benutzen


von Martin Meier (Gast)


Angehängte Dateien:

Lesenswert?

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

von dicky (Gast)


Lesenswert?

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.

von Christian Zietz (Gast)


Lesenswert?

Irgendwie fehlt mir eine Schleife, in der Du auf das Ergebnis der
(ersten) Umwandlung wartest.

von Hannes L. (hannes)


Lesenswert?

Du nutzt rcall und ret ohne den Stackpointer initialisiert zu haben.

Warum du adif behandelst verstehe ich auch nicht.

...

von Rolf Magnus (Gast)


Lesenswert?

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.

von Martin Meier (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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

...

von Hannes L. (hannes)


Lesenswert?

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.

...

von Frank Simon (Gast)


Lesenswert?

Hallo,
vielleicht hilft dir dieses Voltmeter:
http://www.mikrocontroller.net/forum/read-4-194813.html#new
Gruß
Frank Simon

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.