mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega8 ADC benutzen


Autor: Martin Meier (Gast)
Datum:
Angehängte Dateien:

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

Autor: dicky (Gast)
Datum:

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

Autor: Christian Zietz (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du nutzt rcall und ret ohne den Stackpointer initialisiert zu haben.

Warum du adif behandelst verstehe ich auch nicht.

...

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Martin Meier (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja, im Anhang dieses Beitrags:
http://www.mikrocontroller.net/forum/read-1-236259...
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.

...

Autor: Frank Simon (Gast)
Datum:

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

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.