Você está na página 1de 9

Ing.

Electrónica 7º 15/12/17

#INCLUDE <18F4550.H>

#FUSES
HS,NOWDT,PUT,MCLR,NOPROTECT,NOCPD,NOBROWNOUT,NOIESO,NOFCMEN,NOLVP,NODEBUG,
NOWRT

#DEVICE ADC=10 // CONFIGURA LA RESOLUCIÓN EN BITS DEL ADC DEL PIC.

#USE DELAY (CLOCK= 48M)

//#USE PWM(PWM1,OUTPUT=PIN_C2,FREQUENCY=10000,BITS=10)

#define ds_1 PIN_A3

#define ds_2 PIN_A4

#define ds_3 PIN_A5

#define ds_4 PIN_E0

#define ds_5 PIN_E1

#define ds_6 PIN_E2

#define alarma PIN_D2

void lectura ();

void muestreo ();

// 0 1 2 3 ... 9

int
DISPLAY[10]={0b1000000,0b1111001,0b0100100,0b0110000,0b0011001,0b0010010,0b0000011,0
b1111000,0b0000000,0b0011000}; // MATRIS DE LOS NUMEROS A DESPLEGAR

int16 error1 = 0; // VARIABLE QUE ALMACENA EL VALOR DEL ADC EN DECIMAL.

int16 error2 = 0;

int16 error3 = 0;

int16 ad_1 = 0;

int16 ad_2 = 0;
Ing. Electrónica 7º 15/12/17

int16 ad_3 = 0;

int ud = 0;

int ud2 = 0;

int dec = 0;

int dec2 = 0;

int cen = 0;

int cen2 = 0;

int tiempo = 910; // velocidad de muestreo

void main()

set_tris_A(0b000111); // EL PIN RA0, RA1 Y RA2 SE CONFIGURA COMO ENTRADA.

set_tris_C(0b000011); // EL PIN RC0 Y RC1 SE CONFIGURA COMO ENTRADA Y RC2 COMO


SALIDA

set_tris_E(0b0000); // EL PUERTO E COMO SALIDA

port_b_pullups(true);

output_B(0b0000000); // TODO EL PUERTO B APAGADO INICIALMENTE

output_low(pin_d2);

//pwm_off();

setup_adc(ADC_CLOCK_INTERNAL); // CONFIGURA LA FRECUENCIA DE MUESTREO DEL ADC.

setup_adc_ports(AN0_TO_AN2); // PINES UTILIZADOS PARA EL ADC.

//pwm_on();

output_low(PIN_C2);

setup_timer_2(t2_div_by_4,249,1);

setup_ccp1(ccp_pwm);
Ing. Electrónica 7º 15/12/17

delay_ms(50);

while(true)

lectura();

set_pwm1_duty(ad_3); // SE HACE EL AJUSTE PARA QUE EL PWM TOME VALORES ENTRE


0 - 1023.

muestreo();

/* if ((error1 > error2) && (error1 < error2 + 5)){

output_toggle(alarma);

delay_ms(1);

else if( error2 + 10 >= error1){

output_high(alarma);

}*/

if(error1 > error2){

output_high(alarma);

else

output_low(alarma);

//pwm_set_duty(ad_1);

void lectura (){


Ing. Electrónica 7º 15/12/17

SET_ADC_CHANNEL(0);

delay_us(100);

ad_1= read_adc();

delay_us(50);

error1 = ad_1*(.097); // se multiplica por 0.097 para odtener muestreo de 0-100

if(error1 >= 1000) // parte de codigo para mostrar dasos de 0 - 999

cen = error1 / 100;

dec = (error1-1000) / 10;

ud = (error1-1000) % 10;

else if(error1 >= 900)

cen = error1 / 100;

dec = (error1-900) / 10;

ud = (error1-900) % 10;

else if(error1 >= 800)

cen = error1 / 100;

dec = (error1-800) / 10;

ud = (error1-800) % 10;

else if(error1 >= 700)

cen = error1 / 100;

dec = (error1-700) / 10;


Ing. Electrónica 7º 15/12/17

ud = (error1-700) % 10;

else if(error1 >= 600)

cen = error1 / 100;

dec = (error1-600) / 10;

ud = (error1-600) % 10;

else if(error1 >= 500)

cen = error1 / 100;

dec = (error1-500) / 10;

ud = (error1-500) % 10;

else if(error1 >= 400)

cen = error1 / 100;

dec = (error1-400) / 10;

ud = (error1-400) % 10;

else if(error1 >= 300)

cen = error1 / 100;

dec = (error1-300) / 10;

ud = (error1-300) % 10;

else if(error1 >= 200)

cen = error1 / 100;


Ing. Electrónica 7º 15/12/17

dec = (error1-200) / 10;

ud = (error1-200) % 10;

else if(error1 >= 100)

cen = error1 / 100;

dec = (error1-100) / 10;

ud = (error1-100) % 10;

else

dec = error1 / 10;

ud = error1 % 10;

delay_us(100);

SET_ADC_CHANNEL(1);

delay_us(100);

ad_2= read_adc();

delay_us(50);

error2 = ad_2*(.097);

cen2 = error2 / 100;

dec2 = error2 / 10;

ud2 = error2 % 10;

delay_us(100);
Ing. Electrónica 7º 15/12/17

set_adc_channel(2);

delay_us(100);

ad_3= read_adc();

delay_us(50);

error3 = ad_3*(.097);

void muestreo (){

//delay_us(tiempo);

output_low(ds_2); // primer digito

output_low(ds_3);

output_low(ds_4);

output_low(ds_5);

output_low(ds_6);

output_high(ds_1);

output_b(DISPLAY[ud]);

delay_us(tiempo);

output_low(ds_1); // segundo digito

output_low(ds_3);

output_low(ds_4);

output_low(ds_5);

output_low(ds_6);

output_high(ds_2);

output_b(DISPLAY[dec]);

delay_us(tiempo);

output_low(ds_1); // tercer digito

output_low(ds_2);

output_low(ds_4);

output_low(ds_5);
Ing. Electrónica 7º 15/12/17

output_low(ds_6);

output_high(ds_3);

output_b(DISPLAY[cen]);

delay_us(tiempo);

output_low(ds_1); //cuarto digito

output_low(ds_2);

output_low(ds_3);

output_low(ds_5);

output_low(ds_6);

output_high(ds_4);

output_b(DISPLAY[ud2]);

delay_us(tiempo);

output_low(ds_1); // quinto digito

output_low(ds_2);

output_low(ds_3);

output_low(ds_4);

output_low(ds_6);

output_high(ds_5);

output_b(DISPLAY[dec2]);

delay_us(tiempo);

output_low(ds_1); // sexto digito

output_low(ds_2);

output_low(ds_3);

output_low(ds_4);

output_low(ds_5);

output_high(ds_6);

output_b(DISPLAY[cen2]);
delay_us(tiempo);
}

Você também pode gostar