Hallo zusammen, in meinen späteren Programm sollen beide Arten (siehe weiter unten) von Messungen abwechselnd durch geführt werden. Meine bitte wäre, lassen sich Fehler / Blödsinn oder eine falsche Reihenfolge in diesen Programm-Zeilen ausmachen. PS: (0<<CS12) dient mir der Übersichtlichkeit! Atmega644 / 16 MHz => Der Timer1 hat die Hauptaufgabe im „Modus 14“ (und Prescaler = 1) zähle von 0 – ICRn und wieder auf 0. Bei Zähler = 0 OCR1A-Ausgang und OCR1B-Ausgang auf LOW ! Und bei Gleichheit den jeweiligen Ausgang auf HIGH ! für zwei Motoren mit PWM. Die I/O's sind bereits entsprechend gesetzt und der ADC hat schon die Erstmessung durchgeführt. ldi Ar1, 0x01 sts ICR1H, Ar1 ldi Ar1, 0x80 sts ICR1L, Ar1 ; den Wert 0x0180 ins ICR1 ldi Ar1, 0x00 sts OCR1AH, Ar1 ldi Ar1, 0xA4 sts OCR1AL, Ar1 ; den Wert 0x00A4 ins OCR1A ldi Ar1, 0x00 sts OCR1BH, Ar1 ldi Ar1, 0x47 sts OCR1BL, Ar1 ; den Wert 0x0047 ins OCR1B ldi Ar1, (1<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM11)|(0<<WGM10) sts TCCR1A, Ar1 ; beider Ausgänge bei Gleichheit auf HIGH setzen ldi Ar1, (1<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10) sts TCCR1B, Ar1 1. Fall: ADC-Messauslösung: durch Timer1-Überlauf (hier für OCR1A) ldi Ar1, (0<<COM1A1)|(0<<COM1A0)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM11)|(0<<WGM10) sts TCCR1A, Ar1 ; PWM für Motor1 AUS (COM1A-Ausgang nicht mehr ändern) sbis MoX_P+PORT, Mo1_PWM ; PWM-Motor1-Ausgang vorsorglich auf HIGH ! (absichtliche Pause / Störungen abklingen lassen) ldi Ar1, 0x01 sts OCR1AH, Ar1 ldi Ar1, 0x10 sts OCR1AL, Ar1 ; den Wert 0x0110 ins OCR1A ldi Ar1, (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX0) sts ADMUX, Ar1 ; AREF-Pin Links-Resultat hier Kanal 0 ldi Ar1, (1<<ACME)|(1<<ADTS2)|(1<<ADTS1)|(0<<ADTS0) sts ADCSRB, Ar1 ; Multiplexer-An / Timer1-Überlauf ldi Ar1, (1<<ADEN)|(0<< ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) sts ADCSRA, Ar1 ; ADC-AN Auto-Trigger Prescaler = 128 (beim nächsten Timer1-Überlauf die ADC-Messung beginnen) (beim nächsten Timer1-OCR1A-Flag) ldi Ar1, 0xXX sts OCR1AH, Ar1 ldi Ar1, 0xXX sts OCR1AL, Ar1 ; den neuen Wert für PWM ins OCR1A ldi Ar1, (1<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM11)|(0<<WGM10) sts TCCR1A, Ar1 ; PWM für Motor1 wieder Herstellen (beim nächsten ADC-Messung-Fertig-Flag) lds Ar1, ADCL lds Ar1, ADCH 2. Fall: ADC-Messauslösung: durch Analog Comparator (hier für Kanal 2) ldi Ar1, (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(1<<MUX1) sts ADMUX, Ar1 ; AREF-Pin Links-Resultat hier Kanal 2 ldi Ar1, (0<<ACD)|(1<<ACBG)|(1<<ACIS1)|(1<<ACIS0) sts ACSR, Ar1 ; Analog Comparator AN interne Spannung steigende Flanke ldi Ar1, (1<<ACME)|(0<<ADTS2)|(1<<ADTS1)|(0<<ADTS0) sts ADCSRB, Ar1 ; Multiplexer-An / Analog Comparator ldi Ar1, (1<<ADEN)|(0<< ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) sts ADCSRA, Ar1 ; ADC-AN Auto-Trigger Prescaler = 128 (beim nächsten ADC-Messung-Fertig-Flag) ldi Ar1, (1<<ACD)|(1<<ACBG)|(1<<ACIS1)|(1<<ACIS0) sts ACSR, Ar1 ; Analog Comparator AUS interne Spannung steigende Flanke lds Ar1, ADCL lds Ar1, ADCH Mfg
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.