Proyecto realizado por Sergio Florido Becerra y Andrés Domínguez Aguilar, alumnos del IES Politécnico Jesús Marín (CFGS Mantenimiento Electrónico), curso 2017-2018.
Archivos de la categoría TUTORIALES
EVA documentación
Memorias:
Esquemas electrónicos:
Programación en Python para Raspberry pi:
Archivos stl:
Apliques.zip Bancada.zip Cabeza.zip Embutidor.zip Eslabón.zip Llantas.zip Rodamiento.zip
Planos 2D y 3D:
Planos_M.zip Planos_PA.zip Planos_PB.zip Planos_PC.zip Planos_PD.zip Planos_PE.zip Planos_secuencias.zip
EVA, microtutoriales Software
Realizados por Salvador Moreno.
01. EVA (SW) – Reconocimiento de voz
02. EVA (SW) – Inteligencia artificial
Microtutorial del SW que lleva el «sistema inteligente» de EVA. No es realmente Inteligencia Artificial, aunque lo simula.
EVA, microtutoriales Hardware
Realizados por Antonio Molina.
01. EVA – Tracción (engranajes)
02. EVA – Cadena (tractor oruga)
03. EVA – Suspensión
04. EVA – En movimiento
05. EVA – Electrónica
06. EVA – Refrigeración
07. EVA – Audio
Proyecto Integrado: MEBO 1.0, iniciación a la programación secuencial
MEBO es un robot al que se le pueden programar tareas, para ser posteriormente ejecutadas de manera secuencial, y así iniciar en la programación a los más pequeños. Se les mandan los comandos desde una aplicación para dispositivos Android, que se conecta por bluetooth al robot. Para la electrónica de control usamos un Arduino nano, y para la de potencia varios transistores y mosfets. A continuación todos los detalles del proyecto:
MEBO fue creado por los alumnos del ciclo de Mantenimiento Electrónico del IES Politécnico Jesús Marín: Iván Soormally, Jesús Centeno y Guillermo Cárdenas. Está en su versión 1.0, y desde Malakabot animamos a los makers a que lo mejoren.
Presentación del Proyecto EVA
Realizado por Antonio Molina y Salvador Moreno, para Principia.
Capítulo 10: USART, puerto serie
En construcción…
Código fuente: serie_rx.c
Código fuente: serie_interrup.c
Código fuente: serie_tx.c
Capítulo 9: PWM
Configuramos el módulo CCP1 (PIN_C2) para que genere una señal cuadrada (PWM). En PIN_C2 tenemos conectado un LED. El ciclo de trabajo (duty cycle) de la señal PWM variará de 0% (apagada) a 100% (totalmente encendida), pasando por 4 estados intermedios, de forma que veremos como va cambiando la intensidad luminosa del LED de manera progresiva.
Código fuente: PWM.c
T_PWM = (PR2+1)*prescaler*4*Tosc
Duty cycle (CCPRxx): valor mínimo=0 (0%), valor máximo=PR2 (100%)
El PIC18F2550 tiene dos puertos que pueden generar automáticamente señales PWM: CCP1 (PIN_C2) y CCP2 (PIN_C1).
En nuestro ejemplo, el período de la señal PWM sería:
T_PWM = (255+1) * 16 * 4 * (1/48MHz) = 341us (2.93KHz)
Duty cycle: CCPR1L = (0 – 255)
Registros para configurar el PWM (para generar el PWM, el PIC18F2550 trabaja con el timer2):
CPxCONbits.CCPxM: configura el módulo CCPx en modo PWM, o en modo Comparación o en modo Mejorado de Captura.
PR2: Similar al valor máximo del duty cycle, para una resolución de 8 bits.
T2CONbits.TMR2ON: Habilita el timer2.
T2CONbits.T2CKPS: Prescaler del timer2. El postscaler del timer2 no se usa en el PWM.
CCPRxL: El valor del duty cycle puede tener una resolución de 8 bits o de 10 bits. Los 8 bits más significativos se almacenan en el resgistro CCPRxL. Los dos bits menos significativos estarían en CPxCONbits.DCxB. En la mayoría de los casos, una resolución de 8 bits (0-255) sería suficiente, por lo que tan solo habría que dar un valor a CCPRxL para cambiar el duty cycle.
Capítulo 8: Timer 0
Se configura el timer_0 del PIC18F2550 para que salte la interrupción por desbordamiento cada 500ms. Y cada 500ms se invierte el valor del PIN_C6, para que parpadee el LED que tiene conectado.
Código fuente: timer0.c
tiempo = (cont_máx – cont_mín)*Prescaler*4*Tosc
cont_máx = 255+1 (8 bits) ó 65535+1 (16 bits).
cont_mín = TMR0 en el momento del desbordamiento. Si en la subrutina de interrupción no se le da ningún valor, empieza contando desde cero.
En nuestro ejemplo: tiempo = (65535+1 – 18661) * 128 * 4 * (1/48MHz) = 500ms
Registros para configurar la interrupción:
INTCONbits.GIE: Habilita las interrupciones.
INTCONbits.PEIE: Habilita las interrupciones periféricas (todas son periféricas, menos las externas, port B).
INTCONbits.TMR0IE: Habilita la interrupción del timer0.
INTCONbits.TMR0IF: Flag o bandera del timer0, que se pone a uno cuando salta la interrupción por desbordamiento del timer0.
Registros para configurar el timer0:
T0CONbits.TMR0ON: Habilita el timer0.
T0CONbits.T08BIT: Contador de 8 bits (desborda a 255+1) o de 16 bits (desborda a 65535+1), la interrupción salta al reiniciar.
T0CONbits.T0CS: Cuenta los pulsos del reloj interno (48MHz) o de una fuente externa.
T0CONbits.T0SE: Cuenta los flancos de subida o de bajada.
T0CONbits.PSA: Se le asigna un valor al prescaler.
T0CONbits.T0PS: Prescaler.
Capítulo 7: Interrupciones externas
Un pulsador en pull-up conectado al PIN_B7 interrumpe el bucle infinito while(1) para encender un LED (PIN_C6) cuando lo pulsamos y apagarlo cuando lo soltamos.
Código fuente: interrupcion_externa.c
En el puerto B tenemos varios tipos de interrupciones externas:
Interrupciones por flanco: INT0 (PIN_B0), INT1 (PIN_B1) y INT2 (PIN_B2). Cada una se puede configurar de manera independiente, es decir, cada una tiene su propio «flag», que puede saltar en el flanco de subida o en el de bajada, según se quiera.
Interrupciones por nivel: la interrupción saltaría ante cualquier cambio de nivel en cualquiera de los 4 puertos: RB4-RB7. Por eso es importante comprobar dentro de la subrutina de interrupción qué puerto es el que ha cambiado.
Registros a tener en cuenta para configurar interrupciones por nivel:
INTCONbits.GIE: Habilita las interrupciones.
INTCONbits.RBIE: Habilita interrupciones por nivel, RB4-RB7.
INTCONbits.RBIF: Indicador de bandera (flag), se pone a uno cuando salta la interrupción de nivel.
Apuntes detallados de cómo configurar interrupciones externas, tanto las de flanco como las de nivel: