ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL
Laboratorio de Microcontroladores Microcontroladores Práctica EEPROM Y CONTADORES DE DOS DÍITOS Al!"nos OSCAR LOOR #UE$EDO DENISSE $ILLAMAR %ERRERA %ERRERA Paralelo& ' Paralelo& ' ( )ec*a de +resentaci,n& -. ENERO -/0. -/01 2 -3 TÉRMINO
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 señales enviadas desde los pulsadores son mostradas por el puerto C configurado como salida !ado que para esta pr"ctica se cuenta con dos pro#ectos, se realizar" en primer lugar el pro#ecto$ %so de la Memoria &&P'(M Interna # a continuaci)n el pro#ecto$ Contador *C! de !os !+gitos
2. Diagrama de bloques
. botoneras en PORTA
PIC 0()445
Oscilosco+io Di6ital en
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 wile1
!. Descripci"n del algoritmo. Crear variables tipo s-ort . Crear el void Initmain # acontinuaci)n configurar las entradas # salidas como digitales / !es-abilitar las funciones de comparaci)n 0 Configurar P('1A como entrada 2 Seteo de P('1C, pines configurados como salida 3 Inicializaci)n de los PWM con 245z 6 Se crea el void main, la primera l+nea de c)digo del void es llamar a la funci)n Initmain 7 Se cargan variables current8dut# # current8dut# con un valor de 3 para ambos 9 Se inicia el proceso de PWM con l+neas$ PWM8Start # PWM8Start. :1anto para PWM # PWM. se los setea con las variables current8dut# # current8dut# Se entra a un lazo ;-ile infinito .Pregunta si bit 'A: se presiona, si es verdadero, ocurre un dela# de 0: ms, se incrementa variable current8dut# en uno # en la siguiente l+nea se setea PWM con valor de current8dut# Si no se presiona 'A:, se pregunta por 'A
/ Si es verdadero la condici)n, ocurre un dela# de 0: ms, se decrementa variable current8dut# en uno # en la siguiente l+nea se setea PWM con valor de current8dut# Si no se presiona 'A, se pregunta por 'A. 0 Si es verdadero la condici)n, ocurre un dela# de 0: ms, se incrementa variable current8dut# en uno # en la siguiente l+nea se setea PWM. con valor de current8dut# Si no se presiona 'A., se pregunta por 'A/ 2 Si es verdadero la condici)n, ocurre un dela# de 0: ms, se decrementa variable current8dut# en uno # en la siguiente l+nea se setea PWM. con valor de current8dut# Si no se presiona 'A/, ocurre un dela# de 2 ms
#. Programa fuente en lenguaje $.
unsigned short current_duty, old_duty, current_duty1, old_duty1; void InitMain() { ANSEL !; ANSEL" !; #1$N_%it !; #'$N_%it !; $*A '++; *ISA '++; $*- !; *IS- !; $*# !; *IS# !; .M1_Init(+!!!); .M'_Init(+!!!);
&
ins as inut
/ void 0ain() { InitMain(); current_duty 1; current_duty1 1; .M1_Start(); .M1_Set_2uty(current_duty); .M'_Set_2uty(current_duty1); 3hile (1) { i4 (A!_%it) { 2elay_0s(5!); current_duty66; .M1_Set_2uty(current_duty); /
i4 (A1_%it) { 2elay_0s(5!); current_duty77; .M1_Set_2uty(current_duty); /
i4 (A'_%it) { 2elay_0s(5!); current_duty166; .M'_Set_2uty(current_duty1); / i4 (A8_%it) { 2elay_0s(5!); current_duty177; .M'_Set_2uty(current_duty1); / 2elay_0s(+);
/ /
.M'_Start();
%. $opia impresa del circuito armado en P&'(E)* para la simulaci"n
en el momento de su ejecuci"n
RESPONDER:
Genere un solo PWM inicializando el módulo PWM a 1Khz, haga current_duty = 128; y camie todos los delay a !elay_ms"#$;% &tilice el siguiente cuadro 'ara conectar un motor !( de 12)oltios a tra)*s de un o'to+aco'lador y mida las seales como se indica%
unsigned short current_duty, old_duty, current_duty1, old_duty1; void InitMain() { ANSEL !; ANSEL" !; #1$N_%it !; #'$N_%it !; $*A '++; *ISA '++; *IS- !; $*# !; *IS# !; .M1_Init(1!!!); / void 0ain() { InitMain(); current_duty 1'9; .M1_Start(); .M1_Set_2uty(current_duty); 3hile (1) { i4 (A!_%it) { 2elay_0s(+); current_duty66; .M1_Set_2uty(current_duty); /
i4 (A1_%it) { 2elay_0s(+); current_duty77; .M1_Set_2uty(current_duty); /
i4 (A'_%it) { 2elay_0s(+); current_duty66; .M1_Set_2uty(current_duty1); / i4 (A8_%it) { 2elay_0s(+); current_duty77; .M1_Set_2uty(current_duty1); / 2elay_0s(+);
/ /
&
$*- !;
+. Enunciado del proyecto 2 Se desea familiarizar al estudiante en el uso de convertidores anal)gico= digital ,. Diagrama de bloques
Potenci,"etro
PIC 0()445
-. Diagrama de Flujo funcional del Programa principal
-.1 oid main
-.2 /a0o dowile
1.Descripci"n del algoritmo. Se crea variable unsigned tipo int llamada temp8res . Creaci)n del void main Configuraci)n de pines anaal)gicos A>. # los dem"s como I?( digitales / Se des-abilita comparaciones # se configura el puerto A como entrada, los puertos C # ! como salidas 0 Se entra a un ciclo do ;-ile infinito 2 !entro del ciclo, se asigna un valor de A!C con la funci)n de lectura del mismo a la variable temp8res, se lee el resultado de la conversi)n en :=bit 3 Se env+an los 7 bits menores al puerto ! # los dos bits m"s significativos a 'C # 'C: 6 Cierre de ciclo do ;-ile # fin de programa
11. Programa fuente en lenguaje $.
unsigned int temp_res; void main() { ANSEL = 0x04; ANSEL# = 0; digita" %/& C'&N_it = 0; C!&N_it = 0; +,%SA +,%SC +,%S
= 0x--; = 0; = 0;
do { temp_res = AC_,ead(!); *onversion .&,+ = temp_res; .&,+C = temp_res 33 2; ,C' ,C0 5 1$i"e('); 5
// Conigure AN! pin as ana"og // Conigure ot$er AN pins as // isa"e *omparators // .&,+A is input // .&,+C is output // .&,+ is output // et '0it resu"ts o A // Send "o1er 2 its to .&,+ // Send ! most signii*ant its to
12. $opia impresa del circuito armado en P&'(E)* para la simulaci"n
en el momento de su ejecuci"n
RESPONDER:
Muestre el resultado de la con)ersión en dos dis'lays de segmentos multi'le.ados 'resentando // 'ara el m0nimo )alor del 'otenciómetro y 8/ 'ara el m.imo%
long int te0_res, nu0, nu0ero,unidades, decenas; unsigned int ta%la:1!{!<8=,!>!,!>+-,!>5=,!>,!>2,!>?2,!>!?,!>?=,!>=/; void 0ain() { ANSEL !
!<==; !; !;
do { te0_res A2#_ead('); nu0 (te0_res)@(9!); nu0ero (nu0)&(1!'8); decenas (nu0ero)&(1!); unidades (nu0ero)7((decenas)@(1!)); $*2 1; $*# ta%la:unidades; delay_0s(+); $*2 '; $*# ta%la:decenas; / 3hile(1); /
13.$onclusiones
&s esencial el conocimiento de lenguaje C para la programaci)n de los pro#ectos, as+ como el manejo de las funciones para los PWM # A!C
&n ambos pro#ectos se -a utilizado la funci)n !ela#, siendo entonces esta una funci)n mu# importante para el manejo de microcontroladores # codificaci)n en lenguaje C &sta funci)n no es la @nica, eisten muc-as funciones m"s que con el paso de las pr"cticas se aprender" su utilizaci)n
Para el segundo pro#ecto los estudiantes utilizaron comandos de lectura de datos de la conversi)n # se configur) para que su resultado sea mostrado por los puertos C # ! del pic utilizando l+neas de comando definidas # estudiadas en clases te)rica, esto es el desplazamiento de bit # el manejo de ellos
1!.&ecomendaciones
Se recomienda no confiar totalmente en los resultados que se obtienen con el simulador de P'(1&%S, tomar en cuenta que una cosa es simulaci)n # otra mu# diferente es la vida real en la que aparecen muc-as sorpresas # eventos imprevistos
>o es recomendable corregir el programa sin tener una @ltima copia del mismo #a que un cambio podr+a provocar problemas e impedir la compilaci)n &l orden es el mejo aliado para evitarse problemas futuros Por tanto se debe estar seguro en quB modo est" trabajando el timer:
>o olvidar setear los puertos de entrada o salida, dependiendo el uso que se les dB en el programa principal # de configurarlos como anal)gicos #?o digitales
Al trabajar en Proteus, al unir las respectivas patitas con el bus de datos, dar el nombre apropiado con la funci)n labelD para no tener errores de compilaci)n Adem"s de elegir el dispositivo correcto # enlazar de manera correcta el simulador con la codificaci)n realizada en MiEroC
'ealizar un buen diagrama de flujo #a que a partir de aquello, el estudiante debe dirigir los pro#ectos # responder las preguntas planteadas, adem"s de entender el uso de cada variable que se -a creado