Autor Tema: Ayuda con la configuración reloj interno PIC16F819  (Leído 4993 veces)

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

Desconectado Nick

  • PIC10
  • *
  • Mensajes: 7
Ayuda con la configuración reloj interno PIC16F819
« en: 12 de Diciembre de 2007, 13:50:43 »
Hola

Un saludo a todos! soy nuevo aca y tambien nuevo usando el PIC16F819, para comenzar diseñe un programa en asm que realiza la cuenta de un digito por pulsación de un pulsador.
Este programa lo tenía hecho para un 16F84A en este me corre sin ningun problema, me da la impresion que el problema pasa por el oscilador interno pues el micro no hace nada.
La configuración la he realizado asignando la palabra de configuración al registro OSCCON para 4 Mhz, pero sin ningun resultado.
Por favor si alguien me puede ayudar viendo el programa.   :)
Gracias.



;Programa que cuenta el número de veces que se oprime un pulsador indicando en un display

       list   p=pic16f819             ; Pic a utilizar 16F819

status    equ       03h                 ;registro de estados
porta     equ       05h                 ;puerto A en la dirección 5h de la RAM
portb     equ       06h                 ;puerto B en la dirección 6h de la RAM
trisa     equ       85h                 ;dirección de configuración puerto A
trisb     equ       86h                 ;dirección de configuración puerto B
osccon    equ       8fh                 ;dirección de registro del reloj
conta     equ       0ch                 ;dirección de configuración registro conta
lazo1     equ       0dh                 ;dirección de configuración registro lazo1
lazo2     equ       0eh                 ;dirección de configuración registro lazo2
z         equ       02h                 ;bandera de 0 del registro de estados
                                        ;
                                        ;
                                        ;
reset     org       00h                 ;el vector reset esta en la posicion 00
          goto      inicio              ;se salta al programa principal
                                        ;
          org       05h                 ;el programa empieza en la posicion de memoria 0
                                        ;
                                        ;----- SUBRUTINA de retardo de 100 milisegundos ----
                                        ;
retardo   movlw     d'100'              ;registro W contiene 100 decimal
          movwf     lazo1               ;registro lazo1 contiene cantidad de milisegundos
ciclo1    movlw     d'110'              ;registro W contiene 110 decimal
          movwf     lazo2               ;carga numero de milisegundos en lazo2
ciclo2    nop
          nop
          nop
          nop
          nop
          nop
          decfsz    lazo2               ;pregunta si termino 1 ms
          goto      ciclo2
          decfsz    lazo1               ;pregunta si termino el retardo
          goto      ciclo1
          retlw     00h                 ;salta instruccion despues de call

inicio    bsf       status,5            ;se ubica en el segundo banco de memoria RAM
          movlw     b'1100000'          ;se guarda en W el valor a usar del reloj en binario 110
          movwf     osccon              ;se configura el reloj interno a 4Mhz
          movlw     0f0h                ;carga el literal 0f0h (11110000)al registro W
          movwf     trisa               ;activa como salidas el puerto A
          movlw     0ffh                ;carga el literal 0ffh (11111111) al registro W
          movwf     trisb               ;activa como entradas el puerto B
          bcf       status,5            ;se ubica en el primer banco de memoria RAM limpiando
          clrf      conta               ;limpia conta iniciando contador en 0
ciclo     movf      conta,w             ;pone valor de conta en W
          movwf     porta               ;pone valor de W en puerto A
          call      retardo             ;salta a subrutina retardo
pulsa     btfsc     portb,0             ;pregunta si puerto b0 esta oprimido
          goto      pulsa               ;sino esta oprimido vuelve a preguntar
          call      retardo             ;si esta oprimido retarda 100 ms
          btfsc     portb,0             ;confirma si sigue oprimido
          goto      pulsa               ;sino esta oprimido retorna a preguntar por primera vez
          incf      conta               ;incrementa registro conta en 1
          movf      conta,w             ;carga el registro W con el valor de conteo
          xorlw     0ah                 ;hace operacion XOR para ver si es igual a 0ah (si llego a 10 decimal)
          btfsc     status,z            ;prueba si el contador llego a 0ah (10 decimal)
          goto      inicio              ;si llega a 10 reinicia
          goto      ciclo               ;sino ha llegado a 10 sigue contando
          end


Desconectado picNIC

  • PIC16
  • ***
  • Mensajes: 140
Re: Ayuda con la configuración reloj interno PIC16F819
« Respuesta #1 en: 12 de Diciembre de 2007, 18:47:42 »
Bienvenido al foro nick.... y exitos futuros..

Fijate que estas poniendo mal la direccion de los registros generales que comienzan en 20h, y los registros generales de acceso desde cualquier banco estan a partir de la direccion 40h.
Suerte....

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Ayuda con la configuración reloj interno PIC16F819
« Respuesta #2 en: 13 de Diciembre de 2007, 00:21:37 »
Hola Nick


Cuando cambies de microcontrolador , revisa la hoja de especificaciones , asi sabras que contiene tu nuevo uC.

Primero

En el pic16F84 no tiene Oscilador interno, el pic16f819 si
                      no   ADC                       ;  si ADC           - COnvertidor analogico digital

La seleccion del oscilador la veo correcta , pero te falta habilitar los pines como digitales ya que de inicio estan como análogas.

Cuando enciendes tu uC  los pines RA0 a RA4 estan configurados como entradas análogas.

EN el registro ADCON1 se configura el pin , ya sea digital u análogo.


En la hoja de especificaciones viene este ejemplo, nada de magía




BANKSEL PORTA       ; cambio de banco donde se encuentre PORTA
CLRF       PORTA       ; Inicias PORTA latch
                               
BANKSEL ADCON1  ; seleccional el banco donde este el registro ADCON1-----
MOVLW 0x06          ; Configuras todos los pines como digitales
MOVWF ADCON1     ;


MOVLW 0xF0    ;  ahi ya depende de como lo necesites, en tu ejemplo usas el nible bajo como salida.

MOVWF TRISA


Espero te sea de ayuda.
« Última modificación: 13 de Diciembre de 2007, 00:24:38 por AKENAFAB »

Desconectado Nick

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda con la configuración reloj interno PIC16F819
« Respuesta #3 en: 13 de Diciembre de 2007, 10:55:26 »
Bienvenido al foro nick.... y exitos futuros..

Fijate que estas poniendo mal la direccion de los registros generales que comienzan en 20h, y los registros generales de acceso desde cualquier banco estan a partir de la direccion 40h.
Suerte....


Picnic, tu ojo de aguíla me saco del problema, efectivamente era ese el problema tenia mal configurado las direcciones de memoria de los registros de proposito general....... me diste un gran alivio    :-)    :)     Gracias  !!!

Desconectado Nick

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda con la configuración reloj interno PIC16F819
« Respuesta #4 en: 13 de Diciembre de 2007, 11:00:49 »
Hola Nick


Cuando cambies de microcontrolador , revisa la hoja de especificaciones , asi sabras que contiene tu nuevo uC.

Primero

En el pic16F84 no tiene Oscilador interno, el pic16f819 si
                      no   ADC                       ;  si ADC           - COnvertidor analogico digital

La seleccion del oscilador la veo correcta , pero te falta habilitar los pines como digitales ya que de inicio estan como análogas.

Cuando enciendes tu uC  los pines RA0 a RA4 estan configurados como entradas análogas.

EN el registro ADCON1 se configura el pin , ya sea digital u análogo.


En la hoja de especificaciones viene este ejemplo, nada de magía




BANKSEL PORTA       ; cambio de banco donde se encuentre PORTA
CLRF       PORTA       ; Inicias PORTA latch
                               
BANKSEL ADCON1  ; seleccional el banco donde este el registro ADCON1-----
MOVLW 0x06          ; Configuras todos los pines como digitales
MOVWF ADCON1     ;


MOVLW 0xF0    ;  ahi ya depende de como lo necesites, en tu ejemplo usas el nible bajo como salida.

MOVWF TRISA


Espero te sea de ayuda.

Lo tendre encuenta AKENAFAB, ya que mi objetivo final es diseñar un programa que controle y verifique fallas para un cargador de bateria NiMH.
Gracias !      :-)      :)

Desconectado picNIC

  • PIC16
  • ***
  • Mensajes: 140
Re: Ayuda con la configuración reloj interno PIC16F819
« Respuesta #5 en: 13 de Diciembre de 2007, 11:06:04 »
De nada...
Todo es por causa de muchas pastillas de 'geniol' que tome cuando empece a usar distintos pic... :D :D :D

Saludos


 

anything