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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.