Autor Tema: No puedo prender led PIC16F873A  (Leído 5058 veces)

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

Desconectado gonz147

  • PIC10
  • *
  • Mensajes: 22
No puedo prender led PIC16F873A
« en: 13 de Agosto de 2010, 18:30:20 »
Buenas tardes, estoy tratando de retomar la programación en assembler, ya que siempre he programado en C, para eso tome un modulito que hice con un PIC16F873A y un display 16x2, e hice un programita para prender un led, como era de esperar no funciono, pero después de bajar ejemplos y renegar un buen rato no logro detectar el problema, aca les dejo el programa, básicamente prende y apaga las salidas del puerto A y C, el cristal es de 20MHz, la demora es de 300ms aprox

Código: [Seleccionar]
;------------------------------------------------------------------------------------
 
list    P=16F873A
include <P16F873A.inc>
 
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC ; code protec off
; power up timer on
; watchdog off
; osc HS
 
 CBLOCK 0X20
 
PDel0
PDel1
PDel2
Delay
Nibble
           ENDC
RESET
ORG 0x00
goto inicio
org 0x05
inicio
BSF STATUS,5 ; activa la pagina 1
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital
MOVLW 0x00 ; carga 00000 en W
MOVWF TRISA ; puerto a todos salidas
MOVLW 0xFF ; carga 00000000 en W
MOVWF TRISB ; puerto b todos entradas
MOVLW 0x00 ; carga 00000000 en W
MOVWF TRISC ; puerto b todos salidaS
BCF STATUS,5 ; volvemos a la pagina 0


band1
MOVLW 0x00 ; ponemos a cero el
MOVWF PORTC ; el puerto c
MOVWF PORTA ; el puerto a
call DEMORA
MOVLW 0xF0 ; ponemos a uno el
MOVWF PORTC ; el puerto c
MOVLW 0xFF ; ponemos a uno el
MOVWF PORTA ; el puerto a
call DEMORA
goto band1

;-------------------------------------------------------------
; Generado con PDEL ver SP  r 1.0  el 12/08/2010 Hs 18:05:57
; Descripcion: Delay 1000000 ciclos
;-------------------------------------------------------------
DEMORA  movlw     .14       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .72       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .247      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;-------------------------------------------------------------
end

Lo extraño es que en el modo debug (MPLAB y PICKIT2) y dandole paso a paso funciona bien, pero en modo normal no. Sospecho que es el oscilador.

Me olvidaba, el modulo anda lo mas bien cuando le cargo programas que hice con el CCS

Saludos
Firmat - Santa Fe - Argentina

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: No puedo prender led PIC16F873A
« Respuesta #1 en: 13 de Agosto de 2010, 19:04:48 »
Hola gonz147, creo ver un error:

band1
   MOVLW   0x00            ; ponemos a cero el
   MOVWF   PORTC            ; el puerto c
 MOVLW   0X00
   MOVWF   PORTA            ; el puerto a

estas declarando las variables Delay y Nibble y en cambio no las usas.

Que alguien me corrija si me equivoco

Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado gonz147

  • PIC10
  • *
  • Mensajes: 22
Re: No puedo prender led PIC16F873A
« Respuesta #2 en: 13 de Agosto de 2010, 20:23:52 »
Gracias Miquel, corregí todo eso y nada, hice una pruebita similar con un 16f84a y anduvo, sigo probando...

saludos
Firmat - Santa Fe - Argentina

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: No puedo prender led PIC16F873A
« Respuesta #3 en: 14 de Agosto de 2010, 05:42:32 »
El programa funciona bien, la demora es de 200ms no de 300, en el PORTA solo te encienden los 6 ultimos LEDs, es decir en lugar de FF solo te pone 3F (0011 1111) esto es porque tienes el oscilador en los pines 6 y 7. Tiene que ser algo del hardware que te esta fallando.

Saludos

Desconectado gonz147

  • PIC10
  • *
  • Mensajes: 22
Re: No puedo prender led PIC16F873A
« Respuesta #4 en: 14 de Agosto de 2010, 11:32:31 »
Hice muchas pruebas mas y no anda, desisto y sigo con ccs que si anda, implemetare rutinas en assembler y listo.

Gracias por todo.

Saludos
Firmat - Santa Fe - Argentina

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: No puedo prender led PIC16F873A
« Respuesta #5 en: 14 de Agosto de 2010, 11:47:41 »
Hola de nuevo hay otro error que me paso por alto,  ADCON1 esta en el banco 1 por lo tanto deberias tener la configuracion de otra manera:

        BSF   STATUS,5            ; activa la pagina 1
BCF   STATUS,RP1
   MOVLW 0x06                ; Configure all pins
   MOVWF ADCON1             ; as digital
   MOVLW   0x00            ; carga 00000 en W
   MOVWF   TRISA            ; puerto a todos salidas
   MOVLW   0xFF            ; carga 00000000 en W
   MOVWF   TRISB            ; puerto b todos entradas
   MOVLW   0x00            ; carga 00000000 en W
   MOVWF   TRISC            ; puerto b todos salidaS
   BCF   STATUS,5            ; volvemos a la pagina 0

 Saludos
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: No puedo prender led PIC16F873A
« Respuesta #6 en: 14 de Agosto de 2010, 15:25:57 »
Le pone bien el ADCON1, ademas el programa corre correctamente sin ningun problema, por lo menos en el MPLAB, que creo que es bastante fiable.
Esta es la poscion del adcon1, es la ultima del banco2.

ADCON1 9Fh

Gonz no te desanimes esto es logico que pase, si lo simulas en el MPLAB veras que el prgrama no tiene problema, a mi por lo menos me funciona bien.

Saludos y dale caña

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: No puedo prender led PIC16F873A
« Respuesta #7 en: 14 de Agosto de 2010, 17:01:44 »
Hola tapi8 siento tener que rectificarte pero el ADCON1 es la ultima del banco 1  :mrgreen:

Saludos
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: No puedo prender led PIC16F873A
« Respuesta #8 en: 14 de Agosto de 2010, 19:37:02 »
No hay error en el programa.
El problema tiene que estar en el hardware

Una vez tuve problemas con los condensadores que usa el cristal. Se los saqué y salió andando. Prueba que no tengas el mismo error.
« Última modificación: 16 de Agosto de 2010, 10:54:45 por Leon Pic »
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: No puedo prender led PIC16F873A
« Respuesta #9 en: 15 de Agosto de 2010, 05:38:45 »
Miquel no lo sientas en absoluto, no me molesta que me corrijan errores que pueda tener, precisamente para eso estamos aqui para rectificarnos unos a otros y asi aprender. Pero esto en concreto esta bien, aqui pongo los reg. ADCON0 y ADCON1 copiados del data sheet:

DIRECCION
1Fh            ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE — ADON 0000 00-0 127, 150
9Fh            ADCON1 ADFM ADCS2 — — PCFG3 PCFG2 PCFG1 PCFG0 00-- 0000 128, 151

Si no fuera asi, si no estuviera bien, el MPLAB al simularlo no dejaria poner los bits analogicos a 1, y el programa lo simule y anda bien.
Hace algun tiempo, cuando me pase a la serie 16f88X porque la 87X la dejaban de fabricarla, no puse a 0X00 los reg. ANSEL y ANSELH, y el MPLAB no me dejaba poner a 1 estos pines del PORTA y PORTB, si el MPLAB deja activarlos y desactivarlos es porque estan bien configurados.
Leon en el mensaje anterior creo que querias poner HARDWARE en lugar de SOFTWARE, VERDAD?

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: No puedo prender led PIC16F873A
« Respuesta #10 en: 15 de Agosto de 2010, 09:53:01 »
El registro ADCON1 es quien coloca los pines en analógicos o digitales. Los bit son del PCFG3 al PCFG0.
En el datasheet hay una pequeña rutina para colocar las salidas en digitales:


        BCF     STATUS,RP0
        BCF     STATUS,RP1
        CLRF    PORTA
        BSF     STATUS,RP0          ;BANCO 1
        MOVLW   0X06
        MOVWF   ADCON1              ;TODAS DIGITALES
        MOVLW   0XCF
        MOVWF   TRISA


Por lo tanto, lo que hizo gonz147 está bien.
Si, me refería al HARDWARE, ya lo modifico.

También puede haber otro problema. los 8 pines del puerto B están como entrada, si las mismas están en el aire, es una hermosa antena para las RF y hacen que el pic se comporte de cualquier manera.

Otra cosa que se me pasó por alto, son los fuses. Seguramente no lo has configurado correctamente a la hora de quemar el pic. Como no lo has echo en el programa presente, lo tienes que hacer con el programa para cargar el software.
Dinos Gonzalo, ¿con qué programa cargaste el programa al PIC? ¿Cómo configuraste la configuración del PIC? Se me hace que tenés habilitado el perro guardián y la programación a bajo voltaje, también habilitado (LVP).
« Última modificación: 16 de Agosto de 2010, 10:54:29 por Leon Pic »
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado gonz147

  • PIC10
  • *
  • Mensajes: 22
Re: No puedo prender led PIC16F873A
« Respuesta #11 en: 15 de Agosto de 2010, 14:56:13 »
Buenas gente, definitivamente el problema era el haber puesto el puerto b como entrada, lo tenia así porque en el puerto b tengo conectado un display.

Gracias a todos por las respuestas

Saludos
Firmat - Santa Fe - Argentina