demwz
05.01.2014, 21:53
Hallo zusammen,
ich bin neu hier und beschäftige mich noch nicht sooo lange mit Microcontrollern. Eigentlich bin ich Informatiker und hatte zuletzt auf dem TG vor über 20 Jahren einen Lötkolben in der Hand.
Zur Frage: ich möchte die Drehzahl zweier Rotoren über eine Lochscheibe mit Gabellichtschranke messen (Interrupt gesteuert). Das Ausgangssignal der Lichtschranke pimpe ich über einen Transistor auf ca 4V High.
Pin3 habe ich über einen 470KOhm Widerstand auf Masse gelegt um ein sauberes LOW zu bekommen. Ein kleines Programm schaltet über eine ISR die LED an Pin 13 ein und aus. So weit funktioniert das ganz gut.
Was ich nicht verstehe: Ich kann ohne das Programm zu ändern die Lichtschranke auch auf Pin2 legen und das Ding schaltet trotzdem. Soll heißen: der Interrupt wird trotzdem ausgelöst und Pin 3 wird high gelesen obwohl dieser gar nicht belegt ist. Irgendwie scheinen die Potentiale der beiden Ports zusammenzuhängen ??
kann mir das jemand erklären ?
const byte LED = 13;
const byte pin = 3;
volatile int state;
// Interrupt Service Routine (ISR)
void pinChange ()
{
state = digitalRead (pin);
if (state == HIGH)
digitalWrite (LED, HIGH);
else
digitalWrite (LED, LOW);
} // end of pinChange
void setup ()
{
pinMode (LED, OUTPUT); // so we can update the LED
pinMode (pin, INPUT);
Serial.begin(9600);
//digitalWrite (pin, LOW);
// internal pull-up resistor
attachInterrupt (1, pinChange, CHANGE); // attach interrupt handler
} // end of setup
void loop ()
{
// loop doing nothing
}
ich bin neu hier und beschäftige mich noch nicht sooo lange mit Microcontrollern. Eigentlich bin ich Informatiker und hatte zuletzt auf dem TG vor über 20 Jahren einen Lötkolben in der Hand.
Zur Frage: ich möchte die Drehzahl zweier Rotoren über eine Lochscheibe mit Gabellichtschranke messen (Interrupt gesteuert). Das Ausgangssignal der Lichtschranke pimpe ich über einen Transistor auf ca 4V High.
Pin3 habe ich über einen 470KOhm Widerstand auf Masse gelegt um ein sauberes LOW zu bekommen. Ein kleines Programm schaltet über eine ISR die LED an Pin 13 ein und aus. So weit funktioniert das ganz gut.
Was ich nicht verstehe: Ich kann ohne das Programm zu ändern die Lichtschranke auch auf Pin2 legen und das Ding schaltet trotzdem. Soll heißen: der Interrupt wird trotzdem ausgelöst und Pin 3 wird high gelesen obwohl dieser gar nicht belegt ist. Irgendwie scheinen die Potentiale der beiden Ports zusammenzuhängen ??
kann mir das jemand erklären ?
const byte LED = 13;
const byte pin = 3;
volatile int state;
// Interrupt Service Routine (ISR)
void pinChange ()
{
state = digitalRead (pin);
if (state == HIGH)
digitalWrite (LED, HIGH);
else
digitalWrite (LED, LOW);
} // end of pinChange
void setup ()
{
pinMode (LED, OUTPUT); // so we can update the LED
pinMode (pin, INPUT);
Serial.begin(9600);
//digitalWrite (pin, LOW);
// internal pull-up resistor
attachInterrupt (1, pinChange, CHANGE); // attach interrupt handler
} // end of setup
void loop ()
{
// loop doing nothing
}