miércoles, 10 de mayo de 2017

Parpadeo de un LED - PIC18F14K22-

Programa

/* Mayo de 2017
 * Tarjeta: DM164130-9
 * Microcontrolador: PIC18F14K22
 * IDE: MPLAB X IDE v.3.60
 * Compilador: MPLAB XC8 Compiler v1.42
 Programa que produce el parpadeo cíclico del LED DS1 de la tarjeta DM164130-9
 (el LED está conectado al pin RC0 del microcontrolador).
 */

#include <xc.h>                               // Archivo de cabecera genérico
#define _XTAL_FREQ 16000000  // Frecuencia de reloj = 16 MHz
#pragma config FOSC = IRC         // Selecciona el oscilador RC interno

void main(void) {   
    OSCCON |= 0b01110000;          // Establece una frec. de reloj de 16 MHZ
    TRISCbits.TRISC0 = 0;             // Configura el pin RC0 como salida  
    
    while(1){
      __delay_ms(1000);                   // Retardo de 1 segundo
      LATCbits.LATC0 ^= 1;            // Conmuta el estado del LED
    }
}



➤ Circuito

No es necesario ningún componente externo a la tarjeta DM164130-9, dado que se utiliza un LED de ésta. En la siguiente imagen puede verse la tarjeta, alimentada a 5 V mediante una fuente y conectada al grabador PICkit 3. El programa se puede ejectutar tanto con el grabador conectado como desconectado.




➤ Observaciones

- En la entrada anterior del blog está explicado cómo grabar un programa en el microcontrolador.

- #include <xc.h> : xc.h es un archivo de cabecera genérico, el cual permite acceder a los registros del microcontrolador y el uso de macros.

- #define _XTAL_FREQ 16000000: es la frecuencia de reloj establecida mediante la orden OSCCON |= 0b01110000. Se necesita para utilizar la macro __delay_ms()

- #pragma config FOSC = IRC: selecciona el oscilador RC interno para generar la señal de reloj del microcontrolador. En realidad, con esta instrucción, se escribe '1000' en los bits 3-0 del registro CONFIG1H (ver siguiente figura). Los demás bits quedan con su valor por defecto. Esta orden permite que se pueda utilizar el microcontrolador sin conectarle un cristal externo.




- OSCCON |= 0b01110000: establece una frecuencia de reloj interna de 16 MHz. Esta instrucción escribe '111' en los bits 6-4 del registro OSCCON y deja los demás bits intactos.




- TRISCbits.TRISC0 = 0: el registro TRISC permite determinar los pines del puerto C del microcontrolador que van a funcionar como salidas y los que lo van a hacer como entradas. En este caso, se configura el pin RC0 como salida.

- LATCbits.LATC0 ^= 1:  para poner los diferentes pines del puerto C a '1' o a '0' hay que acceder al registro LATC. El programa utiliza el operador bit a bit XOR (bitwise XOR) para cambiar el estado del pin RC0 y dejar el estado de los demás pines intacto. Con esto se consigue encender y apagar el LED.    

 

lunes, 8 de mayo de 2017

Programación de microcontroladores PIC con MPLAB X IDE

Aunque todo lo detallado a continuación está pensado para el PIC18F14K22, el procedimiento descrito sirve también para otros tipos de microcontroladores PIC.


Material empleado

- Tarjeta: DM164130-9 (con un PIC18F14K22).
- Grabador: Pickit 3.
- IDE: MPLAB X IDE v.3.60.
- Compilador: MPLAB XC8 Compiler v1.42 (necesario para programar microcontroladores PIC de 8 bits).

También es preciso alimentar la tarjeta DM164130-9 a 5 V. En la foto aparece la fuente de alimentación empleada en las pruebas. 





Procedimiento

Los siguentes puntos describen, de manera resumida, los pasos a seguir para grabar un programa en la tarjeta DM164130-9. Básicamente, es el procedimiento descrito en la hoja de instrucciones del programador Pickit 3. Los puntos 3.3 y 5 se explican con más detalle más abajo.

1. Instalar el último software. En este caso, fueron MPLAB IDE v3.60  y MPLAB XC8 Compiler v1.42, ambos son gratuitos y las versiones utilizadas son para Windows.

2. Configurar el puerto USB. Conectar el Pickit 3 al PC mediante un cable USB. El dispositivo usa un controlador USB estándar de Windows, por lo que éste se tiene que instalar automáticamente al conectar el dispositivo a un ordenador con este sistema operativo.

3. Crear un proyecto
3.1. Ejecutar MPLAB X IDE.
3.2. Cargar un proyecto ya hecho o crear uno nuevo.
3.3. Crear el proyecto basado en las configuraciones y opciones que elija el usuario
(*).
3.4. Seleccionar Pickit 3 como programador.


4. Conectar a la tarjeta y alimentar
4.1. Conectar el Pickit 3 al PC mediante el cable USB, si no estuviera conectado ya.
4.2. Conectar el Pickit 3 a la tarjeta DM164130-9.
4.3. Alimentar la tarjeta DM164130-9. La tensión de alimentación tiene que ser adecuada para el funcionamiento del PIC18F14K22, por eso en las pruebas se usó una fuente de alimentación, con un canal de 5 V, conectada al conector P2 de la tarjeta (ver foto arriba).


5. Programar. Efectuando todos los pasos anteriores, MPLAB X IDE puede compilar el programa y, empleando el Pickit 3, puede grabarlo en el PIC de la tarjeta (**)



---------------------------------------

(*) Para crear un proyecto nuevo hay que seguir los siguientes pasos:

a. Clicar en File / New Project. En la ventana que aparece, elegir la opción por defecto: Categories: Microchip Embedded y Projects: Standalone Project. Hay que clicar en el icono Next en esta ventana y en las siguientes.



b. Aparece otra ventana en la que se pueden ver, a la izquierda, todos los pasos a seguir. En este paso hay que seleccionar el microcontrolador, que es el PIC18F14K22.



c. En la ventana perteneciente al paso 3, Select Header se deja igual.

d. En la siguiente ventana se selecciona el dispositivo grabador: PICkit3. Si no se ha hecho anteriormente o al cambiar de microcontrolador, MPLAB IDE realiza una actualización de firmware automática para que el programador Pickit 3 pueda grabar el microcontrolador PIC18F14K22.



e. Después hay que elegir el compilador: MPLAB XC8 Compiler, debido a que el
PIC18F14K22 es un microcontrolador de 8 bits.



f. En la última ventana hay que darle un nombre al proyecto y guardarlo en la carpeta que se desee.

g. Una vez hecho esto, desaparece la ventana de los pasos anteriores y en MPLAB X IDE se pueden ver unas pestañas con toda la información del proyecto.






---------------------------------------

(**) Para programar el microcontrolador de la tarjeta:


A. Con el Pickit 3 conectado  a la tarjeta DM164130-9, estando ésta alimentada, hay que visualizar el contenido de la pestaña Projects clicando en ella. 

B. Para crear un programa vacío  es necesario clicar en Source Files / New / main.c y guardar el archivo creado. Se puede dejar el nombre que figura por defecto, newmain, con extensión *.c.



C. Con lo anterior, el archivo newmain.c queda asociado al proyecto y ya se puede visualizar su código.

 
 
D. Si se deseara utilizar un archivo ya existente, también habría que activar la pesataña Projects y después clicar con el botón derecho del ratón sobre Source Files / Add Existem Item.


E. Una forma rápida de grabar el programa en la tarjeta es usando el icono seleccionado en la siguiente imagen y escogiendo la opción Make and Program Device Main Project.



F. Primero se produce la compilación del programa, la cual no puede presentar errores.



G. Después aparece una ventana de aviso, advirtiendo de que la alimentación del PIC que se va a grabar tiene que ser la correcta. En este caso, hay que darle a OK, dado que el PIC18F14K22 se está alimentando a 5 V.



H. Por último, aparece un mensaje que indica que la grabación del programa ha sido correcta. El programa se ejecuta en cuanto acaba la grabación del mismo, sin necesidad de desconectar el programador de la tarjeta. En este caso, dado que se emplea un programa vacío, no sucede nada en la tarjeta DM164130-9.



Conviene aclarar que para probar diferentes programas sencillos, no hace falta crear un proyecto para cada uno. Por comodidad, se puede usar siempre el mismo proyecto e ir cambiando el archivo principal del programa según convenga. Para ello hay que acceder al menú de la imagen siguiente, con el botón derecho del ratón sobre el nombre del programa, y escoger la opción Remove From Project cuando se quiera desvincular del proyecto un determinado archivo *.c.






jueves, 4 de mayo de 2017

Conversión A/D - ATtiny85-

Programa

/* Abril de 2017
Microcontrolador: ATtiny85-20PU
IDE: Arduino 1.8.2
Grabador: Arduino UNO
Programa que lee la tensión del pin central de un potenciómetro y que

enciende un LED si la tensión leída es mayor o igual que 3,5 V.
*/

float tension;
float tension_umbral = 3.5;
int ret = 200;
#define lectura_pot1 analogRead(3)  // Lectura de tensión en la entrada
                                                           // analógica 3 del ATtiny85
// LED 1
#define L1 0
#define Led1On  digitalWrite (L1,1)   // Encendido
#define Led1Off  digitalWrite (L1,0)  // Apagado

void setup(){
  pinMode (L1,OUTPUT);            
}

void loop(){     

  // Lectura de tensión del potenciómetro 1
  tension = ((float)lectura_pot1 / (float)1023) * 5;
  // Encendido y apagado del LED
  if (tension >= tension_umbral) Led1On;
    else Led1Off;
  delay(ret);      
}



➤ Circuito





➤ Observaciones

- En la entrada anterior del blog está explicado el procedimiento para grabar un programa en un ATtiny85.



- PB0 está en el pin 5 del microcontrolador.

- La entrada analógica 3, ADC3,  está en el pin 2 del microcontrolador.

- El circuito funciona con la señal de reloj interna del ATtiny85.