Autor Tema: Ejemplo de ECO USART para 18F452  (Leído 7711 veces)

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

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Ejemplo de ECO USART para 18F452
« en: 01 de Septiembre de 2006, 21:38:33 »
Les adjunto un simple ejemplo de cómo hacer un eco de usart con los PIC18.

Para hacerlo con una PC haría falta un PIC + un MAX232.

Espero les sea útil.  Adjunto todo el proyecto que puede ser simulado con MPLAB 7.4x.  Está hecho para ser descomprimido en C:\ pero puede ser ubicado donde uds deseen.

Código: ASM
  1. ;--------------------------------------------------------------------------------------------------------------------------
  2. ;  Software ECO de USART para PIC18F452
  3. ;
  4. ;  Descripción: El siguiente software está concebido con fines educativos únicamente.
  5. ;               El código no contiene secretos ni cosas raras, está permitido el uso parcial o total del mismo
  6. ;               sin necesidad de consultar al autor o nombrarlo
  7. ;
  8. ;  Elegí este PIC por ser el más popular de la familia aunque será discontinuado, es fácil migrar código de este pic a otros.
  9. ;  La migración a otros microcontroladorse de la familia 18F es posible y bastante sencilla previa lectura de
  10. ;  los aspectos que lo diferencia con el 18F452.
  11. ;
  12. ;--------------------------------------------------------------------------------------------------------------------------
  13.  
  14.         list p=18F452
  15.         #include <p18f452.inc>
  16.  
  17.         ;Code Protection Deshabilitado
  18.         CONFIG     CP0=OFF
  19.  
  20.         ;Oscillator switch deshabilitado.  Oscilador tipo HS. PLL desactivado
  21.         CONFIG     OSCS=OFF, OSC=HS
  22.  
  23.         ;Brown-OutReset enabled, Voltage de Brown Out es 2.5V
  24.         CONFIG     BOR=OFF, BORV=25
  25.  
  26.         ;Watch Dog Timer Habilitado, Watch Dog Timer PostScaler 1:128
  27.         CONFIG     WDT=OFF, WDTPS=128
  28.  
  29.         ;Low Voltage Programming Deshabilitado
  30.         CONFIG     LVP=OFF
  31.  
  32.         ;CCP2 pin Mux enabled
  33.         CONFIG     CCP2MUX=ON
  34.  
  35.         ;Stack over/underflow Reset Habilitado.
  36.         CONFIG     STVR=ON
  37.  
  38. TEMPVAR equ     0x00    ;En Banco 0.
  39.  
  40.  
  41.         org     0x0000
  42.  
  43. _BOOT:
  44.         goto    _INICIO
  45.  
  46.  
  47.  
  48.         org     0x00A0
  49.  
  50. _INICIO:
  51.         movlw   b'10111111'     ;TRISC<6> como salida de USART (en los 18F es así)
  52.                                 ;y TRISC<7> en 1, para ser configurados como pines USART
  53.         movwf   TRISC  
  54.  
  55. ;---------------------------------------------------------------------------------
  56. ;       Configuración USART Transmisor
  57. ;---------------------------------------------------------------------------------
  58.         movlw   .64             ;9600 bps - Clock 10Mhz - PLL apagado
  59.         movwf   SPBRG
  60.         movlw   b'00100100'             ;TXEN=on , SYNC = 0 , BRGH = 1
  61.         movwf   TXSTA
  62.  
  63.  
  64. ;---------------------------------------------------------------------------------
  65. ;             Configuración USART Receptor
  66. ;---------------------------------------------------------------------------------
  67.  
  68.         movlw   b'00000000'
  69.         movwf   RCSTA
  70.         bsf     RCSTA,SPEN              ;SPEN = 1 habilita el puerto serie, con recepcion continua
  71.  
  72.         call    _USARTCLEAR
  73.         bsf     RCSTA,CREN              ;Habilita Usart.  Recepción Continua
  74.  
  75.        
  76. _USARTLOOP:
  77.         btfss   PIR1,RCIF               ;Espera próximo caracter
  78.         goto    _USARTLOOP
  79.  
  80.         btfsc   RCREG,OERR
  81.         call    _USARTCLEAR             ;Error de Sobreescritura
  82.         btfsc   RCREG,FERR
  83.         call    _USARTCLEAR             ;Error de Trama
  84.  
  85.         movff   RCREG,TEMPVAR
  86.         btfsc   PIR1,TXIF               ;Con esto garantizo que si el buffer está ocupado
  87.                                 ;no será sobreescrito.  Se recibe el caracter pero no se responde.
  88.         movwf   TXREG
  89.         goto    _USARTLOOP
  90.  
  91.  
  92. _USARTCLEAR
  93.         bcf     RCSTA,CREN
  94.         movf    RCREG,w
  95.         movf    RCREG,w
  96.         movf    RCREG,w         ;Vacío buffers de usart
  97.         bsf     RCSTA,CREN
  98.         return
  99.  
  100.  
  101.         end

Saludos
« Última modificación: 04 de Septiembre de 2006, 17:02:20 por maunix »
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Ejemplo de ECO USART para 18F452
« Respuesta #1 en: 19 de Diciembre de 2007, 16:08:14 »
Hola Mauricio!
aqui viendo tu ejemplo basado en la USART, mi pregunta es como puedo usarla para recibir aqui DMX o enviar
creo que deberia cambia aqui algunos parametro Pj.
 movlw   .64      ;9600 bps - Clock 10Mhz - PLL apagado
donde seria 250000 bps
podia tu aqui darme detalle?
es que soy nuevecito en esto y quiero aprender la implementacion ,

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Ejemplo de ECO USART para 18F452
« Respuesta #2 en: 19 de Diciembre de 2007, 16:45:11 »
Excelente aporte Mauricio!, gracias.

Estoy empezando con el C18 y esto me viene de 10, precien veo el mensaje jejeje





Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ejemplo de ECO USART para 18F452
« Respuesta #3 en: 20 de Diciembre de 2007, 12:08:30 »
Excelente aporte Mauricio!, gracias.

Estoy empezando con el C18 y esto me viene de 10, precien veo el mensaje jejeje

Ya subiré algo para el C18, pero antes quisiera probarlo :) :)

Algo asi como un eco usart para 18F4520 o 18F452 como para comenzar  :)
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ejemplo de ECO USART para 18F452
« Respuesta #4 en: 20 de Diciembre de 2007, 12:10:37 »
Hola Mauricio!
aqui viendo tu ejemplo basado en la USART, mi pregunta es como puedo usarla para recibir aqui DMX o enviar
creo que deberia cambia aqui algunos parametro Pj.
 movlw   .64      ;9600 bps - Clock 10Mhz - PLL apagado
donde seria 250000 bps
podia tu aqui darme detalle?
es que soy nuevecito en esto y quiero aprender la implementacion ,


Hola stk500 , se ve que este es un post que les gusta a los "esteca" jajaja.

Puntualmente quieres hacerlo andar a 250.000 bps?  o 250kbps ? ese baudeaje es clavado? digamos sí o sí es ese valor o quieres algo similar?

Tendría que revisar como hacer el cálculo, no es complejo y te puedo dar una mano si quieres.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Ejemplo de ECO USART para 18F452
« Respuesta #5 en: 20 de Diciembre de 2007, 12:44:24 »
Recientemente me he tenido que enfrentar a la configuración de una usart a 250Kbps para DMX y tengo los cálculos hechos para 4MHz y para 8MHz.
Para 4MHz tienes que cargar un 3 en el registro SPBRG.
Para 8MHz tienes que cargar un 7.

La fórmula es: baudios = Fosc / (4 * (SPBRG+1))

Para 10MHz, el resultado sería 9, en teoría.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ejemplo de ECO USART para 18F452
« Respuesta #6 en: 20 de Diciembre de 2007, 15:08:07 »
Recientemente me he tenido que enfrentar a la configuración de una usart a 250Kbps para DMX y tengo los cálculos hechos para 4MHz y para 8MHz.
Para 4MHz tienes que cargar un 3 en el registro SPBRG.
Para 8MHz tienes que cargar un 7.

La fórmula es: baudios = Fosc / (4 * (SPBRG+1))

Para 10MHz, el resultado sería 9, en teoría.


Desconozco el DMX, ¿hablamos de 250kbps en uart síncrona?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Ejemplo de ECO USART para 18F452
« Respuesta #7 en: 20 de Diciembre de 2007, 15:11:47 »
250Kbps en asíncrona, Mauricio, y con señal de break y start particulares.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ejemplo de ECO USART para 18F452
« Respuesta #8 en: 20 de Diciembre de 2007, 15:53:52 »
250Kbps en asíncrona, Mauricio, y con señal de break y start particulares.

Ah, fíjate porqué lo menciono, extraído del datasheet ds35964 de los PIC18Fxx2




Sync    BRGH = 0 (Baja Velocidad)    BRGH = 1 (Alta Velocidad)



0(Asíncrono) Baudeaje = FOSC/(64(X+1))      Baudeaje = FOSC/(16(X+1))



1(Síncrono) Baudeaje = FOSC/(4(X+1))N/A





En el caso de asíncrono y alta velocidad creo que el cálculo sería dividiendo por 16 y no por 4.

Baudeaje = Fosc / ( 16 *  (X + 1) )

X = (Fosc / (Baudeaje * 16)) - 1



Luego

Para 10MHz

X = (10.000.000 / (250.000 x 16)) - 1 = 2,5 - 1 = 1,5 (lo cual es un valor no válido)

Para 40MHz (clock de 10Mhz con HSPLL habilitado que multiplica por 4)

X = (40.000.000 / (250.000 x 16)) - 1 = 9


El resultado también es 9 pero para 40Mhz.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Ejemplo de ECO USART para 18F452
« Respuesta #9 en: 20 de Diciembre de 2007, 18:23:50 »
maunix gracias por el aporte

saludos

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Ejemplo de ECO USART para 18F452
« Respuesta #10 en: 21 de Diciembre de 2007, 02:47:56 »
Mauricio, concretamente me refiero a la configuración que aparece en la cuarta fila de esta tabla:



SYNC=0, BRG16=1 y BRGH=1

Ahí se ve que la fórmula es Fosc / (4 * (SPBRG+1))

De todas formas, diga lo que diga la data, yo lo he probado a 4MHz y a 8MHz y son los números que dije antes  :mrgreen: . En este caso me aplico lo que decía Linus Torvals:
"Y jamás cometas el error de creer que puedes diseñar algo mejor que lo que obtienes de hacer prueba-y-error en paralelo despiadada y masivamente con un ciclo de retroalimentación."

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ejemplo de ECO USART para 18F452
« Respuesta #11 en: 21 de Diciembre de 2007, 11:04:00 »
Ahh Manolo pero estabas haciendo trampa, el 18F452 no tiene EUSART  :mrgreen: :mrgreen: (lo digo con tono humorístico)

Yo hablaba del 18F452 por el topic, bueno misterio resuelto.  :wink: :wink:



PD: Para alguien que se interese en el Hilo, la fórmula de Manolo funciona para Modo Extended Usart y la que yo expuse para la Usart Convencional.
Un pic con EUSART puede configurarse en forma idéntica con la fórmula de USART pero también tiene posibilidades 'extra' que lo hacen "enhanced" o mejorado, como por ejemplo contar con un registro de 16 bits para el Generador de Baudeaje.
« Última modificación: 21 de Diciembre de 2007, 11:07:08 por maunix »
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Ejemplo de ECO USART para 18F452
« Respuesta #12 en: 21 de Diciembre de 2007, 12:42:45 »
Ah, pues pido disculpas por la confusión. Yo estaba mirando la data de un 18F2550 y daba por hecho que era la misma.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Ejemplo de ECO USART para 18F452
« Respuesta #13 en: 21 de Diciembre de 2007, 15:29:26 »
Ah, pues pido disculpas por la confusión. Yo estaba mirando la data de un 18F2550 y daba por hecho que era la misma.

Ambas opciones son válidas ya que la info acá vertida queda ya disponible para varios pics.  El punto de mayor confusión creo fue que como yo no sabía si era síncrono o no el DMX lo hubieramos descubierto antes.  Si fuera síncrono si era divido 4 y también aplicaba para un 18F452.

Mientras se haya aclarado, creo que queda bien expuesto asi, ambas opciones son válidas dependiendo del pic que se use.  ;)
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)