Você está na página 1de 6

UNIVERSIDAD TECNICA DEL NORTE

UTN

OPERACIONES MATEMTICAS

INTEGRANTES
CAMPOS JOSUE
CAMPOVERDE FRANCISCO
CORDOVA FELIPE
LEMA JAVIER
ORBE JONATHAN

MICROPROCESADORES AVANZADOS | MECATRONICA

ENUNCIADO
El presente proyecto constara de la lectura de dos canales anlogos, los cuales se visualizaran
en displays siete segmentos, constara con botones los cuales realizaran operaciones de suma,
res, multiplicacin y divisin, visualizando su resultad en otro displays siete segmentos.
OBJETIVO GENERAL
Visualizar el resultado de las operaciones matemticas ledas en los canales analgicos.
OBJETIVO ESPECIFICO
De la prctica realizada en clase aumentar la visualizacin de la multiplicacin y
divisin.
FLUJOGRAMA BSICO

INICIO

LECTURA CANALES
ANLOGOS

FIN
CONVERSIN ADC A
MILIVOLTIOS

VISUALIZA
RESULTADO

VISUALIZACIN DE CANALES EN
DISPLAYS

REALIZAR
OPERACIONES

SI

SI

APRIETA BOT
4

DIVI

NO

SI

APRIETA BOT
3

MULT

NO

APRIETA BOT
2 RESTA

NO

APRIETA
BOT 1 SUMA

SI
VISUALIZA RESULTADO

FIN

FICA - MECATRONICA

CODIGO
1: //////////////UNIVERSIDAD TCNICA DEL NORTE////////////////////////////
2:///////////////////CIME/////////////////////////////////////////////
3: //////////////MICROCONTROLADORES AVANZADOS/////////////////////////////
4: ////////////////OPERACIONES ARITMTICAS////////////////////////////////
5:
6: int cont[10]={63,6,91,79,102,109,124,7,127,111}; // decodificacion decimal
7: int canal1, canal2;
8: float variable, cl1, cl2; //variable tipo float para obtener decimales
9: long tlong,tlong2;
10:
11: void display_c1(int cl1){ ////// funcion para el calculo de visualizacion
12:
13: unsigned short dc1;
14: unsigned short uc1;
15:
16: dc1 =(cl1)/10; ////////////decenas
17: uc1 =(cl1-dc1*10); ////////////unidades
18:
19: portb=cont[uc1]; /////activacion del display para unidades
20: portf.b1=1;
21: delay_ms(60);
22: portf=0;
23:
24: portb=cont[dc1]; /////activacion del display para decenas
25: portf.b0=1;
26: delay_ms(60);
27: portf=0;
28:
29: }
30:
31: void display_c2(int cl2){ ////// funcion para el calculo
32:
33: unsigned short dc2;
34: unsigned short uc2;
35:
36: dc2 =(cl2)/10; ////////////decenas
37: uc2 =(cl2-dc2*10); ////////////unidades
38:
39: portb=cont[uc2]; /////activacion del display para unidades
40: portf.b3=1;
41: delay_ms(60);
42: portf=0;
43:
44: portb=cont[dc2]; /////activacion del display para decenas
45: portf.b2=1;
46: delay_ms(60);
47: portf=0;
48:
49: }
50:

FICA - MECATRONICA

51: void mult( int variable){ //subrutina para visualizar las operaciones mat
52: unsigned short dm;
53: unsigned short um;
54: unsigned short cm;
55:
56: //visualizacion
57:
58: cm =(variable)/100; ////////////centenas
59: dm =(variable-cm*100)/10; ////////////decenas
60: um =(variable-cm*100-dm*10); ////////////unidades
61:
62:
63: portb=cont[um]; /////activacion del display para unidades
64: portf.b6=1;
65: delay_ms(60);
66: portf=0;
67:
68: portb=cont[dm]; /////activacion del display para decenas
69: portf.b5=1;
70: delay_ms(60);
71: portf=0;
72:
73: portb=cont[cm]; /////activacion del display para centenas
74: portf.b4=1; 7
5: delay_ms(60);
76: portf=0;
77: }
78:
79: void main( void ) {
80:
81: ADPCFG=0XFFFF; /////////entradas analogas
82: TRISB=0B1111100000000;
83: PORTB=0;
84: TRISF=0;
85: PORTF=0;
86: TRISD=0;
87: PORTD=0;
88:
89: while (1) {
90: canal1 = ADC1_read(7); // lectura del canal 7
91: canal2 = ADC1_read(8); // lectura del canal 8
92:
93: tlong = (long)canal1 * 5000; // covert adc reading to milivolts
94: tlong = tlong / 1000; // 0..1023 -> 0-5000mV
95: cl1 = tlong / 500; // extract volts digit
96: display_c1(cl1); //envio dato a visualizarse en la subrutina
97:
98: tlong2 = (long)canal2 * 5000; // covert adc reading to milivolts 99: tlong2 = tlong2 / 1000;
// 0..1023 -> 0-5000mV
100: cl2 = tlong2 / 500; // extract volts digit
101: display_c2(cl2); //envio dato a visualizarse en la subrutina
102:
FICA - MECATRONICA

103: /// suma


104:
105: if (portb.b9==1){ //asignacion de la entrada(pulsador)
106: variable = cl1 + cl2; // suma
107: mult(variable); //envio del resultado a ser visualizado
108: }
109:
110: /// multiplicacion
111: if(portb.b10==1){ //asignacion de la entrada(pulsador)
112: variable = cl1 * cl2; //multiplicacion
113: variable=variable / 10; //calculo para visualizacion de decimal 114: mult(variable); //envio
del resultado a ser visualizado
115: }
116:
117: /// resta
118:
119: if(portb.b11==1){ //asignacion de la entrada(pulsador)
120: if(cl1>cl2){
121: variable = cl1 - cl2; //resta
122: }
123: if(cl2>cl1){
124: variable = cl2 - cl1; //resta
125: }
126: mult(variable); //envio del resultado a ser visualizado
127:
128: }
129:
130: /// division
131:
132: if(portb.b12==1){ //asignacion de la entrada(pulsador)
133: if(cl1>cl2){
134: variable = cl1 / cl2; //division
135: variable=variable*10;
136: }
137: if (cl2>cl1){
138: variable = cl2 / cl1; //division
139: variable=variable*10;
140: }
141: mult(variable); //envio del resultado a ser visualizado
142: }
143:
144: }
145: }

FICA - MECATRONICA

CONCLUSIONES

La visualizacin es permisible siempre y cuando se pulse el botn de suma, resta,


multiplicacin o divisin.
El manejo del canal anlogo vara de acuerdo a la manipulacin del potencimetro,
pero no es exactamente la lectura leda con un multmetro en la entrada al Dspic.
Se manej divisiones internas para que se perciba la misma lectura de un multmetro.
En la multiplicacin y divisin utilizar se dio la aproximacin mxima de una milsima
para no complicarse tanto en la visualizacin.

RECOMENDACIONES

Es de mucha ayuda el contar con un multmetro para leer el voltaje que llega al Dspic y
segn la lectura, poder variar las divisiones para ajustar la visualizacin del voltaje
esperado.
Tener cuidado con los displays a ocupar, se recomienda todos ctodos o todos nodos.
Utilizar una fuente de preferencia con un amperaje superior a los 600 mA, puesto que
no podra visualizar de la manera esperada.

FICA - MECATRONICA

Você também pode gostar