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
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.
Irgendwie fehlt mir eine Schleife, in der Du auf das Ergebnis der (ersten) Umwandlung wartest.
Du nutzt rcall und ret ohne den Stackpointer initialisiert zu haben. Warum du adif behandelst verstehe ich auch nicht. ...
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.
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
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 ...
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. ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.