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

[Resuelto] Entrada digital de PIC16F690 falla en gpsim

Ir abajo

[Resuelto] Entrada digital de PIC16F690 falla en gpsim Empty [Resuelto] Entrada digital de PIC16F690 falla en gpsim

Mensaje por vomv1988 Vie 24 Feb 2012 - 19:13

Hola. He estado probado el nuevo gpsim Release 0.26.1 y me topé con algunos problemas cuando intenté simular el siguiente programa:

osctune.asm
Código:

        include "p16f690.inc"
        org 0
        banksel ADCON0
        clrf    ADCON0
        banksel ADCON1
        clrf    ADCON1
        banksel TRISA
        clrf  TRISA
        clrf  TRISB
        movlw  0xFF
        movwf  TRISC
tune:
        banksel PORTC
        btfsc  PORTC,0
        goto    a0
        banksel OSCTUNE
        bcf    OSCTUNE,0
a0:
        banksel PORTC
        btfss  PORTC,0
        goto    b0
        banksel OSCTUNE
        bsf    OSCTUNE,0
b0:
        banksel PORTC
        btfsc  PORTC,1
        goto    a1
        banksel OSCTUNE
        bcf    OSCTUNE,1
a1:
        banksel PORTC
        btfss  PORTC,1
        goto    b1
        banksel OSCTUNE
        bsf    OSCTUNE,1
b1:
        banksel PORTC
        btfsc  PORTC,2
        goto    a2
        banksel OSCTUNE
        bcf    OSCTUNE,2
a2:
        banksel PORTC
        btfss  PORTC,2
        goto    b2
        banksel OSCTUNE
        bsf    OSCTUNE,2
b2:
        banksel PORTC
        btfsc  PORTC,3
        goto    a3
        banksel OSCTUNE
        bcf    OSCTUNE,3
a3:
        banksel PORTC
        btfss  PORTC,3
        goto    b3
        banksel OSCTUNE
        bsf    OSCTUNE,3
b3:
        banksel PORTC
        btfsc  PORTC,4
        goto    a4
        banksel OSCTUNE
        bcf    OSCTUNE,4
a4:
        banksel PORTC
        btfss  PORTC,4
        goto    b4
        banksel OSCTUNE
        bsf    OSCTUNE,4
b4:
        goto tune
end

En resumen, este programa debe:

  1. Llenar de 0's los registros ADCON0 y ADCON1 para asegurarnos de que las entradas análogas estén desactivadas.
  2. Establecer PORTA y PORTB como salidas llenando de 0's TRISA y TRISB
  3. Establecer PORTC como entradas llenendo de 1's TRISC
  4. Para cada uno de los 5 puetros PORTC0 - PORTC4, debe escribir un 1 en el bit correspondiente del registro OSCTUNE si el bit correspondiente del PORTC es 1, y un 0 en el bit de OSCTUNE si el bit correspondiente en PORC es 0.
Por ejemplo, al final de "tune", si PORTC es 00010011 entonces OSCTUNE deberá ser ---10011 (debido a que osctune solamente cuenta con 5 bits a partir del LSB)


b7
b6
b5
b4
b3
b2
b1
b0
PORTC
0
0
0
1
0
0
1
1
OSCTUNE
-
-
-
1
0
0
1
1
El objetivo de esto es calibrar finamente el oscilador interno del PIC16F690 por medio de las entradas PORTC0 - PORTC4.

La hoja de datos del PIC16F690 [1] (documento 41262E.pdf [2] de microchip), establece en la sección "3.5.2.1. OSCTUNE Register", que el registro OSCTUNE sirve para incrementar en pequeños pasos esta frecuencia de oscilación, aunque no establece la magnitud de estos pasos.

Esto puede servir para eliminar el margen de error de las transferencias de datos asíncronas de EUSART que se muestra en la tabla 12-5 de la sección "12.3 EUSART Baud Rate Generator (BRG)" ya que con OSCTUNE podríamos calibrar FOSC a un valor cercano a 3.6864 MHz, lo cual, segun esta tabla, reduciría el porcentaje de error a 0.00%

El procedimiento que utilicé para la simulación fue el siguiente:

1. Ensamblar con gpasm 0.13.7 beta

$ gpasm -pp16f690 osctune.asm

2. Escribir el archivo de estímulos sti.stc:

sti.stc
Código:

stimulus asy
initial_state 1
{ 1,1 }
name bo
end

stimulus asy
initial_state 0
{ 1,0 }
name bz
end

node one
node zero

attach one bo portc0 portc1 portc2 portc3
attach zero bz portc4 portc5 portc6 portc7

Como se observa, el objetivo es establecer PORTC en 00001111 conectando PORTC0 - PORTC3 a un estímulo que está mandando un 1 constantemente llamado "bo" y conectado al nodo "one", y conectando PORTC4 - PORTC7 a otro estímulo que está enviando un 0 constantemente llamado "bz" y conectado al nodo "zero".

3. Para la simulación, ejecuté el siguiente comando:

$ gpsim -pp16f690 -s osctune.asm -c sti.stc

Para visualizar mejor, abro las ventanas "Breadboard", "Ram" y "Source". Todo parece funcionar con normalidad al principio.

El problema ocurre cuando llega a la instrucción "movwf TRISC", porque se supone que en ese momento el registro 0007 (ver la figura 2-8 en la sección "2.2.2. Special Function Registers" de [2]), correspondiente al PORTC, debería mostrar 0F (o sea, 00001111), sin embargo, permanece en 00: parece que los estímulos que colocamos por medio del archivo sti.stc no tienen ningun efecto. Lo intento nuevamente, pero esta vez solamente con:

$ gpsim -pp16f690 -s osctune.asm

...para intentar cambiar los estados de PORTC0 - PORTC3 haciendo doble click en los pines por medio del Breadboard: en el breadboard, los pins sí cambian de verde a rojo, pero de nuevo en el registro 0007 no se muestra ningun cambio. Curiosamente, los únicos pins que logran modificar el registro 0007 al cabiar sus estados son PORTC4 y PORTC5 (ademas de CLKOUT para el 0005, y PORTB6 y PORTB7 para el 0006, en otras pruebas que hice).

¿Creen que podrían ayudarme con este problema?

Por cierto: sé que gpsim está diseñado para operar a frecuencias preestablecidas por el programa, así que no espero que la modificación del registro OSCTUNE me muestre una variación medible de la frecuencia FOSC, solamente quisiera ver si mi algoritmo funciona para transmitir los primeros 5 bits de PORTC a OSCTUNE, ¡pero ni eso puedo hacer!

En fin, espero que al menos el programa y las referencias de la hoja de datos los hayan entretenido ó les hayan servido de algo.

Saludos.
Oscar

Edit:

Ayer reporté esto como un bug en el sistema de rastreo de bugs de gpsim [3] y me acaban de dar respuesta. Al principio de osctune.asm, debe uno agregar:

Código:

        banksel ANSEL
        clrf    ANSEL
        banksel ANSELH
        clrf    ANSELH

...para deshabilitar las entradas análogas del PIC16F690 segun la sección "4.2.1. ANSEL AND ANSELH REGISTERS". Embarassed

[1] http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en023112
[2] http://ww1.microchip.com/downloads/en/DeviceDoc/41262E.pdf
[3] https://sourceforge.net/tracker/?func=detail&aid=3492929&group_id=2341&atid=102341

vomv1988
Nuevo Usuario
Nuevo Usuario

Mensajes : 8
Fecha de inscripción : 24/02/2012

Volver arriba Ir abajo

Volver arriba

- Temas similares

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