MULTIPLEXAR DISPLAY 7 Segmentos con PIC 🔥 [PIC C en CCS C] - # 013

  Рет қаралды 54,240

Sergio A. Castaño Giraldo

Sergio A. Castaño Giraldo

Күн бұрын

Пікірлер: 88
@SergioACGiraldo
@SergioACGiraldo 6 жыл бұрын
❤️ Curso de PIC ➡️ goo.gl/5riyKn 💙 Curso de ARDUINO ➡️ bit.ly/2q7Ln1c 🧡 Curso de MATLAB ➡️ bit.ly/2AtFZvr 😱 Como ser Experto en PIC en 7 Días 👉 bit.ly/2OTkNry
@crepusculo2013
@crepusculo2013 8 ай бұрын
Muy buenas tardes amigo sergio saludos y felicitarlo por tan loborioso trabajo largoy muy extenso quiciera aprovechar el momento para ver si me ayuda a dicipar una duda como le hago para utilizar un 7447 para poder utilizar solo cuatro pines del micro pic16f684 ya que el espacio es muy pequeño y es primera ves que uso pic compiler no soy muy diestro gracias y saludos
@willysoriano4196
@willysoriano4196 Жыл бұрын
Hola. tengo un circuito de multiplexar 3 digitos LED de 7 segmentos y un CD para convertir binario a digital a diferencia del circuito. Aprecio un parpadeo en el digito de unidades entre un numero y cero, Es necsario usar Timer? Podrìa eso afectar el parpadeo? El ciclo se repite cada 500 ms
@oalargo
@oalargo 4 жыл бұрын
Muchas gracias Sergio.
@Rj-Kmilo
@Rj-Kmilo 2 жыл бұрын
Pueden poner el código:/
@SergioACGiraldo
@SergioACGiraldo 2 жыл бұрын
Los códigos del canal siempre los vas a encontrar de manera gratuita en el sitio web, cuyo link siempre estará en la descripción de cada video. Para este caso el link es wp.me/p5P46A-2R
@garridonavaangeldinard8695
@garridonavaangeldinard8695 3 жыл бұрын
si quiero desplegar mi nombre y que este corra hacia la izquierda como podria hacerlo ??
@fermincarmeloruizmartin7100
@fermincarmeloruizmartin7100 2 жыл бұрын
Hola Sergio, Estoy siguiendo el curso para aprender a programar en C y en este video tengo una pregunta respecto al código junto con el conexionado de los display. Estoy viendo en el código que en ningún sitio e le indica a que pines del microcontrolador se conectan los segmentos. ¿Es indiferente a que pienes se conecten o hay alguna predisposición en especial para que vayan a los pines DE RB0 a RB6?
@SergioACGiraldo
@SergioACGiraldo 2 жыл бұрын
Puedes conectarlo a los pines que desees. En el ejemplo como declaramos el Puerto B, se optó por conectar todos los displays en dicho puerto, por eso en la función *mostrar* usamos siempre el puerto B en combinación con el vector creado en el encabezado para mostrar cada número.Pero nuevamente, se puede conectar en cualquier PIN del micro, incluso puedes mezclar pines de varios puertos sin problema, solo que debes adaptar la lógica para que te funciones con los pines que hays seleccionado.
@fermincarmeloruizmartin7100
@fermincarmeloruizmartin7100 2 жыл бұрын
@@SergioACGiraldo Gracias por la pronta respuesta. parpadeando configuración Tambiénactivación Asícomentarte ¿alguna idea?
@fermincarmeloruizmartin7100
@fermincarmeloruizmartin7100 2 жыл бұрын
Gracias por la pronta respuesta. No sé que paso con la respuesta. Decirte que he probado, con Proteus, y la indicación en el display parpadean, como si los delay de la multiplexación fuera muy grande. Cambie el pic al 16F628A cambiando las direcciones de los puertos y la asignación de activación de los display. Decirte que si pongo lo segmentos de RB1 a RB7 las indicaciones son erróneas, pero si los cambio a RB0 A RB6 ya funcionan salvo por el parpadeo. ¿alguna idea que puede pasar?
@fermincarmeloruizmartin7100
@fermincarmeloruizmartin7100 2 жыл бұрын
Sergio, al final realice el esquema tal como indicas en el video. Probado y funciona bien. También he realizado el mismo con el pic 16F628 y ahora me funciona bien. ¡¡¡ No se que habría realizado mal la vez anterior!!! Lo que si he observado es que los segmentos deben ir desde el pin 0 al 6 para que funcione. Si lo pasas a 1 a 7 ya presenta mensajes erróneos. No he probado con otros puertos. ¿A que crees que puede ser debido?
@SergioACGiraldo
@SergioACGiraldo 2 жыл бұрын
@@fermincarmeloruizmartin7100 el código está hecho para funcionar desde el RB0 dado que así está configurado el vector que muestra cada número en el display, además de usar la directiva *portb* que indica que va a asignar los estados lógicos a todo el portb comenzando desde RB0. Si deseas comenzar desde otro PIN, debes configurar el vector inicial para mostrar los números del display.
@YuhiroHanma07
@YuhiroHanma07 4 жыл бұрын
Profesor, entiendo que son displays de cátodo común, entonce, ¿por qué conecta los pines de GND de los displays también a VCC?
@SergioACGiraldo
@SergioACGiraldo 4 жыл бұрын
Islas en la práctica no es necesario. Solo colocas los displays a GND a través de los transistores. En el proteus tuve que colocar esas resistencias para que me detectara el cero lógico adecuadamente, no se porque no me funciona si no es así. Pero es solo en la simulación. Saludos
@enzomaidana1945
@enzomaidana1945 4 жыл бұрын
Una pregunta. Qué pinta en el código la variable Contret?? Vengo mirando la programación y no le encuentro un uso
@SergioACGiraldo
@SergioACGiraldo 4 жыл бұрын
Es un contador para hacer la función que contabiliza 1 segundo. Este contador se va disminuyendo mientras va mostrando los números en los displays. Cuando llega a cero quiere decir que ya pasó 1 segundo entonces incrementa la cuenta del contador de los displays.
@maxiacosta1659
@maxiacosta1659 4 жыл бұрын
Genio! Se entendió perfecto y rápido
@josecordobacontreras4204
@josecordobacontreras4204 3 жыл бұрын
hola excelente explicacion tengo una duda En caso de querer declarar la matriz de los numeros como binarios en vez de hexadecimales el programa lo entendera?
@SergioACGiraldo
@SergioACGiraldo 3 жыл бұрын
Si, sin inconvenientes.
@SergioACGiraldo
@SergioACGiraldo 7 жыл бұрын
Para obtener el Código Visita: wp.me/p5P46A-2R Lista de Reproducción del Curso Completo: goo.gl/5riyKn
@nipoanz7865
@nipoanz7865 7 жыл бұрын
Sergio, y si se usa el 74ls47, los pines que sobran de ese mismo puerto, se usan para activar los display, como se modifica el código. Gracias.
@SergioACGiraldo
@SergioACGiraldo 7 жыл бұрын
Con ese integrado, no necesitas colocar los numeros dentro del Arreglo como lo hicimos en este video, porque el 74LS47 ya hace el trabajo por ti. Solo es conectar 4 pines del pic y mandar el numero en BCD (código binario) y listo. Ahora puedes colocar tantos displays como quieras usando transistores y el mismo concepto de la multiplexación visto en este video.
@nipoanz7865
@nipoanz7865 7 жыл бұрын
Hola sergio, si eso fue lo que hice, pero, como hago para que en ese mismo puerto me quede para mandar el codigo BCD y habilitar o desactivar los transistores. Gracias
@SergioACGiraldo
@SergioACGiraldo 7 жыл бұрын
Puedes darle un vistazo a esta entrada, para que veas como colocar valores en el puerto: controlautomaticoeducacion.com/microcontroladores-pic/2-comenzando-en-pic-c/ Basicamente si tienes todo en el puerto B, digamos los primeros 4 bits son el bcd y quieres mostrar el 3, mandas en binario 0b0011, ahora si tienes tus transistores desde el pin RB4 hasta RB7 (4 displays) digamos que deseas mostrar el 3 en el primer display, mandarias: PORTB=0b00010011; nota que los ultimos 4 bits son el numero en binario (el 3) y los 4 primeros bits los transistores, donde solo tengo activo 1 transistor.
@nipoanz7865
@nipoanz7865 7 жыл бұрын
Sergio Castaño Si me ha servido así, gracias Sergio
@juanluisposadas5505
@juanluisposadas5505 4 жыл бұрын
Hola. Excelente video. solo una pregunta ¿cuales son los componentes que usas en el pin 13 y 14?
@SergioACGiraldo
@SergioACGiraldo 4 жыл бұрын
Un cristal de Cuarzo de 4MHz y dos condensadores cerámicos de 22pF
@juanluisposadas5505
@juanluisposadas5505 4 жыл бұрын
@@SergioACGiraldo Hola. gracias por la pronta respuesta, ahora otro favor, hice el diagrama el proteus pero no me marca el contador, tal vez tengo mal algunos componentes, crees que me puedas compartir que componentes utilizaste para toda la simulacion?
@ANTONIOSTAR
@ANTONIOSTAR 5 жыл бұрын
Hola mestre como implementar 2 botoes para pulsar 1 incrementa e outro decrementa? gracias.
@SergioACGiraldo
@SergioACGiraldo 5 жыл бұрын
Olá Antonio, da uma olhada no video de interrupções, a gente fez o exemplo com o incremento e o display sete segmentos. kzbin.info/www/bejne/nau4onuif7yha80
@ANTONIOSTAR
@ANTONIOSTAR 5 жыл бұрын
Gracias, professor.
@santiagoapontemarin2853
@santiagoapontemarin2853 5 жыл бұрын
Son necesarios los transistores? En el lugar donde pienso probarlo es un laboratorio con fuentes donde se les puede regular el voltaje y la corriente, por otro lado la multiplexacion se puede realizar también con anodo común?
@SergioACGiraldo
@SergioACGiraldo 5 жыл бұрын
Hola Santiago, SI SON NECESARIOS!! El consumo típico de cada segmento, (como de cada LED) es de entre 15 y 20mA. Como tenemos 8 segmentos, pensemos en el caso en el que mostramos el numero 8 junto con el punto decimal, el consumo será de 8 x 15 = 120 mA y pudiendo llegar a 160mA que podrían llegar al pin del PIC encargado de la multiplexación, esto provocará que tu PIC se pueda quemar. Puedes usarlo la multiplexación con Anodo común tambien, pero debes usar transistores PNP en este caso. Dale un vistazo al post que hice con Arduino, que aplica exactamente igual para el PIC: controlautomaticoeducacion.com/arduino/multiplexar-display-7-segmentos/
@JorgeRodriguez-ct6zp
@JorgeRodriguez-ct6zp 7 жыл бұрын
Te ganaste todo mi agradecimientoooo!!! gracias amigo por el video sigue asi!!!
@SergioACGiraldo
@SergioACGiraldo 7 жыл бұрын
Gracias Jorge por el comentário, que bueno que te sirvió. Éxitos.
@videoszolution5380
@videoszolution5380 2 жыл бұрын
Sergio cordial saludo, la temporizacion si es de 1 segundo porque esta cargado conret con 500, no debería ser 1000?
@SergioACGiraldo
@SergioACGiraldo 6 жыл бұрын
Para el 16F877A colocar en el encabezado #include Para el 18F4550 colocar en el encabezado: #include #byte porta = 0xf80 // Identificador para el puerto A. #byte portb = 0xf81 // Identificador para el puerto B. #byte portc = 0xf82 // Identificador para el puerto C. #byte portd = 0xf83 // Identificador para el puerto D. #byte porte = 0xf84 // Identificador para el puerto E.
@soniatexisayapantecatl6323
@soniatexisayapantecatl6323 3 жыл бұрын
Una duda como calculo las centenas y millares ? Ya que lo haré de 4 display ya que para decenas dividiste la variable en 10 y para las unidades agarrate el residuo ademas en el rango lo pusiste a 100 yo debo ponerle a 1000? Por favor me ayudaría esa respuesta
@SergioACGiraldo
@SergioACGiraldo 3 жыл бұрын
@@soniatexisayapantecatl6323 si, debes colocar hasta 1000. INT16 UNI,DEC,CEN,MIL; MIL=(CONT % 10000)/1000; CEN=(CONT% 1000)/100; DEC=(CONT % 100)/10; UNI= CONT % 10;
@soniatexisayapantecatl6323
@soniatexisayapantecatl6323 3 жыл бұрын
Muchas gracias! Si logró funcionar ya que trato de hacer un temporizador de 4 dígitos mi problema está en que tengo las posiciones 1459 que serian 14 minutos 59 segundos cuando mi segunda posición que es 5 llega a 0 se reinicia en 9, no se como colocar la condicion que cuando las decenas se reinicie a 9 en vez de nueve sea 6
@johanestebannunezquispe8861
@johanestebannunezquispe8861 5 жыл бұрын
buenas, tengo un problema solo cuando cambio los puertos de multiplexacion de C por A, realizo todos los cambios correspondientes para que el puerto A haga la multiplexacion, pero el display me funciona a la inversa y no es por el tipo de display necesito de su ayuda.
@SergioACGiraldo
@SergioACGiraldo 5 жыл бұрын
No entendí. Como así q te funciona a la inversa. Estas colocando en el puerto A los transistores para la multiplexacion?
@johanestebannunezquispe8861
@johanestebannunezquispe8861 5 жыл бұрын
Sergio A. Castaño Giraldo Buenas , si estoy cambiando los puertos
@SergioACGiraldo
@SergioACGiraldo 5 жыл бұрын
Pero que quieres decir con que te funciona a la inversa? y que pines del puerto A estás utilizando?
@evelindanielaramirezponce7598
@evelindanielaramirezponce7598 4 жыл бұрын
¡Buenas noches! Disculpe, ¿los displays que usa son cátodo o ánodo común?
@SergioACGiraldo
@SergioACGiraldo 4 жыл бұрын
Hola Evelin, en el video se muestra el ejemplo con displays de Cátodo común, pues como ves el común se lleva a tierra por medio de los transistores. Sin embargo, si observas el sitio web, allí indica como usar el ánodo común y muestra también el vector con los dígitos que deben emplearse con este tipo de displays: wp.me/p5P46A-2R
@LuisAlejandroXU
@LuisAlejandroXU 7 жыл бұрын
lo necesitaba y lo entendi al toque, gracias!!
@jesusgarcia-hw3ym
@jesusgarcia-hw3ym 5 жыл бұрын
que tal amigo mi pregunta es ay que tengo esa incognita es la siguiente , si por ejemplo el programa esta hecho para un pic digamos un 15f887 se puede adptar a un 18f4550?
@SergioACGiraldo
@SergioACGiraldo 5 жыл бұрын
Claro, es solo cambiar el encabezado del programa. #include #DEVICE ADC=10 #USE DELAY(crystal=20000000) #FUSES HS,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP #byte porta = 0xf80 // Identificador para el puerto A. #byte portb = 0xf81 // Identificador para el puerto B. #byte portc = 0xf82 // Identificador para el puerto C. #byte portd = 0xf83 // Identificador para el puerto D. #byte porte = 0xf84 // Identificador para el puerto E.
@jesusgarcia-hw3ym
@jesusgarcia-hw3ym 5 жыл бұрын
@@SergioACGiraldo gracias amigo y lo felicito explica usted muy bien , saludos desde venezuela.
@juanignaciocondori7651
@juanignaciocondori7651 4 жыл бұрын
pero como seria para un pic16f88 no seria algo mas diferente digo por si yo quiero hacer un programa con eso como seria
@ricardomoran9062
@ricardomoran9062 4 жыл бұрын
hola sergio! estoy siguiendo su curso,pero,tengo una pequeña duda y espero me pueda ayudar a resolverla. para estudiar y prender mas hago un ejemplo como el que muestra pero con algo que segun yo lo hace mas complejo. estoy reciclando su codigo con algunas modificaciones para multiplexar 4 displays todo corre bien pero cuando llego a 300 me arroja basura en las decenas pero sigue el conteo yo creo que el problema esta en esta parte del programa MIL=CONT/1000; CEN=((CONT-(MIL*1000))/100); DEC=((CONT-(MIL*1000)-(CEN*100))/10); UNI=CONT%10;
@SergioACGiraldo
@SergioACGiraldo 4 жыл бұрын
Hola Ricardo, lo que tienes es un problema de multiplicación con diferentes tipos de datos (int y long) y no le informas al compilador como quieres obtener tu resultado. Eso lo explique en el video de la memoria eeprom. Tienes dos posibilidades: 1. Define tus variables como long: LONG UNI,DEC,CEN,MIL; 2. Utiliza los cast o la función _mul del ccs (que son básicamente lo mismo) MIL=CONT/1000; CEN=((CONT-_mul(MIL,1000))/100); DEC=((CONT-_mul(MIL,1000)-_mul(CEN,100))/10); UNI=CONT%10; El video donde lo explico en el minuto exacto: kzbin.info/www/bejne/ZoiqopevodefZrs
@arturoflores3980
@arturoflores3980 6 жыл бұрын
Los displays que utilizas en este tutorial son de ánodo común o de cátodo común?
@SergioACGiraldo
@SergioACGiraldo 6 жыл бұрын
Hola Arturo, son de Cátodo Común. Saludos.
@proyelectrons.a.s.4553
@proyelectrons.a.s.4553 5 жыл бұрын
@@SergioACGiraldo si fueran de ánodo común los leds del display encenderían con un nivel bajo y le estas enviando un nivel alto, es decir, que los displays son de cátodo común.
@SergioACGiraldo
@SergioACGiraldo 5 жыл бұрын
@@proyelectrons.a.s.4553 tienes razón, son display de Cátodo Común. Gracias por la observación. Saludos y Éxitos
@rodov3r4
@rodov3r4 9 жыл бұрын
Hola muy bueno tu tutorial pero fíjate que etoy en CCS C, pero no trae la libreria 16f887.h y ya me pasé toda la semana buscando y ninguna me compila no sé porque! ya probé el proyecto en proteus cn el .hex y sin problemas! no tendrás la librería que me la puedas proporcionar porfavor? muchas gracias! saludo
@rodov3r4
@rodov3r4 9 жыл бұрын
***** Man, pues no sé si sea correcto, pero utilice la librería del 16f877, y si funcionó.... =S pero si la tienes y si puedes mandarmela porfas gracias!
@SergioACGiraldo
@SergioACGiraldo 9 жыл бұрын
***** Hola, seguramente no tienes la libreria debido a que tienes una version antigua del compilador. El 16F887 es la actualizacion del pic 16F877A. Copia y pega esto y guardalo como 16F887.h en la carpeta "Devices" del Pic C. Un saludo. //////// Standard Header file for the PIC16F887 device //////////////// #device PIC16F887 #nolist //////// Program memory: 8192x14 Data RAM: 367 Stack: 8 //////// I/O: 36 Analog Pins: 14 //////// Data EEPROM: 256 //////// C Scratch area: 77 ID Location: 2000 //////// Fuses: LP,XT,HS,EC_IO,INTRC_IO,INTRC,RC_IO,RC,NOWDT,WDT,NOPUT,PUT //////// Fuses: NOMCLR,MCLR,NOPROTECT,PROTECT,NOCPD,CPD,NOBROWNOUT,BROWNOUT //////// Fuses: BROWNOUT_NOSL,BROWNOUT_SW,NOIESO,IESO,NOFCMEN,FCMEN,NOLVP //////// Fuses: LVP,NODEBUG,DEBUG,WRT,NOWRT,BORV40,BORV21 //////// ////////////////////////////////////////////////////////////////// I/O // Discrete I/O Functions: SET_TRIS_x(), OUTPUT_x(), INPUT_x(), // PORT_x_PULLUPS(), INPUT(), // OUTPUT_LOW(), OUTPUT_HIGH(), // OUTPUT_FLOAT(), OUTPUT_BIT() // Constants used to identify pins in the above are: #define PIN_A0 40 #define PIN_A1 41 #define PIN_A2 42 #define PIN_A3 43 #define PIN_A4 44 #define PIN_A5 45 #define PIN_A6 46 #define PIN_A7 47 #define PIN_B0 48 #define PIN_B1 49 #define PIN_B2 50 #define PIN_B3 51 #define PIN_B4 52 #define PIN_B5 53 #define PIN_B6 54 #define PIN_B7 55 #define PIN_C0 56 #define PIN_C1 57 #define PIN_C2 58 #define PIN_C3 59 #define PIN_C4 60 #define PIN_C5 61 #define PIN_C6 62 #define PIN_C7 63 #define PIN_D0 64 #define PIN_D1 65 #define PIN_D2 66 #define PIN_D3 67 #define PIN_D4 68 #define PIN_D5 69 #define PIN_D6 70 #define PIN_D7 71 #define PIN_E0 72 #define PIN_E1 73 #define PIN_E2 74 #define PIN_E3 75 ////////////////////////////////////////////////////////////////// Useful defines #define FALSE 0 #define TRUE 1 #define BYTE int #define BOOLEAN short int #define getc getch #define fgetc getch #define getchar getch #define putc putchar #define fputc putchar #define fgets gets #define fputs puts ////////////////////////////////////////////////////////////////// Control // Control Functions: RESET_CPU(), SLEEP(), RESTART_CAUSE() // Constants returned from RESTART_CAUSE() are: #define WDT_FROM_SLEEP 3 #define WDT_TIMEOUT 11 #define MCLR_FROM_SLEEP 19 #define MCLR_FROM_RUN 27 #define NORMAL_POWER_UP 24 #define BROWNOUT_RESTART 26 ////////////////////////////////////////////////////////////////// Timer 0 // Timer 0 (AKA RTCC)Functions: SETUP_COUNTERS() or SETUP_TIMER_0(), // SET_TIMER0() or SET_RTCC(), // GET_TIMER0() or GET_RTCC() // Constants used for SETUP_TIMER_0() are: #define RTCC_INTERNAL 0 #define RTCC_EXT_L_TO_H 32 #define RTCC_EXT_H_TO_L 48 #define RTCC_DIV_1 8 #define RTCC_DIV_2 0 #define RTCC_DIV_4 1 #define RTCC_DIV_8 2 #define RTCC_DIV_16 3 #define RTCC_DIV_32 4 #define RTCC_DIV_64 5 #define RTCC_DIV_128 6 #define RTCC_DIV_256 7 #define RTCC_8_BIT 0 // Constants used for SETUP_COUNTERS() are the above // constants for the 1st param and the following for // the 2nd param: ////////////////////////////////////////////////////////////////// WDT // Watch Dog Timer Functions: SETUP_WDT() or SETUP_COUNTERS() (see above) // RESTART_WDT() // #define WDT_18MS 0x8000 #define WDT_36MS 9 #define WDT_72MS 10 #define WDT_144MS 11 #define WDT_288MS 12 #define WDT_576MS 13 #define WDT_1152MS 14 #define WDT_2304MS 15 // One of the following may be OR'ed in with the above: #define WDT_ON 0x8100 #define WDT_OFF 0 #define WDT_DIV_16 0x100 #define WDT_DIV_8 0x300 #define WDT_DIV_4 0x500 #define WDT_DIV_2 0x700 #define WDT_TIMES_1 0x900 // Default #define WDT_TIMES_2 0xB00 #define WDT_TIMES_4 0xD00 #define WDT_TIMES_8 0xF00 #define WDT_TIMES_16 0x1100 #define WDT_TIMES_32 0x1300 #define WDT_TIMES_64 0x1500 #define WDT_TIMES_128 0x1700 ////////////////////////////////////////////////////////////////// Timer 1 // Timer 1 Functions: SETUP_TIMER_1, GET_TIMER1, SET_TIMER1 // Constants used for SETUP_TIMER_1() are: // (or (via |) together constants from each group) #define T1_DISABLED 0 #define T1_INTERNAL 0x85 #define T1_EXTERNAL 0x87 #define T1_EXTERNAL_SYNC 0x83 #define T1_CLK_OUT 8 #define T1_DIV_BY_1 0 #define T1_DIV_BY_2 0x10 #define T1_DIV_BY_4 0x20 #define T1_DIV_BY_8 0x30 // You may Or (with |) the above with one of: #define T1_GATE 0x40 #define T1_GATE_INVERTED 0xC0 ////////////////////////////////////////////////////////////////// Timer 2 // Timer 2 Functions: SETUP_TIMER_2, GET_TIMER2, SET_TIMER2 // Constants used for SETUP_TIMER_2() are: #define T2_DISABLED 0 #define T2_DIV_BY_1 4 #define T2_DIV_BY_4 5 #define T2_DIV_BY_16 6 ////////////////////////////////////////////////////////////////// CCP // CCP Functions: SETUP_CCPx, SET_PWMx_DUTY // CCP Variables: CCP_x, CCP_x_LOW, CCP_x_HIGH // Constants used for SETUP_CCPx() are: #define CCP_OFF 0 #define CCP_CAPTURE_FE 4 #define CCP_CAPTURE_RE 5 #define CCP_CAPTURE_DIV_4 6 #define CCP_CAPTURE_DIV_16 7 #define CCP_COMPARE_SET_ON_MATCH 8 #define CCP_COMPARE_CLR_ON_MATCH 9 #define CCP_COMPARE_INT 0xA #define CCP_COMPARE_RESET_TIMER 0xB #define CCP_PWM 0xC #define CCP_PWM_PLUS_1 0x1c #define CCP_PWM_PLUS_2 0x2c #define CCP_PWM_PLUS_3 0x3c long CCP_1; #byte CCP_1 = 0x15 #byte CCP_1_LOW= 0x15 #byte CCP_1_HIGH= 0x16 // The following should be used with the ECCP unit only (or these in) #define CCP_PWM_H_H 0x0c #define CCP_PWM_H_L 0x0d #define CCP_PWM_L_H 0x0e #define CCP_PWM_L_L 0x0f #define CCP_PWM_FULL_BRIDGE 0x40 #define CCP_PWM_FULL_BRIDGE_REV 0xC0 #define CCP_PWM_HALF_BRIDGE 0x80 #define CCP_SHUTDOWN_ON_COMP1 0x100000 #define CCP_SHUTDOWN_ON_COMP2 0x200000 #define CCP_SHUTDOWN_ON_COMP 0x300000 #define CCP_SHUTDOWN_ON_INT0 0x400000 #define CCP_SHUTDOWN_ON_COMP1_INT0 0x500000 #define CCP_SHUTDOWN_ON_COMP2_INT0 0x600000 #define CCP_SHUTDOWN_ON_COMP_INT0 0x700000 #define CCP_SHUTDOWN_AC_L 0x000000 #define CCP_SHUTDOWN_AC_H 0x040000 #define CCP_SHUTDOWN_AC_F 0x080000 #define CCP_SHUTDOWN_BD_L 0x000000 #define CCP_SHUTDOWN_BD_H 0x010000 #define CCP_SHUTDOWN_BD_F 0x020000 #define CCP_SHUTDOWN_RESTART 0x80000000 #define CCP_PULSE_STEERING_A 0x01000000 #define CCP_PULSE_STEERING_B 0x02000000 #define CCP_PULSE_STEERING_C 0x04000000 #define CCP_PULSE_STEERING_D 0x08000000 #define CCP_PULSE_STEERING_SYNC 0x10000000 long CCP_2; #byte CCP_2 = 0x1B #byte CCP_2_LOW= 0x1B #byte CCP_2_HIGH= 0x1C ////////////////////////////////////////////////////////////////// SPI // SPI Functions: SETUP_SPI, SPI_WRITE, SPI_READ, SPI_DATA_IN // Constants used in SETUP_SPI() are: #define SPI_MASTER 0x20 #define SPI_SLAVE 0x24 #define SPI_L_TO_H 0 #define SPI_H_TO_L 0x10 #define SPI_CLK_DIV_4 0 #define SPI_CLK_DIV_16 1 #define SPI_CLK_DIV_64 2 #define SPI_CLK_T2 3 #define SPI_SS_DISABLED 1 #define SPI_SAMPLE_AT_END 0x8000 #define SPI_XMIT_L_TO_H 0x4000 ////////////////////////////////////////////////////////////////// UART // Constants used in setup_uart() are: // FALSE - Turn UART off // TRUE - Turn UART on #define UART_ADDRESS 2 #define UART_DATA 4 #define UART_AUTODETECT 8 #define UART_AUTODETECT_NOWAIT 9 #define UART_WAKEUP_ON_RDA 10 #define UART_SEND_BREAK 13 // Comparator Variables: C1OUT, C2OUT // Constants used in setup_comparator() are: // #define NC_NC_NC_NC 0x00 // OR together one from the first group with one from the second #define CP1_A1_A0 0x80 #define CP1_C1_A0 0x81 #define CP1_C2_A0 0x82 #define CP1_C3_A0 0x83 #define CP1_A1_VREF 0x84 #define CP1_C1_VREF 0x85 #define CP1_C2_VREF 0x86 #define CP1_C3_VREF 0x87 // #define CP2_A1_A0 0x8000 #define CP2_C1_A0 0x8100 #define CP2_C2_A0 0x8200 #define CP2_C3_A0 0x8300 #define CP2_A1_VREF 0x8400 #define CP2_C1_VREF 0x8500 #define CP2_C2_VREF 0x8600 #define CP2_C3_VREF 0x8700 // and any of the following #define CP1_OUT_ON_A2 0x20 #define CP2_OUT_ON_C4 0x2000 #define COMP_INVERT_C1 0x10 #define COMP_INVERT_C2 0x1000 #define COMP_T1_SYNC 0x100000 #define COMP_T1_GATE 0x200000 #define CP1_HYST 0x800000 #define CP2_HYST 0x400000 #define T1_TIMES_4 0x1000000 #define CP1_LATCH_SET 0x60000000 #define CP2_LATCH_CLEAR 0x90000000 #define CP_LATCH_SET 0x8000000 #define CP_LATCH_CLEAR 0x4000000 #define CP_SR_CLK_DIV_4 0x1000000 #define CP_SR_CLK_DIV_8 0x1400000 #define CP_SR_CLK_DIV_16 0x1800000 #define CP_SR_CLK_DIV_32 0x1C00000 #bit C1OUT = 0x107.6 #bit C2OUT = 0x108.6 ////////////////////////////////////////////////////////////////// VREF // Constants used in setup_vref() are: // #define VREF_LOW 0xa0 #define VREF_HIGH 0x80 // Or (with |) the above with a number 0-15 ////////////////////////////////////////////////////////////////// INTERNAL RC // Constants used in setup_oscillator() are: #define OSC_31KHZ 1 #define OSC_125KHZ 0x11 #define OSC_250KHZ 0x21 #define OSC_500KHZ 0x31 #define OSC_1MHZ 0x41 #define OSC_2MHZ 0x51 #define OSC_4MHZ 0x61 #define OSC_8MHZ 0x71 #define OSC_INTRC 1 #define OSC_NORMAL 0 // Result may be (ignore all other bits) #define OSC_STATE_STABLE 4 #define OSC_31KHZ_STABLE 2 ////////////////////////////////////////////////////////////////// ADC // ADC Functions: SETUP_ADC(), SETUP_ADC_PORTS() (aka SETUP_PORT_A), // SET_ADC_CHANNEL(), READ_ADC() // Constants used for SETUP_ADC() are: #define ADC_OFF 0 // ADC Off #define ADC_CLOCK_DIV_2 0x100 #define ADC_CLOCK_DIV_8 0x40 #define ADC_CLOCK_DIV_32 0x80 #define ADC_CLOCK_INTERNAL 0xc0 // Internal 2-6us // Constants used in SETUP_ADC_PORTS() are: #define sAN0 1 //| A0 #define sAN1 2 //| A1 #define sAN2 4 //| A2 #define sAN3 8 //| A3 #define sAN4 16 //| A5 #define sAN5 32 //| E0 #define sAN6 64 //| E1 #define sAN7 128 //| E2 #define sAN8 0x10000 //| B2 #define sAN9 0x20000 //| B3 #define sAN10 0x40000 //| B1 #define sAN11 0x80000 //| B4 #define sAN12 0x100000 //| B0 #define sAN13 0x200000 //| B5 #define NO_ANALOGS 0 // None #define ALL_ANALOG 0x1F00FF // A0 A1 A2 A3 A5 E0 E1 E2 B0 B1 B2 B3 B4 B5 // One of the following may be OR'ed in with the above using | #define VSS_VDD 0x0000 //| Range 0-Vdd #define VSS_VREF 0x1000 //| Range 0-Vref #define VREF_VREF 0x3000 //| Range Vref-Vref #define VREF_VDD 0x2000 //| Range Vref-Vdd // Constants used in READ_ADC() are: #define ADC_START_AND_READ 7 // This is the default if nothing is specified #define ADC_START_ONLY 1 #define ADC_READ_ONLY 6 ////////////////////////////////////////////////////////////////// INT // Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(), // EXT_INT_EDGE() // // Constants used in EXT_INT_EDGE() are: #define L_TO_H 0x40 #define H_TO_L 0 // Constants used in ENABLE/DISABLE_INTERRUPTS() are: #define GLOBAL 0x0BC0 #define INT_RTCC 0x0B20 #define INT_RB 0xFF0B08 #define INT_EXT 0x0B10 #define INT_AD 0x8C40 #define INT_TBE 0x8C10 #define INT_RDA 0x8C20 #define INT_TIMER1 0x8C01 #define INT_TIMER2 0x8C02 #define INT_CCP1 0x8C04 #define INT_CCP2 0x8D01 #define INT_SSP 0x8C08 #define INT_BUSCOL 0x8D08 #define INT_EEPROM 0x8D10 #define INT_TIMER0 0x0B20 #define INT_OSC_FAIL 0x8D80 #define INT_COMP 0x8D20 #define INT_COMP2 0x8D40 #define INT_ULPWU 0x8D04 #define INT_RB0 0x010B08 #define INT_RB1 0x020B08 #define INT_RB2 0x040B08 #define INT_RB3 0x080B08 #define INT_RB4 0x100B08 #define INT_RB5 0x200B08 #define INT_RB6 0x400B08 #define INT_RB7 0x800B08 #list
@rodov3r4
@rodov3r4 9 жыл бұрын
Sergio Castaño Ok muchas gracias, debería ya de compilar sin problemas =D saludos
@sershhoyos5269
@sershhoyos5269 4 жыл бұрын
Hola, muy buen video hermano, aunque yo tengo una inquietud, estoy desarrollando un programa para hacer un conteo de 10 en 10 comenzado en 10 y finalizando en 50, de ahi se repite, me servira la multiplexacion?, hasta ahora no he tenido un resultado satisfactorio, espero puedas ayudarme con eso, gracias.
@SergioACGiraldo
@SergioACGiraldo 4 жыл бұрын
La multiplexación es para poder usar vários displays, en tu caso vas a usar 2 displays, entonces necesitas de la multiplexación para poder visualizar tus datos en ambos displays. Saludos
@sershhoyos5269
@sershhoyos5269 4 жыл бұрын
@@SergioACGiraldo en este caso cuento con un display de 4 dígitos, me podrías guiar más o menos para que me salga el programa de favor?
@SergioACGiraldo
@SergioACGiraldo 4 жыл бұрын
Puedes usar el display de 4 digitos, es solo energizar 2, con el pin común (ánodo o cátodo) a través de los transistores, como mostrado en el video y en el sitio web cuyo link está en la descripción del video. El programa sería muy similar, solo que en lugar de incrementar CONT de uno en uno, lo haces de 10 en 10, CONT=CONT+10; y aplicas la lógica para cuando alcance el 50 se reinicie.
@sershhoyos5269
@sershhoyos5269 4 жыл бұрын
@@SergioACGiraldo ok, muchas gracias, suscrito y espero siga así
@RaulHernandez-lh5yr
@RaulHernandez-lh5yr 5 жыл бұрын
Muy buen video, tengo una duda. Si quiero que aparezca un voltaje, es decir juntar esto con una lectura de adc, ¿Que tengo que hacer? Saludos.
@SergioACGiraldo
@SergioACGiraldo 5 жыл бұрын
Guardar el voltaje en una variable, convertirla a entero, por ejemplo 2.5v lo multiplicas por 10 y queda 25v y lo muestras en el display como se vio en este video. Activando el punto decimal en el primer display. También puedes adicionar más displays si lo deseas, el procedimiento es el mismo.
@RaulHernandez-lh5yr
@RaulHernandez-lh5yr 5 жыл бұрын
Muchísimas gracias, me fue de gran ayuda, gracias por tu tiempo. Saludos.
@martin13523
@martin13523 4 жыл бұрын
Excelente video, aunque ya desarrollando por mi cuenta, se me hizo más fácil utilizar la función for por lo del incremento.
@SergioACGiraldo
@SergioACGiraldo 4 жыл бұрын
Excelente Martín. Esa es la idea, mejorar el código. Saludos.
@841021841021
@841021841021 9 жыл бұрын
que elegancia de tutoriales estoy apenas aprendiendo si es posible me ayudara a como puedo programar un reloj
@alexandermorales8460
@alexandermorales8460 7 жыл бұрын
saludos profe estudiando ando
@germanignaciocampocaicedo505
@germanignaciocampocaicedo505 7 жыл бұрын
Saludos Sergio, contento por haberme suscrito a tu muy didáctico canal; con base a tus explicaciones deseo hacerte una consulta, necesito para un proyecto de un reloj digital un display unificado de ánodo común de dos dígitos . Aquí en la ciudad donde resido (Neiva Huila), es imposible encontrarlo. Serías tan amable de decirme si partiendo de un display normal de 2 dígitos y por medio de la multiplexación es posible obtener uno unificado ( el display de 2 dígitos normal posee 18 pines; el unificado solo 10). Hasta pronto y gracias por tu atención.
@SergioACGiraldo
@SergioACGiraldo 7 жыл бұрын
Germán sería lo mismo. Realmente lo que importa es que consigas mostrar la información en los 2 displays, puedes usar uno unificado o dos displays comunes. No hay mucho misterio con el hardware.
@harobenitez215
@harobenitez215 8 жыл бұрын
no maa muy bueno me encanto
@eduardoflores5456
@eduardoflores5456 9 жыл бұрын
hola me podrías ayudar para hacer una calculadora con multiplexion igual con display de 7 segmentos
@SergioACGiraldo
@SergioACGiraldo 9 жыл бұрын
+Eduardo Flores hola. Para hacer la calculadora, puedes juntar lo aprendido en éste video de multiplexación junto con el teclado matricial de el siguiente enlace: kzbin.info/www/bejne/Y3q5ZoSwhM9nY9U Mi recomendación, es que conectes los Displays 7 Segmentos en el Puerto D, ya que el teclado lo tienes que conectar al puerto B. Puedes ver el video del teclado matricial que te dejé simplemente para que aprendas a usarlo, pero mi recomendación para que hagas la calculadora, es que te bases en el ejemplo de la memoria interna : kzbin.info/www/bejne/a6bJc5eJraqbh7c Ya que en este ejemplo se usa el teclado telefonico y adicionalmente, los numeros que se presionan en el teclado son convertidos a numeros enteros, con los cuales podrás hacer operaciones de suma, resta, multiplicación y división.
@christianjacome6661
@christianjacome6661 6 жыл бұрын
Muy buena aportación maestro pero por favor puedes mejorar, se ve borroso,, podrías enfocar la sección del código que estás explicando,, es una crítica constructiva
@SergioACGiraldo
@SergioACGiraldo 6 жыл бұрын
Gracias Christian por la Observación. Ese es uno de los videos viejos del canal. Los videos actuales enfoco los códigos y ya no tienen la molesta musica de fondo. La idea es siempre ir mejorando el contenido del canal. Saludos y éxitos.
@flyzedh5475
@flyzedh5475 8 жыл бұрын
Entré a ver el video porque vi de imagen un display y tu me sales con un jodido simulador.
@oscarcasarroja9911
@oscarcasarroja9911 8 жыл бұрын
fly zedh imbecil. El simulador da resultados muy similares a la realidad. Y así evita que estupidas como tú se electrocuten o peor aún, que quemen un componente.
@flyzedh5475
@flyzedh5475 8 жыл бұрын
La verdad no sé ni porque te contesto. Tu florida forma de hablar hace nulo tu comentario. Se lo que es un simulador ente sin educación, pero esa imagen fastidia la busqueda de muchos.
@YuhiroHanma07
@YuhiroHanma07 4 жыл бұрын
todo puñetas
@cristiancamilocruzmontana3710
@cristiancamilocruzmontana3710 4 жыл бұрын
Muchas Gracias Sergio
INTERRUPCIONES con PIC 🛑 Externa INT [PIC C en CCS C] - # 014
22:34
Sergio A. Castaño Giraldo
Рет қаралды 49 М.
Curso de Microcontroladores PIC  💡 Endender y Apagar un LED [PIC C en CCS C] - # 001
25:04
Support each other🤝
00:31
ISSEI / いっせい
Рет қаралды 81 МЛН
To Brawl AND BEYOND!
00:51
Brawl Stars
Рет қаралды 17 МЛН
Beat Ronaldo, Win $1,000,000
22:45
MrBeast
Рет қаралды 158 МЛН
Chain Game Strong ⛓️
00:21
Anwar Jibawi
Рет қаралды 41 МЛН
10.- CURSO MICROCONTROLADORES PIC - MULTIPLEXACIÓN DE DISPLAYS DE 7 SEGMENTOS
4:55
Electrónica y Circuitos
Рет қаралды 27 М.
DISPLAY 7 SEGMENTOS con PIC  🛑 [PIC C en CCS C] - # 012
22:05
Sergio A. Castaño Giraldo
Рет қаралды 33 М.
Multiplexación de displays
8:37
Electrónica FP
Рет қаралды 45 М.
Inside the V3 Nazi Super Gun
19:52
Blue Paw Print
Рет қаралды 2,3 МЛН
Uso del Delay con PIC ⏱ [PIC C en CCS C] - # 004
8:53
Sergio A. Castaño Giraldo
Рет қаралды 38 М.
34 Años de Evolución de las Strandbeest
20:10
Veritasium en español
Рет қаралды 408 М.
TUTORIAL DISPLAY 7 SEGMENTOS MULTIPLEXACIÓN
15:36
ELECTRÓNICA MICROCONTROLADORES Y MAS
Рет қаралды 2,5 М.
Support each other🤝
00:31
ISSEI / いっせい
Рет қаралды 81 МЛН