Foros de Electrónica
   Foros de Electrónica > Diseño digital > Microcontroladores y sistemas embebidos

Antiguo 01-may-2007   #1
 
Fecha de Ingreso: septiembre-2006
Mensajes: 91
Transmisión RS232 con CCS

Estoy intentando transmitir desde mi PIC16F877A a mi PC por el puerto serial pero no consigo que en el hyperterminal se vea nada. El programa del PIC sigue los siguientes pasos:

#USE DELAY (clock = 20000000)
#USE rs232 (BAUD=4800,XMIT=PIN_C6,RCV=PIN_C7,BITS=8 )

Luego defino RC7 como entrada y RC6 como salida.

y por último

while(true)
{
putc(0x34);
delay_ms(1000);
}


Tengo un led conectado en RC6 y cuando no tengo el puerto serie conectado parpadea pero al conectarlo y poner en el hyperterminal que conecte este deja de parpadear. El puerto funciona correctamente porque el PIC lo programo utilizando el bootloader a través del mismo puerto.
hawk360 está desconectado      Responder Citando
Antiguo 01-may-2007   #2
 
Fecha de Ingreso: septiembre-2006
Mensajes: 91

Bueno creo que el problema esta en que cuando conecta con el PC el PIC parece que se keda a la espera de recibir algun tipo de confirmación para realizar la transmisión porque en el momento que le doy a conectar en el HYPERTERMINAL se queda como bloqueado y cuando pulso desconectar continua intentando enviar los datos. Alguien sabe algo al respecto. Si hay que darle algun tipo de confirmación desde el PC de que ha recivido datos o algo asi?
hawk360 está desconectado      Responder Citando
Antiguo 03-may-2007   #3
 
Fecha de Ingreso: mayo-2006
Ubicación: España
Mensajes: 38

Bueno dos cositas, doy por hecho que has configurado correctamente el hiper terminal no? a 4800 baudios 8n1 etc.

Por otro lado cuando lo conectas atraves del hiperteminal que driver usas (MAX)......... no sé puedes publicar el circuito..................

Porque sin más pistas poco se te puede ayudar.
kepelotas está desconectado      Responder Citando
Antiguo 23-sep-2007   #4
 
Fecha de Ingreso: abril-2007
Ubicación: mexico
Mensajes: 7
veamos!

QUE ondas. bien ok

la hiperterminal que tengas del lado del ordenador debe estal a los mismos baudios que es el numero de transiciones que hacen , es como decir a que velocidad van a hablar y transmitir los dos( no confundir con transmision sincrona).

que version de compilador estas usando ?, yo no defino entradas y salidas en el puerto que voy a usar como comunicacionn, cuando declaro usar #define rs232 con esa linea
es suficiente,

dale una checadita a la ayuda f1 ,
aldoperex está desconectado      Responder Citando
Antiguo 16-oct-2007   #5
 
Fecha de Ingreso: octubre-2007
Ubicación: argentina
Mensajes: 4
Comunicacion

Hola hawk360, por ahi este codigo te puede servir, esta probado andando en proteus setea la velocidad del puerto a 2400, espero te sirva, cualquier cosa avisas paso el codigo :

Código:
#if defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=2400, xmit=PIN_C4, rcv=PIN_C5,INVERT)
#endif
#include <input.c>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
char lee(void);
char dato;
char pregunto;
int ascii;
void main() {
   SET_TRIS_A(0x00);
   SET_TRIS_B(0x00);
   SET_TRIS_D(0x00);
   SET_TRIS_C(0xFF);
   pregunto = 's';
   ascii=0x73;
   do {
#use delay(clock=1000000)
#use rs232(baud=2400, xmit=PIN_C4, rcv=PIN_C5,INVERT)
      while(!kbhit())
           delay_us(42);
          dato = getc();
            delay_us(42);
          putc(dato);
       if(dato == pregunto){
            OUTPUT_HIGH(PIN_A0);
         }else{
            OUTPUT_HIGH(PIN_A2);
         }
   delay_ms(1000);
   OUTPUT_LOW(PIN_A0);
   OUTPUT_LOW(PIN_A2);
   } while (TRUE);

}
char lee(){
   long timeout;
   short timeout_error;
   timeout_error=FALSE;
   timeout=0;
     while(!kbhit()&&(++timeout<50000))
       delay_us(42);
      if(kbhit()){
         return(getc());
         }
      else {
         timeout_error=TRUE;
         return(0);
      }
}
tony_lp está desconectado      Responder Citando
Antiguo 02-sep-2008   #6
 
Fecha de Ingreso: abril-2007
Mensajes: 28
Duda de como enviar datos

Hola:

A mi me gustaría poder enviar valores flotantes (leídos de un ADC), pero putc(), solo recibe carácters individuales, y puts(); cadenas de caracteres, pero como le haría para enviar datos de coma flotante por esta interfaz, espero alguien me pueda ayudar.

Saludos
Antonio_Maza está desconectado      Responder Citando
Antiguo 02-sep-2008   #7
 
Fecha de Ingreso: agosto-2006
Ubicación: Colombia
Mensajes: 68

hola antonio,

lo que tendrias que hacer es como una especia de ftoa(), no me acuerdo si esa funcion esta incluida en ccs, pero si no, pues diseñala! no es tan dificil! si logras convertir el numero de coma flotante en cadena, pues, la tendras hecha, cuidate, y me comentas cualquier cosa...

pd: aqui hay un ejemplo pero en c++, mira a ver si te sirve como guia, cuidate
leo_programer está desconectado      Responder Citando
Antiguo 02-sep-2008   #8
 
Fecha de Ingreso: junio-2006
Ubicación: Alicante
Mensajes: 1.590

lo que tiene que hacer es postear como tiene configurado el hyperterminal y si desconecta el bootloader (queda el puerto libre)
no es muy lógico cargar el boot loades a cuatro mil y pico baudios
Revisa las configuraciones.
El nombre está desconectado      Responder Citando
Antiguo 08-ene-2009   #9
 
Fecha de Ingreso: noviembre-2008
Ubicación: Merida, Venezuela
Mensajes: 5

si aun no ves nada en el hiperterminal, revisa si el echo esta activo en las propiedades de tu conexion del puerto serial.
jorgealexvilla está desconectado      Responder Citando
Antiguo 09-oct-2009   #10
 
Fecha de Ingreso: julio-2007
Ubicación: chile
Mensajes: 7
Respuesta: Transmisión RS232 con CCS

me imagino que no tienes conectado directo con tu pc el pic....
ya que necesitas por ejemplo un MAX232 antes de que las señales lleguen a tu pic,
esto es por un problema con la rs232 del pc, porque el pic solo lee datos en 0 vols y en 5 volt, y el computador trabaja con voltajes distintos.
para eso se usa el MAX232.

saludos
JanO_o está desconectado      Responder Citando
Antiguo Hace 4 Semanas   #11
 
Fecha de Ingreso: abril-2009
Ubicación: colombia
Mensajes: 3
Respuesta: Transmisión RS232 con CCS

hola a todos:
tengo un problema que no he podido solucionar aun, el proyecto que estoy realizando es bastante simple tengo dos microcontroladores, uno hace de control remoto adquiriendo los datos por medio de pulsadores y el otro activa motore la informacion es enviada via rs-232, en el segundo micro tengo 3 motores cuando activo los dos primeros giran corecctamente en ambos sentido cuando tengo presionado el pulsador en el primer micro y cuando suelto el pulsador se detienen es de esta manera como deben funcionar, pero con el tercer motor cuando presiono el pulsador se activa correctamente y cuando lo suelto queda activo, pongo mis codigos a ver si pudiesen prestarme alguna ayuda.


control remoto

#include <16f877a.h>
#fuses xt,nowdt,noput
#use delay(clock=4000000)
#use rs232 (baud=9600, xmit=pin_c6, rcv=pin_c7)
char d='x';
void main(){
while(true){
if(input(pin_b0)){
d='1';
fputc(d);
}
if(input(pin_b1)){
d='2';
fputc(d);
}
if(input(pin_b2)){
d='3';
fputc(d);
}
if(input(pin_b3)){
d='4';
fputc(d);
}
if(input(pin_b4)){
d='5';
fputc(d);
}
if(input(pin_b5)){
d='6';
fputc(d);
}
if(input(pin_b0)==0 && input(pin_b1)==0 && input(pin_b2)==0 && input(pin_b3)==0 && input(pin_b4)==0 && input(pin_b5)==0){
d='0';
fputc(d);
}
}
}



contol de motores

#include <16f877a.h>
#fuses xt,nowdt,noput
#use delay(clock=4000000)
#use rs232 (baud=9600, xmit=pin_c6, rcv=pin_c7)
char d='x';
#int_rda
void inter_serie(){
d='x';
if(kbhit()){
d=getc();
}
}
void main(){
enable_interrupts(global);
enable_interrupts(int_rda);
while(true){
if(d=='1'){
output_high(pin_d0);
output_high(pin_d2);
output_low(pin_d1);
output_low(pin_d3);
}
else if (d=='2'){
output_high(pin_d1);
output_high(pin_d3);
output_low(pin_d0);
output_low(pin_d2);
}
else if (d=='3'){
output_high(pin_d2);
output_high(pin_d1);
output_low(pin_d3);
output_low(pin_d0);
}
else if (d=='4'){
output_high(pin_d0);
output_high(pin_d3);
output_low(pin_d1);
output_low(pin_d2);
}
else if (d=='5'){
output_high(pin_d4);
output_low(pin_d5);
}
else if (d=='6'){
output_high(pin_d5);
output_low(pin_d4);
}
else if(d=='0'){
output_low(pin_d0);
output_low(pin_d1);
output_low(pin_d2);
output_low(pin_d3);
}
}
}
KARITOU está desconectado      Responder Citando
Respuesta

Herramientas



Retroceder   Foros de Electrónica > Diseño digital > Microcontroladores y sistemas embebidos


La franja horaria es GMT -5. Ahora son las 20:56.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.0 ©2009, Crawlability, Inc.