TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kikecon en 27 de Junio de 2010, 03:28:06
-
hola amigos como estan nuevamnete x aca para comentarles que ya empec con el uso del ccs (pic c compiller), bien pero como siempre se me presenta una duda he hecho mi programcion para adquirir una señal analogica y enviarlo por el puerto serie y que sera almacenado en una hoja texto en visual basic bueno el problema es el siguiente aparentemente la programacion esta bien incluso lo simule en proteus y se obtienen los valores que se desean, leien un texto que se podia interactuar desde proteus con los puertos serie fisicos lo intente pero no salia nada en el hyperterminal y ya no salia nada en el la pantalla del proteus (no recuedo su nombre solo recuerdo que es virtual .. no se que mas :P ) y hermos grabado el pic y tmpc sale nada que puede estar mal en el ckto he usado un max 232 ojala me puedan ayudar gracias amigos.
Pd: dejo la logica del pic
#include <16f873a.h>
#device adc=10
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
void main()
{
float a;
float b;
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
for(;;)
{
set_adc_channel(0);
delay_us(10);
a= read_adc();
b = 5.0*q / 1024.0;
printf("Tensión = %01.2fV\r", b); //r es usado para el cambio de linea
delay_ms(100);
}
}
PD: en el texto que encontre la programacion era casi igual solo que en un 16f877 y ademas en la variable a la toma como entero y le pone el numero 16 (int16) mmm que me dicen ud de eso? gracias muchachos
-
Revisa bien la conexión del MAX232 y el PIC porque el código funciona bien, a excepcion de la linea:
b = 5.0*q / 1024.0;
que deberias reemplazarla por:
b = 5.0*a / 1024.0;
pero me imagino que será un error de tipeo ya que sino no te hubiese compilado.
saludos.
-
Hola kikecon, teniendo en cuenta la advertencia que te hace MarkKnopfler81, el circuito trabaja perfectamente con el MAX232 y el PIC. Hice la prueba usando es siguiente código:
#include <16f873a.h>
#device adc=10
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
void main()
{
float a;
float b;
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
while(true)
{
set_adc_channel(0);
delay_us(10);
a= read_adc();
b = 5.0*a / 1024.0;
printf("Tensión = %01.2fV\r", b); //r es usado para el cambio de linea
delay_ms(500);
}
}
Podrias subir el circuito del PIC y MAX232?. Tal vez tengas un error de conexión...
Un saludo.
-
El error mas comun con RX y TX es que el TX del PIC es el RX del PC y viceversa.
El MAX232 deberías conectarlo al PIC de la siguiente manera
| PIC | MAX232 | DB9 |
| RC6 / TX | 11 / T1IN | - |
| RC7 / RX | 12 / R1OUT | - |
| - | 13 / R1IN | 3 |
| - | 14 / T1OUT | 2 |
| VSS / GND | 15 | 5 |
Revisa que este todo igual en tu circuito
saludos.