¿Cómo conectar un microcontrolador PIC?

8

Soy completamente nuevo en el mundo de los microcontroladores PIC y la ingeniería eléctrica, así que ve con calma :)

De todos modos, logré programar mi PIC 16f627 para encender tres LED cuando se presiona el botón (disparador) y comenzar una secuencia de apagado (básicamente cada LED se apaga uno tras otro con un retraso de 5 segundos en el medio) cuando se presiona otro botón presionado (botón de reinicio). He estado probando esto en una placa de experimentación / programador K8048 PIC de Velleman. Los PIN RA0 y RA2 son las entradas para los botones de activación y reinicio respectivamente, mientras que los pines RB0, RB1 y RB2 son los pines de salida para 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 por dónde empezar. Compré 3 LED (3,3 voltios cada uno), algunos botones y cable y construí el siguiente circuito:

Circuito

(Perdón por el horrendo esquema)

En el circuito que construí, probé por primera vez para ver si los LED funcionarían con 3 baterías AA de 1.5 voltios y funcionaron bien, así que pensé que los resistencias no serían necesarios.

Sin embargo, esto no funciona y estoy totalmente perdido. Como referencia, aquí está mi código para el PIC. Está escrito en C usando MikroC. Funciona en el tablero 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!

Shahmeer Navid
fuente
3
Por favor, utilice Fritzing . Es gratis, hace el 90% del trabajo por usted y ayuda a que sus diagramas esquemáticos sean más fáciles de leer ..
Ignacio Vazquez-Abrams
77
Creo que tener una cuenta durante 10 días y esta es la primera pregunta de Shahmeer es una excusa para "tirarnos una mierda como esta". Ciertamente, el enfoque de Ignacio de preguntar amablemente es más probable que obtenga una respuesta positiva que reprender al nuevo tipo ... a menos que su objetivo sea evitar que nuevas personas se queden.
ajs410
55
@ ajs410: todos sabemos que este es el motivo favorito de Olin, y aunque no siempre estoy de acuerdo con su redacción, estoy de acuerdo con su principio. El hecho de que OP se disculpe por el "esquema" horrendo (sus propias palabras) significa que él sabe bien que no está bien. Entonces, ¿por qué sigue publicando esto? Para mí no tiene que ser creado por EDA, creo que preferiría ver un dibujo de lápiz y cuaderno.
stevenvh
2
Es nuevo, como muchos otros miembros nuevos aquí (yo incluido). Dale un descanso. Shahmeer, dale una oportunidad a Fritzing. Es agradable y fácil de usar, y lo ayudará a explicar mejor su pregunta. En otra nota, me opongo firmemente a la elección de palabras de Ignacio.
capcom

Respuestas:

11
  1. En primer lugar, siempre necesita 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 parece una alta impedancia hasta el voltaje umbral del Luego, el LED se eleva muy bruscamente, lo que significa que con un ligero cambio de voltaje la corriente cambia mucho, por lo que es casi imposible establecer la corriente a un valor estable de esta manera.
    Al usar las resistencias en serie de valor correcto, se asegura de que la corriente no pueda aumentar lo suficiente como para dañar el LED.
    Para calcular el valor de la resistencia, necesita conocer el voltaje directo del LED (Vf), luego restar Vf del voltaje de alimentación y dividirlo por la corriente deseada, por ejemplo, para un suministro de 5V, un Vf de 2V y 15mA:

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

  2. Aunque dice "3 x 1.5V Battery in Series" en su esquema, las baterías parecen estar realmente conectadas en paralelo. T confirme, las baterías deben conectarse de extremo a extremo como en el diagrama inferior de esta imagen:

    Conexiones paralelas y en serie

  3. Necesita condensadores de desacoplamiento presentes entre el microcontrolador Vdd y tierra. No entraré en detalles (busque aquí, hay muchas buenas respuestas 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.
    Idealmente, debe colocar uno (100nF o 1uF de cerámica es bastante estándar) a través de los pines de alimentación y tierra, lo más cerca posible de los pines.

  4. Asegúrese de estar usando el oscilador interno si no tiene 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 debería decirle cómo hacer esto. También en los bits de configuración, asegúrese de que el temporizador Watchdog esté apagado, de lo contrario su micro se reiniciará continuamente (a menos que llame al comando WDT clear regularmente)

  5. Asegúrese de tener los LED en la dirección correcta.

  6. Asegúrese de que tiene el pin MCLR atado alto, de lo contrario su PIC se mantendrá en el reinicio (a menos que apague 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)

Oli Glaser
fuente
Muchas gracias por los comentarios, fueron realmente útiles. Sin embargo, aparte de eso, ¿debería haber conectado el PIC de alguna otra manera o son las adiciones que ha enumerado todo lo que necesito?
Shahmeer Navid
2
Otra cosa es que probablemente necesite resistencias pulldown en los pines de los botones, para asegurarse de que el pin esté lógicamente bajo cuando no se presiona el botón (a menos que tenga activados los pulldowns internos, pero creo que PIC solo tendrá pullups disponibles). es difícil estar seguro de las cosas con el esquema como es (por ejemplo, símbolos no estándar, sin números de pin / nombres, etc.) Me gustaría obtener algún software de captura de esquemas / PCB (por ejemplo, Eagle [popular / gratuito para no comercial], Kicad [popular / gratis], Diptrace [barato], Altium [££££ 's], etc.) y utilícelo en el futuro.
Oli Glaser
1
6. No olvide una resistencia pull-up en el pin MCLR. O configure el bit de configuración que utiliza el pull-up interno, si está disponible.
ajs410
2

Recomiendo encarecidamente el libro de la serie O'Reilly "Diseño de sistemas integrados" de John Catsoulis para alguien en su posición. Hay un capítulo sobre "Electrónica 101" que lo llevará a la velocidad funcional con bastante rapidez, y otro sobre construcción práctica.

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

    http://stuff.nekhbet.ro/2006/06/18/how-to-build-a-5v-regulator-using-78l05-7805.html

  2. Como dijo la mayoría: no se olvide de suministrar un pin MCLR con una resistencia en serie. Puede usar la configuración pull-up para restablecer su PIC. Aquí está el enlace para el esquema: http://www.mcuexamples.com/push-buttons-and-switch-debouncing-with-PIC.php

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

Martillos
fuente
2

La función del botón es simple. Cuando presionamos un botón, dos contactos se unen y se establece 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 el contacto se haga o se corte, hay un corto período de tiempo en el que puede producirse 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 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 un pequeño retraso cuando detectamos el cierre de un contacto. Esto asegurará que presionar 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 el propósito del botón. El problema puede resolverse parcialmente agregando un condensador 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 a continuación muestra lo que sucede realmente cuando se presiona el botón. El programa se puede ajustar hasta que se elimine por completo la detección falsa. La imagen a continuación muestra lo que sucede realmente cuando se presiona el botón. El programa se puede ajustar hasta que se elimine por completo la detección falsa. La imagen a continuación muestra lo que sucede realmente cuando se presiona el botón.

Leer más: http://romux.com/tutorials/pic-tutorial/push-buttons#ixzz43cAbVcWR

Juan
fuente
1

Además de lo que han escrito los demás: no asigne 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.

Tu también puedes

  • toma mi palabra
  • leer sobre el tema "leer-modificar-escribir", o
  • Sufrir las consecuencias
Wouter van Ooijen
fuente