Anda di halaman 1dari 16

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

4
botoneras
en PORTA

PIC
16F887

Osciloscopio
Digital en
PORTC

3. Diagrama de Flujo funcional del Programa principal

3.1 Diagrama de Flujo Initmain

3.2 Diagrama de Flujo main

3.3 Diagrama de Flujo while1

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;
PORTB = 0;
TRISB = 0;
PORTC = 0;
TRISC = 0;
PWM1_Init(5000);
PWM2_Init(5000);

pins as input

}
void main() {
InitMain();
current_duty = 16;
current_duty1 = 16;
PWM1_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);
}

PWM2_Start();

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;
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);

PORTB = 0;

7. Enunciado del proyecto 2


Se desea familiarizar al estudiante en el uso de convertidores analgicodigital.
8. Diagrama de bloques

Potencimetro
1k

PIC 16F887

9. Diagrama de Flujo funcional del Programa principal

9.1 Void main

9.2 Lazo do_while

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;
ANSELH = 0;
digital I/O
C1ON_bit = 0;
C2ON_bit = 0;
TRISA
TRISC
TRISD

= 0xFF;
= 0;
= 0;

do {
temp_res = ADC_Read(2);
conversion
PORTD = temp_res;
PORTC = temp_res >> 8;
RC1, RC0
} while(1);
}

// Configure AN2 pin as analog


// Configure other AN pins as
// Disable comparators
// PORTA is input
// PORTC is output
// PORTD is output
// Get 10-bit results of AD
// Send lower 8 bits to PORTD
// Send 2 most significant bits to

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.

long int temp_res, num, numero,unidades, decenas;


unsigned int
tabla[10]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
void main() {
ANSEL = 0x04;
ANSELH = 0;
C1ON_bit = 0;
C2ON_bit = 0;
TRISA
TRISC
TRISD

= 0xFF;
= 0;
= 0;

do {
temp_res = ADC_Read(2);
num = (temp_res)*(80);
numero = (num)/(1023);
decenas = (numero)/(10);
unidades = (numero)-((decenas)*(10));
PORTD = 1;
PORTC = tabla[unidades];
delay_ms(5);
PORTD = 2;
PORTC = tabla[decenas];
} while(1);
}

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.

Anda mungkin juga menyukai