Microcontroladores PIC en Linux.
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

USART (PIC-PC) PIC16F87x

4 participantes

Ir abajo

USART (PIC-PC) PIC16F87x Empty USART (PIC-PC) PIC16F87x

Mensaje por aztk Jue 11 Jun 2009 - 18:36

Saludos kamaradas!

Hace tiempo quise usar el puerto serie del PC con un PIC y por más que leia el datasheet o buscaba en internet no podía lograrlo, je toy chavo jajajaja ('chavo' -> 'novato'), hasta que encontre un código de ejemplo en un libro. Quiero compartir ese código, pero no estoy seguro de si es permitido ya que supongo el libro tiene Copyright (buuuuuuuuuu, prefiero el CopyLeft, je), pss lo pondré y si creen que no debería diganme para quitarlo. De todos modos la bibliografía del libro está en los comentarios. Y al código le hice unas muy ligeras modificaciones.

Código:

    processor    16f877
    include    <p16f877.inc>
    __CONFIG    0x3F71
 
; ------------------------------Código modificado por aztk-------------------------------------
; inicio

    org    0x00
    goto    inicio
    org    0x04

    goto    INTER

 
; Se transmite via Serie el dato que esta en el registro W

 
TX_DATO        bcf    PIR1,TXIF    ; Restaura el flag del transmisor

        movwf    TXREG        ; Mueve el byte a transmitir al registro de transmision

        bsf    STATUS,RP0    ; Bank01

        bcf    STATUS,RP1

TX_DAT_W    btfss    TXSTA,TRMT    ; ¿Byte transmitido?

        goto    TX_DAT_W    ; No, esperar

        bcf    STATUS,RP0    ; Si, vuelta a Bank00

        return

 
; Tratamiento de interrupción

 
INTER        btfss    PIR1,RCIF    ; ¿Interrupción por recepción?

        goto    VOLVER        ; No, falsa interrupción

        bcf    PIR1,RCIF    ; Si, reponer flag

        movf    RCREG,W        ; Lectura del dato recibido

        movwf    PORTB        ; Visualización del dato

        call    TX_DATO        ; Transmisión del dato como eco

VOLVER        retfie

 
; Comienzo del programa principal

 
inicio        clrf    PORTB        ; Limpiar salidas

        clrf    PORTC

        bsf    STATUS,RP0    ; Bank01

        bcf    STATUS,RP1

        clrf    TRISB        ; PORTB como salida

        movlw    b'10111111'    ; RC7/RX entrada,

        movwf    TRISC        ; RC6/TX salida

        movlw    b'00100100'    ; Configuración USART

        movwf    TXSTA        ; y activación de transmisión

        movlw    .25        ; 9600 baudios

        movwf    SPBRG

        bsf    PIE1,RCIE    ; Habilita interrupción en recepción

        bcf    STATUS,RP0    ; Bank00

        movlw    b'10010000'    ; Configuración del USART para recepción continua

        movwf    RCSTA        ; Puesta en ON

        movlw    b'11000000'    ; Habilitación de las

        movwf    INTCON        ; interrupciones en general

 
BUCLE        nop

        goto    BUCLE

 
    end

; --------Código original en:
;
;    MICROCONTROLADORES <<PIC>>
;    Diseño práctico de aplicaciones
;    SEGUNDA PARTE: PIC 16F87X
;    José M. Angulo, Susana Romero, Ignacio Angulo
;    Editorial: McGrawHill

Aunque sea para el PIC16F877 es valido para toda la serie PIC16Fx y tal vez para otras.
Por cierto, abri un nuevo hilo porque concidero que facilita la busqueda.

Buena Vibra!

aztk
Participante Activo
Participante Activo

Mensajes : 52
Fecha de inscripción : 08/06/2009
Edad : 35
Localización : Tenochtitlan

Volver arriba Ir abajo

USART (PIC-PC) PIC16F87x Empty simulación en gpsim

Mensaje por aztk Jue 9 Jul 2009 - 1:27

Hey!!!!!!!!!!!!
Que hongo kamaradas!

Hoy les traigo mi simulación con 'gpsim' de este código.
Debo de confesar que se me dificulto algo el poder simular el código e hice varias pruebas consiguiéndolo por fin pero el método es un poco confuso, no sé si serán bugs de gpsim o si no hice las cosas como debiese. Sea como sea les dejo el método:

Pues para la simulación es necesario tener el archivo *.cod del código, este lo pueden obtener cuando ensamblan con PikLab o por medio de la terminal con 'gpasm'. Si es con 'gpasm' una vez que tengan el código en un archivo con extensión *.asm (por ejemplo 'echobook.asm') lo ensamblan con:

Código:
$ gpasm -p 16f877a echobook.asm

Ya tenemos nuestro 'echobook.cod'!!! Smile Ahora creamos un archivo llamado 'env.conf' con lo siguiente:

Código:

# Load the gpsim modules library
module library libgpsim_modules.so

# Create an USART called 'U1'
module load usart U1
U1.console=true
U1.xpos=276.0000000000000
U1.ypos=216.0000000000000

# Create LEDs to connect to the PORTB
module load led led0
led0.xpos=300.0000000000000
led0.ypos=180.0000000000000

module load led led1
led1.xpos=300.0000000000000
led1.ypos=156.0000000000000

module load led led2
led2.xpos=300.0000000000000
led2.ypos=132.0000000000000

module load led led3
led3.xpos=300.0000000000000
led3.ypos=108.0000000000000

module load led led4
led4.xpos=300.0000000000000
led4.ypos=84.00000000000000

module load led led5
led5.xpos=300.0000000000000
led5.ypos=60.00000000000000

module load led led6
led6.xpos=300.0000000000000
led6.ypos=36.00000000000000

module load led led7
led7.xpos=300.0000000000000
led7.ypos=12.00000000000000



# Connections:
node n_led0
attach n_led0 pin(portb0) led0.in

node n_led1
attach n_led1 pin(portb1) led1.in

node n_led2
attach n_led2 pin(portb2) led2.in

node n_led3
attach n_led3 pin(portb3) led3.in

node n_led4
attach n_led4 pin(portb4) led4.in

node n_led5
attach n_led5 pin(portb5) led5.in

node n_led6
attach n_led6 pin(portb6) led6.in

node n_led7
attach n_led7 pin(portb7) led7.in

node n_rx
attach n_rx pin(portc7) U1.TXPIN

node n_tx
attach n_tx pin(portc6) U1.RXPIN

# End.

Y despues de ello un nuevo archivo llamado 'myproject.stc' con lo siguiente:

Código:

# ----------- myproject.stc ---------------
load s echobook.cod
frequency 4000000
load c env.conf
# -----------------------------------------

Y este ultimo lo ejecutamos con gpsim en un terminal:

Código:
$ gpsim -c myproject.stc

En la ventana de controles denle al 'run' y luego en la pequeña ventana llamada 'USART' escriban algo y ya verán que tal funciona, jejeje

Nota: Los nombres que elijan para los archivos pueden ser los que gusten, y todos deben encontrarse en el mismo directorio.

Referencias:
Pic-LINUX Ejemplo: simulación de circuito en GPsim (por arcachofo)
Something useful with a PIC: serial line communication with the outside (por Steven)

USART (PIC-PC) PIC16F87x Gpsimusartpantallazo.th

aztk
Participante Activo
Participante Activo

Mensajes : 52
Fecha de inscripción : 08/06/2009
Edad : 35
Localización : Tenochtitlan

Volver arriba Ir abajo

USART (PIC-PC) PIC16F87x Empty Re: USART (PIC-PC) PIC16F87x

Mensaje por Geo Jue 9 Jul 2009 - 5:25

Gracias por compartir el ejemplo, espero poder darle una checada en cuanto tenga un poco de tiempo Smile.

Prácticamente no he usado gpsim, viendo cosas como estas creo que debo animarme más Wink.

Geo
Participante Activo
Participante Activo

Mensajes : 92
Fecha de inscripción : 16/12/2008
Localización : México

http://hsblog.mexchip.com

Volver arriba Ir abajo

USART (PIC-PC) PIC16F87x Empty Re: USART (PIC-PC) PIC16F87x

Mensaje por Pikitin Jue 9 Jul 2009 - 19:39

Interesante...

Veo que has usado el módulo USART, lo que no entiendo es como lo "conectas" al exterior... al usar ese módulo te aparece automaticamente la ventanita como si fuera una terminal serie? o como es eso?

La verdad que el Gpsim usado "a pelo" es un poco lioso, pero se pueden hacer cosas interesantes. Cuesta un poco más de trabajo crear los circuitos que con programas puramente gráficos y tiene algún que otro bug, pero bueno... hasta que el Ktechlab no esté desarrollado se pueden hacer cosas.

Por cierto, el Gpsim 0.23 ya salió hace unos meses, creo que hay varios bugs corregidos, quizás te interese instalarlo.

Si haces más cosas en Gpsim estaría muy bien que las postearas, siempre es util tener archivos de circuitos para usarlos tal cual o modificarlos o saber como configurar los módulos y todo eso.

Lo de generar el .cod con gpasm tambien es muy util...


Saludos.

Pikitin
veterano
veterano

Mensajes : 623
Fecha de inscripción : 26/11/2008

http://linuxmicros.blogspot.com/

Volver arriba Ir abajo

USART (PIC-PC) PIC16F87x Empty Re: USART (PIC-PC) PIC16F87x

Mensaje por Pikitin Vie 10 Jul 2009 - 9:48

Pues he probado la simulación y a mi me da errores en el archivo env.conf, en estas lineas:

# Connections:
node n_led0
attach n_led0 pin(portb0) led0.in


Me funciona bien si utilizo esta notación para los pines de los puertos:

# Connections:
node n_led0
attach n_led0 portb0 led0.in


Yo estoy usando GPsim 0.23, nosé si será por eso.

Pikitin
veterano
veterano

Mensajes : 623
Fecha de inscripción : 26/11/2008

http://linuxmicros.blogspot.com/

Volver arriba Ir abajo

USART (PIC-PC) PIC16F87x Empty Re: USART (PIC-PC) PIC16F87x

Mensaje por maigke Vie 10 Jul 2009 - 22:38

Hola, que tal!!, me parecio excelente tu aporte!, y por cierto a mi me funciona muy bien, la version que uso de gpsim es la 0.22.0, y si en verdad es muy talachudo trabajar con gpsim, pero veo que esta muy efectivo, ya lo probé, ahora solo es cuestion de estudiarle un poco mas study

Pikitin, es posible que sea por el cambio de version el que ten funcione con la modificacion que indicas, ya que yo como mencione anteriormente, es una version mas abajo.
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

USART (PIC-PC) PIC16F87x Empty jeje

Mensaje por aztk Lun 5 Oct 2009 - 3:00

Pikitin escribió:...lo que no entiendo es como lo "conectas" al exterior... al usar ese módulo te aparece automaticamente la ventanita como si fuera una terminal serie? o como es eso?...

Oooppss! Je, aunque supongo que Pikitin ya sabe la respuesta pss...
la simulación solo verifica que el código asm funciona correctamente, en ningún momento existe una conexión entre un Pic y el PC, todo es virtual.

Hace tiempo que no me pasaba por estos foros, prometo hacerlo más seguido. Saludos!

Buena Vibra!

aztk
Participante Activo
Participante Activo

Mensajes : 52
Fecha de inscripción : 08/06/2009
Edad : 35
Localización : Tenochtitlan

Volver arriba Ir abajo

USART (PIC-PC) PIC16F87x Empty Re: USART (PIC-PC) PIC16F87x

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.