Professional Documents
Culture Documents
Manual de Prcticas de Microcontroladores DsPIC PIC24 F
Manual de Prcticas de Microcontroladores DsPIC PIC24 F
net/publication/351564559
CITATIONS READS
0 1,182
2 authors:
Some of the authors of this publication are also working on these related projects:
Acondicionamiento de señales de un sistema de medición de fuerza multiaxial de siete grados de libertad para aplicaciones médicas mediante PSoC View project
All content following this page was uploaded by Rigoberto Martinez Mendez on 13 May 2021.
MÉXICO
Facultad De Ingeniería
Ingeniería en Electrónica
Servicio Social
Marzo de 2021
Introducción
El manual de prácticas de microcontroladores dsPIC (DSC/PIC24) es una guía para
principiantes en la programación de microcontroladores en lenguaje de alto nivel
como C, en este manual se utiliza el PIC24F16KA102 que pertenece a una familia
de microcontroladores de 16 bits con un amplio conjunto de funciones periféricas y
un rendimiento computacional mejorado. Haciendo uso del compilador MIKRO C
PRO dsPIC/PIC24 para la creacion de programas o proyectos en lenguaje C. Esta
guía cuenta con documentación teórica sobre microcontroladores, como la
instalación y conocimiento básico sobre el compilador MIKRO C PRO dsPIC/PIC24,
de igual manera cuenta con 13 prácticas que incluyen un circuito eléctrico en
Proteus.
2
1 Índice
Introducción ............................................................................................................................ 2
Marco teórico .......................................................................................................................... 5
Microcontroladores ............................................................................................................. 5
Microprocesador ................................................................................................................. 5
CPU “Central Processor UNIT” (Unidad Central de Procesamiento). .............................. 5
Tipos de buses .................................................................................................................... 5
Unidad de memoria ............................................................................................................ 6
Tipos de memoria ............................................................................................................... 6
Bit……………. .................................................................................................................. 7
Byte…………..................................................................................................................... 8
Registro............................................................................................................................... 8
Registros SFR (Registros de funciones especiales) ............................................................ 8
Puertos de Entrada/Salida(E/S) .......................................................................................... 8
Interrupción ........................................................................................................................ 9
Configuración y uso de interrupciones. .......................................................................... 9
Oscilador............................................................................................................................. 9
Temporizadores .................................................................................................................. 9
Contadores ........................................................................................................................ 10
Temporizador perro guardián (Watchdog). ...................................................................... 10
Tipos de comunicación ..................................................................................................... 10
Velocidad de transmisión serial ........................................................................................ 10
UART “Universal Asynchronous Recerver/Transmitter” (Transmisor-Receptor
Asíncrono Universal) ........................................................................................................ 11
I2C “Inter Integrated Circuit” (Circuito Inter-Integrado). ................................................ 11
SPI “Serial Periferical Interface BUS” (Serial de Interfaz de Periféricos)....................... 12
Manual de uso....................................................................................................................... 14
Descargar el compilador MIKRO C PRO dsPIC/PIC24 versión 7.1.0. ........................... 15
Conocimientos básicos del panel vista principal de MIKRO C PRO dsPIC/PIC24 versión
7.1.0. 16
Crear nuevo proyecto........................................................................................................ 19
Project manager (Administrador de proyecto) ................................................................. 20
Library manager ............................................................................................................... 21
Project settings (Configuración de proyectos).................................................................. 21
Debbuger software en MIKRO C PRO dsPIC/PIC24 ...................................................... 22
Cargar el programa en el microcontrolador ...................................................................... 24
Herramientas del compilador ........................................................................................... 25
Editor de siete segmentos ............................................................................................. 25
Replace ......................................................................................................................... 26
Características del PIC24F16KA102.................................................................................... 27
Diagrama de pines ............................................................................................................ 28
Conexión básica................................................................................................................ 28
E/S Puertos ....................................................................................................................... 32
Registro TRISx ................................................................................................................. 32
3
Registro PORTx y LATx................................................................................................. 32
Configuración de pines de puerto analógico. ................................................................... 34
Interrupciones en el PIC24F16KA102 ............................................................................. 34
Interrupciones periféricas y señales externas ............................................................... 35
Registros de estado y control de interrupciones ........................................................... 35
Práctica 1.- Encender y apagar un Led con un push button. ................................................ 36
Práctica 2.- Leds en el Puerto B. .......................................................................................... 37
Práctica 3.-Encender y apagar Leds en el puerto B con condiciones switch, for y while. ... 38
Práctica 4.-Generar números en un display de 7 segmentos. ............................................... 40
Práctica 5.-Generar melodía en Buzzer. ............................................................................... 42
Práctica 6.- Encender y apagar: Leds y buzzer. ................................................................... 45
Práctica 7.- Pantalla LCD de 2x16. ...................................................................................... 48
Práctica 8.- Convertidor A/D ................................................................................................ 51
Práctica 9.-Medir el voltaje en un potenciómetro y mostrar el valor en un display LCD. ... 53
Práctica 10.-Cambiar ancho de pulso usando librería PWM. ............................................... 56
Práctica 11.- Con un potenciómetro cambiar el ancho de pulso de una señal PWM. .......... 58
Práctica 12.- Interrupción con timer1 ................................................................................... 60
Práctica 13.-Sensor de temperatura DS1820 ........................................................................ 62
Características del Display LCD 2x16 (Display de cristal líquido) ..................................... 66
Características básicas del Protocolo 1-wire ........................................................................ 69
Sensor de temperatura DS1820 ........................................................................................ 70
Características del sensor de temperatura:.................................................................... 70
Bibliografía ........................................................................................................................... 72
4
Marco teórico
Microcontroladores
Es un microcomputador realizado en un circuito integrado (chip). Un
microcontrolador contiene: un microprocesador, memoria de datos, memoria de
programa y las unidades de entrada y salida. [1]
Microprocesador
Es capaz de interpretar instrucciones y procesar los datos contenidos en los
programas de computadora proporcionando el control de las operaciones de
cálculo.
Tipos de buses
a) Bus de Direcciones: es un bus unidireccional (la información fluye en una
sola dirección) de la CPU a la memoria o a los elementos de entrada y salida.
La CPU solo puede colocar niveles lógicos en las n líneas de dirección, con
la cual se genera 2n posibles direcciones diferentes. Cada una de estas
direcciones corresponde a una localidad de la memoria o dispositivo de E/S.
b) Bus de Datos: bus bidireccional, dado que los datos pueden fluir hacia o
desde la CPU. El bus de datos es tan ancho como los datos, para este caso,
es de 8 bits o líneas de ancho.
5
Unidad de memoria
La memoria del microcontrolador es el espacio donde se almacenan las
instrucciones del programa y los datos que manipula. Cada dirección de memoria
corresponde a una localidad de memoria. El contenido de cualquier localidad se
puede leer y se puede acceder al direccionarla.
Tipos de memoria
a) Memoria ROM “Read Only Memory” (Memoria De Solo Lectura): se utiliza
para guardar permanentemente el programa que se debe ejecutar en el
microcontrolador. La memoria ROM es una memoria de solo lectura y no
volátil. Dependiendo de la capacidad de almacenamiento de la memoria es
el tamaño del programa que se puede escribir. Por ejemplo, la memoria ROM
del PIC24 está dividida en varias secciones como se muestra en la figura 1,
el tamaño de estas secciones depende del dispositivo.
Tanto memorias como RAM y ROM son de acceso aleatorio, pero la costumbre
ha dejado el nombre de RAM para memoria de lectura y escritura. El término
“acceso aleatorio” se refiere a el tiempo necesario para localizar un dato, no
depende del lugar de la memoria donde esté almacenado. En las memorias de
acceso secuencial, en cambio, cuando más alejado esté un dato de la posición
a la que se ha accedido por última vez, más se tarda en localizarlo.
[3].
6
c) Memoria Flash: es posible escribir y borrar el contenido de esta memoria un
número limitado de veces. Por ejemplo, en una MCU PIC de 16 bits donde
se utiliza principalmente para contener instrucciones del programa. También
se puede utilizar para almacenar datos(constantes).
7
Byte
Consiste en 8 bits colocados de manera ordenada, los bytes representan los
números. Con 8 dígitos de un byte, se pueden representar 256 combinaciones
diferentes y el mayor número decimal que se puede crear es 255.
Registro
Un registro o celda de memoria, es un circuito electrónico capaz de memorizar el
estado de un byte. En el PIC, es un lugar donde se puede leer y/o escribir.
Puertos de Entrada/Salida(E/S)
La entrada y salida es particularmente importante en los microcontroladores, a
través de los puertos, el microcontrolador interacciona con el exterior. El bit de
registro TRIS (Pin=”0” lógico) correspondiente del puerto se configurará como una
salida, en cambio, TRIS (Pin=”1” lógico) se configurará como una entrada. (figura 3)
Mientras más pines E/S haya, más baja es la corriente máxima de un pin. Todos los
puertos E/S comparten la corriente máxima declarada en la hoja de especificaciones
del microprocesador.
8
Interrupción
Una interrupción requiere que el microcontrolador detenga la ejecución normal del
programa y luego salte para ejecutar un código del programa relacionado con el
evento que causa la interrupción, solo una vez que el microcontrolador termine de
ejecutar el código de la interrupción, entonces puede continuar para terminar con el
programa principal.
Aplicaciones de interrupciones.
a) Aplicaciones a prueba de fallas: Las aplicaciones que requieren la atención
inmediata del microcontrolador, pueden usar interrupciones externas. Por
ejemplo, durante una falla de energía, el microcontrolador tiene que tomar
acciones rápidas como apagar el sistema, una interrupción externa obligará
al microcontrolador a detenerse y realizar acciones determinadas.
b) Realizar tareas de rutina: cuando una aplicación requiere que el
microcontrolador realice tareas de rutina en momentos precisos (hacer
parpadear un led de estado, leer las entradas de sensores) una interrupción
del temporizador programada (con el tiempo requerido) puede desviar al
microcontrolador de la ejecución normal para realizar la tarea en el momento
indicado.
Oscilador
Los pulsos generados por el oscilador permiten el funcionamiento armónico y
síncrono de todos los circuitos del microcontrolador. El oscilador controla todos los
periféricos y el reloj de instrucciones. Las instrucciones del programa no se ejecutan
a la velocidad impuesta sino varias veces más despacio.[13]
Temporizadores
Se emplean para controlar periodos de tiempo. Los pulsos generados por el
oscilador de cuarzo son llevados al circuito una vez por cada ciclo de máquina o por
el preescalador, lo que aumenta el número en el registro del temporizador.
9
Contadores
Es un dispositivo que almacena la cantidad de veces que ocurrió un evento o
proceso, con respecto a una señal de reloj. Cuando se desean contar
acontecimientos que se materializan por cambios de nivel o flancos en alguno de
los pines del microcontrolador, el mencionado registro se va incrementado o
decrementando al ritmo de dichos impulsos. [5]
Tipos de comunicación
Serial Comunication: la comunicación en serie utiliza un método binario digital para
intercambiar datos. Emplea una serie de interfaces y protocolos de comunicación
en serie, incluidos RS323, RS485, SPI e I2C. Para implementar la comunicación en
serie, se requiere un origen y un destino, también se le conoce como emisor y
receptor.
Modos de transmisión
10
UART “Universal Asynchronous Recerver/Transmitter” (Transmisor-Receptor
Asíncrono Universal)
Este tipo de comunicación es asíncrona. Lo que significa que no utiliza una línea
especial para transmitir la señal de reloj. Los dispositivos UART son empleados
comúnmente en conjunción con estándares de comunicación como EIA, RS-232,
RS-422 o RS-485. La UART es capaz de transmitir bytes de datos enviando bits
individuales de forma secuencial. El dispositivo receptor se encarga de reensamblar
estos bits en un byte completo.
Siempre que no se esté produciendo una transmisión de datos, la línea de salida
estará a nivel alto. Él envió de un carácter se completa con la secuencia mostrada
en la siguiente figura 4:
Cada transmisión se inicia con un bit de Start, en este caso la línea tendrá un nivel
lógico de cero. La información requerida se puede programar, el número de bits que
queremos transmitir está en un rango de 5-9 bits, aunque lo habitual son 8 bits (el
primer bit corresponde con el bit menos significativo). Opcionalmente se puede
transmitir un bit de paridad siempre y cuando no se haya elegido la transmisión de
9 bits de datos. Para finalizar la transmisión se envía un bit de Stop, a diferencia del
bit de Start nos encontramos con un nivel lógico de uno. [6]
11
Fig. 5. Protocolo I2C.
«DIIGNAL,» [En línea]. Available: https://dignal.com/.
El protocolo SPI utiliza la conexión full duplex (los datos se envían y reciben
simultáneamente). Es un sistema para la comunicación serial que utiliza hasta 4
líneas para recibir y transmitir datos además de sincronizar y seleccionar el
dispositivo (figura 6). Cuando el Master genera el reloj y selecciona un dispositivo
Slave, los datos pueden ser enviados en una o ambas direcciones de manera
simultánea.
SCLK (Clock): pulso que marca la sincronización. Con cada pulso de este reloj, se
lee o se envía un bit.
MOSI (Master Output Slave Input): salida de datos del Master y entrada de datos al
Slave.
MISO (Master Input Slave Output): salida de datos del Slave y entrada de datos al
Master.
12
SS/Select: para seleccionar un Slave, o para que el Master le diga al Slave que se
active.
El protocolo SPI es usado a distancias cortas o nivel de PBC, debido a que es un
protocolo que trabaja en altas frecuencias, cuando se trabaja con largas distancias
y altas frecuencias interviene el factor ruido. [8]
13
Manual de uso
El sistema de desarrollo Easy-33v6(figura 7) proporciona un entorno de desarrollo
para programar y experimentar con los microcontroladores PIC24 y dsPIC33.
Características generales:
a) El sistema de desarrollo Easy24-33v6 tiene incorporado el PIC24F14KA102
como microcontrolador base, pero cuenta con encapsulados DIP para la
incorporación de otros microcontroladores de la familia PIC24F y dsPIC33.
b) Easy24-33 se puede alimentar desde tu computador con el cable USB (USB
PROG) mismo que se usa para programar el microcontrolador.
c) Cuenta con los siguientes módulos: EEPROM serial (24AA01),
comunicación USB, RAM serial (23K640) de 64Kbit, RS-232 para
intercambiar datos entre el microcontrolador y un dispositivo externo,
comunicación CAN (MCP2551) y USB UART. También tiene incorporados
componentes como Buzzer, diodo leds, push button, teclado sensible al
tacto, pantalla LCD 2x16 y un sensor de temperatura DS1820.
d) Dispone de conectores para componentes externos conectados a los pines
E/S del microcontrolador.
e) Tiene un precio comercial desde $139.00 USD, y la adquisición del
compilador con licencia tiene un precio aproximado de $269.00 USD. [9]
Las prácticas de este manual fueron elaboradas en el compilador MIKROC PRO for
dsPIC/PIC24 y probadas en el sistema de desarrollo Easy24-33v6, pero, si requiere
elaborar las practicas solo es indispensable el compilador, ya que, el circuito
eléctrico puede ser elaborado con componentes comerciales.
14
Descargar el compilador MIKRO C PRO dsPIC/PIC24 versión 7.1.0.
Ingrese a la página de Mikroelektronika. La versión gratuita de los compiladores
admite proyectos con un tamaño inferior a 2K de palabras de programa, la versión
completa requiere una licencia.
Ingresa a compilers.
15
Descargue el archivo.
16
Para acceder a esta informacion da clic en Help ó F1.
17
En la carpeta MIKROC PRO for dsPIC30/33 and PIC24 Environment, aparece la
descripción del Main Menu Options.
18
Crear nuevo proyecto.
New Project >Standard project > next.
19
Agrega los archivos al proyecto disponibles (siempre puede incorporar archivos de
proyecto más tarde usando Project Manager):
20
Library manager
Las librerías en MIKRO C PRO dsPIC/PIC24 facilitan la realización de programas.
Al marcar una librería, se añade automáticamente al proyecto y se enlaza durante
el proceso de la compilación. Así, no necesita incluir las librerías manualmente en
sus archivos del código fuente por medio de la directiva del preprocesador #include.
21
Debbuger software en MIKRO C PRO dsPIC/PIC24
Se utiliza para probar y depurar programas en tiempo real. El proceso se realiza al
monitorear los estados de todos los registros dentro del microcontrolador durante
su funcionamiento en entorno real.
Seleccione View>Toolbars>Debugger Toolbar.
22
En el panel principal selecciona Start Debugger.
En la figura 4.1 se puede apreciar mejor cada icono y su función de Watch Values.
23
Debugger también ofrece opciones tales como ejecutar el programa paso a paso,
detener la ejecución de programa para examinar el estado de los registros
actualmente activos por medio de los puntos de ruptura, monitorizar los valores de
algunas variables, etc.
Hay varios iconos (utilizados para el funcionamiento del simulador) que aparecerán
en la barra de herramientas cuando el compilador entre en este modo.
24
escribe en la memoria flash del microcontrolador, mientras que el programa
anterior se borra automáticamente.
b) La parte de software se encarga de enviar el programa (archivo. hex) a la
parte hardware del programador por medio de un cable USB.
25
Replace
Es una herramienta para agilizar la escritura del programa en lenguaje C, reemplaza
una palabra o renglón según desees corregir. Primero seleccionas el código donde
realizaras modificaciones y luego en Edit>Replace.
En seguida te aparecerá Replace Text en Search for la palabra que deseas corregir
y en Replace with se coloca la palabra correcta.
26
Características del PIC24F16KA102
Los microcontroladores PIC24F16KA102 (figura 8) son una gran familia de
microcontroladores fabricados por Microchip Technology Inc. Se basan en una
arquitectura Harvard modificada.
27
Diagrama de pines
Conexión básica
Al comenzar con la familia PIC24F16KA102 de microcontroladores de 16 bits, se
requiere atención a un conjunto mínimo de conexiones de pines del dispositivo antes
de continuar con el desarrollo.
Los siguientes pines siempre deben estar conectados:
a) Todos los pines VDD y VSS.
Es necesario el uso de condensadores de desacoplamiento en cada par de
pines de la fuente de alimentación, como VDD y VSS.
Valor y tipo de capacitor: Se recomienda un capacitor de 0.1 μF (100 nF), 10-
20V. El condensador debe ser un dispositivo de baja ESR con una frecuencia
de resonancia en el rango de 200 MHz y superior. Se recomiendan los
condensadores cerámicos.
Colocación en la placa de circuito impreso: Los condensadores de
desacoplamiento deben colocarse lo más cerca posible de los pines.
b) Pin MCLR.
El pin MCLR proporciona dos funciones específicas del dispositivo: reinicio,
programación y depuración del dispositivo. (figura 10:configuración típica)
28
Fig. 10. Conexiones mínimas recomendadas.
MICROCHIP, «PIC24F16KA102 Family Data Sheet,» 2008.
29
Estos pines también deben estar conectados si se utilizan en la aplicación final:
a) El Oscilador Primario (POSC) en los pines OSCI y OSCO, para cuando se
utiliza una fuente de oscilador externo: En general, el oscilador primario se
puede configurar para una entrada de reloj externa o un cristal externo. El
oscilador primario tiene hasta 5 modos de funcionamiento (Tabla 9-1).
LP: este modo de oscilador selecciona el ajuste de ganancia más bajo para
el amplificador-inversor interno (es el consumo de corriente más bajo de los
tres modos). Está diseñado para impulsar un cristal tipo diapasón de 32,768
khz.
30
Fig. 11. Conexión del oscilador en modo XT o HS.
MICROCHIP, «PIC24F Family Reference Manual, Sect. 6 Oscillator,» 2009.
31
Para las especificaciones (configuración) del oscilador en MIKRO C PRO
dsPIC/PIC24 > Project >Edit Project.
E/S Puertos
Todos los puertos de E/S tienen cuatro registros asociados directamente con la
operación del puerto, donde “x” es una letra que denota el puerto de E/S en
particular como se puede muestra en la figura 14.
Registro TRISx
Los bits de control de registro TRISx determinan si cada pin es una entrada o una
salida. Si el bit TRISx para un pin es "1", entonces el pin es una entrada, si es "0",
el pin está configurado para una salida.
32
Fig. 15.-Diagrama de bloques de una estructura típica de puerto compartido.
MICROCHIP, «PIC24F16KA102 Family Data Sheet,» 2008.
Leer Escribir
Lee el valor de los datos del PIN I/O. Escribe el valor de los datos en el Data latch del
puerto.
El registro LATx está asociado con un pin I/O elimina los problemas que podrían
ocurrir con las instrucciones de lectura-modificación-escritura.
Registro LATx
Leer Escribir
Lee el valor de los datos retenido los Laches del Escribe el valor de los datos en el Data latch del
puerto. puerto.
33
Configuración de pines de puerto analógico.
El registro de función especial AD1PCFG controla la asignación A/D de cada pin. El
uso de los registros AD1PCFG y TRISx controla el funcionamiento de los pines del
puerto A/D. Los pines del puerto que se desean como entradas analógicas deben
tener su bit TRISx correspondiente establecido (entrada). Si se borra el bit
TRISx(salida), se convertirá el nivel de salida digital (VOH o VOL).
Al leer el registro PORTx, todos los pines configurados como canales de entrada
analógica se leerán como borrados (un nivel bajo). Los niveles analógicos en
cualquier pin que se define como una entrada digital (incluidos los pines ANx)
pueden hacer que el búfer de entrada consuma corriente que exceda las
especificaciones del dispositivo.
Interrupciones en el PIC24F16KA102
Para la familia de microcontroladores PIC24F, en la sección 8: denominada
Interrupciones, cuenta con la tabla de vectores de interrupción (IVT) con hasta 118
fuentes de interrupción. Cada fuente de interrupción puede desencadenar la
ejecución de una pieza de código única, denominada rutina de servicio de
interrupción (ISR).
34
Interrupciones periféricas y señales externas
Estas son las solicitudes de interrupción regulares y enmascarables que provienen
de una variedad de periféricos MCU implementados:
• Pines de interrupción externos.
• Captura de entrada / Comparación de salida.
• Interfaces de comunicación (UART / SPI / I2C / USB / Ethernet).
• Puerto Master paralelo (PMP).
• E/S analógicas (comparador, ADC / DAC).
35
Práctica 1.- Encender y apagar un Led con un push button.
Un led se enciende y apaga; por un periodo de tiempo, cuando se presione el push
button el led comenzará a parpadear, en caso de no ser presionado el led se
mantendrá apagado.
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102 (ver apéndice Conexión
básica).
- Habilitar Leds del puerto B en la tarjeta Easy-33v6.
Práctica 1: Conexión eléctrica.
C1
U1
2
RA0/CN2/VREF+/AN0
3 22pF
RA1/CN3/VREF-/AN1
RA2/CN30/CLKI/OSCI
9 X1
RA3/CN29/CLKO/OSCO
10 CRYSTAL
C2 R2
12 330
RA4/CN0/U2CTS/T1CK/SOSCO
1
RA5/VPP/MCLR
20
RA6/CN8/CTED1/INT2/C2OUT/OC1
19 22pF
RA7/CN9/IC1
4
R1
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
5 330
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4
6 D2
7 LED-BIBY
RB3/CN7/C2INC/C1INA/AN5
11
RB4/CN1/U2RTS/SOSCI
14
RB5/CN27/SDA1A/PGD3
RB6/CN24/SCL1A/PGC3
15 R3
16 10K
RB7/CN23/INT0/U1TX
17
RB8/CN22/SCL1/U1CTS
18
RB9/CN21/SDA1/U1RTS
21
RB10/CN16/PMD2/SDI1/PGD2
22
R4
RB11/CN15/SCK1/PGC2
23 470
RB12/CN14/CTED2/HLVDIN/AN12
24
RB13/CN13/CTPLS/SDO1/AN11
25
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10
RB15/CN11/T3CK/T2CK/SS1/REFO
26 C3
0.01uF
PIC24F16KA102
Práctica 1: Código.
void main()
{
ADPCFG = 0x1C3F; // Configurar los pines AN como digital.
TRISB=0; //El puerto B se configura como salida.
TRISA=0xFF; //El puerto A se configura como entrada.
PORTA=0; //El puerto A se inicializa en cero.
PORTB=0; //El puerto B se inicializa en cero.
while(1) //Se ejecuta Bucle.
{
if(PORTA.f0==1) //Si se presiona el push button.
{
RB0_bit=1; //En RB0=1 lógico(se enciende el led).
Delay_ms(1000); //Durante 1 segundo.
RB0_bit=0; //En RB0=0 lógico(se apaga el led).
Delay_ms(1000); //Durante 1 segundo.
}else { //En caso de no esta presionado push button.
RB0_bit=0; //En RB0=0 lógico(se apaga el led).
} 36
}
}
Práctica 2.- Leds en el Puerto B.
Encender y apagar los leds conectados a los pines RB0 a RB7 de manera
permanente.
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102.
- Habilitar Leds del puerto B en la tarjeta Easy-33v6.
22pF
U1 X1
2 CRYSTAL
C2 R3
RA0/CN2/VREF+/AN0
3 OSC0
RA1/CN3/VREF-/AN1 10k
9 OSC1
RA2/CN30/CLKI/OSCI
10 OSC0 22pF
RA3/CN29/CLKO/OSCO
12
RA4/CN0/U2CTS/T1CK/SOSCO
1
R4
RA5/VPP/MCLR
20 470
RA6/CN8/CTED1/INT2/C2OUT/OC1
19
RA7/CN9/IC1 RN1 U2
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
4 1 16 1 20 C3
5 2 15 2 19 0.01uF
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1
6 3 14 3 18
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4
7 4 13 4 17
RB3/CN7/C2INC/C1INA/AN5
11 5 12 5 16
RB4/CN1/U2RTS/SOSCI
14 6 11 6 15
RB5/CN27/SDA1A/PGD3
15 7 10 7 14
RB6/CN24/SCL1A/PGC3
16 8 9 8 13
RB7/CN23/INT0/U1TX
17 9 12
RB8/CN22/SCL1/U1CTS
18 330 10 11
RB9/CN21/SDA1/U1RTS
21
RB10/CN16/PMD2/SDI1/PGD2
22 LED-BARGRAPH-GRN
RB11/CN15/SCK1/PGC2
23
RB12/CN14/CTED2/HLVDIN/AN12
24
RB13/CN13/CTPLS/SDO1/AN11
25
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10
26
RB15/CN11/T3CK/T2CK/SS1/REFO
PIC24F16KA102
Práctica 2: Código
void main()
{
ADPCFG = 0x1C3F; // Configurar los pines AN como digital.
TRISA=0xFF; //El puerto A configuran como entrada.
TRISB=0; //El puerto B se configuran como salida.
PORTB=0; //El puerto B inicializa en cero.
PORTA=0; //El puerto A inicializa en cero.
while(1) //Se ejecuta Bucle.
{ //Pines en puerto B=76543210.
PORTB=0xFF; //RB0-RB7=11111111(se encienden leds).
Delay_ms(100); //Tiempo de encendido por 100ms.
PORTB=0x00; //RB0-RB7=00000000(se apagan leds).
Delay_ms(200); //Tiempo de apagado por 200ms.
}
}
37
Práctica 3.-Encender y apagar Leds en el puerto B con condiciones
switch, for y while.
En la primera etapa los leds del puerto B se encienden por 100ms y luego se apagan
por 500ms usando el ciclo for, en la segunda etapa se escribe el valor 0x55 y
después en un bucle generado por while se invierte el estado lógico usando ~ que
es un complemento a uno en MIKRO C.
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102.
- Habilitar Leds del puerto B en la tarjeta Easy-33v6.
22pF
U1 8MHZ
2 CRYSTAL
C2 R3
RA0/CN2/VREF+/AN0
3 OSC0
RA1/CN3/VREF-/AN1 10k
9 OSC1
RA2/CN30/CLKI/OSCI
10 OSC0 22pF
RA3/CN29/CLKO/OSCO
12
RA4/CN0/U2CTS/T1CK/SOSCO
1
R4
RA5/VPP/MCLR
20 470
RA6/CN8/CTED1/INT2/C2OUT/OC1
19
RA7/CN9/IC1 RN1 U2
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
4 1 16 1 20 C3
5 2 15 2 19 0.01uF
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1
6 3 14 3 18
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4
7 4 13 4 17
RB3/CN7/C2INC/C1INA/AN5
11 5 12 5 16
RB4/CN1/U2RTS/SOSCI
14 6 11 6 15
RB5/CN27/SDA1A/PGD3
15 7 10 7 14
RB6/CN24/SCL1A/PGC3
16 8 9 8 13
RB7/CN23/INT0/U1TX
17 9 12
RB8/CN22/SCL1/U1CTS
18 330 10 11
RB9/CN21/SDA1/U1RTS
21
RB10/CN16/PMD2/SDI1/PGD2
22 LED-BARGRAPH-GRN
RB11/CN15/SCK1/PGC2
23
RB12/CN14/CTED2/HLVDIN/AN12
24
RB13/CN13/CTPLS/SDO1/AN11
25
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10
26
RB15/CN11/T3CK/T2CK/SS1/REFO
PIC24F16KA102
38
Práctica 3: Código.
//Encender y apagar los leds del puerto B con ayuda de las sentencias:
//switch, for and while.
int i; //Declarando variable global.
void main()
{
ADPCFG = 0x1C3F; // Configurar los pines AN como digital.
TRISA=1; //Los pines del puerto A se configuran como entrada.
TRISB=0; //Los pines del puerto B se configuran como salida.
PORTA=0; //Inicializa en cero.
PORTB=0; //Inicializa en cero.
for(i=1; i<20; i++) //Primera Etapa: inicia el bucle para ON/OFF leds.
{
switch(PORTB) //Monitorea el estado del PORTB.
{
case 0x00: //Si el PORTB=0.
PORTB=0xFF; //Entonces cambiar a PORTB=0xFF.
Delay_ms(100); //Con un tiempo de retardo de 100ms.
break;
case 0xFF: //Si el PORTB=0xFF.
PORTB=0x00; //Entonces cambiar a PORTB=0x00.
Delay_ms(500); //Con un tiempo de retardo de 500ms.
}
}
PORTB=0x55; //Ingresar datos en el puerto B.
while(1)
{
PORTB= ~PORTB; //Invertir el estado lógico del puerto B.
Delay_ms(200); //Con un tiempo de retardo de 200ms.
}
}
39
Práctica 4.-Generar números en un display de 7 segmentos.
Visualizar en el display de 7 segmentos cátodo común una secuencia de números
del 1 al 9 de manera consecutiva. En la conexión básica hay leds conectados a los
mismos pines que el display para la visualización de 0 y 1 lógicos.
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102.
- Habilitar Leds del puerto B en la tarjeta Easy-33v6.
- En MIKRO C PRO dsPIC/PIC24 en el apartado de Tools>Seven Segment
Editor te ayuda a generar el valor en Hexadecimal o decimal para el display
ya sea ánodo o cátodo.
22pF
U1 X1
2 CRYSTAL
C2 R3
RA0/CN2/VREF+/AN0
3 OSC0
RA1/CN3/VREF-/AN1 10k
9 OSC1
RA2/CN30/CLKI/OSCI
10 OSC0 22pF
RA3/CN29/CLKO/OSCO
12
RA4/CN0/U2CTS/T1CK/SOSCO
1
R4
RA5/VPP/MCLR
20 470
RA6/CN8/CTED1/INT2/C2OUT/OC1
19
RA7/CN9/IC1 RN1 U2
4 A 1 16 1 20 C3
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
5 B 2 15 2 19 0.01uF
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1
6 C 3 14 3 18
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4
7 D 4 13 4 17
RB3/CN7/C2INC/C1INA/AN5
11 E 5 12 5 16
RB4/CN1/U2RTS/SOSCI
14 F 6 11 6 15
RB5/CN27/SDA1A/PGD3
15 G 7 10 7 14
RB6/CN24/SCL1A/PGC3
16 8 9 8 13
RB7/CN23/INT0/U1TX
17 9 12
RB8/CN22/SCL1/U1CTS
18 330 10 11
RB9/CN21/SDA1/U1RTS
21
RB10/CN16/PMD2/SDI1/PGD2
22 LED-BARGRAPH-GRN
RB11/CN15/SCK1/PGC2
23
RB12/CN14/CTED2/HLVDIN/AN12
24
RB13/CN13/CTPLS/SDO1/AN11
25
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10
26 A
RB15/CN11/T3CK/T2CK/SS1/REFO
B
PIC24F16KA102 C
D
E
F
G
R1
30
40
Práctica 4: Código
41
Práctica 5.-Generar melodía en Buzzer.
Debido a un buzzer integrado, el sistema de desarrollo es capaz de emitir señales
de audio. Para que un buzzer funcione es necesario generar una señal de voltaje
de una frecuencia especificada. La frecuencia de resonancia del buzzer es 3.8kHz
y se genera en el microcontrolador por medio del código apropiado, escrito en su
memoria. Se puede utilizar otras frecuencias en el rango 20Hz a 20kHz, pero su
mejor funcionamiento es en las frecuencias de 2kHz a 4kHz.
La señal de voltaje se puede generar por medio de los pines del microcontrolador
RB8 o RB9. Pueden ser una simple señal de pitido, así como melodías de distintas
duraciones. En este ejemplo se muestra la generación de sonido por medio de
funciones que pertenecen a la librería Sound.
Consideraciones
- Para que este ejemplo funcione apropiadamente, es necesario marcar las
siguientes librerías en la ventana Library Manager antes de compilar el
programa: Button y Sound.
- Habilitar buzzer en el pin RB8.
C1 3V
22pF
U1
RA0/CN2/VREF+/AN0
2 8MHZ R3
3 10k
RA1/CN3/VREF-/AN1 C2
9 CRYSTAL
RA2/CN30/CLKI/OSCI
10 22pF
RA3/CN29/CLKO/OSCO
12
RA4/CN0/U2CTS/T1CK/SOSCO
1
RA5/VPP/MCLR
20
RA6/CN8/CTED1/INT2/C2OUT/OC1
19
R4 470
RA7/CN9/IC1
4 (2) C3
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
5
D
C
E
B
A
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1 0.01uF
6
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4
7
RB3/CN7/C2INC/C1INA/AN5
11
RB4/CN1/U2RTS/SOSCI
14
RB5/CN27/SDA1A/PGD3
15
RB6/CN24/SCL1A/PGC3
16 5V
RB7/CN23/INT0/U1TX
17
RB8/CN22/SCL1/U1CTS
18
RB9/CN21/SDA1/U1RTS
21 LS1
RB10/CN16/PMD2/SDI1/PGD2
22
RB11/CN15/SCK1/PGC2
RB12/CN14/CTED2/HLVDIN/AN12
23 R6
24 1k
RB13/CN13/CTPLS/SDO1/AN11
25
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10
26
RB15/CN11/T3CK/T2CK/SS1/REFO
SPEAKER
PIC24F16KA102
R5
10k
Q1
C
D
A
B
BC846B
R1R2R7R8R9
1k 1k 1k 1k 1k
42
Práctica 5: Código parte 1.
void Tone1() { //Genera una señal de onda cuadrada.
Sound_Play(659, 250); // Frecuencia= 659Hz, Duración = 250ms.
}
void Tone2() {
Sound_Play(698, 250); // Frecuencia = 698Hz, Duración = 250ms.
}
void Tone3() {
Sound_Play(784, 250); // Frecuencia = 784Hz, Duración = 250ms.
}
void ToneA() {
Sound_Play( 880, 50); // Frecuencia = 880Hz, Duración = 50ms.
}
void ToneC() {
Sound_Play(1046, 50); // Frecuencia = 1046Hz, Duración =50ms.
}
void ToneE() {
Sound_Play(1318, 50); // Frecuencia = 1318Hz, Duración = 50ms.
}
43
Práctica 5: Código parte 2.
void main() {
while (1) {
if (Button(&PORTB,7,1,1)) // RB7 reproduce Tone1,
Tone1();
while (RB7_bit); // Espere a que suelte el push button.
44
Práctica 6.- Encender y apagar: Leds y buzzer.
Dependiendo del estado en el que se encuentra los push button se genera una
acción. Al push button en RA0 lo llamamos SW1 y al push button en RA1 lo
llamamos SW2. En la siguiente tabla se describe las acciones que realizara en cada
caso.
Caso SW1 SW2 Acción
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102.
- Habilitar Leds del puerto B en la tarjeta Easy-33v6.
- Habilitar librería de Sound.
- Habilitar buzzer en el pin RB8.
R2 R1
1k 1k
(2)
(2)
C1 3V
22pF
U1
RA0/CN2/VREF+/AN0
2 8MHZ R3
3 10k
RA1/CN3/VREF-/AN1 C2
9 CRYSTAL
RA2/CN30/CLKI/OSCI
10 22pF
RA3/CN29/CLKO/OSCO
12
RA4/CN0/U2CTS/T1CK/SOSCO
1
RA5/VPP/MCLR
20
RA6/CN8/CTED1/INT2/C2OUT/OC1
19
R4 470
RA7/CN9/IC1 RN1 U2
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
4 1 16 1 20 C3
5 2 15 2 19 0.01uF
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1
6 3 14 3 18
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4
7 4 13 4 17
RB3/CN7/C2INC/C1INA/AN5
11 5 12 5 16
RB4/CN1/U2RTS/SOSCI
14 6 11 6 15
RB5/CN27/SDA1A/PGD3
15 7 10 7 14
RB6/CN24/SCL1A/PGC3
16 8 9 8 13
RB7/CN23/INT0/U1TX
17 9 12
RB8/CN22/SCL1/U1CTS
18 330 10 11
RB9/CN21/SDA1/U1RTS
21
RB10/CN16/PMD2/SDI1/PGD2
22 LED-BARGRAPH-GRN
RB11/CN15/SCK1/PGC2
23 5V
RB12/CN14/CTED2/HLVDIN/AN12
24
RB13/CN13/CTPLS/SDO1/AN11
25
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10
26 LS1
RB15/CN11/T3CK/T2CK/SS1/REFO
PIC24F16KA102 R6
1k
SPEAKER
R5
1k
Q1
BC846B
45
Práctica 6: Código parte 1.
46
Práctica 6: Código parte 2.
47
Práctica 7.- Pantalla LCD de 2x16.
El potenciómetro que se está utilizando es para ajustar el brillo de la pantalla, la
comunicación entre el microcontrolador y el display LCD (ver apéndice
Características del Display LCD 2x16 (Display de cristal líquido)) es de 4 bits, y los
dígitos alfanuméricos se visualizan en 2 líneas con 16 caracteres c/ u.
En esta práctica se escribe texto en la primera y segunda fila, y se mueve el texto
de derecha a izquierda.
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102.
- Habilitar librería Lcd.
LCD1
C1 LM016L
U1
2 RA0
RA0/CN2/VREF+/AN0
3 RA1 osc1 22pF
RA1/CN3/VREF-/AN1
9 osc1 X1
RA2/CN30/CLKI/OSCI
10 osc0 osc0
8MHz
RA3/CN29/CLKO/OSCO C2
12 RA4
RA4/CN0/U2CTS/T1CK/SOSCO
1
RA5/VPP/MCLR
VDD
VSS
VEE
20
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
RA6/CN8/CTED1/INT2/C2OUT/OC1
E
19 22pF
RA7/CN9/IC1 5V
1
2
3
4
5
6
7
8
9
10
11
12
13
14
4
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
5
RB4
RB5
RB6
RA0
RA1
RA4
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1 RV1
6
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4
RB3/CN7/C2INC/C1INA/AN5
7 R2
11 RB4 10k
RB4/CN1/U2RTS/SOSCI 5V
14 RB5
RB5/CN27/SDA1A/PGD3
15 RB6
RB6/CN24/SCL1A/PGC3
16
R1
RB7/CN23/INT0/U1TX
17 470
RB8/CN22/SCL1/U1CTS
18 1k
RB9/CN21/SDA1/U1RTS
21
RB10/CN16/PMD2/SDI1/PGD2
RB11/CN15/SCK1/PGC2
22 C3
23 0.01uF
RB12/CN14/CTED2/HLVDIN/AN12
24
RB13/CN13/CTPLS/SDO1/AN11
25
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10
26
RB15/CN11/T3CK/T2CK/SS1/REFO
PIC24F16KA102
48
Práctica 7: Código parte 1.
// LCD módulo de conexiones, sbit permite acceder a bits individuales de
Códigode 8 bits,
variables
//las siguientes variables globales deben definirse en todos los proyectos que
utilizan la
//biblioteca Lcd.
49
Práctica 7: Código parte 2.
void main()
{
AD1PCFG = 0x1C3F; // Configurar los pines AN como digital.
Delay_ms(2000); //Retardo.
Lcd_Cmd(_LCD_CLEAR); // Borrar display.
// Moviendo el texto
for(i=0; i<4; i++)
{ // Mover el texto a la derecha 4 veces
Lcd_Cmd(_LCD_SHIFT_RIGHT);//Desplazar la pantalla a la derecha sin cambiar la RAM
Move_Delay(); // de datos de la pantalla.
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102.
- Habilitar Leds en el puerto B en la tarjeta.
- Habilitar librería ADC.
RV1
C1
OSC1
5k
22pF
U1 8MHZ
2 CRYSTAL
C2 R3
RA0/CN2/VREF+/AN0
3 OSC0
RA1/CN3/VREF-/AN1 10k
9 OSC1
RA2/CN30/CLKI/OSCI
10 OSC0 22pF
RA3/CN29/CLKO/OSCO
12
RA4/CN0/U2CTS/T1CK/SOSCO
1
R4
RA5/VPP/MCLR
20 470
RA6/CN8/CTED1/INT2/C2OUT/OC1
19
RA7/CN9/IC1 RN1 U2
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
4 1 16 1 20 C3
5 2 15 2 19 0.01uF
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1
6 3 14 3 18
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4
7 4 13 4 17
RB3/CN7/C2INC/C1INA/AN5
11 5 12 5 16
RB4/CN1/U2RTS/SOSCI
14 6 11 6 15
RB5/CN27/SDA1A/PGD3
15 7 10 7 14
RB6/CN24/SCL1A/PGC3
16 8 9 8 13
RB7/CN23/INT0/U1TX
17 9 12
RB8/CN22/SCL1/U1CTS
18 330 10 11
RB9/CN21/SDA1/U1RTS
21
RB10/CN16/PMD2/SDI1/PGD2
22 LED-BARGRAPH-GRN
RB11/CN15/SCK1/PGC2
23
RB12/CN14/CTED2/HLVDIN/AN12
24
RB13/CN13/CTPLS/SDO1/AN11
25
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10
26
RB15/CN11/T3CK/T2CK/SS1/REFO
PIC24F16KA102
51
Práctica 8: Código
/*
* Descrición
Usando la librería ADC.
Mostrar los resultados ADC en el display con el PORTB.
* Configuración
MCU: PIC24FJ16KA102
* NOTES:
- J14: RA0 - ADC pin de entrada
- Encienda los LED de PORTB en SW4.2
*/
unsigned ADCresult;
void main() {
TRISA = 0xFF; // Todos los pines del puerto PORTA se configuran como entrada.
TRISB = 0; // Todos los pines del puerto PORTB se configuran como salida.
52
Práctica 9.-Medir el voltaje en un potenciómetro y mostrar el valor en
un display LCD.
Generar voltaje variable con un potenciómetro en la entrada RB0, el valor del
potenciómetro se muestra en el display LCD. La alimentación del potenciómetro es
de 3V.
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102.
- Habilitar la pantalla LCD en la tarjeta.
- Habilitar librería LCD.
-
Práctica 9: Conexión eléctrica.
C1
LCD1
LM016L
U1 22pF
2 RA0 X1
RA0/CN2/VREF+/AN0
3 RA1 8MHz
RA1/CN3/VREF-/AN1 C2
9
RA2/CN30/CLKI/OSCI
10
RA3/CN29/CLKO/OSCO
12 VDD1
RA4/CN0/U2CTS/T1CK/SOSCO RA4
1 22pF
RA5/VPP/MCLR
VDD
VSS
VEE
20
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
RA6/CN8/CTED1/INT2/C2OUT/OC1
E
19
RA7/CN9/IC1
1
2
3
4
5
6
7
8
9
10
RB6 11
RA0 12
RA1 13
14
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
4 R3
5
RB4
RB5
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1 10k
6 3V RV1
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4
7
RB3/CN7/C2INC/C1INA/AN5
11 RB4
R2
RA4
RB4/CN1/U2RTS/SOSCI
14 RB5 10k
RB5/CN27/SDA1A/PGD3
15 RB6
RB6/CN24/SCL1A/PGC3
RB7/CN23/INT0/U1TX
16
RV2 C3
17 1uF
RB8/CN22/SCL1/U1CTS
18 1k
RB9/CN21/SDA1/U1RTS
21
RB10/CN16/PMD2/SDI1/PGD2
22 1k
RB11/CN15/SCK1/PGC2
23
RB12/CN14/CTED2/HLVDIN/AN12
24
RB13/CN13/CTPLS/SDO1/AN11
25
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10
26
RB15/CN11/T3CK/T2CK/SS1/REFO
PIC24F16KA102
53
Práctica 9: Código parte 1.
//medir voltaje en un potenciómetro y mostrar el valor de voltaje en una
//pantalla LCD
//conexiones de la LCD
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;
// Declarar variables
unsigned char ch;
unsigned int adc_rd;
char *text;
long tlong;
unsigned ADCresult;
void main() {
ADPCFG = 0x1C3B; // Configurar los pines AN como digital y AN0 como analógica.
TRISA=0xEC; //Los pines del puerto A se configuran como entrada.
TRISB=0; // Los pines del puerto B se configuran como salida.
TRISB_bit=1; // El pin RB0 se configuran como entrada.
TRISA = 0xFF; // Todos los pines del puerto PORTA se configuran como
entradas
Delay_ms(2000);
54
Práctica 9: Código parte 2.
while (1)
{
ADCresult = ADC1_Read(0); // Conversión A/D. Pin RA0 es una entrada.
Lcd_Out(2,1,text); // Escribir el resultado en la segunda línea.
tlong = (long)ADCresult * 5000; // Convertir el resultado en milivoltios.
tlong = tlong / 1023; // 0..1023 -> 0-5000mV.
ch = tlong / 1000; // Extraer voltios (miles de milivoltios).
// del resultado
Lcd_Chr(2,9,48+ch); // Escribir resultado en formato ASCII.
Lcd_Chr_CP('.');
ch = (tlong / 100) % 10; // Extraer centenas de milivoltios.
Lcd_Chr_CP(48+ch); // Escribir resultado en formato ASCII.
ch = (tlong / 10) % 10; // Extraer decenas de milivoltios.
Lcd_Chr_CP(48+ch); // Escribir resultado en formato ASCII.
ch = tlong % 10; // Extraer unidades de milivoltios.
Lcd_Chr_CP(48+ch); // Escribir resultado en formato ASCII.
Lcd_Chr_CP('V');
Delay_ms(1);
}
}
55
Práctica 10.-Cambiar ancho de pulso usando librería PWM.
Generar una señal PWM de 5kHz usando el PIC24F16KA102 con la librería PWM
que te proporciona MIKRO C dsPIC/PIC24, en este caso se modifica el ancho de
pulso usando push button, en la entrada RB5 se usa para incrementar el ancho de
pulso y RB6 para disminuir el ancho de pulso.
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102.
- Habilitar Leds en el puerto B en la tarjeta.
- Habilitar la librería PWM.
C1
R3(2) OSC1
U1 22pF
RA0/CN2/VREF+/AN0
2 R3 X1
3 10k
RA1/CN3/VREF-/AN1 C2
9 OSC1 CRYSTAL
RA2/CN30/CLKI/OSCI
10 OSC0 OSC0
RA3/CN29/CLKO/OSCO
12
RA4/CN0/U2CTS/T1CK/SOSCO
1
R4 22pF
RA5/VPP/MCLR
20 470
RA6/CN8/CTED1/INT2/C2OUT/OC1
19
RA7/CN9/IC1
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
4 R5 C3
5 1k 0.01uF
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1
6
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4 A
7
RB3/CN7/C2INC/C1INA/AN5
11
RB4/CN1/U2RTS/SOSCI B
14
RB5/CN27/SDA1A/PGD3
RB6/CN24/SCL1A/PGC3
15 D1 C
16 LED-BIGY
RB7/CN23/INT0/U1TX
17
RB8/CN22/SCL1/U1CTS D
18
RB9/CN21/SDA1/U1RTS
21
RB10/CN16/PMD2/SDI1/PGD2
22
RB11/CN15/SCK1/PGC2
23
RB12/CN14/CTED2/HLVDIN/AN12
24
RB13/CN13/CTPLS/SDO1/AN11
25
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10
26
RB15/CN11/T3CK/T2CK/SS1/REFO
PIC24F16KA102 (2)
R1
1k
(2)
R2
1k
56
Práctica 10: Código 1.
//Cambiar el ancho de pulso y visualizar en un led.
//Con ayuda de dos push button controladores de ancho de ancho de pulso.
unsigned int current_duty, old_duty ;
unsigned int pwm_period1 ;
void Intmain(){
ADPCFG=0x1C3F; //Configurar los pines AN como digital.
TRISA=1; //Todos los puertos se configuran como entrada,
TRISA6_bit=0; //menos RA6 se configura como salida del PWM en el pin OC1.
TRISB=0; //Todos los puertos se configuran como salida,
TRISB5_bit=1; //menos RB4 se configura como entrada,
TRISB6_bit=1; //menos RB5 se configura como entrada.
}
void main( )
{
Intmain(); //Llamando al procedimiento Intmain().
current_duty =16; //Valor inicial para el ancho del pulso.
57
Práctica 11.- Con un potenciómetro cambiar el ancho de pulso de
una señal PWM.
En esta práctica se genera una señal PWM de 977Hz en el PIC24F16KA102 y a
través de un potenciómetro en RA0 se cambia el ancho de pulso. Esta señal se
introducirá a un driver (L298) para mover el ciclo de trabajo de un motor. Con RB0
y RB1 se cambia el giro del motor, la selección de giro se hace con el push button
sin presionar gira a la derecha y de lo contrario a la izquierda.
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102.
- Habilitar Leds en el puerto B en la tarjeta.
- Habilitar la librería PWM.
RV1
C1
1k 22pF 3V
U1 X1
2
RA0/CN2/VREF+/AN0 C2
RA1/CN3/VREF-/AN1
3 CRYSTAL R3
9 10k
RA2/CN30/CLKI/OSCI
10
RA3/CN29/CLKO/OSCO
12 22pF
RA4/CN0/U2CTS/T1CK/SOSCO
1
RA5/VPP/MCLR
20
RA6/CN8/CTED1/INT2/C2OUT/OC1
19
R4 470
RA7/CN9/IC1
4 RB0 R5 C3
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
5 RB1 1k 0.01uF
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1
6
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4 A
7
RB3/CN7/C2INC/C1INA/AN5
11
RB4/CN1/U2RTS/SOSCI B
14
RB5/CN27/SDA1A/PGD3
RB6/CN24/SCL1A/PGC3
15 D1 C
16 LED-BIGY
RB7/CN23/INT0/U1TX
17
RB8/CN22/SCL1/U1CTS D
18 5V 12V
RB9/CN21/SDA1/U1RTS U2
21 9 4
RB10/CN16/PMD2/SDI1/PGD2
22
RB11/CN15/SCK1/PGC2
23 (2) RB0 5
RB12/CN14/CTED2/HLVDIN/AN12 IN1 VCC VS
24 RB1 7 2
RB13/CN13/CTPLS/SDO1/AN11 IN2 OUT1
25 10
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10 IN3
26 12 3
RB15/CN11/T3CK/T2CK/SS1/REFO IN4 OUT2
6
ENA
PIC24F16KA102 11 13
ENB OUT3
1 14
SENSA OUT4
15
SENSB GND
R6 8 L298
1k
58
Práctica 11: Código
//cambiar el ancho del pulso con un Potenciómetro.
sbit N1 at RB0_bit;
sbit N2 at RB1_bit;
sbit sw1 at RB2_bit;
while(1)
{
codigo=ADC1_Read(0); // Adquirir el resultado de la conversión de A/D.
velocidad=codigo*8191.0/1023.0; //Ecuación para modificar el ancho de pulso.
PWM_Set_Duty(velocidad,1); // Establecer el ancho de pulso.
59
Práctica 12.- Interrupción con timer1
Generar interrupción (ver apéndice Configuración y uso de interrupciones.) con
ayuda de TimerCalculator que es una aplicación de MICRO C para generar código
en C de interrupciones con características determinadas.
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102.
- Habilitar Leds en el puerto B en la tarjeta.
- Link de descarga TimerCalculator (https://www.mikroe.com/timer-calculator )
C1
OSC1
22pF
U1 X1
2 CRYSTAL
C2 R3
RA0/CN2/VREF+/AN0
3 OSC0
RA1/CN3/VREF-/AN1 10k
9 OSC1
RA2/CN30/CLKI/OSCI
10 OSC0 22pF
RA3/CN29/CLKO/OSCO
12
RA4/CN0/U2CTS/T1CK/SOSCO
1
R4
RA5/VPP/MCLR
20 470
RA6/CN8/CTED1/INT2/C2OUT/OC1
19 330 LED-BARGRAPH-GRN
RA7/CN9/IC1 RN2 U2
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
4 1 16 1 20 C3
5 2 15 2 19 0.01uF
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1
6 3 14 3 18
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4
7 4 13 4 17
RB3/CN7/C2INC/C1INA/AN5
11 5 12 5 16
RB4/CN1/U2RTS/SOSCI
14 6 11 6 15
RB5/CN27/SDA1A/PGD3
15 7 10 7 14
RB6/CN24/SCL1A/PGC3
16 8 9 8 13
RB7/CN23/INT0/U1TX
17 a 9 12
RB8/CN22/SCL1/U1CTS
18 b a 1 16 10 11
RB9/CN21/SDA1/U1RTS
21 c b 2 15
RB10/CN16/PMD2/SDI1/PGD2
22 d c 3 14 1 20
RB11/CN15/SCK1/PGC2
23 e d 4 13 2 19
RB12/CN14/CTED2/HLVDIN/AN12
24 f e 5 12 3 18
RB13/CN13/CTPLS/SDO1/AN11
25 g f 6 11 4 17
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10
26 h g 7 10 5 16
RB15/CN11/T3CK/T2CK/SS1/REFO
h 8 9 6 15
PIC24F16KA102 7 14
330 8 13
RN1 9 12
10 11
LED-BARGRAPH-GRN
U3
60
Práctica 12: Código.
//Timer1
//Prescaler 1:1; PR1 Preload = 1200; Actual Interrupt Time = 300 us
void main() {
ADPCFG=0x1C3F; // Inicializar pines de entrada y salida digital.
TRISB=0; // PORTB es una salida.
LATB=0xAAAA; // Inicializar valor en el PORTB.
IPC0=IPC0 | 0x1000; // Interrupción de nivel=1.
T1IF_bit = 0; // Clear T1IF.
T1IE_bit = 1; // Habilitar Timer1 interrupts.
61
Práctica 13.-Sensor de temperatura DS1820
La comunicación serie 1-wire (ver apéndice Características básicas del Protocolo 1-
wire)permite la transmisión de datos por medio de una sola línea de comunicación,
mientras que el proceso mismo está bajo el control del microcontrolador Master. La
ventaja de tal comunicación es que utiliza sólo un pin de microcontrolador. Todos
los dispositivos Slave por defecto disponen de un código ID único, lo que permite
que el dispositivo Master identifique fácilmente los dispositivos que comparte la
misma interfaz de comunicación.
Sensor de temperatura DS1820(ver apéndice Sensor de temperatura DS1820) que
utiliza la comunicación 1-wire. El sistema de desarrollo Easy24-33 v6 proporciona
un zócalo separado para el DS1820. Puede utilizar uno de los pines, RB8 o RB9,
para la comunicación con el microcontrolador. Cabe mencionar que en proteus no
se encuentra en sensor DS1820 así que para la conexión física se utiliza el sensor
DS1822; pero solo para mostrar la conexión de pines, todo el programa está
diseñado para el sensor DS1820.
Consideraciones:
- Utilizar conexión básica del PIC24F16KA102.
- Habilitar la librería Lcd.
- Habilitar la librería One Wire.
LCD1
C1 LM016L
U1
2 RA0
RA0/CN2/VREF+/AN0
3 RA1 osc1 22pF
RA1/CN3/VREF-/AN1
9 osc1 X1
RA2/CN30/CLKI/OSCI
10 osc0 osc0
8MHz
RA3/CN29/CLKO/OSCO C2
12 RA4
RA4/CN0/U2CTS/T1CK/SOSCO
1 R
RA5/VPP/MCLR
VDD
VSS
VEE
20
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
RA6/CN8/CTED1/INT2/C2OUT/OC1
E
19 22pF
RA7/CN9/IC1 5V
1
2
3
4
5
6
7
8
9
10
11
12
13
14
4
RB0/CN4/U2TX/C2INB/C1IND/AN2/PGD1
5
RB4
RB5
RB6
RA0
RA1
RB1/CN5/U2BCLK/U2RX/C2INA/C1INC/AN3/PGC1
6 RV1 RA4
RB2/CN6/U1BCLK/U1RX/C2IND/C1INB/AN4
7
RB3/CN7/C2INC/C1INA/AN5
11 RB4
RB4/CN1/U2RTS/SOSCI 5V
14 RB5
RB5/CN27/SDA1A/PGD3
15 RB6
RB6/CN24/SCL1A/PGC3
16
RB7/CN23/INT0/U1TX
RB8/CN22/SCL1/U1CTS
17 R3
18 1k 10k
RB9/CN21/SDA1/U1RTS
21
RB10/CN16/PMD2/SDI1/PGD2
RB11/CN15/SCK1/PGC2
22 R1 R2
23 R
RB12/CN14/CTED2/HLVDIN/AN12 1k
24 U2 10k
RB13/CN13/CTPLS/SDO1/AN11
25 3
RB14/CN12/INT1/C1OUT/OCFA/RTCC/CVREF/AN10 VCC
26 2 27.0 C3
RB15/CN11/T3CK/T2CK/SS1/REFO DQ
1 1uF
GND
PIC24F16KA102
DS1822
62
Práctica 13: Código parte 1.
/*
* Project name:
OneWire (Interfacing the DS1820 temperature sensor)
* Copyright:
(c) mikroElektronika, 2016.
* Description:
MCU lee la temperatura del sensor y la imprime en la pantalla LCD.
Para obtener resultados correctos, es necesario ajustar la resolución
de temperatura del 18x20 (TEMP_RESOLUTION constante).
* Test configuration:
MCU: PIC24F16KA102
Dev. Board: Easy24-33 v6
http://www.mikroe.com/easy24-33/
Oscillator: HS, 8.00000 MHz
Ext. Modules: None.
SW: mikroC PRO for dsPIC
http://www.mikroe.com/mikroc/dspic/
*/
63
Práctica 13: Código parte 2.
// Extraer temp_whole
temp_whole = temp2write >> RES_SHIFT ;
64
Práctica 13: Código parte 3.
void main() {
ADPCFG = 0x1C3F; // Configurar los pines AN como digital.
//Bucle principal.
do
{
//--- realizar lectura de temperatura
Ow_Reset(&PORTB, 9); //señal de reinicio de Onewire, para restablecer el DS1820
que está conectado al pin.
Ow_Reset(&PORTB, 9);
Ow_Write(&PORTB, 9, 0xCC); // ejecutar el comando SKIP_ROM
Ow_Write(&PORTB, 9, 0xBE); // ejecutar el comando
READ_SCRATCHPAD
Delay_ms(400);
Delay_ms(500);
} while (1);
}
65
Características del Display LCD 2x16 (Display de cristal líquido)
El LCD (Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo
empleado para la visualización de contenidos o información de una forma gráfica,
mediante caracteres, símbolos o pequeños dibujos dependiendo del modelo.
Está gobernado por un microcontrolador el cual dirige todo su funcionamiento. En
este caso vamos a emplear un LCD de 16x2 (dispone de 2 filas de 16 caracteres
cada una).
Los pines de conexión de estos módulos incluyen un bus de datos de 8 bits, un pin
de habilitación (E), un pin de selección que indica si lo que se está enviando por el
bus es un dato o una instrucción (RS) y un pin que indica si se va a leer o escribir
en el módulo (RW).
Pines de conexión del Display LCD 2x16.
Pin Símbolo Nombre y función
1 VSS GND (Tierra 0V)
2 VDD Alimentación a +5V
3 VEE Ajuste del contraste
4 RS Selección de DATO/CONTROL
5 RW Lectura o escritura LCD
6 E Habilitación
7 D0 D0 bit menos significativo
8 D1 D1
9 D2 D2D
10 D3 D3
11 D4 D4
12 D5 D5
13 D6 D6
14 D7 D7 bit más significativo
Según la operación que se desee realizar en el módulo LCD, los pines de control E,
RS, RW deben tener un estado determinado. Además, se debe tener en el bus de
datos un código que indique un carácter para mostrar en la pantalla o una
instrucción de control para el display.
Por ejemplo:
Para: RW=0,1 →escribe
RS=0 →comando
E=1 → habilita
66
El LCD se controla mediante comandos que se envían al registro de control del LCD,
seleccionado al poner la señal RS a nivel bajo (0). Cuando lo que se quiere es
imprimir caracteres en el display o enviar información a la CG RAM para definir
caracteres se selecciona el registro de datos poniendo RS a nivel alto (1). En la
tabla 3 se muestra un resumen de los comandos del LCD.
67
Nota: En el pin RS debe tomar el valor 0 (cero) cuando lo que se va a enviar es una
instrucción de control y debe tomar el valor 1 (uno) cuando lo que se va a enviar es
un dato.
68
Características básicas del Protocolo 1-wire
1-Wire es un protocolo de comunicaciones en serie diseñado por Dallas
Semiconductor, para permitir que los dispositivos de otros fabricantes se conectaran
a las redes de bus serial 1-Wire. Un bus serie es un vínculo para transportar datos
de un bit a la vez entre un microcontrolador (Master) y una serie de dispositivos de
control (Slave) como se puede visualizar en la figura 17.
69
utilizado, porque permite con un único cable alimentar y mantener comunicación
entre el Master y el Slave.
70
Fig. 18. Descripción de pines del sensor DS18B20.
Dallas Semiconductor , «DS18B20 Programmable Resolution 1-wire».
Es capaz de medir las temperaturas dentro del rango de -55 a 125°C y proporcionar
la exactitud de medición de ±0.5°C para las temperaturas dentro del rango de -10 a
85°C. Para su funcionamiento se requiere un voltaje de alimentación de 3.3V. El
DS1820 tarda como máximo 750ms en calcular la temperatura con una resolución
de 9 bits. [13]
71
Bibliografía
72
[18] «DISPLAYS DE CRISTAL LIQUIDO,» [En línea]. Available:
http://galia.fc.uaslp.mx/~cantocar/microprocesadores/MANUALES_PDF/LCD_ESP
A_OL.PDF.
[19] Mikro C, «Mikroe,» 27 agosto 2020. [En línea]. Available:
https://www.mikroe.com/. [Último acceso: 2021].
[20] «Megan man,» 29 agosto 2014. [En línea]. Available:
http://historiamega.blogspot.com/.
73