TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: pic27 en 28 de Marzo de 2004, 10:38:00

Título: Cómo transmiter con el 16F876 a 115200?
Publicado por: pic27 en 28 de Marzo de 2004, 10:38:00
Hola compañeros, estoy intentando hacer un proyecto de este foro y me veo con la necesidad de transmitir por la usart del 16f876-4 a 115200 Bd y no se como hacerlo.

He puesto lo que normalmente pongo a 9600 cambiando los baudios y el oscilador pero el hiperterminal no lo lee bien.

pense engañarle diciendo que ira a 28800 a 4 mHz y luego le pongo un cristal de 16, y tampoco lo hace correctamente.

DEFINE OSC 4  
DEFINE HSER_BAUD 28800 "115200
n VAR BYTE
"DEFINE I2C_SLOW 1

           TRISA=%000000    
           TRISB=%11111111
           TRISC=%10101111    

GENERAL:  
           
 HSerout ["MANDANDO A 115200 ",#n,13]
 Toggle PORTC.4
 Pause 4000:n=n+1

GoTo GENERAL

Me han hecho un programa en C y si que funciona.
Gracias y saludos.
Título: RE: Cómo transmiter con el 16F876 a 115200?
Publicado por: Sispic en 28 de Marzo de 2004, 11:20:00
Yo no lo conseguí con pbp , pero si en ensamblador .

Un cristal de 20Mhz . obligatorio.

Codigo:

"--------------------------------------------------------------------
PonBautRate:  " usart 115200 bps , parity None , 8 bits
"--------------------------------------------------------------------
asm
  clrf   FSR
  bcf    STATUS,IRP
  clrf   STATUS
  movlw  0x9F
  movwf  FSR
  bcf    STATUS,IRP
  movlw  0x07
  movwf  0x00
  movlw  0x81
  bsf    STATUS,RP0
  movwf  TXREG
  movlw  0x26
  movwf  RCSTA
  movlw  0x90
  bcf    STATUS,RP0
  movwf  RCSTA
  movlw  0x0A
  bsf    STATUS,RP0
  movwf  TXREG
  movlw  0x26
  movwf  RCSTA
  BCF    STATUS,RP0
 endasm
Return



Para Transmitir un Byte
Codigo:

asm
    movf   DATO,0 ; Byte a mandar
    bcf    0x03,5
DD  btfss  0x0C,4
    goto   DD
    movwf  0x19
endasm
return


Para recivir esperando hasta que llegue un byte
Codigo:

Espera  btfss  pir1,rcif
    goto   Espera
    movf   0x1A,W
    movwf  VALOR    ; Recivido ok
endasm



De todas formas aqui tienes un ejemplo
http://miarroba.com/foros/ver.php?pag=1&temaid=960789&foroid=168219
Título: RE: Cómo transmiter con el 16F876 a 115200?
Publicado por: pic27 en 28 de Marzo de 2004, 14:05:00
si, es para el proyecto del nokia.
Voy a ver tus programas a ver como mandas la matriz.
Ya te cuento.
Título: RE: Cómo transmiter con el 16F876 a 115200?
Publicado por: elreypic en 28 de Marzo de 2004, 15:38:00
Que pasa mi estimado PIC27.

Lo que realmente está pasando es que no estas usando el cristal adecuado. Si observas el datasheet del micro verás que no es posible. Pero te seguirás preguntando, bueno entonces cual es el cristal que debo utilizar? Pues la respuesta es bien sencilla: 3.6864 MHz. utilizando el USART en modo de alta velocidad. Con esto obtendrás el baud rate que necesitas de 115200.

Al utilizar un cristal de 4MHz el baud rate que obtendrás es de 125000 bps, y como ves es la razon por la cual la hyperterminal no reconoce los caracteres.

Ahora te preguntarás, pero como defino los parámetros de configuración si PICBasic no tiene en su define OSC un cristal de este valor. La solución es simplemente escribir los valores directamente en los registros de configuración del USART del micro.

Bueno espero, te sirva esta información y soluciones tu problema. De cualquier modo para eso estamos en el foro para apoyarnos.

Saludos.
Título: RE: Cómo transmiter con el 16F876 a 115200?
Publicado por: pic27 en 28 de Marzo de 2004, 16:54:00
La solución de sispic ya era una luz, pero necesitaría más Vcc para funcionar, y quizá no arrancase con la propia batería del nokia.

Tengo cristales de 11.0592 que es múltiplo de 115200, este también valdrá no?
Voy a ver si se hacerlo antes de preguntalo.

Ya os cuento, gracias:

29 de marzo de 2004
Bueno, ya he probado con un cristal de 11.0592 y funciona.
lo que no se es que pasará con serout y serin.

Voy a ponerme con los cod. a ver que pasa, por si a alguien interesa o desea corregirme esto es lo que he puesto:
Gracias de nuevo a cada uno por su aportación.

DEFINE OSC 12
DEFINE HSER_BAUD 115200
n VAR BYTE
"DEFINE I2C_SLOW 1
           
           adcon1.0=1 "colocar todo el pto A a digital
           adcon1.1=1 :adcon1.2=1: adcon1.3=0      
           SPBRG=5    "115200 baudios
           TXSTA.2=1  "Activar baud. alta velocidad
           "OPTION_REG = $7f  
           TRISA=%000000       " Todo el pto A a salidas
           TRISB=%11111111     " 0 salidas , 1 entradas
           TRISC=%10101111    


GENERAL:  
           
HSerout ["MANDANDO A 115200 ",#n,13]

 Toggle PORTC.4
 Pause 1000:n=n+1

GoTo GENERAL