TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: totpic en 29 de Septiembre de 2006, 16:11:18
-
Hola a todos, una vez mas por aqui, estoy haciendo un pequeño trasponder para una tonteria con el coche pero necesito que la pata de transmision este a nivel bajo "0V" mientras no transmito nada. Querria descartar la opcion de invertir la tension por hardware extreno al pic o invertir la señal con el use rs232 y la directiva invert.
El programa es un bucle ciclico que envia PEPE 5 veces y descansa (el descanso lo he puesto antes porque pensaba que iva a funcionar al reves mejor), en ese descanso es cuando necesito la pata de TX a 0V.
En lugar de un while reinicia porque es mejor para sincronizxacion de tramas.
Gracias a todos y os pego el codigo.
#include <16f628A.h>
#fuses HS,NOWDT,NOPROTECT,PUT
#use delay (clock=4000000)
#use rs232(baud=240, xmit=PIN_B2, rcv=PIN_B1)
#define led1 PIN_A1
#define led2 PIN_A0
#define bot1 PIN_A3
#define bot2 PIN_A2
#define TX PIN_B2
#define RX PIN_B1
///PROGRAMA
void main(void){
int i=0;
disable_interrupts(GLOBAL);
output_bit(led1,0);
output_bit(TX,0);
delay_ms(1000);
output_bit(led1,1);
while(i<5){
printf("PEPE");
i++;
delay_ms(2);
}
reset_cpu();
}
-
Hola a todos, una vez mas por aqui, estoy haciendo un pequeño trasponder para una tonteria con el coche pero necesito que la pata de transmision este a nivel bajo "0V" mientras no transmito nada.
El programa es un bucle ciclico que envia PEPE 5 veces y descansa (el descanso lo he puesto antes porque pensaba que iva a funcionar al reves mejor), en ese descanso es cuando necesito la pata de TX a 0V.
En lugar de un while reinicia porque es mejor para sincronizxacion de tramas.
Gracias a todos y os pego el codigo.
#include <16f628A.h>
#fuses HS,NOWDT,NOPROTECT,PUT
#use delay (clock=4000000)
#use rs232(baud=240, xmit=PIN_B2, rcv=PIN_B1)
#define led1 PIN_A1
#define led2 PIN_A0
#define bot1 PIN_A3
#define bot2 PIN_A2
#define TX PIN_B2
#define RX PIN_B1
///PROGRAMA
void main(void){
int i=0;
disable_interrupts(GLOBAL);
output_bit(led1,0);
output_bit(TX,0);
delay_ms(1000);
output_bit(led1,1);
while(i<5){
printf("PEPE");
i++;
delay_ms(2);
}
reset_cpu();
}
Si usas la usart por hardware, la única forma de que se te ponga el pin en 0 durante un tiempo mayor a lo que tarda en transmitire un byte, es la de configurarlo como pin genérico (apagar la usart) y dejarlo en bajo.
Sino, como usa el protocolo NRZ (no retorno a cero) el estado de reposo es un 1, osea 5V o Vdd depende del caso.
Saludos
-
Simplemente forzando a usart por hardware me ha funcionado, gracias por todo, la verda es que no se me ocurrio.
-
Simplemente forzando a usart por hardware me ha funcionado, gracias por todo, la verda es que no se me ocurrio.
¿Cómo? Que sería "forzar usart por hardware" ?