Autor Tema: Controlar Puerto A, con 16f628...ayudaaa!!!  (Leído 4137 veces)

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

Desconectado jergata

  • PIC10
  • *
  • Mensajes: 6
Controlar Puerto A, con 16f628...ayudaaa!!!
« en: 09 de Diciembre de 2008, 19:32:09 »
hola vengo programando en el pic16f628 un juego de luces el cual empieze a ser funcionar solo cuando se active por el puertoA.0 un pulso(pull-up)...llevo horas en esto pero el meollo del asunto es q cuando pulso el boton del puerto A como lo determino en la programacion ni el menor caso hace el pic.....si algn m podria ayudar le agradeceria de antemano, el software que utilizo es el Proton Ide y aqui dejo el link para ver el esquema al cual hago referencia..

http://www.4shared.com/file/74791612/f441b60c/controlA.html?dirPwdVerified=db0fbc5a

Y aqui dejo abierto el codigo de programacion de dicho problema, es mujy sencillo el unico problema como dije es q el puerto A, no realiza el menor cambio en lo q deseo realizar

Codigo de Programación:

Config INTRC_OSC_NOCLKOUT , WDT_OFF , PWRTE_ON , BODEN_OFF , CP_OFF
XTAL=4
Device=16F628
'TRISA=%00000011
TRISB=%00000000
Dim m As Byte
Dim v As Byte
Dim t As 100
Symbol j=PORTA.0
j=Peek PORTA.0
empezar:
If j=1 Then
    GoTo iniciar1
ElseIf j=0 Then
    PORTB=%00000011
    GoTo empezar
EndIf
iniciar1:
m=1
Call mostrar1
secasc: 
If m=128 Then GoTo iniciar2
m=m*2
GoTo mostrar1
mostrar1:
Poke PORTB,m
DelayMS t
GoTo secasc
iniciar2:
m=128
Call mostrar2
secdesc:
m=m/2
If m=0 Then empezar
GoTo mostrar2
mostrar2:
Poke PORTB,m
DelayMS t
GoTo secdesc
End

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Controlar Puerto A, con 16f628...ayudaaa!!!
« Respuesta #1 en: 09 de Diciembre de 2008, 20:04:42 »
Hola:

Tienes que apagar los comparadores del Puerto A, pues no es digital y tu quieres usarlo como entrada digital, para ello puedes utilizar y referirte a las hojas de datos de ese microcontrolador sobre el registro CMCON o utilizar ALL_DIGITAL=TRUE, te quedaría algo como esto:

Config INTRC_OSC_NOCLKOUT , WDT_OFF , PWRTE_ON , BODEN_OFF , CP_OFF
XTAL=4
Device=16F628
ALL_DIGITAL=TRUE
TRISA=%00000011
TRISB=%00000000
Dim m As Byte
Dim v As Byte
Dim t As 100
empezar:
If PORTA.0=1 Then
    GoTo iniciar1
Else
    PORTB=%00000011
    GoTo empezar
EndIf
iniciar1:
m=1
Call mostrar1
secasc: 
If m=128 Then GoTo iniciar2
m=m*2
GoTo mostrar1
mostrar1:
Poke PORTB,m
DelayMS t
GoTo secasc
iniciar2:
m=128
Call mostrar2
secdesc:
m=m/2
If m=0 Then empezar
GoTo mostrar2
mostrar2:
Poke PORTB,m
DelayMS t
GoTo secdesc
End

Tambien te he cambiado algo, PEEK y POKE no son recomendados, el mismo manual de ayuda así lo dice:


Syntax

Variable = PEEK Address
 
Overview

Retrieve the value of a register and place into a variable
 
Operators

Variable - a user defined variable of type bit, byte, byte array, word, word array, dword or float.   
Address - a constant or a variable, pointing to the address of a register.
Example 1

A = PEEK 15
 
Variable A will contain the value of Register 15. If the device is a 16F84, for example, this register is one of the 68 general-purpose registers (RAM).
 
Example 2

B = 15
A = PEEK B
 
Same function as example 1
 
Notes

Use of the Peek command is not recommended. A more efficient way of retrieving the value from a register is by accessing the register directly: -
 
VARIABLE = REGISTER


Así que puedes preguntar directamente por el estado de un pin o puerto determinado, tambien revisa la sintaxis del IF, como trabajas con un solo bit, pues tendrás dos valores solamente, 0 o 1, así que no es necesario usar un elseif.

Saludos.

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
Re: Controlar Puerto A, con 16f628...ayudaaa!!!
« Respuesta #2 en: 04 de Enero de 2009, 07:03:48 »
Puede que te funcione un programa asi hasta en simulacion de proteus pero en lo real dificilmente y es porque los pines del puerto a del 16f628a tienen entradas que pueden trabajar analogamente(comparadores analogos)
y si se desea trabajar netamete digital solo poner esto en la cabecera CMCON=%00000111 (ver datasheet) y asunto arreglado el puerto a trabajara digitalmente .

Espero no sea demasiado tarde la respuesta

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Controlar Puerto A, con 16f628...ayudaaa!!!
« Respuesta #3 en: 04 de Enero de 2009, 11:44:30 »
>Hola buenos dias te recomeindo que definas bien el puerto para asi decirle al pic si tui puesto esta como entra y digital para eso lee la datasheets del pic16f628 y asi te aclararas un poco mas sobre tu proyecto.

Saludos y espero te sirva de algo los consejos expuesto.
Atten.
Alexander Santana.
Barcelona-Venezuela
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado CoreMain

  • PIC10
  • *
  • Mensajes: 26
Re: Controlar Puerto A, con 16f628...ayudaaa!!!
« Respuesta #4 en: 11 de Enero de 2009, 23:22:27 »
Una pregunta:
Estaba viendo el código y me pregunto porqué desactivan el WDT, [Config INTRC_OSC_NOCLKOUT , WDT_OFF , PWRTE_ON , BODEN_OFF , CP_OFF] ???

Se supone que impide que el micro "se cuelgue" o me equivoco???


Saludos desde Ecuador: El centro del Mundo
_______________________________
Over the Hills and Far Away...

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
Re: Controlar Puerto A, con 16f628...ayudaaa!!!
« Respuesta #5 en: 12 de Enero de 2009, 02:08:06 »
si pones wdt on se colgara o reseteara ; a menos que en tu rutina de programa lo limpies a cada rato , se usa en caso que quieras tener una salida en caso se cuelgue el micro (se pierda en una direccion de programa que no le corresponde) y cuando este demasiado tiempo perdido el wdt se activara y lo reseteara , se supone que estas limpiando el wdt de tanto en tanto en tu rutina de programa en que debe de funcionar normalmente pero si no lo haces se reseteara de todas maneras asi que en caso no estes neecsitando poner este salvataje en caso de cuelgues es mejor desactivar el wdt , te recomeindo leas al respecto sobre el wdt q esta mejor explicado :mrgreen:

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Controlar Puerto A, con 16f628...ayudaaa!!!
« Respuesta #6 en: 12 de Enero de 2009, 19:11:51 »
Como bien dice el compañero, el Watch Dog es un modulo contador, que tiene la propiedad de generar un Reset al micro cuando se desborda (llega al final del contaje) y esta operación la realiza por lo general en pocos mSeg., según la configuración que se le de. Por lo que el programador tiene que inescrutar a lo largo del programa una pequeña rutina que lo borra antes de que desborde, esto hace que comience de nuevo a incrementarse desde cero o principio. Por lo que en general el programador primero termina el programa y una vez probado este, se activa el Watch Dog y se inserta el código que lo reinicia. Las veces que el Watch Dog debe ser reiniciado durante el programa son las menos posibles y se recomienda nunca reiniciar a este desde un vector de interrupciones.
Saludos desde Granada, España.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: Controlar Puerto A, con 16f628...ayudaaa!!!
« Respuesta #7 en: 13 de Enero de 2009, 00:12:18 »
buena explicacion dogflu66 :)


 

anything