¿Cómo cablear un microcontrolador PIC?

8

Soy completamente nuevo en el mundo de los microcontroladores PIC y la ingeniería eléctrica, así que por favor, sea fácil :)

De todos modos, logré programar mi PIC 16f627 para encender tres LED cuando se presiona el botón (botón disparador) y comenzar una secuencia de apagado (básicamente cada LED se apaga uno tras otro con un retraso de 5 segundos) cuando se presiona otro botón (botón de reinicio). He estado probando esto en un panel de experimentación / programador PIC K8048 de Velleman. Los PIN RA0 y RA2 son las entradas para los botones de activación y restablecimiento respectivamente, mientras que los pines RB0, RB1 y RB2 son los pines de salida de los LED.

Trabajar con la placa de experimentación es genial, pero quiero mover esto a un circuito real. El problema es que no tengo idea de por dónde empezar. He comprado 3 LED (3,3 voltios cada uno), algunos pulsadores y cable y he construido el siguiente circuito:

(perdón por el horrible esquema)

En el circuito que construí, primero probé si los LED funcionaban con 3 baterías AA de 1.5 voltios y funcionaron bien, así que pensé que las resistencias no serían necesarias.

Sin embargo, esto no funciona y estoy totalmente perdido. Para referencia, aquí está mi código para el PIC. Está escrito en C usando MikroC. Funciona en el panel de experimentación, así que no creo que sea un problema

void main() {
    TRISB.RB0 = 0;
    TRISB.RB1 = 0;
    TRISB.RB2 = 0;
    PORTB.RB0 = 0;
    PORTB.RB1 = 0;
    PORTB.RB2 = 0;
    CMCON = 0x07;
    TRISA = 255;

    for(;;){
            if(PORTA.RA0 == 1 && PORTB.RB0 == 1 && PORTB.RB1 == 1 && PORTB.RB2 == 1){
                         delay_ms(5000);
                         PORTB.RB0 = 0;
                         delay_ms(5000);
                         PORTB.RB1 = 0;
                         delay_ms(5000);
                         PORTB.RB2 = 0;
            }
            if(PORTA.RA2 == 1){
                         PORTB.RB0 = 1;
                         PORTB.RB1 = 1;
                         PORTB.RB2 = 1;
            }
    }
}

Cualquier ayuda sería muy apreciada. Gracias!

    
pregunta Shahmeer Navid

5 respuestas

11
  1. En primer lugar, siempre se necesitan resistencias en serie con los LED cuando se acciona desde una fuente de voltaje (por ejemplo, batería, suministro de CC, etc.)
    Esto se debe a que los LED tienen una curva IV no lineal, que se parece a una alta impedancia hasta el voltaje de umbral del LED y luego aumenta muy bruscamente, por lo que significa que con un cambio muy leve de voltaje, la corriente cambia mucho, por lo que es casi imposible. De esta manera, es imposible establecer la corriente a un valor estable.
    Al utilizar los resistores de serie de valores correctos, se asegura de que la corriente no pueda subir lo suficiente como para dañar el LED.
    Para calcular el valor de la resistencia, debe conocer la tensión directa del LED (Vf) y luego restar Vf de la tensión de alimentación y dividir por la corriente deseada, por ejemplo, para una fuente de 5 V, una de 2 V Vf y 15 mA:

    (5V - 2V) / 0.020A = 200Ω (el valor estándar de 220Ω será suficiente; si no lo tiene, apunte a cualquier cosa entre 150Ω y 600Ω para un rango de 20mA a 5mA)
    Esto se supone que un LED típico de 5 mm o 3 mm de 20 mA de corriente máxima de funcionamiento.

  2. A pesar de que en su esquema aparece "3 x 1.5V batería en serie", las baterías parecen estar conectadas en paralelo. Para confirmar, las baterías deben estar conectadas de extremo a extremo como el diagrama inferior en esta imagen:

  3. Necesita condensadores de desacoplamiento entre el microcontrolador Vdd y tierra. No entraré en detalles (busque aquí, hay muchas respuestas buenas sobre este tema) pero básicamente son para proporcionar al microcontrolador una reserva de energía local de baja impedancia para la demanda de corriente de alta frecuencia, a la que la fuente de alimentación no puede responder rápidamente. suficiente.
    Lo ideal es colocar una (la cerámica de 100 nF o 1uF es bastante estándar) a través de las clavijas de alimentación y tierra, lo más cerca posible de las clavijas.

  4. Asegúrese de estar usando el oscilador interno si no tiene un cristal presente. Su código no muestra la configuración de los bits de configuración; si los ha omitido, debe agregarlos para asegurarse de que el microcontrolador esté configurado correctamente. El manual de CCS debe indicarle cómo hacerlo. También en los bits de configuración, asegúrese de que el temporizador de vigilancia esté desactivado, de lo contrario su micro se reiniciará continuamente (a menos que llame al comando de borrado de WDT con regularidad)

  5. Asegúrese de tener los LED en la forma correcta.

  6. Asegúrese de tener el pin MCLR atado alto; de lo contrario, su PIC se mantendrá en reinicio (a menos que desactive MCLR en los bits de configuración) Esto generalmente se hace con una resistencia a Vdd, valor alrededor de 10k. La hoja de datos tendrá un ejemplo de esto en la sección de reinicio. (Gracias a ajs410 por mencionar esto)

respondido por el Oli Glaser
2

Recomiendo encarecidamente el libro de la serie O'Reilly "Designing Embedded Systems" de John Catsoulis para alguien en su posición. Hay un capítulo "Electrónica 101" que lo llevará a la velocidad funcional bastante rápidamente, y otro sobre la construcción práctica.

    
respondido por el Scott Seidman
2
  1. No exceda los 5V, su PIC podría quemarse por encima del nivel de voltaje de 5V. Puede utilizar baterías de 9V o un adaptador de CA / CC con un voltaje lineal Regulador como LM7805 para producir 5V para su circuito. Cómo cablear:

    enlace

  2. Como la mayoría de lo dicho: No olvide suministrar el pin MCLR con una serie resistor. Puede utilizar la configuración de pull-up para restablecer su PIC. Aquí está el enlace para el esquema: enlace

  3. Siempre use una resistencia en serie antes que un led. Evitará que el led se queme y disminuirá el consumo de energía. Para 3.3V leds 220 o 330 ohmios estaría bien.

respondido por el Hammers
1

Además de lo que han escrito otros: no asigne a pines de salida PIC individuales, como por ejemplo "PORTB.RB0 = 1;". En su lugar, haga que el bit cambie en una variable de tamaño de byte y luego escriba esa variable en el puerto.

Puedes hacerlo

  • confía en mi palabra,
  • lea sobre el tema "leer-modificar-escribir", o
  • sufre las consecuencias
respondido por el Wouter van Ooijen
1
La función del botón

es simple. Cuando presionamos un botón, dos contactos se unen y se realiza la conexión. Aún así, no es tan simple. El problema radica en la naturaleza del voltaje como dimensión eléctrica y en la imperfección de los contactos mecánicos. Es decir, antes de que se haga o se corte el contacto, hay un corto período de tiempo en el que puede ocurrir una vibración (oscilación) como resultado de la irregularidad de los contactos mecánicos, o como resultado de la diferente velocidad al presionar un botón (esto depende en la persona que presiona el botón). El término dado a este fenómeno se llama SWITCH (CONTACT) DEBOUNCE. Si esto se pasa por alto cuando se escribe el programa, puede ocurrir un error, o el programa puede producir más de un pulso de salida con solo presionar un botón. Para evitar esto, podemos introducir una pequeña demora cuando detectamos el cierre de un contacto. Esto asegurará que la pulsación de un botón se interprete como un solo pulso. El retraso de rebote se produce en el software y la duración del retraso depende del botón y del propósito del botón. El problema se puede resolver parcialmente agregando un capacitor a través del botón, pero un programa bien diseñado es una respuesta mucho mejor. El programa se puede ajustar hasta que se elimine por completo la detección falsa. La imagen de abajo muestra lo que realmente sucede cuando se presiona el botón.

Lea más: enlace

    
respondido por el john

Lea otras preguntas en las etiquetas