¿Cómo parpadear los LED con diferente frecuencia?

0

Tengo un pic32mx y tres LEDs. [hoja de datos pic32mx] ( enlace )

Necesito una función que obtenga la cantidad de LED y frecuencia y luego parpadee el LED con esa frecuencia.

Por ejemplo, necesito parpadear 1, 2, 4 y 8 veces por segundo. Tengo un código, pero no sé cómo hacerlo parpadear con la frecuencia dada. ¿Alguien puede explicar?

void main() {
T2CON = 0x0;                     // Stop and clean Control Register
T2CONSET = 0x0070;       // 16 bit timer, prescaler at 1:256,  internal clock source
PMR = 0x0;                        // Clean Timer Register
PR2 = 0xFFFF;                    //  Load value
IPC2SET = 0x0000000C;  // Set priority level=3
IPC2SET = 0x00000001;  //  Set subpriority level=1
IFS0CLR = 0x00000100;  // Clear the Timer2 interrupt status flag
IEC0SET = 0x00000100;  // Enable Timer2 interrupts
T2CONSET = 0x8000;      // START TIMER2
}

void __ISR(8,ipl3) TimerHandler {

//somecode

IFS0CLR = 0x00000100;
}
    
pregunta user3826752

3 respuestas

3

Digamos que su led está conectado a RD0 RD1 & %código%. Primero necesitas un retraso exacto de 1 seg. La siguiente función le proporcionará un retraso de 1 segundo

void Delayms( unsigned t)
{
  T1CON = 0x8000; 
  while (t--)
  { 
    TMR1 = 0;
    while (TMR1 < FPB/1000);
  }
} 

Ahora dijo que el parpadeo del LED durante 1,2,4 u 8 veces por segundo. Eso significa que el parpadeo del led 1 vez por segundo significa que la mitad del 1 s, el led estará encendido y la mitad del 1 sec led estará apagado, lo que Puedes hacerlo así:

int main()
{
  TRISD = 0; //making all led's output
  while(1)
  {
    PORTD = 1; //led's will be on
    Delayms(500) //led's will be on for 500ms
    PORTD = 0;//led's will be off
    Delayms(500); //led's will be off for 500ms
  }
}

Ahora, el parpadeo del led 2 veces por segundo significa que el led estará encendido durante 250 ms, luego se apagará durante 250 ms y nuevamente lo mismo. Puedes hacerlo reemplazando la demora por 250ms. De esta manera, puede parpadear los LED's 4 u 8 veces por segundo.

    
respondido por el Aircraft
2

No proporcionaré el código real porque no estoy familiarizado con el PIC, aunque he hecho mucha programación integrada con otros procesadores.

Para encender un LED 8 veces por segundo, debes cambiar su estado 16 veces por segundo.

Entonces, primero generas una interrupción que se dispara 16 veces por segundo.

Cada vez que recorra este bucle, cambie el estado de este LED.

Para encender un LED 4 veces por segundo, cambia su estado a la mitad de las veces, así que no cada vez que se dispara la interrupción, sino cada dos veces.

De forma similar, el LED que parpadea dos veces por segundo se alterna cada 4ª interrupción y el LED parpadea una vez por segundo cada 8ª interrupción.

No he intentado esto, pero primero configura su temporizador para que se ejecute con una marca \ $ \ frac {1} {16} \ $ segundo como se describe en la sección 14 del manual de referencia al que se vinculó y luego genera interrupciones a partir de eso. Parece que no ha calculado el tiempo para el registro de período PR2.

    
respondido por el Warren Hill
1

Incrementa una variable de contador 16 veces por segundo (ya sea por interrupción o en un bucle con retraso, lo que sea más apropiado para ti).

Salida bit0-3 del contador.

bit0 parpadeará con 8 Hz.
bit1 parpadeará con 4 Hz.
bit2 parpadeará con 2 Hz.
bit3 parpadeará con 1 Hz.

    
respondido por el Curd

Lea otras preguntas en las etiquetas