0% encontró este documento útil (0 votos)
68 vistas8 páginas

Encoder Rotativo y PIC16F628A: Guía Práctica

El documento describe el uso de un encoder rotativo con el microcontrolador PIC16F628A para introducir valores variables, como en un regulador de volumen. Se detalla la conexión del circuito y un algoritmo para detectar el movimiento del encoder mediante interrupciones. Además, se menciona el uso de un contador de un dígito con memoria EEPROM interna en el mismo microcontrolador.

Cargado por

Ricardo Jimenez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
68 vistas8 páginas

Encoder Rotativo y PIC16F628A: Guía Práctica

El documento describe el uso de un encoder rotativo con el microcontrolador PIC16F628A para introducir valores variables, como en un regulador de volumen. Se detalla la conexión del circuito y un algoritmo para detectar el movimiento del encoder mediante interrupciones. Además, se menciona el uso de un contador de un dígito con memoria EEPROM interna en el mismo microcontrolador.

Cargado por

Ricardo Jimenez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Uso de encoder rotativo con

microcontrolador PIC16F628A
Publicado en septiembre 11, 2014
En ocasiones puede resultar práctico tener una entrada por la que podamos
introducir un valor variable, para fijar o regular un parámetro, por ejemplo, un
dial de radio digital, un regulador de volumen, un selector de menú , o bien
emular una entrada analígica en un microcontrolador sin entradas analógicas.

En este caso vamos a utilizar un encoder como el modelo EC12 de la marca ALP.

Encoder rotativo

Figura 3

En la figura 2 podemos ver la conexión del circuito. El terminal a lo


conectaremos a RB0, y el terminal B a RB3
Los estados lógicos del interruptor son 4 posibles en secuencia, …11, 10, 00, 01,
… (Figura 3)así en este caso es muy útil usar la deteccion por interrupcion por
RB0. Después, en funcion del si se ha producido un cambio de 0 a1 o de 1 a 0, y
del valor de Terminal B (RB3), sabremos si si esta avanzando o retrocediendo,
así incrementamos el contador, o lo decrementamos.

Un algoritmo sencillo para detectar el movimiento del encoder puede ser :

1 unsigned char i=0; //variable para usar en el contador. (al ser de tipo char admite h
// funcion de inicializacion del la interrupción
2
void init_encoder(void)
3 { INTEDEG=1; //Esperamos un cambio por flanco de subida.
4 INTF=0; //Inicialmente no se ha producido una interrupcion.
5 GIE=0; //habilitamos todas las interrupciones
6 }
7
//INTERRUPCION POR CAMBIO DE ESTADO EN RB0 PARA DETECCION DE ENCODER ROTATIVO
8 void interrupt encoder(void)
9 {
10 GIE=0; //Se deshabilita el resto de interrupciones para que no moleste
11 if ( INTF ) //si se ha producido interrupción por entrada en RB0
12 { INTF=0; // Poner bandera de control a 0.
if(RB0=1)
13 { INTEDG=0; //si estamos "arriba" detectaremos por flanco de bajada en la s
14 if (RB3=1) //si RB3 es 1, incrementamos.
15 i++;
16 }
17 else //si RB0=0
{ INTEDG=1; //si estamos abajo, detectaremos por flanco de subida en la s
18
if (RB3=1) //si RB3 es 1, decrementamos.
19 i--;
20 }
21 }
22 GIE=1; //se habilitan las interrupciones de nuevo.
}
23
24
25
26
27 //en el programa principal usaremos el valor de i donde mas nos interese, por ejemplo
28 void main(void)
29 { while(1)
30 {
31 printf(" %d",i);
}
32 }
33
34
35
Publicado en Micropics, Programación, Uncategorized
| Etiquetado ANALOGICO, encoder, gie, intedg,interrupcion, interrupt, intf, lenguaje
c, PIC16F628A, rb0, rotativo, xc8 | Deja un comentario

Contador de un digito con PIC16F628A


con uso de memoria EEPROM interna
Publicado en septiembre 8, 2014
En este montaje conectamos un display aL [Link] display ira contando
los impulsos cada [Link] caso de corte de alimentación, al restablecerse el la
corriente, el display continuará el contaje con el último número que se activó.
Existen displays de ánodo común y cátodo común. Lo primero que haremos será
identificar el tipo .
En este circuito se conecta un display de un digito ,de Anodo (+) común ,al
puerto B del PIC16F628.

En el dígito, identificamos 7 segmento y un punto (dp).Los segmentos van


numerados empezando por el de arrriba , siguendo las agujas del reloj, porlas
letras "a,bc,.." y terminando en el segmento interior horizontal, numerado con
la letra"g".
En este caso se ha conectado de la siguiente manera :
RB7-b,RB6-a,RB5-f,RB4-g , RB3-e,RB2-d y RB1-c.
Modificando el circuito,con un pulsador podriamos incrementar el contador
desde 0 a 9 ciclícamente.
El dígito actual se guardará en un byte de memoria EEPROM.
En el circuito de la protoboard, solo se ha utilizado por comodidad una única
resistencia limitadora de los leds del display. En un montaje ideal se debe
colocar una resistencia limitadora de 650 a 1200 Ω para que no varíe la
intensidad de los dígitos.
Se utiliza un vector display[i] con los valores correspondiente a la
activación de los segmentos del display en formato hexadecimal, empezando por
el 0 (0x11), hasta el 9 (0x9).
Contador de un dígito con PIC16F628A y EEPROM

1
2 //Contador de un dígito con PIC16F628A y uso de eeprom interna
3
4 int i;
5 int memoria=0;
6 int display[12]={0x11,0x7D,0x23,0x29,0x4D,0x89,0x81,0x3D,0x01,0x09};
7
void main(void)
8 { TRISB=0;
9 memoria=EEPROM_READ(0); //solo se lee cuando se conecta el micro.
10 while(1)
11 {
12 for(i=memoria;i<=9;i++)
{ PORTB=display[i]; //visualiza el numero en el display 7 seg.
13 EEPROM_WRITE(0,i) ; //(0=direccion,i=valor) escribe continuamente i en la dir
14 __delay_ms(1000);
15 }
16 memoria=0; //para volver a contar de nuevo
}//bucle que cuenta de 0 a 9
17
}
18
19
El pulsador del circuito sirve para realizar un reset por MCLR y comprobar como
se guarda la memoria.

Publicado en Uncategorized | Etiquetado display, eeprom, memoria, PIC16F628A, segmentos


| Deja un comentario

Interrupciones
Publicado en abril 27, 2014
Las interrupciones son un recurso importante en el uso de microcontroladores.
Para comprender el uso de ellas podríamos imaginar el siguiente programa con
tres funciones sencillas: Comer pizza, beber cerveza y atender una llamada de
teléfono.

:En un programa sin interrupciones :


( hemos puesto nuestro teléfono en modo silencio->interrupciones inhabilitadas)

Comeríamos un trozo de pizza, daríamos un trago de cerveza y miraríamos el


teléfono para ver si nos están llamando. Si nos llaman, contestaríamos al
teléfono, damos un bocado un trago y una frase, y así [Link] tres
funciones se realizan secuencialmente una detrás de otra…

– En un programa con interrupciones:


-habilitamos el timbre del teléfono.
– En nuestro programa principal , vamos comiendo pizza y bebiendo [Link]
el momento que suena el teléfono (interrupción) ,dejamos de comer pizza
y de beber cerveza, y pasamos solamente a hablar por teléfono. Cuando se
termina la llamada ( termina la interrupción) , dejamos el
teléfono ,volvemos a nuestro programa principal, continuando con el
trozo de pizza que nos queda (que tal vez se ha enfriado) y acabando la cerveza
(que tal vez ya se ha calentado ).
los programas quedarían de la siguiente manera:
MODO SIN INTERRUPCIONES:
Programa principal()
{ mientras ( continuamente)
comer pizza;
beber cerveza;
mirar el teléfono; // esto hay que hacerlo repetidamente…
}

MODO CON INTERRUPCIONES:


función_interrupción()
{ si (timbre de teléfono_activo y timbre_teléfono_suena )
contestar la llamada.
}
programa principal ()
{ mientras ( hay pizza y hay cerveza)
{comer pizza;
beber cerveza;
}
}

A nivel práctico:
– cuando sucede una interrupción, el programa para donde se encuentra.
– atiende la función de interrupción y
– vuelve de nuevo al programa en el punto donde se quedó.

así , decidiremos qué parte de nuestro programa principal sea secuencial, y


cuando debe pararse lo que se esta haciendo y atender lo que nos interesa por
la interrupción.

Casi todo lo podemos convertir en interrupción:

-entrada por PIN RB0;


-entrada de un carácter “p” , “3” , “#” ,por puerto serie o teclado;
-cambio de nivel por entrada COMPARADOR:
-lectura de señal analógica;
-uso de los TIMER.
etc.

será responsabilidad del programador, habilitar y deshabilitar las interrupciones


que desee, así como de reiniciar la interrupcion una vez ocurrida (pondremos a
“0” la señal de aviso de interrupcion..

asi mismo, habilitaremos o deshabilitaremos una, varias o todas las


interrupciones en cada punto del programa que nos interese. (puede ocurrir que
en una parte del programa no nos interese que sea detenida por la
interrupción).

Es “responsabilidad” del microcontrolador y el programa compilador ir y volver


del programa principal al punto de interrupción .

Publicado en Uncategorized
| Etiquetado interrupciones, microcontroladores, PIC, PIC12F, PIC16F, PIC16F628A |Deja un
comentario

Plataforma PIC16F628A
Publicado en abril 21, 2014

Este pequeño circuito contiene lo necesario para programar y usar el


PIC16F628A , lleva 5 pins macho para la programación ISCP (In circuit serial
programming) un led monitor de tensión, y una entrada de alimentación
regulada con el integrado L7805 .Lo podemos alimentar con hasta 35V DC y nos
estabiliza una tension de 5V, necesaria para el PIC. Este mediano pic de 18
pines, tiene como ventaja que lleva un oscilador integrado , pudiendo elegir dos
velocidades (48khz y 4Mhz), o bien colocar uno exterior, no posee entradas
analógicas, pero el módulo comparador analógico es suficiente para muchos
circuitos. En caso de necesitar datos de una entrada analógica se pueden optar
por utilizar dispositivos como el sensor TSL235 , un sensor de luz cuya salida
es una frecuencia proporcional a la luz, y esta la podemos “leer” por el módulo
CAPTURA del PIC.
Como desventaja cabe citar que este PIC (a diferencia de otros modelos como el
PIC16F88 ) no dispone del modo “debug”, muy util cuando se trata de ensayar
nuevos programas, aunque siempre existe la posibilidad de utilizar un circuito
auxiliar para ello.
A continuación detallo un circuito de partida para realizar una plataforma
programable con el sistema ISCP. Este circuito es válido para la mayoria de PICs
de la Familia PIC12F, PIC16F Y PIC 18F.
Publicado en Uncategorized
| Etiquetado 48KHZ, 4MHZ, ANALOGICA, ANALOGICO, COMPARADOR, ICSP, L7805,PIC12F, PIC1
6F, PIC16F628A, PIC18F, TSL234 | Deja un comentario

También podría gustarte