Hallo
Ich glaube nicht, dass PollSwitch() selbst diesen Effekt auslöst. Vielmehr scheint mir eine fehlende Verzögerung in der Hauptschleife in Verbindung mit IR-Störungen durch Fremdlicht (Leuchtstoff, Halogen, LCDs, CRTs..) die Ursache zu sein. Wenn solch ein verirrtes IR-Teilchen den Empfänger irritiert und er seinen Ausgang auf Low setzt, werden die IRx quasi in einem Rutsch eingelesen. Mit PollSwitch() wird das Einlesen der IRx aber durch ein paar zusätzliche Sleep()s verzögert. (ein Sleep() ist ein Takt Trägerfrequenz, der TSOP benötigt ca. 6-10 Takte der Trägerfrequenz für die Erkennung)
Ersetze mal in deinem Progamm sw=PollSwitch(); durch ein schlichtes Sleep(20);
Die Funktion PollSwitch() aus der asuro-LibraryCode:/* function to read out switches */ unsigned char PollSwitch (void) { unsigned int i; int ec_bak=autoencode; autoencode=FALSE; DDRD |= SWITCHES; // Switches as Output SWITCH_ON; // Output HIGH for measurement ADMUX = (1 << REFS0) | SWITCH; // AVCC reference with external capacitor Sleep(10); ADCSRA |= (1 << ADSC); // Start conversion while (!(ADCSRA & (1 << ADIF)));// wait for conversion complete ADCSRA |= (1 << ADIF); // clear ADCIF i = ADCL + (ADCH << 8); SWITCH_OFF; Sleep(5); autoencode=ec_bak; //return ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 61.0 + 0.5)); //return ((10240000L/(long)i-10000L)*61L+5000L)/10000; return ((10240000L/(long)i-10000L)*63L+5000L)/10000; } Und noch die switches-Defines aus asuro.h dazu: #define SWITCHES (1 << PD3) #define SWITCH_ON PORTD |= SWITCHES #define SWITCH_OFF PORTD &= ~SWITCHES
Gruß
mic







Zitieren

Lesezeichen