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:
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 weis nicht ob ich den Bit-Code für das ACSR-Register richtig gesetzt habe.
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.
Lesezeichen