Also ich hab jetzt mal probiert das mit Skragans Befehlen zu machen, aber es funktioniert genausoweinig wie mit den BASCOM-Befehlen.
Das Problem ist, dass die Aci_Isr ständig gefeuert wird, obwohl ich mit dem Multimeter am Pin AIN0 = 0V und an AIN1 = 500 mV messe.
Referenz ist also im Moment 500 mV.
Solange der Motor abgeschaltet ist, liegt die Spannung an AIN0 also natürlich unter AIN1.
Trotzdem startet die ISR ständig.
Hier mal die relevanten Code-Stücke:
Ich weis nicht ob ich den Bit-Code für das ACSR-Register richtig gesetzt habe.Code:Set SFIOR.ACME 'AC Mux enable ACSR = &B01011011 'sollte ISR=Ein, Timer1-Verbindung=Aus und Flanke=Rising sein... On Aci Aci_isr 'Interrupt Vektor 'Start Ac 'Comparator-Überwachung starten 'Enable Aci 'ACI-Interrupt aktivieren Config Pind.6 = Input 'Analog-Comparator: Motorstrom-Messung (Spannung über Shunt) Config Pind.7 = Input 'Analog-Comparator: Referenz für Motorstrom (500 mV, was ca. 1,85 A entspricht. 'Für ANTRIEB (Buchse A) Config Pind.4 = Output 'Antrieb Kanal 1 Config Pind.5 = Output 'Antrieb Kanal 2 Config Pinb.1 = Output 'Antrieb PWM AntriebPWM Alias Pwm1a 'Antrieb-Einstellung (PWM) 'MOTOR-ÜBERSTROM-SCHUTZ Aci_isr: 'ISR-Routine für Motor-Überstrom AntriebPWM = 0 print "MOTOR_OVERLOAD" waitms 500
Ich möchte den Interrupt für den AC verwenden, bei steigender Flanke auslösen und keine Verbindung mit Timer1 haben.
Den Schaltplan und den kompletten Programm-Code hab ich angehängt.







Zitieren

Lesezeichen