Hallo
Mein Asuro soll bei Betätigung eines der Pollswitches in einen INterrupt springen.
Auch das wurde bei der Entwicklung des asuro wohl schon vorgesehen und ist schon lange Bestandteil der Library. Die Erweiterung wurde von einem mir unbekannten "Robotrixer Buxtehude" eingeführt.
In der Schaltung ist es so umgesetzt: Der eigentliche analoge Tasteneingang PC4 ist ein Eingang ohne PullUp, am Interrupteingang INT1 (PD3) liegt über R23 (1M) und R24 (1k) ein High an PD3. Der Kondensator C7 dient zur Entprellung. Bei einem Tastendruck wird der entsprechende Tastenwiderstand zwischen R23 und GND geschaltet, bei K6 wäre das R30 mit 68k. Die Spannung an PD3 über R24 wäre dann x/5V=68k/1068k=0,32V, also eindeutig ein Low. Bei den anderen oder mehreren Tasten ist der entsprechende Tastenwiderstand kleiner als 68k, die Spannung an PD3 dann noch kleiner.
Die zusätzliche Software besteht aus drei Funktionen:
StartSwitch() - PD3 auf Eingang, INT1 bei fallender Flanke
StopSwitch() - INT1 ausschalten
SIGNAL (SIG_INTERRUPT1) - Die ISR setzt ein Flag (alter Interruptname!)
Code:
SIGNAL (SIG_INTERRUPT1)
{
switched=1;
StopSwitch();
}
/* for working with Interrupt */
void StartSwitch(void)
{
SWITCH_OFF;
DDRD &= ~SWITCHES; // Switches as Input => ext. Int 1
MCUCR &= ~((1 << ISC11) | (1 << ISC10));// Low level generates interrupt
GICR |= (1 << INT1); // Enable external Interrupt 1
}
void StopSwitch(void)
{
GICR &= ~(1 << INT1);
}
Definitionen in asuro.h:
int switched;
#define SWITCHES (1 << PD3)
#define SWITCH_ON PORTD |= SWITCHES
#define SWITCH_OFF PORTD &= ~SWITCHES
Das ist seit ca. Version 2.3 in der Lib, vermutlich hat auch die aktuelle Lib (die ich bekannterweise nicht verwende) eine entsprechende Funktion. Alle Libs kann man hier downloaden:
http://sourceforge.net/projects/asuro/files/
btw muss man das nicht verstehen:
SWITCH_OFF;
DDRD &= ~SWITCHES; // Switches as Input => ext. Int 1
Gruß
mic
[Edit]
Mal wieder zu langsam gewesen. Sternthaler erklärt das viel besser ;)
Lesezeichen