Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

19/08/2015 #1


Ruido en el canal TTL
Bueno, ante todo un saludo. Mi duda es si hay alguna forma de eliminar el ruido producido en un TTL.

Tengo el GPS MT3339 y el detalle es que traté de conectarlo al RX del PIC18F2550 pero en un principio no pasaba nada, luego me di cuenta de que el GPS trabajaba como máximo con 2.8, por lo que tuve que tratar de amplificar el voltaje, para lo cual utilicé el 74HC08N y bueno, me funcionó pero a medias.

Esto es lo que en sí, debería obtener:
Código:
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32
$GPGGA,000103.799,,,,,0,0,,,M,,M,,*4D
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,000103.799,V,,,,,0.00,0.00,060180,,,N*47
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32

$GPGGA,000104.799,,,,,0,0,,,M,,M,,*4A
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,000104.799,V,,,,,0.00,0.00,060180,,,N*40
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32
Ahora cuando lo proceso con el PIC, usando el 74HC08N:

Código:
contenido de buffer: $GPGGA,000107.799,,,,,0,0,,,M,,M,,*49
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,1,1,00*79
$GPRMC,000107.799,V,,,,,0.00,0.00,060180,,,N*43
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32
~X@VI–iF3Ԁ¡â

contenido de buffer: $GPGGA,000107.799,,,,,0,0,,,M,,M,,*49
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,1,1,00*79
$GPRMC,000107.799,V,,,,,0.00,0.00,060180,,,N*43
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32
~X@VI–iF3Ԁ¡â
El código está hecho en C de CCS
Código PHP:
#include <18f2550.h>

#fuses hs,cpudiv1,nomclr
#use delay(clock=20000000)

#use rs232(baud=9600, parity=N, bits=8, xmit=PIN_C6, rcv=PIN_C7, stream=conexiongps)
#use rs232(baud=9600, parity=N, bits=8, xmit=PIN_A0, rcv=PIN_A1, stream=debug_gps)


char buffergps[400]="esto es una prueba                                                           \0";
int posicionbuffergps=0;

#int_rda
void rd_isr(void)//función de interrupción por recepción de datos USART
{     
   
buffergps[posicionbuffergps] = fgetc(conexiongps);
   
posicionbuffergps++;
}

void main()
{

   
setup_adc_ports(NO_ANALOGS);
   
setup_adc(ADC_CLOCK_DIV_2);
   
//setup_psp(PSP_DISABLED);
   
setup_spi(SPI_SS_DISABLED);
   
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   
setup_timer_1(T1_DISABLED);
   
setup_timer_2(T2_DISABLED,0,1);
   
setup_comparator(NC_NC_NC_NC);
   
setup_vref(FALSE);
   
   

   
enable_interrupts(int_rda);
   
enable_interrupts(GLOBAL);
   
output_high(PIN_B7);
   
fprintf(debug_gps,"contenido de buffer:");
  
   
// TODO: USER CODE!!
   
while(1)
   {  
      if(
posicionbuffergps>0)
      {
         
buffergps[posicionbuffergps]='\0';
         
fprintf(debug_gps,"contenido de buffer: %s\r\n",bufferGPS);             
         
posicionbuffergps=0;
      }
   }


20/08/2015 #2
Moderador

Avatar de D@rkbytes

Prueba realizando lo siguiente:

Cambia la palabra de configuración por ésta:
#fuses NOFCMEN,NOVREGEN,NOMCLR
#use delay(crystal = 20MHz)

Elimina las configuraciones de los módulos que no se vayan a usar.
O sea, todo ésto:
Código:
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   //setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
Para las conexiones del GPS es conveniente que uses el módulo USART y el debug sí lo hagas por software.
Entonces, configuras de esta manera:
Código:
#use rs232(UART1, stream = conexiongps)
#use rs232(xmit = PIN_A0, rcv = PIN_A1, stream = debug_gps)
De esta manera se asume que se usará el módulo EUSART a 9600 Bps (Por defecto) para el GPS
y que se usará RS-232 (También a 9600 Bps) por software para el debug del GPS.

También te recomiendo que en lugar de usar el 74HC08, uses un adaptador de niveles.
Mira este post: Conexion de varios dispositivos I2C que trabajan con diferente Vdd
Ese adaptador fue pensado para usarse con dispositivos I2C, pero funciona para adaptar cualquier tipo de señal digital y a otros niveles de tensión.
20/08/2015 #3


Gracias por tu respuesta lo probare y posteare los resultados
22/08/2015 #4

Avatar de cosmefulanito04

Usá una compuerta con entrada de 3,3v (o menos) y que tenga salida colector abierto, eso te va a permitir hacer el cambio de nivel sin problemas.

Otra alternativa, si no tenés muchos de esos puertos que requieren un cambio de nivel, usá un simple transistor como llave usando una fuente acorde al nivel de salida que se necesita.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

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

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.