Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
CONVERSIN A/D Y
TRANSMISIN POR PUERTO
SERIE
OBJETIVOS
Utilizar PIC para la adquisicin de datos
analgicos y conversin a digital
Transmisin por puerto serie de los datos
MEDIOS A UTILIZAR
Microchip 16F873
convertidor A/D
controlador Puerto Serie
PIC 16F873
CPU RISC
juego de 35 instrucciones
28 pins
FLASH: 8K x 14 words
RAM: 368 x 8 bytes
EEPROM: 256 x 8 bytes
Conversor A/D de 10 bits
multicanal
Puerto Serie multifuncional
Fosc/2
Fosc/8
Fosc/32
FRC
(00)
(01)
(10)
(11)
4) Interrupciones habilitadas
Set bit TXIE
7) Si se ha seleccionado 9 bit
Cargar bit en TX9D
//TRISA
asm bsf TRISA,7
// Configuracion de los pines
//set_bit( PCFG3,0);
//set_bit( PCFG2,0);
//set_bit( PCFG1,0);
//set_bit( PCFG0,1);
//Utilizar 0000 (V+ = Vdd; V- = Vss)
asm bcf ADCON1,PCFG3
asm bcf ADCON1,PCFG2
asm bcf ADCON1,PCFG1
asm bcf ADCON1,PCFG0
//set_bit( ADFM,1); // datos en los 10 bits de menos
peso
asm bsf ADCON1,ADFM
// Finalmente Habilitamos modulo AD
//Pasamos al banco 0 (00)
asm bcf STATUS, RP0
asm bcf STATUS, RP1
//Habilitamos
asm bsf ADCON0, ADON
}
//asyncronous mode
asm bcf TXSTA,SYNC
//Serial port enable
//Pasamos al banco 0 (00)
asm bcf STATUS, RP1
asm bcf STATUS, RP0
asm bsf RCSTA,SPEN
//enable trasnmit
//Pasamos al banco 1 (01)
asm bcf STATUS, RP1
asm bsf STATUS, RP0
asm bsf TXSTA,TXEN
}
while(1){
recibido = Recibe_un_caracter();
if (recibido == 'v'){
//Recibimos parte alta
alta = Recibe_un_caracter();
baja = Recibe_un_caracter();
dato = ((alta) << 8 ) + baja;
printf("Dato recibido = %d \n",dato);
printf("Dato convertido = %f \n",
convierte_dato(dato, v_low, v_high));
}
}//while
}//main
CODIGO PC - CONVERTIDOR
float convierte_dato(int dato, float low, float high){
float intervalo,margen;
float result;
intervalo = high - low;
//printf("convierte: intervalo=%f\n",intervalo);
// 2^10 = 1024
margen = (intervalo / (1024));
//printf("convierte: margen=%f\n",margen);
result = low + margen*dato;
//printf("convierte: resultado=%f\n",result);
return result;
}