pic 18f4550 caracteres extraños en hyperterminal

#1
Muchachos buenas noches, necesitaria si me puede ayudar con el siguiente problema:

quiere enviar la señal de un potenciometro por medio de una entrada el 18f4550.

este es el programa cometi el error de compilarlo grabarlo y dejar que tenga un tiempo de adquisicion de 2000 ms o sea 2 seg lo cual es muy alto . cuando quise bajar el tiempo me empezo a dar carateres extraños y no como estaba funcionaba antes .

Este es el codigo:


#include <18f4550.h>
#device adc=10
#FUSES INTHS,MCLR,PUT,BROWNOUT
#use delay(INTERNAL=8MHZ)
#use rs232 (BAUD=9600 , XMIT=PIN_C6 , RCV=PIN_C7)


float volt;

float voltaje (float volt)
{
long int q;
set_adc_channel(0);
delay_us(20);
q=read_adc();
volt=((4.98*q)/1023.0);
return volt;
}

void main()
{
setup_adc_ports(AN0|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
while(true)
{
volt=voltaje(volt);
printf("%1.2fV \r\n",volt);
delay_ms(2000);
}
}

si lo compilo y lo pruebo en el proteus funciona bien peroooooooo este aqui el problema .

El hex que genere al principio funciona de diez tanto en proteus como en el hardware, pero toma muetras cada 2 seg, y el codigo que esta arriba si genero un nuevo hex, en proteus funciona bien pero en la prueba de hyperterminal aparece esto:

con el primer hex:

V
4.98V
4.98V
4.98V
4.97V
4.97V

con sel segundo:
€€€€ø€€€€€€€ø€€€ø€€€€ø€€€€ø€€€€ø€€ø€€ø€€€€€€€ø€€€€€€€ø€€€€€€€ø€€€€€€€ø
€€€ø€€€€ø€€€€€€€ø€€€ø€€€€ø€€€€€€€ø€€€€€€€ø€€ø€€€øø€€€€ø€€€€ø€€€€ø€€€€€€€ø€€€€ø€€
€€ø€€€€€€€ø€€€€ø€€€€ø€€€€€€€ø€€€€€€€ø€€€ø€€€€ø€€€€€€€ø€€€€ø€€€€ø€€€ø€€€€ø€€€ø€€€
€ø€€€€€€€ø€€€€ø€€€€ø€€€€€€€ø€€€€€€€ø€€€€ø€€€€ø€€ø€€€€ø€€€€ø€€€€€€€ø€€€€€€€ø€€€€€
€€ø€€€€€€€ø€€€€€€€ø€€€€ø€€€€ø€€€€€€€ø€€€€€€€ø€€ø€€€€ø€€€€ø€€€€ø€€€€ø€€€€€€€ø€€€€
€€€ø€€€ø€€€€ø€€€€€€€ø€€€€€€€ø€€€€€€€ø€€€€€ø€€€øø€€ø€€€ø€€€€€ø€€€ø€€€€ø€€€€€€€ø€€
€€€€€ø€€€€€€€ø€€€ø€€€€ø€€€€€€€ø€€€€€€€ø€€€€€€€ø€€€€€€€ø€€€ø€€€€ø€€€€€€€ø€€€€€€€ø
€€€€ø€€€€ø€€€€€€€ø€€€ø€€€€ø€€€øø€€€€ø€€€€€

alguien me podria ayudar con esto .

les adjunto : el hex que anda bien y el proteus.


Saludos.
 

Adjuntos

#2
Hola Correotptrabajo,

Estamos poniendo mal creo tu codigo al momento de poner el tiempo de adquisicion ya que primero muestras y de ahi le das 2000ms que creo que es mucho con 500 ms es suficiente, antes del printf iria tu delay, pruebalo asi ahi debe funcionar correctamente.

Saludos(y)
 
#3
alguien me podria ayudar con esto .
El problema que tienes se trata solo de configuración fuses y de los parámetros para el oscilador interno.
Con la configuración que tienes, el oscilador interno debe estar funcionando a 4MHz y no a 8MHz.
Y eso lo hará aunque tengas declarada la frecuencia de trabajo a 8MHz en el código.

Utiliza esta palabra de configuración...
#fuses cpudiv1,pll2
#use delay(internal=8MHz)

Y dentro del main coloca esto...
setup_oscillator(OSC_8MHZ|OSC_STATE_STABLE);

Con eso te debe funcionar sin problemas.

Suerte.
 
#4
El problema que tienes se trata solo de configuración fuses y de los parámetros para el oscilador interno.
Con la configuración que tienes, el oscilador interno debe estar funcionando a 4MHz y no a 8MHz.
Y eso lo hará aunque tengas declarada la frecuencia de trabajo a 8MHz en el código.

Utiliza esta palabra de configuración...
#fuses cpudiv1,pll2
#use delay(internal=8MHz)

Y dentro del main coloca esto...
setup_oscillator(OSC_8MHZ|OSC_STATE_STABLE);

Con eso te debe funcionar sin problemas.

Suerte.
Muchas gracias funciona perfecto estare adjuntando el diseño completo saludos
 
Arriba