Vielleicht bekommst du aus folgendem Code ne Anregung. Ist zwar C (AT90S2313), sollte aber zu verstehen sein. Ich hatte den AC nicht direkt benutzt um eine IRQ auszulösen, sondern zur Zeitmessung via InputCapture von Timer1 (Kapazitätsmessung).
Für deinen Fall einfach den AC-IRQ aktivieren und die gewünschte Flanke einstellen, sollte dann gehen.
-------------------------------------------------------Code:#include "use.h" #include <AVR.h> #include "ports.h" #include "capacity.h" //#include "morse.h" extern void ioinit(); extern void wait_10ms (const byte); #include <math.h> // Multiplikator: // k = (ny * R * ln 2)^{-1} // mit ny = 8MHz und R = 10k: // k = 18pF / Einheit word measure_time (byte loadTime) { // Load capacity via AIN+ push-pull SET (PORT_AIN_POS); MAKE_OUT (PORT_AIN_POS); wait_10ms (loadTime); // disable all interrupts cli(); // stop timer1 TCCR1B = 0; // enable AC (ACD = 0) // AC Input Capture on -> connect to Input Capture of Timer/Counter1 // AC Interrupt on Falling Output Edge ACSR = _BV(ACIC) | _BV (ACIS1); // disconnect timer1 from output pin OC, no PWM TCCR1A = 0; // reset timer1 to 0 TCNT1 = 0; // clear Timer1 OVerflow and Input Capture Flag TIFR |= _BV (TOV1) | _BV (ICF1); // start timer 1 at full speed // no clear on compare match // no noise cancel // input capture edge = falling TCCR1B = _BV (CS10); // here we go! // start discharging via external resistor // AIN+ to high Z MAKE_IN (PORT_AIN_POS); CLR (PORT_AIN_POS); byte flag; do { flag = TIFR & (_BV (TOV1) | _BV (ICF1)); } while (flag == 0); if (flag & _BV (TOV1)) return 0xffff; // if (flag & _BV (ICF1)) return (word) ICR1; // restore status of machine // ioinit(); // morse (_O_); // if (flag & _BV (ICF1)) // morse_dec (capture-4); // morse (_FRAGE_); }
Als Temperaturdifferenzschaltung hatte ich mal die Schaltung unten gebastelt. Mit µC schien mit da mit Spatzen auf Kanonen geschossen, ausserdem lässt sich eine µC-Schaltung nicht so simpel über Potis nachtrimmen.
- Komparator D schaltet, wenn T_innen > T_aussen ist.
- Komparator A schaltet, wenn T_aussen > T_const (zB T_const über Frostgrenze).
- Komparator B funktioniert als Und-Glied
- danach ein Zeitglied und Komparator C als Schmitt-Trigger
Die T-Abhängigen Widerstände sind NTCs.
Lesezeichen