Hallo, ich wollte eigentlich einen Steuerung Programmierern die es möglichst macht meinen Motor rechts und links laufen zulassen. Hardware: Zwei Poti als Spanungsteiler aufgebaut mit mittel abrief und (Ua 2,5V bis 4,9V) an ADC0 angeschlossen und wenn sich die potis bewegen soll der Motor der ATmega16 erkennen ob die Spannungsteiler oder sinkt. Problem ab einer schwellspannung von 3.95V schaltet die LED2 ein und der ist es egal ob die Spannung steigt oder sinkt und das gleiche unter 3.95V bei LED1. Programm: .include "m16def.inc" ;Header Atmega16 rjmp Init ;ueberschringen der Interrupt ;- Laden des Ausgabe PortC0-1 ;- Initialisieren des ADU-ADC0 ;- ADU- Vorteiler 64 bei 16Mhz ;- Rechtschiebendes Low High Reg. Init: LDI r16,255 OUT ddrC,R16 OUT ddrd,R16 OUT portd,R16 ;Test Leuten LDI r16,0b01000000 OUT adMUX,r16 LDI r16,0b10000110 OUT adcSR,r16 ;- Programm Starten ;- ADU Starten und warten bis die Wandelung abgeschlossen ist Adu: SBI adcSR,6 Warte: IN r16,adcSR SBRS r16,4 rjmp Warte ;- Vergleichen des Vorgaengerwertes ;- Wenn Vorgaengerwerte vorhanden dann Sprung zu Vergleichen der High Reg. ;- Wenn keiner da ist dann in R0-R1 Init. und Bit setzen in r30 CPI r30,1 BREQ VergH LDI r30,1 IN r0,adcL IN r1,adcH rjmp Adu ;- Vorgangswert - Aktueller wert ;==;=-;=+ ;- bei == muss das Lowbitreg. noch verglichen (Sprung VergL) werden ansonsten reicht ;- das aus um die Drehrichtung zu bestimmen VergH: IN r2,adcL IN r3,adcH CP r1,r3 BREQ VergL ;- Pruefen des High Speichers <;> des Vorwertes SUB r3,r1 ;- Aktueller wert - Vorhergehender wert BRMI OutL ;- Aktueller wert < Vorhergehender wert = Linkslauf BRPL OutR ;- Aktueller wert > Vorhergehender wert = Rechtslauf ;- Vergleichen Lowbitreg. bei == Motor aus und neu messen VergL: CP r2,r0 BRNE LowSub LDI r16,0 OUT portC,r16 rjmp Adu ;- Pruefen des Low Speichers <;> des Vorwertes LowSub: SUB r2,r0 ;- Aktueller wert - Vorhergehender wert BRMI OutL ;- Aktueller wert < Vorhergehender wert = Linkslauf BRPL OutR ;- Aktueller wert > Vorhergehender wert = Rechtslauf ;- Ausgabe Linkslauf == 1; Rechtslauf == 2 OutL: LDI r16,1 OUT portC,r16 rjmp Adu OutR: LDI r16,2 OUT portC,r16 rjmp Adu Danke für eure Hilfe im Voraus
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.