Gast
#4122180
Hallo, ich habe ich Problem und hoff ihr könnt mir dabei weiter helfen. Ich möchte mehrere LEDs mit einem Hall Effekt Sensor(A1120EUA-T) ansteuern. Die LED soll jedes mal wenn der Magnet am Sensor vorbeigeht für ein paar msec. aufleuchten und dann aufhören zu leuchten. Das ganze habe ich versucht mit einer ISR zu machen und habe dafür auf den Interrupt-on-Change verwendet. Jedoch macht es was ganz anderes: die LED leuchtet auf wenn ich mit dem Magneten am Sensor bin und geh ich wieder weg mit dem Magneten hört sie auf zu leuchten. Zum Programmieren verwende ich "C" (MPLAB IDE) und den Compiler XC8. Mein PIC: PIC18f2520 ------------------------------------------------------------------------ ----- #include <htc.h> #include <xc.h> #include <pic18f2520.h> int i=0; //__CONFIG(INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & BORDIS & IESODIS & FCMDIS; #define _XTAL_FREQ 4000000; void interrupt ISR(); int main(void) { TRISB = 0b11111111; TRISA = 0b00000000; //Alle Ports sind Ausgänge TRISAbits.RA0 = 0; TRISAbits.RA1 = 0; TRISAbits.RA2 = 0; TRISAbits.RA3 = 0; TRISAbits.RA4 = 0; TRISAbits.RA5 = 0; TRISBbits.RB4 = 1; T0CONbits.T08BIT = 1; // Timer0 is configured as a 8-bit timer/counter T0CONbits.T0CS = 0; // Internal instruction cycle clock (CLKO) T0CONbits.T0PS0 = 1; // 1:2 Prescale value T0CONbits.T0PS1 = 1; T0CONbits.T0PS2 = 1; T0CONbits.PSA = 0; // Timer0 prescaler is assigned. Timer0 clock input comes from prescaler output INTCONbits.TMR0IF = 0; // TMR0 register has overflowed (must be cleared in software) INTCONbits.TMR0IE = 1; // Enables the TMR0 overflow interrupt T0CONbits.TMR0ON = 0; // Enables Timer0 INTCONbits.GIE = 1; INTCONbits.RBIE = 1; // Enables the RB port change interrupt INTCONbits.RBIF = 0; // None of the RB<7:4> pins have changed state LATAbits.LATA5 = 0; while(1) { LATAbits.LATA0 = 0; for(i=0; i<231; i++); LATAbits.LATA0 = 1; for(i=0; i<8; i++); } } void interrupt ISR() { if(INTCONbits.RBIF == 1) { LATAbits.LATA5 = 1; for(i=0; i<231; i++); //LATAbits.LATA5 = 1; } INTCONbits.RBIF = 0; LATAbits.LATA5 = 0; }