Autor Tema: Pasar DEL 16F84 AL 16F628, Ayuda  (Leído 5547 veces)

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

Desconectado paquito145

  • PIC10
  • *
  • Mensajes: 9
Pasar DEL 16F84 AL 16F628, Ayuda
« en: 24 de Mayo de 2007, 07:48:05 »
HOLA

TENGO HECHO UN PROYECTO DE MOSTRAR LA HORA EN UNO DISPLAY DE LED LA HORA QUE CAPTURO DE TRAMAS DE UN GPS,  Y LO TENGO MONTADO CON UN 16F84, QUIERO AMPLIAR ALGO MAS Y ESTE PIC SE ME QUEDA PEQUEÑO, ME GUSTARIA EMPLEAR UN 16F628 , PERO NO ME FUNCIONA LA RECEPCION DE DATOS , YA QUE LO HAGO A 4800 BAUDIOS, SI ALGUIEN ME PODIA AYUDAR, . EL PROGRAMA ESTA EN C, Y LO COMPILO TAMBIEN EN C PARA EL 16F628 Y NO FUNCIOANA, ES ALGUN PROBLEMA DE RECEPCION DE DATOS  O MALA CONFIGUACION DEL PIC DEL RS232.

Si me podias pasar una configuracion para un 16f628 en asm o en C, para que cuando reciba una trama del gps a 4800 sin max232, puesto directo sobre la patilla 7 que es la RX, por ejemplo

$GPRMC,170934.139,V,0000.0000,N,00000.0000,E,,,151106,,,N*77
                               |
                               | esta es Status, V=Navigation receiver warning A=Valid

el caracter V, que cuando esta activo el gps pasa a ser A, de tal manera que cuando este activo se encienda un led , salida de una de las patillas del pic y cuando este V (void)  se apaque este led.

Muchas gracias

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Pasar DEL 16F84 AL 16F628, Ayuda
« Respuesta #1 en: 24 de Mayo de 2007, 09:47:40 »
Si el programa funciona para el 84 debería funcionar sin problemas para el 628, deberías mostrar tu codigo para poder ver que esta pasando.

Sin ver el código creo te falta configurar algún periférico adicional del 628 que te esta molestando para la comunicación.

saludos,
Pereira - Colombia

Desconectado paquito145

  • PIC10
  • *
  • Mensajes: 9
Re: Pasar DEL 16F84 AL 16F628, Ayuda
« Respuesta #2 en: 24 de Mayo de 2007, 13:55:26 »
Hola dhmejia

el codigo en C, para un 16f84A  es este, lo que hace es lo que dije anteriormente, cuando se
detecta señal de gps la V pasa a ser A y por la patilla PORT A1 el pin 18 , sale un nivel alto y se enciende el led., este circuito en un 16f84 funciona , lo compilo para un 16f628 y no va, haber si me podeis hechar una mano, saludos.

// TRAMA GPS
 //
 // $GPRMC,112719.553,V,xx39.8932,N,xxxx4.2664,W,0.08,316.46,271106,,*1D
 //                                ^--- Si es A, es valido la recepcion.         
 //
 
 asm {
   TITLE "PIC GPS"
   ; Config settings
   ;LIST P=16F84A
   __CONFIG _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON
   }

#pragma CLOCK_FREQ 4000000 
#pragma RS232_RXPORT PORTB
#pragma RS232_RXPIN 1
#pragma RS232_BAUD 4800
#pragma TRUE_RS232 1

void verifica_rmc(void);
void busca_coma(void);

// Programa principal
void main(void) {
   // Inicio de configuracion de los puertos
   set_bit(STATUS, RP0);
   set_tris_b(00000010b);     // Port B, RB1 es RX del GPS pin 7
   set_tris_a(00000000b);     // Port A, RA1 es un led  pin 18
   clear_bit(STATUS, RP0);

   // Declaracion de variables
   char valido;

   // Bucle infinito WHILE(1)
   while(1) {
      //////////////////////
      // CAPTURA DE DATOS //
      //////////////////////
      verifica_rmc();
      busca_coma();
      valido = getchar();
      if(valido='A') {
         output_high_port_a(1); // Encindo led en Port A1
         } else {
         output_low_port_a(1); // Apago led en Port A1
    }
     
      } // Fin del while(1)
   } // Fin del main()
   
// Verifica si la trama empieza por $GPRMC
void verifica_rmc(void) {
   char ok = 0;
   char rx = 0;
   
   while(ok!=1) {
      rx = getchar();
      if(rx=='R') {
         rx = getchar();
         if(rx=='M') {
            rx = getchar();
            if(rx=='C') {
               rx = getchar();
               if(rx==',') {
                  ok = 1;
                  } // Fin del if(rx==',')
               } // Fin del if(rx=='C')
            } // Fin del if(rx=='M')
         } // Fin del if(rx=='R')
      } // Fin del while(ok!=1)
   }
   
// Busca la siguente coma en el buffer de recepcion.
void busca_coma(void) {
   char ok = 0;
   char rx = 0;
   
   while(ok!=1) {
      if(getchar()==',') {
         ok = 1;
         } // Fin del if(getchar()==',')
      } // Fin del while(ok!=!1)
   }
   

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Pasar DEL 16F84 AL 16F628, Ayuda
« Respuesta #3 en: 24 de Mayo de 2007, 18:12:45 »
A groso modo no parece que haya errores, sólo que yo intentaría hacer la verificación de los datos que recibes primeramente en la rutina de interrupción producida por la comunicación RS232 y lo segundo en vez de usar un getchar pues usar un gets, que lo que hace es recoger la cadena entera en un string o lo que es lo mismo en un array de char. Yo empezaría por hacer una busna estructura del programa y luego una cosa que no veo clara es que si quieres verificar lo que te llega del GPS en la primera trama:

// Verifica si la trama empieza por $GPRMC

¿¿¿Porqué sólo verificas RMC y no $GPRMC???

Y otra pregunta importante sería que nos dijeses que módulo GPS estas utilizando para saber sus especificaciones y características para verificar las entradas de la UART, velocidad, protocolo etc...

Un saludete y suerte.

Desconectado paquito145

  • PIC10
  • *
  • Mensajes: 9
Re: Pasar DEL 16F84 AL 16F628, Ayuda
« Respuesta #4 en: 25 de Mayo de 2007, 07:45:50 »
Hola

Vamos haber , yo creo que es un tema de configuracion, lo que preguntan sobre la velocidad, ya se expone es a 4800 8N1 , da igual el gps que sea , la trma que envia es standar y tiene un protocolo NMEA, hay gpes que funcionan a 9600, etc,
la pregunta es que si lo compilo para un 16f628 no me funciona, hay algo en la configuracion que no estoy haciendo bien.

lo que pregunta que por que solo cojo RMC en vez de $G
¿¿¿Porqué sólo verificas RMC y no $GPRMC???
 es porque todas empiezan por $G y las descarto.

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: Pasar DEL 16F84 AL 16F628, Ayuda
« Respuesta #5 en: 25 de Mayo de 2007, 09:30:47 »
No se que compilador estas usando, pero no se me parece mucho ni a CCS ni ha Hi-tech que son los que he manejado, aparentemente el compilador que usas permite crear un puerto serial por software en cualquier pin de microcontrolador, por lo tanto no debería dar ningún problema.

Para utilizar el 628 con programas escritos para un 84 siempre coloco estas líneas de código y me ha funcionado sin problemas, básicamente se deshabilitan los periféricos adicionales:

Código: ASM
  1. bsf     STATUS, RP0
  2.  
  3.         bcf     VRCON,VREN      ; Deshabilita voltaje de referencia
  4.         bcf     VRCON,VROE      ; Desconecta Vref de RA2
  5.  
  6.         bcf     STATUS,RP0
  7.  
  8.         bsf     CMCON,CM2               ;
  9.         bsf     CMCON,CM1               ; Deshabilita comparadores
  10.         bsf     CMCON,CM0               ;
  11.  
  12.         bcf     CCP1CON,CCP1M3  ;
  13.         bcf     CCP1CON,CCP1M2  ; Deshabilita CCP
  14.         bcf     CCP1CON,CCP1M1  ; (Capture/Compare/PWM)
  15.         bcf     CCP1CON,CCP1M0  ;
  16.  
  17.         bcf     T1CON,TMR1ON    ; Deshabilita Timer1
  18.  
  19.         bcf     T2CON,TMR2ON    ; Deshabilita Timer2

Si al agregar lo anterior no funciona yo intentaría primero cambiar el pin de entrada de RX para que no corresponda al pin del módulo USART que tiene el micro, de esta forma estamos obligando al compilador a que cree el puerto serial por software, puede ser cualquier pin que no sea RB1 ni RB2.

Si lo anterior tampoco funciona entonces lo mejor es aprovechar el módulo USART del micro, adjunto la librería para Hi-Tech, lo que tienes que cambiar es la forma en que se asignan los datos a los registros y la forman en que se verifica el estado de un bit.

Cualquier cosa no dudes en preguntar.

saludos,
Pereira - Colombia

Desconectado paquito145

  • PIC10
  • *
  • Mensajes: 9
Re: Pasar DEL 16F84 AL 16F628, Ayuda
« Respuesta #6 en: 26 de Mayo de 2007, 11:35:12 »
Hola de nuevo

He estado todo el dia con esto , grabando y desgrabando, consegui que me salga algo en los display, pero solo de prueba sin usar la recepcion de datos.
El emsamblador que utilizo es el C2C++ C++ compiler version 1.1

El problema que tengo es que no consigo recibir con este pic por rs232, algo me falta de configurar, alguna rutina, y no se como se  hace.

pongo en asm , esta de c pasado a asm con retoques, ya que en asm me pierdo y en c algo. el ejemplo de el programa que solo marca en el display 88 88 88 88 y al cabo de 2 segundos 87 65 43 21 , ya que tengo 8 led de segmento.
Empleo el integrado de Maxim ICm7218 CIPI


Desconectado jodorowsky

  • PIC12
  • **
  • Mensajes: 52
Re: Pasar DEL 16F84 AL 16F628, Ayuda
« Respuesta #7 en: 26 de Mayo de 2007, 11:59:15 »
Hola paquito145


La verdad debe ser un problema de configuración del C2C, pues al leer el código no parece haber errores. Solo he manejado el Pic c de ccs, no te interesaría pasarte al PIC C de CCS??Probá creando un nuevo proyecto en ese pic c y luego vas escribieno el código poco a poco y vas compilando, no avisaste que tipo de error te sale.

Desconectado paquito145

  • PIC10
  • *
  • Mensajes: 9
Re: Pasar DEL 16F84 AL 16F628, Ayuda
« Respuesta #8 en: 27 de Mayo de 2007, 07:58:47 »
Hola

Al compilar no me da ningun tipo de error, pero el tema es la comunicacion, no tengo creada alguna subrutina de comunicaciones, creo que lo que necesito es alguna subrutina de comunicaciones que al leer los datos me lo meta en el acumulador y luego interpretarlo.

No tengo otro tipo de emsamblador, el CCS lo descargo de internet y no tiene para el 16f628, si teneis alguno y me lo podeis pasar, o pasaros el codigo entero y emsamblarlo para el 16f628 y lo pruebo haber si anda. gracias


Desconectado jodorowsky

  • PIC12
  • **
  • Mensajes: 52
Re: Pasar DEL 16F84 AL 16F628, Ayuda
« Respuesta #9 en: 09 de Junio de 2007, 00:23:45 »
hola que tal??

espero no haya pasado demasiado tiempo, y pues me gustaría que comentes si has solucionado tu problema o no, para continuar por lo que propongo; el picc de ccs lo encontré en una pc de la universidad y me lo traje en una memoria flash, asi que no se como pasarlo. Creo que no es demo ya que tiene la opcion para un montón de pics, yo lo uso para un 16f877a. Si está interesado, puedo modificar un programa que hice similar al tuyo (espera una trama del gps...), y te paso el hex para q lo pruebes..tambien el codigo en c para que lo veas... me avisas.

Desconectado paquito145

  • PIC10
  • *
  • Mensajes: 9
Re: Pasar DEL 16F84 AL 16F628, Ayuda
« Respuesta #10 en: 11 de Junio de 2007, 10:23:29 »
Hola jodorowsky 

Nunca es demasiado tarde, al menos si hay gente como tu.

La verdad es que sigo en la misma situacion, estoy con un amigo haber si hace algo, pero lo hace en basic y yo preferia en C, parece que lo entiendo algo mejor.

Al grano no tengo hecho nada , como has podido leer, debe de ser algun problema de mi compilador que no genera una rutina valida de recepcion.

si me puedes ayudar, estaria agradecido, tanto si me pasas el programa que tienes y en lo que sea.

Yo empleo como he conmentado el maxin icm7218cipi , este intregraso soporta 8 display de led, vamos de segmento y 4 bit lo empleo para poner el numero de 0 a 9 y otros tres bits para elegir el numero de display y una vez hecho esto otro bir para hacer la escrituta.
Por el codigo fuente que he puesto te lo puedes imaginar, y si no te podia hacer una foto enviarte el esquema de como esta conexionado.

Espero seguir en contacto, muchas gracias. 

Desconectado paquito145

  • PIC10
  • *
  • Mensajes: 9
Re: Pasar DEL 16F84 AL 16F628, Ayuda
« Respuesta #11 en: 17 de Junio de 2007, 06:56:08 »
Hola

doy por terminado la consulta , ya que no he obtenido resultados, lo he solucionado utilizando otro compilador , saludos a los que me han ayudado.