You are on page 1of 15

ESCUELA SUPERIOR POLITCNICA DEL

LITORAL



Laboratorio de Microcontroladores


Prctica
EEPROM Y CONTADORES DE DOS DGITOS

Alumnos
OSCAR LOOR QUEVEDO
DENISSE VILLAMAR HERRERA


Paralelo: # 6


Fecha de presentacin:
24 ENERO 2014


2013 2 TRMINO

1. Enunciado del proyecto
Se desea familiarizar al estudiante en el uso del PWM junto con
osciladores para observar los cambios que resultan de aplastar las
botoneras conectadas al PIC en el puerto A, estas seales enviadas
desde los pulsadores son mostradas por el puerto C configurado como
salida.
Dado que para esta prctica se cuenta con dos proyectos, se realizar
en primer lugar el proyecto: Uso de la Memoria EEPROM Interna y a
continuacin el proyecto: Contador BCD de Dos Dgitos.


2. Diagrama de bloques
























PIC 16F887
Osciloscopio
Digital en PORTC
4 botoneras
en PORTA
3. Diagrama de Flujo funcional del Programa principal


INICIO
Creacin de
variables
Void Initmain
main
FIN


3.1 Diagrama de Flujo Initmain

INICIO
Configuracin de
puertos y
deshabilitacin de
funcin de
comparacin
Inicio de dos PWM
con frecuencia de
5kHz
FIN








3.2 Diagrama de Flujo main

INICIO
Llamar Initmain
Carga de valores en
variables creadas
while1
FIN


3.3 Diagrama de Flujo while1

INICIO
RA0:1
Incremento de
variable a y seteo de
PWM1 con a.
RA1:1
NO
Decremento de
variable a y seteo de
PWM1 con a.
SI
SI
RA2:1
Incremento de
variable b y seteo
de PWM1 con b.
RA3:1
Decremento de
variable b y seteo
de PWM1 con b.
SI
SI
NO
NO
Delay de 5 ms
FIN

4. Descripcin del algoritmo.

1. Crear variables tipo short.
2. Crear el void Initmain y acontinuacin configurar las entradas y
salidas como digitales.
3. Deshabilitar las funciones de comparacin.
4. Configurar PORTA como entrada.
5. Seteo de PORTC, pines configurados como salida.
6. Inicializacin de los PWM con 5KHz.
7. Se crea el void main, la primera lnea de cdigo del void es llamar a
la funcin Initmain.
8. Se cargan variables current_duty y current_duty1 con un valor de 16
para ambos.
9. Se inicia el proceso de PWM con lneas: PWM1_Start y PWM_Start2.
10. Tanto para PWM1 y PWM2 se los setea con las variables
current_duty y current_duty1.
11. Se entra a un lazo while infinito.
12. Pregunta si bit RA0 se presiona, si es verdadero, ocurre un delay de
40 ms, se incrementa variable current_duty en uno y en la siguiente
lnea se setea PWM1 con valor de current_duty. Si no se presiona
RA0, se pregunta por RA1.
13. Si es verdadero la condicin, ocurre un delay de 40 ms, se
decrementa variable current_duty en uno y en la siguiente lnea se
setea PWM1 con valor de current_duty. Si no se presiona RA1, se
pregunta por RA2.
14. Si es verdadero la condicin, ocurre un delay de 40 ms, se
incrementa variable current_duty1 en uno y en la siguiente lnea se
setea PWM2 con valor de current_duty1. Si no se presiona RA2, se
pregunta por RA3.
15. Si es verdadero la condicin, ocurre un delay de 40 ms, se
decrementa variable current_duty1 en uno y en la siguiente lnea se
setea PWM2 con valor de current_duty1. Si no se presiona RA3,
ocurre un delay de 5 ms. Fin de lazo while. Fin de void main.

















5. Programa fuente en lenguaje C.


unsigned short current_duty, old_duty, current_duty1,
old_duty1;

void InitMain() {
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0; /
C2ON_bit = 0;

PORTA = 255;
TRISA = 255; pins as input
PORTB = 0;
TRISB = 0;
PORTC = 0;
TRISC = 0;
PWM1_Init(5000);
PWM2_Init(5000);
}
void main() {
InitMain();
current_duty = 16;
current_duty1 = 16;

PWM1_Start(); PWM2_Start();
PWM1_Set_Duty(current_duty);
PWM2_Set_Duty(current_duty1);
while (1) {
if (RA0_bit) {
Delay_ms(40);
current_duty++;
PWM1_Set_Duty(current_duty);
}

if (RA1_bit) {
Delay_ms(40);
current_duty--;
PWM1_Set_Duty(current_duty);
}

if (RA2_bit) {
Delay_ms(40);
current_duty1++;
PWM2_Set_Duty(current_duty1);
}

if (RA3_bit) {
Delay_ms(40);
current_duty1--;
PWM2_Set_Duty(current_duty1);
}
Delay_ms(5);
}
}

6. Copia impresa del circuito armado en PROTEUS para la simulacin
en el momento de su ejecucin







RESPONDER:
1) Genere un solo PWM inicializando el mdulo PWM a 1Khz, haga
current_duty = 128; y cambie todos los delay a Delay_ms(5);. Utilice el
siguiente cuadro para conectar un motor DC de 12voltios a travs de un
opto-acoplador y mida las seales como se indica.

unsigned short current_duty, old_duty, current_duty1,
old_duty1;

void InitMain() {
ANSEL = 0;
ANSELH = 0;
C1ON_bit = 0; /
C2ON_bit = 0;

PORTA = 255;
TRISA = 255; PORTB = 0;
TRISB = 0;
PORTC = 0;
TRISC = 0;
PWM1_Init(1000);
}
void main() {
InitMain();
current_duty = 128;
PWM1_Start();
PWM1_Set_Duty(current_duty);
while (1) {
if (RA0_bit) {
Delay_ms(5);
current_duty++;
PWM1_Set_Duty(current_duty);
}

if (RA1_bit) {
Delay_ms(5);
current_duty--;
PWM1_Set_Duty(current_duty);
}

if (RA2_bit) {
Delay_ms(5);
current_duty++;
PWM1_Set_Duty(current_duty1);
}

if (RA3_bit) {
Delay_ms(5);
current_duty--;
PWM1_Set_Duty(current_duty1);
}
Delay_ms(5);
}
}

7. Enunciado del proyecto 2
Se desea familiarizar al estudiante en el uso de convertidores analgico-
dgitial.

8. Diagrama de bloques








9. Diagrama de Flujo funcional del Programa principal



INICIO
Void main
FIN
Creacin variable int
temp_res















PIC 16F887
Potencimentro
1k
9.1 Void main

INICIO
Configuracin de
pines como digitales
Deshabilitacin de
comparadores
Puerto A
configurados como
salida. Puertos C y D
como salidas
Do while
FIN



9.2 Lazo do_while

INICIO
Temp_ADC_Read(2)
PORTD = temp_res
PORTC = temp_res >>8
FIN






10. Descripcin del algoritmo.

1. Se crea variable unsigned tipo int llamada temp_res.
2. Creacin del void main. Configuracin de pines anaalgicos AN2 y
los dems como I/O digitales.
3. Se deshabilita comparaciones y se configura el puerto A como
entrada, los puertos C y D como salidas.
4. Se entra a un ciclo do while infinito.
5. Dentro del ciclo, se asigna un valor de ADC con la funcin de lectura
del mismo a la variable temp_res, se lee el resultado de la conversin
en 10-bit.
6. Se envan los 8 bits menores al puerto D y los dos bits ms
significativos a RC1 y RC0.
7. Cierre de ciclo do while y fin de programa.



11. Programa fuente en lenguaje C.







unsigned int temp_res;

void main() {
ANSEL = 0x04; // Configure AN2 pin as
analog
ANSELH = 0; // Configure other AN pins as
digital I/O
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;

TRISA = 0xFF; // PORTA is input
TRISC = 0; // PORTC is output
TRISD = 0; // PORTD is output

do {
temp_res = ADC_Read(2); // Get 10-bit results of AD
conversion
PORTD = temp_res; // Send lower 8 bits to PORTD
PORTC = temp_res >> 8; // Send 2 most significant
bits to RC1, RC0
} while(1);
}

12. Copia impresa del circuito armado en PROTEUS para la simulacin
en el momento de su ejecucin










RESPONDER:
1) Muestre el resultado de la conversin en dos displays de 7
segmentos multiplexados presentando 00 para el mnimo valor del
potencimetro y 80 para el mximo.
13. Conclusiones
Es esencial el conocimiento de lenguaje C para la programacin de los
proyectos, as como el manejo de las funciones para los PWM y ADC.

En ambos proyectos se ha utilizado la funcin Delay, siendo entonces
esta una funcin muy importante para el manejo de microcontroladores y
codificacin en lenguaje C. Esta funcin no es la nica, existen muchas
funciones ms que con el paso de las prcticas se aprender su
utilizacin.

Para el segundo proyecto los estudiantes utilizaron comandos de lectura
de datos de la conversin y se configur para que su resultado sea
mostrado por los puertos C y D del pic utilizando lneas de comando
definidas y estudiadas en clases terica, esto es el desplazamiento de
bit y el manejo de ellos.

14. Recomendaciones
Se recomienda no confiar totalmente en los resultados que se obtienen
con el simulador de PROTEUS, tomar en cuenta que una cosa es
simulacin y otra muy diferente es la vida real en la que aparecen
muchas sorpresas y eventos imprevistos.

No es recomendable corregir el programa sin tener una ltima copia del
mismo ya que un cambio podra provocar problemas e impedir la
compilacin. El orden es el mejo aliado para evitarse problemas futuros.
Por tanto se debe estar seguro en qu modo est trabajando el timer0.


No olvidar setear los puertos de entrada o salida, dependiendo el uso
que se les d en el programa principal y de configurarlos como
analgicos y/o digitales.

Al trabajar en Proteus, al unir las respectivas patitas con el bus de
datos, dar el nombre apropiado con la funcin label para no tener
errores de compilacin. Adems de elegir el dispositivo correcto y
enlazar de manera correcta el simulador con la codificacin realizada en
MikroC.

Realizar un buen diagrama de flujo ya que a partir de aquello, el
estudiante debe dirigir los proyectos y responder las preguntas
planteadas, adems de entender el uso de cada variable que se ha
creado.

You might also like