|
Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.
Transmisión RS232 con CCS
 | #1 Transmisión RS232 con CCS |  |
|
hawk360
|
| Registrado: 09 Sep 2006 |
| Mensajes: 91 |
|
 |
| Publicado: 01 May 2007, 4:30 am |
|
|
 |
 |
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
|
| Registrado: 09 Sep 2006 |
| Mensajes: 91 |
|
 |
| Publicado: 01 May 2007, 10:55 am |
|
|
 |
 |
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?
|
|
|
|
kepelotas
| Ubicación: España |
| Registrado: 02 May 2006 |
| Mensajes: 38 |
|
 |
| Publicado: 03 May 2007, 5:40 am |
|
|
 |
 |
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.
|
|
|
 | #4 veamos! |  |
|
aldoperex
| Ubicación: mexico |
| Registrado: 05 Abr 2007 |
| Mensajes: 7 |
|
 |
| Publicado: 23 Sep 2007, 7:58 pm |
|
|
 |
 |
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 ,
|
|
|
 | #5 Comunicacion |  |
|
tony_lp
| Ubicación: argentina |
| Registrado: 14 Oct 2007 |
| Mensajes: 4 |
|
 |
| Publicado: 16 Oct 2007, 12:27 pm |
|
|
 |
 |
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: Seleccionar todo
#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);
}
}
|
|
|
 | #6 Duda de como enviar datos |  |
|
Antonio_Maza
|
| Registrado: 27 Abr 2007 |
| Mensajes: 22 |
|
 |
| Publicado: 02 Sep 2008, 10:17 am |
|
|
 |
 |
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
|
|
|
|
leo_programer
| Ubicación: Colombia |
| Registrado: 01 Ago 2006 |
| Mensajes: 61 |
|
 |
| Publicado: 02 Sep 2008, 1:48 pm |
|
|
 |
 |
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
|
|
|
|
El nombre
| Ubicación: Alicante |
| Registrado: 28 Jun 2006 |
| Mensajes: 1445 |
|
 |
| Publicado: 02 Sep 2008, 2:19 pm |
|
|
 |
 |
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.
|
|
|
|
jorgealexvilla
| Ubicación: Merida, Venezuela |
| Registrado: 27 Nov 2008 |
| Mensajes: 2 |
|
 |
| Publicado: 08 Ene 2009, 2:48 pm |
|
|
 |
 |
si aun no ves nada en el hiperterminal, revisa si el echo esta activo en las propiedades de tu conexion del puerto serial.
|
|
|
 | Foros de Electronica |  |
|
 |