Hola amigos.
Yo no soy muy nuevo en esto de la electrónica pero tengo poca experiencia en esto de los microcontroladores PIC, ojala y me puedan ayudar.
Este proyecto lo estoy desarrollando con el PIC18f4550, estoy utilizando dos canales analógicos para testear dos señales analógicas /AN0, AN1), estas dos señales analógicas corresponden a voltaje y corriente, hago mis operaciones para sacar la corriente no activa, la cual esta almacenada en la variable "salida".
Mi gran preguntota es: Si tengo mi ADC de 10 bits, tengo una buena resolución pero a la salida solo tengo 8 pines de salida por el puerto b ¿Como puedo tener una salida de 10 bits utilizando 2 puertos por ejemplo el port_b y port_d? Estoy utilizando el PIC C Compeler
Aquí les dejo mi programa para que le echen un ojo.
.
Quiero la salida por el puerto b y d para después meterlo a un DAC de 10bits y poder ver la forma de onda resultante.
Agradezco su atención para leer este mensaje gracias




Yo no soy muy nuevo en esto de la electrónica pero tengo poca experiencia en esto de los microcontroladores PIC, ojala y me puedan ayudar.
Este proyecto lo estoy desarrollando con el PIC18f4550, estoy utilizando dos canales analógicos para testear dos señales analógicas /AN0, AN1), estas dos señales analógicas corresponden a voltaje y corriente, hago mis operaciones para sacar la corriente no activa, la cual esta almacenada en la variable "salida".
Mi gran preguntota es: Si tengo mi ADC de 10 bits, tengo una buena resolución pero a la salida solo tengo 8 pines de salida por el puerto b ¿Como puedo tener una salida de 10 bits utilizando 2 puertos por ejemplo el port_b y port_d? Estoy utilizando el PIC C Compeler
Aquí les dejo mi programa para que le echen un ojo.
.
Código:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "18f4550.h" //Libreria del microcontrolador
#fuses HSPLL,NOWDT,NOBROWNOUT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,MCLR,NOPBADEN,WRTB
#device adc = 10 //# de bits del adc 2^10=1024
#use delay(clock=20000000) //Frecuencia de oscilacion
#build (reset=0x800, interrupt=0x808)
#org 0x000, 0x7ff {}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main ()
{
int16 v, i;
float vpico, ipico, vpr, ipr, div, prod, ina, potdos, volt, corr, salida; //variables de ecuaciones
set_tris_b(0x00); //configuramos el puerto b como salidas
setup_adc_ports(AN0_TO_AN1); //configuramos el adc del pic con dos canales analogicos AN0 y AN1
setup_adc(ADC_clock_internal); //reloj interno
for (;;) //bucle infinito
{
set_adc_channel(0); //lectura de la linea de voltaje NA0
delay_us(10); //tiempo necesario para la conversion
v = read_adc(); //leemos AN0 y guardamos en v
volt = 5*v/1024; //conversion a voltaje
potdos = volt * volt; //elevamos al cuadrado
vpico = potdos / 0.707; //voltaje pico de entrada
vpr = vpico * 0.636; //Voltaje promedio
set_adc_channel(1); //lectura de la corriente NA1
delay_us(10); //tiempo necesario para la conversion
i = read_adc(); //leemos AN1 y guardamos en i
corr = 5*i/1024; //Conversion a corriente
ipico = i / 0.707; //corriente pico
ipr = ipico * 0.636; //corriente promedio
//EMPIEZA LAS FORMULAS PARA LA CORRIENTE NO-ACTIVA
div = ipr / vpr; //DIVICION DE LA CORRIENTE RESPECTO A LA TENSION
prod = div * volt; //OBTENCION DE LA CORRIENTE ACTIVA
ina = corr - prod; //OBTENCION DE LA CORRIENTE NO-ACTIVA
salida = ina; //adaptamos a 8 bits del puerto_b 1024/8bits=128
output_b(salida); //sacamos los bits por el portB
}
}
Agradezco su atención para leer este mensaje gracias