Voltímetro Digital Con PIC

3
Voltímetro Digital con PIC Comenzando con una fácil aplicación de los microcontroladores, presento este trabajo, que es un voltimetro digital, creo que ya todos sabemos que es un voltimetro, un instrumento de medida de voltaje, este voltimetro es DC, el lenguaje que utilizo es el C, compilado con CCS y simulado en ISIS de PROTEUS. en las siguiente lineas, explicaremos el código del programa, recuerden que deps de un // todo lo que sigue es un comentario y el compilador lo ignora. Código: #include <16F877A.h> // seleccionas el PIC a utilizar #fuses XT //definimos un crystal externo #device adc=8 // bits para el ADC 0-255 #use delay (clock=4M) // frecuencia del oscilador #byte TRISB=0x86 // definimos los TRIB en la memoria #byte PORTB=0x06 // definimos el PORTB en la memoria float valor11; //coonstantes int valor,valor1,digito1,digito2,digito3,digito4; void main() { TRISB=0x00; // toda el puerto B es salida PORTB=0x00; // todo el puerto B estra en estado logico 0 setup_adc(ADC_CLOCK_INTERNAL); // seleccionamos el reloj para el ADC setup_adc_ports(AN0); // puerto que seran AN0

description

electrónica

Transcript of Voltímetro Digital Con PIC

Voltímetro Digital con PIC

Comenzando con una fácil aplicación de los microcontroladores, presento este trabajo, que es un voltimetro digital, creo que ya todos sabemos que es un voltimetro, un instrumento de medida de voltaje, este voltimetro es DC, el lenguaje que utilizo es el C, compilado con CCS y simulado en ISIS de PROTEUS. en las siguiente lineas, explicaremos el código del programa, recuerden que deps de un // todo lo que sigue es un comentario y el compilador lo ignora.

Código:

#include <16F877A.h> // seleccionas el PIC a utilizar

#fuses XT //definimos un crystal externo

#device adc=8 // bits para el ADC 0-255

#use delay (clock=4M) // frecuencia del oscilador

#byte TRISB=0x86 // definimos los TRIB en la memoria

#byte PORTB=0x06 // definimos el PORTB en la memoria

float valor11; //coonstantes

int valor,valor1,digito1,digito2,digito3,digito4;

void main() {

TRISB=0x00; // toda el puerto B es salida

PORTB=0x00; // todo el puerto B estra en estado logico 0

setup_adc(ADC_CLOCK_INTERNAL); // seleccionamos el reloj para el ADC

setup_adc_ports(AN0); // puerto que seran AN0

for(;;){

set_adc_channel(0); // que canal se utilizara, en este caso el canal 0

delay_us(10); // retardo necesario antes de hacer la lectura

valor= read_adc(); //leemos el dato del canal

valor1=valor*30.0/255.0; //15 una regla de 3 simple para trabajar con 30V

digito1=valor1/10; //15/10=1 obtenemos el primer digito

digito2=valor1 - digito1*10; //15-1*10=5 obtenemos el segundo digito

valor11=valor*30.0/255.0; // (15.30)*10=153.0

digito3=valor11*10 - valor1*10; //153.0 - 15*10=3.0

digito4=valor11*100 - valor1*100 - digito3*10;

// multiplexaccion del puerto B

PORTB=0b00010000 + digito1;

delay_ms(5);

PORTB=0b00100000 + digito2;

delay_ms(5);

PORTB=0b01000000 + digito3;

delay_ms(5);

PORTB=0b10000000 + digito4;

delay_ms(5);

}

}

Básicamente, un divisor de tensión resistivo no es más que un par de resistencias puestas en serie, de forma que la primera provoca una caída de tensión y por lo tanto, la tensión de salida se verá reducida.

1. Para declarar una función que no tiene valor de retorno. Por ejemplo: 

void verMensaje (const char * Mensaje) { cout << Mensaje << endl; } 

El ciclo For es una de las instrucciones mas sencillas de aprender, y consiste en utilizar mayormente “rangos” en los cuales se define el numero de iteraciones que se pueden hacer en este ciclo.