Escolar Documentos
Profissional Documentos
Cultura Documentos
Programador PICkit 2.
El programador PICkit 2 esta compuesto por las siguientes partes.
PICkit 2
1. Leds: Indican el estado del programador.
2. Botn de programacin: Utilizado como atajo al momento de programar un
dispositivo. Funciona si la opcin Write on PICkit Button esta habilitado.
3. Conexin para cordn.
4. Puerto USB para conexin con el computador.
5. Marcador del primer Pin (MCLR).
6. Conector de programacin.
La conexin con el microcontrolador se realiza segn el siguiente esquema.
Conector PICkit 2
1.
2.
3.
4.
5.
6.
4. Elegir las opciones correspondientes al proyecto a realizar. Luego dar click en Ok.
5. Aparecer el cdigo realizado por PIC Wizard. Se muestra en la siguiente imagen.
los
Materiales a utilizar:
PIC16F877A.
Cristal 20Mhz.
Leds.
Capacitores 22pF.
Resistores 330.
Resistor 1ok.
Programador PicKit 2.
Compilador CCS.
En ambas figuras se utiliza un resistor de 10k en el MCLR (Master Clear Reset). Este
Pin cumple la funcin de resetear el microcontrolador cuando es llevado a tierra, por ello,
para el normal funcionamiento del programa se debe mantener conectado mediante un
resistor a la alimentacin.
La principal diferencia entre las dos conexiones mostradas anteriormente ocurre en la
utilizacin del Cristal. La figura izquierda muestra el microcontrolador utilizando un cristal
externo de 20Mhz, mientras que el de la derecha utiliza un cristal interno de 4Mhz. En estos
tutoriales utilizaremos la conexin mostrada en la posicin derecha.
Si el pin es definido como salida, tenemos dos formas de manejar sus estados logicos.
La primera es manejando el puerto completo manejando cada pin por separado.
//Opcin 1: Manejando todos los pines del puerto
//Se define un byte (fuera del main) con la direccin del puerto (Ver
Datasheet)
#Byte puerto_b = 0x06 //Direccin del puerto B
//Luego se aplican valores
puerto_b = 0b10100100; //Los pines B2,B5 y B7 estn en un estado lgico
alto (+5V),
//--------------------------------------------//Opcin 2: Manejando todos los pines del puerto, sin definirlo
output_b(0b10010000); //Los pines B7 y B4 estn en un estado lgico alto
(+5V),
//--------------------------------------------//Opcin 3: Manejando los pines uno a uno.
//Utilizando output_high y output_low
output_high(PIN_A1); //Estado lgico alto (+5V) el pin 1 del puerto A.
output_low(PIN_C3); //Estado lgico bajo (0V) el pin 3 del puerto C.
Una de las formas de darle tiempo de funcin al pin, ya sea para mantenerlo en un
estado logico alto o bajo, se da con la sentencia delay_ms(); delay:us; depende si estas
trabajando en milisegundos o microsegundos respectivamente.
//Un tiempo puede servir para una o ms funciones
output_high(pin_b4);
//Estado lgico alto (+5V) el pin 4 del puerto B.
delay_ms(400);
//Tiempo de trabajo 400 milisegundos.
output_low(pin_b4);
//Estado lgico bajo (0V) el pin 4 del puerto B.
output_high(pin_b5):
//Estado lgico alto (+5V) el pin 5 del puerto B.
delay_us(2000);
//Tiempo de trabajo 2000 microsegundos.
Con todo lo anterior listo, estamos en condiciones de hacer parpadear distintos leds,
para ellos se utilizar el diagrama de conexin mostrado en la figura siguiente.
Ahora el programa a utilizar har que cada 500 milisegundos cambie el Led que
prende, pueden modificarlo y comprobar los ejemplos vistos anteriormente.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
VSS:
VDD:
VEE:
RS:
RW:
E:
D0:
D1:
D2:
D3:
D4:
D5:
D6:
D7:
VDD:
VSS:
Tierra
Voltaje (+3.3 a +5V)
Ajustador de contraste
Selector de Registro (Register Select). RS=0: Comando, RS=1: Data
Lector/Escritor (Read/Write). R/W=0: Escribe, R/W=1: Lee.
Habilitador [Clock (Enable)]. Cada de borde Accionado.
Bit 0 (No se usa en una operacin de 4-bit)
Bit 1 (No se usa en una operacin de 4-bit)
Bit 2 (No se usa en una operacin de 4-bit)
Bit 3 (No se usa en una operacin de 4-bit)
Bit 4
Bit 5
Bit 6
Bit 7
Voltaje Backlight (V+)
Voltaje Backlight (V-)
NOTA:
Se recomienda usar un potencimetro conectado al pin de contraste para variar este
a gusto.
El Backlight no viene incorporado en todas las pantallas LCD, por lo cual algunas
pueden variar entre 14 pines (sin backlight) o 16 pines (con backlight incorporado o espacio
para este).
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
h o l a
|
m u n d o
|
Ahora, con las funciones ya vistas, para lo cual utilizaremos el siguiente diagrama
de conexin micro-pantalla:
Ahora ya podemos hacer que nuestra pantalla haga lo que se requiere, para este
ejemplo haremos que la pantalla muestre MundoPIC en movimiento, para lo cual
usaremos el siguiente programa:
Nota:
La frmula para determinar la frecuencia de trabajo est dada de la siguiente
forma:
F = (4/frecuencia cristal)*T2_DIV*(periodo+1)
Ej: Para la frecuencia de 20KHz.
F = (4/4000000)*1*50 = 50/1000000 = 0.000050 = 50us
Si dividimos 1 en 50us (1/50us) obtenemos los 20KHz de trabajo. Ojo que la frecuencia de
trabajo la obtenemos en ciclos por eso nos da en funcin del tiempo, y como bien es sabido,
si tenemos un periodo, la inversa es la frecuencia.
Nota2:
La frecuencia de trabajo se determina segn lo que se quiere manejar, por
ejemplo, en el caso de un LED o SERVOMOTOR la frecuencia es de 50Hz.
Una vez entendido el cdigo, procedemos con la conexin del circuito, que sigue
teniendo como base lo antes visto.
Veamos el cdigo.
Nota:
Cambiamos HS (high speed) por XT (external timer) en los fuses, ya que la
frecuencia de trabajo del cristal (4MHz) no alcanza a quedar en el rango de altas
velocidades. Cabe decir que HS y XT se usan para cristales externos dependiendo de su
velocidad.
//Nuevos comandos
Ahora podremos usar las funciones GETC(), PUTCHAR(), PRINTF() Y PUTC()
//Interrupcin de lectura
Como podemos estar recibiendo datos en pleno funcionamiento del sistema,
debemos crear una interrupcin para que los datos no se pierdan.
Las interrupciones se manejan de la siguiente manera
char caracter;
//Variable a guardar dato de entrada
#INT_RDA
//Define la interrupcion (funcin que le sigue)
void int_rda_sr(){
//Define la funcion
if(kbhit()){
//Hay seal de entrada? Si, entro.
caracter = getc(); //Guardo mi caracter
if(caracter == 'A'){} //comparo y actuo
if(caracter == 'B'){}
...]]
//Mandar datos
Ya sabemos cmo recibirlos, pero cmo lo enviamos?
Ejemplo:
if(valor==1){
printf("A");}
Y ya se mand el dato.
En este ejemplo buscaremos leer la seal ADC y enviar datos de forma serial al otro
controlador el cual tomara la decisin de prender cierto led cada vez que est dentro de un
rango definido.
Y ac para el receptor: