Hallo! Versuche verzweifelt meine AD Wandlung zum laufen zu bekommen, doch irgendetwas klappt nicht! möchte das beim überschreiten eines Schwellwertes ein Led eingeschalten und beim unterschreiten die Led ausgeschalten wird! Doch das funktioniert nicht! keine Ahnung warum! AD Wandlung im singel conversion und interrupt mode BSP .include"tn15def.inc" .org 0x000 rjmp RESET .org 0x009 rjmp ADU .def temp=r16 .def uni=r17 .def schwelle_1=r18 .def schwelle_2=r19 RESET: ldi temp,0b00000011 out ddrb,temp clr temp out portb,temp ldi temp,0b00100011 out admux,temp ldi schwelle_1,0b01000000 ldi schwelle_2,0b10000000 ldi temp,0b11001111 out adcsr,temp sei mainloop: rjmp mainloop ADU: IN uni,adcl IN uni,adch cp uni,schwelle_1 brsh setzen_1: cbi portb,0 rjmp ende_1 setzen_1: sbi portb,0 ende_1: cp uni,schwelle_2 brsh setzen_2: cbi portb,1 rjmp ende_2 setzen_2: sbi portb,1 ende_2: ldi temp,0b11001111 out adcsr,temp reti
da sind ja einige Sachen drin. z.B. IN uni,adcl IN uni,adch du überschreibst den Wert adcl in uni gleich wieder mit adch ohne etwas damit gemacht zu haben. Und weil adch meines Wissens nie größer als 3 ist, weils ja nur die Bits 8 und 9 des 10bit-Wertes sind, wird er wohl nie die Schwelle überschreiten.
Hi... Nööö... In ADMUX ist ja (wenn ich mich nicht irre) ADLAR gesetzt, somit wird das Ergebnis linksbündig ausgegeben. In UNI landen dann schon die oberen 8 Bit... Das Lesen der unteren 2 Bit kann man sich übrigens sparen. Ich sehe da eher Probleme bei der Auswertung. Es wird auf beide Referenzwerte geprüft, aber bei jedem eine von zwei Aktionen (LED an/aus) ausgelöst. Da kann es schon mal passieren, dass sich beide Tests widersprechen. In jedem Test würde ich nur eine Aktion ausführen, - beim Überschreiten des Maxwertes die LED einschalten, - beim Unterschreiten des Maxwertes nix tun, - beim Überschreiten des Minwertes nix tun, - beim Unterschreiten des Minwertes die LED ausschalten... Haste das mal durch den Debugger (Simulator des AVR-Studio) gejagt? Das gesamte Programm habe ich jetzt aber mangels übersichtlicher Schreibweise (fehlende Einrückungen und Kommentare, keine Verwendung symbolischer Bitnamen) nicht analysiert. Guten Rutsch... ...HanneS...
Du hast mich falsch verstanden! Ich will zwei Schwellwerte prüfen! Das Programm funktioniert am Simulator nur am Zielsystem läuft es nicht! mfg momo
Jou, falsch verstanden, zwei LEDs, nicht richtig hingeschaut... Dann such mal bei den Int-Vektoren. Der Int-Vektor zu ADC-Complete ist nämlich nicht 9 sondern 8... Guten Rutsch... ...HanneS...
Danke ...HanneS...! Das wars! nur stellt sich die Frage wieso das progi am simulator richtig gelaufen ist!
Tja, ich bin von dieser Schreibweise der Vektoren wieder weg, ich schreibe jetzt wieder die komplette Vektortabelle und setze für alle unbenutzten Vektoren RETI ein. Das ist zwar etwas mühsamer beim Portieren auf andere AVRs, birgt aber weniger Fehlerquellen (durch Irrtümer). ...
Durch deine Schreibweise der Int-Vektortabelle sind einige Zellen nicht definiert. Es ist gut möglich, dass der Simulator da was Anderes vermutet als in der Realität der Fall ist. Deshalb die andere Schreibweise, da hat jede Flash-Zelle ihren fest definierten Inhalt. ...
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.