Autor Tema: hola a todos , tengo un problema para enviar datos al puerto serie alguien me puede ayudar  (Leído 2343 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado prossis

  • PIC10
  • *
  • Mensajes: 13
hola a todos estoy tratando de enviar algun dato al puerto serie y la funcion del programa es leer un dato del conversor ad y enviarlo al lcd y al puerto serie ,pero al lcd me llega bien pero al puerto serie me sale cualquier simbolo menos lo que yo espero, el programa es el siguiente

#include <16F877.h>
#device adc=10
#include <MATH.h>
#use delay(clock=4000000)
#fuses XT,NOWDT
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)

#include <LCD.C>

void main() {

float value, dato;
lcd_init();

printf(lcd_putc,"Iniciando...
por favor espere";

delay_ms(5000);                                                    
printf(lcd_putc,"f";
   do{
setup_adc_ports( ALL_ANALOG );
setup_adc(ADC_CLOCK_INTERNAL );

delay_ms(500);
set_adc_channel(0);
value=read_adc();

dato=(value*5)/1023;
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
printf("%1.2f",value);
delay_ms(100);
printf(lcd_putc,"value %f
%f",dato,value);

  }while(true);                                                              
  }


Desconectado jca

  • PIC12
  • **
  • Mensajes: 75
Hola prossis yo he hecho un proyecto con el puerto serie y a lo primero hice un programa en C para mandar los datos al puerto serie pero no funcionaba y en tehoría el programa estaba bien.
Influlle mucho el sistema operativo que tengas en tu ordenador yo tengo el Xp y los programillas de C que intentan controlar algo del hardware no funcionan a si que opté por bajarme un programilla que envía datos al Pc y gracias a este programa pude acabar el proyecto pq ya no sabía que hacer y esque al principio pensaba que el problema estaba en el programa del pic pero en fin te pongo el enlace por si te le quieres bajar.

http://www.sofotex.com/ Advanced-Serial-Port-Monitor-download_L9735.html

Un saludo.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2567
Pués funciona perfectamente, debes de tener mal ajustados en el hiperterminal los datos de la transmisión (velocidad, bits de datos ... etc).

Eso sí mejora la presentación en pantalla, tanto en LCD como en hiperterminal.

Ginho el que va poniendo por ahí 1024 en lugar de 1023 en la resolución del conversor soy yo, como esté equivocado me va a oir el tio Angulo y familia.

Un saludo

NOTA: el tio Angulo y familia son los autores de 4 de los libros que tienes aquí abajo.


Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
Tengo la experiencia de haber hecho muchos programas para comunicarme al PC con el harware del 17F877 utilizando la USART como tu lo estas haciendo, claro que en ensamblador. ¡Jamas lo logre!.

El PC luego me di cuenta utiliza otro estandar que acepta niveles TTL por el puerto COM. Si te fijas el datasheet del 16F8777 utiliza el estandar NRZ con bit de inicio a nivel bajo y bit de parada a nivel alto. El nivel pasivo queda a nivel alto.
El puerto COM del PC no funciona asi, le puse el osciloscopio a una señal que llegaba bien y reconocia el PC y mi sorpresa fue que el nivel pasivo es bajo y aceptaba niveles de 5 V (Alguien me puede esplicar esto????)

Si utilizas la simulacion por software de la comunicación 232 se acabaran tus problemas, yo lo comprobe.

Salud2
kruskal@hotmail.com

Desconectado Ginho_rj

  • PIC12
  • **
  • Mensajes: 87
modifiquei um pouco o seu codigo,poucas coisas,acho que ira funcionar ,mas configure o hyperterminal para funcionar a 9600,
deuma olhada nas mudanças:

#include <16F877.h>
#device adc=10
#include <MATH.h>
#use delay(clock=4000000)
#fuses XT,NOWDT
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)

#include <LCD.C>

void main() {

float value, dato;
lcd_init();

printf(lcd_putc,"Iniciando...
por favor espere");

delay_ms(5000);
printf(lcd_putc,"f");


//coloque estas configurações fora do loop pois pode tomar tempo do pic
setup_adc_ports( ALL_ANALOG );
setup_adc(ADC_CLOCK_INTERNAL );
set_adc_channel(0);




do{

delay_ms(500);
 
value=read_adc();

dato=(value*5)/1023;
printf("%1.2f
", dato);
 
delay_ms(100);
printf(lcd_putc," value %f
%f",dato,value);

}while(true);
}


quanto ao 1023 e ao 1024 ,abrirei um post sobre isso!

qualquer duvida post!!!


 

anything