TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Atomium en 29 de Diciembre de 2013, 15:03:44

Título: Problema con Leds y un solo pulsador
Publicado por: Atomium en 29 de Diciembre de 2013, 15:03:44
Hola a todos,
Ante todo desearos un feliz año 2014.


Os explico, hace tiempo que no programo un PIC y ando de memoria algo mal.


Quiero hacer una cosa muy sencilla, pero... no me cuerdo como hacerlo, os lo explico, quiero con un solo pulsador encender 2 leds, pero si fuese solo eso seria muy facil. Quiero que al pulsar el pulsador conectado a RA0 se encienda y se apague 1 led conectado a RA1 y si pulso otra vez el mismo pulsador se encienda y se apague otro led conectado a RA2.

Esto seria para 1 led

Comienzo

If RA0 = 1 Then RA1 = 1

Goto led2

Led2

If RA0 = 1 Then RA2 = 1


Goto Comienzo


Saludos


Título: Re: Problema con Leds y un solo pulsador
Publicado por: dogflu66 en 29 de Diciembre de 2013, 17:09:36
Es relativamente facil:

Código: [Seleccionar]
AllDigital  'Todo el PortA como digital (I/O)
ConfigPin RA0 = Input  'Pin como entrada
ConfigPin RA1 = Output  'Pin como salida
ConfigPin RA2 = Output  'Pin como salida
RA1 = 0  'Pin a estado bajo, led1
RA2 = 0  'Pin a estado bajo, led2

Dim flag As Bit  'Bandera de control, establece el turno del led
flag = 0  'Bit a cero

'Rutina principal
void_main:

If RA0 = 1 And flag = 0 Then Gosub led1  'Si se cumple, salto con retorno a Led1
If RA0 = 1 And flag = 1 Then Gosub led2  'Si se cumple, salto con retorno a Led2

Goto void_main
End                                               
'Rutina para el control del parpadeo led1
led1:
RA1 = 1  'Pin RA1 a estado alto
WaitMs 500  'Pausa de medio segundo
RA1 = 0  'Pin RA1 a estado bajo
WaitMs 500
Toggle flag  'Invierte bit
Return                                           
'Rutina para el control del parpadeo led2
led2:
RA2 = 1
WaitMs 500
RA2 = 0
WaitMs 500
Toggle flag
Return   
Título: Re: Problema con Leds y un solo pulsador
Publicado por: Atomium en 30 de Diciembre de 2013, 08:02:42
Buenas a todos,


Muchas gracias dogflu66.

LLevo al menos 6 años sin tocar un microcontrolador, me voy a poner las pilas de nuevo y a intentar recuperar un poco el tiempo perdido.

Gracias de  nuevo

Feliz año nuevo


Saludos
Título: Re: Problema con Leds y un solo pulsador
Publicado por: Atomium en 30 de Diciembre de 2013, 08:57:44
Hola de nuevo dogflu66


Que compilador usastes ?


Saludos
Título: Re: Problema con Leds y un solo pulsador
Publicado por: dogflu66 en 30 de Diciembre de 2013, 19:54:23
Felices fiestas tambien para ti y para todos los que estan por aquí.
Uso el entorno de trabajo Pic Simulator IDE http://www.oshonsoft.com/
Título: Re: Problema con Leds y un solo pulsador
Publicado por: Atomium en 30 de Diciembre de 2013, 20:23:17
Buenas noches,

Gracias,

Mañana lo miraré, no utilicé nunca esa plataforma.

Si lei algo sobre sobre Oshon

Siempre usé Picbasic, Microcode Studio, Proton

Saludos

Título: Re: Problema con Leds y un solo pulsador
Publicado por: Atomium en 01 de Enero de 2014, 17:30:25
Buenas noches,

He programado el pic y no va,

RA1 siempre apagado y RA2 intermitente al rato sin tocar nada.

Saludos




Título: Re: Problema con Leds y un solo pulsador
Publicado por: fco1306 en 02 de Enero de 2014, 06:36:39
¿Tienes bien la configuración en el pic sinulator? Tipo de micro, velocidad cristal, etc
Título: Re: Problema con Leds y un solo pulsador
Publicado por: Atomium en 02 de Enero de 2014, 08:40:41
Buenos dias,

Si , todo perfectamente configurado, compilado y grabado en el PIC y probado en una placa de ensayo.


Deberia de ir , lo que hace que encienda un led u otro es esto :

   If RA0 = 1 And flag = 0 Then Gosub led1  'Si se cumple, salto con retorno a Led1
   If RA0 = 1 And flag = 1 Then Gosub led2  'Si se cumple, salto con retorno a Led2

Pero... no va

Lo he vuelto ha hacer todo, hasta he cambiado de PIC.

Se pone el led conectado a RA2 intermitente y RA1 apagado siempre.



Saludos
Título: Re: Problema con Leds y un solo pulsador
Publicado por: ppyote en 02 de Enero de 2014, 08:56:19
wdt está habilitado?
Título: Re: Problema con Leds y un solo pulsador
Publicado por: Atomium en 02 de Enero de 2014, 09:37:38
Ya habia  probado con el WDT habilitado y sin habilitar por si acaso


Uno de los leds lo tenia mal , lo he cambiado y estan los dos intermitentes, se apaga uno y se enciende el otro.

Saludos

Título: Re: Problema con Leds y un solo pulsador
Publicado por: dogflu66 en 02 de Enero de 2014, 19:29:36
Este lo he probado sobre la pic EBasic y funciona.

Código: [Seleccionar]
'**********************************************************************************
'Programa de ejemplo para trabajar con led y teclas
'Placa PicEBasic, 01/2014
'Basic Pic Simulator IDE (PSI), v6.96_04, Pic16F88
'**********************************************************************************
'----------------------------------------------------------------------------------
Define CONF_WORD = 0x2f50
Define CONF_WORD_2 = 0x3ffc
Define CLOCK_FREQUENCY = 8  'Oscilador a 8Mhz
'Define SIMULATION_WAITMS_VALUE = 1  'Activar para simulación
'-----------------------------------------
Call _setupebasic()  'Inicializa la placa entrenadora PicEBasic.
Hseropen 38400  'Inicializa puerto RS232 por hardware a 38400Baudios
Lcdinit  'Inicializa el LCD sin cursor
WaitMs 100  'Pausa de 100 mSeg.
Lcdout "Led y Teclas"  'Imprime el texto en el LCD
WaitMs 1000  'Pausa de 1 Seg.
'-----------------------------------------
Const ledon = 0  'Led encendido
Const ledoff = 1  'Led apagado
Const teclaon = 0  'Tecla pulsada

ledv = ledoff  'Led verde a Off
leda = ledoff  'Led ambar a Off

Dim flag As Bit  'Bandera de control, establece el turno del led
flag = 0  'Bit a cero

'Rutina principal
void_main:

If tecla2 = teclaon And flag = 0 Then Gosub led1  'Si se cumple, salto con retorno a Led1
If tecla2 = teclaon And flag = 1 Then Gosub led2  'Si se cumple, salto con retorno a Led2

Goto void_main
End                                               
Include "_ProcSetUpEBasic.bas"
'Rutina para el control del parpadeo led1
led1:
ledv = ledon  'Pin RA1 a estado alto
WaitMs 500  'Pausa de medio segundo
ledv = ledoff  'Pin RA1 a estado bajo
WaitMs 500
Toggle flag  'Invierte bit
Return                                           
'Rutina para el control del parpadeo led2
led2:
leda = ledon
WaitMs 500
leda = ledoff
WaitMs 500
Toggle flag
Return
Título: Re: Problema con Leds y un solo pulsador
Publicado por: Atomium en 02 de Enero de 2014, 19:47:09
Buenas noches,

Gracias, mañana lo grabaré en el pic 16F84 y haré la prueba.

Ya os comentaré que tal ha ido.


Saludos

Título: Re: Problema con Leds y un solo pulsador
Publicado por: Atomium en 04 de Enero de 2014, 14:09:30
Hola,

A ti te va el programa porque lo usas con la pic EBasic y tambien le incluyes :

Include "_ProcSetUpEBasic.bas"


Sin este fichero no va.


Saludos

Título: Re: Problema con Leds y un solo pulsador
Publicado por: dogflu66 en 04 de Enero de 2014, 14:19:13
Si, es la configuración de la placa, el include me permite simplificar el programa principal.

Código: [Seleccionar]
'****************************************************************************
'Configuración de la placa entrenadora Pic EBasic ***************************
'By COS, 01/14, 11/2013, Pic Simulator IDE v6.96_04 *************************
'Pic16F88 y LCD con linea de datos a 4 Bit sin Bit R/W **********************
'****************************************************************************
'Include "_ProcSetUpEBasic.bas"
Symbol ledv = RB0  'Etiqueta al led verde
Symbol leda = RA7  'Etiqueta al led amarillo
Symbol blcd = RB3  'Etiqueta al backlight del lcd
Symbol tecla1 = RA6  'Etiqueta a la tecla S1
Symbol tecla2 = RA5  'Etiqueta a la tecla S2
'Codigos Ascci de control del Hyperterminal
Const ff = 0x0c  'FF, Avance de pagina
Const bell = 0x07  'BELL, Señal sonora
Const sp = 0x20  'SP, Espacio
Const bksp = 0x08  'BKSP, Retroceso
Const cr = 0x0d  'CR, retorno de carro
'-----------------------------------------
Proc _setupebasic()
'Puerto del LCD ----------------------------------------------------------
Define LCD_BITS = 4  'Bus de datos del lcd, a 4bit
Define LCD_DREG = PORTA  'Bus de datos, puerto A
Define LCD_DBIT = 0  'Bus datos 4, bit menos significativos del puerto
Define LCD_RSREG = PORTB  'Bit de control RS, puerto B
Define LCD_RSBIT = 7  'RB7 como RS
Define LCD_EREG = PORTB  'Bit de control E, puerto B
Define LCD_EBIT = 6  'RB6 como E
Define LCD_COMMANDUS = 2000  'Espera despues de cada comando
Define LCD_DATAUS = 100  'Espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 50  'Espera inicialización del Display
'Configuración Placa Pic EBasic -----------
AllDigital
ANSEL = 0x00  'Los pin I/O digitales
CMCON = 0x07  'Comparador a off
OSCCON = 0x7e  'Reloj interno a 8Mhz
TRISA = 0x00  'Puerto A como salidas
TRISB = 0x00  'Puerto B como salidas
TRISA.4 = 1  'Como entrada (RA4, adc)
TRISA.6 = 1  'Como entrada (RA6, tecla S1)
TRISA.5 = 1  'Como entrada (RA5, tecla S2)
TRISB.5 = 0  'Como salida(RB5,Tx RS232)
TRISB.2 = 1  'Como entrada (RB2, Rx RS232)
TRISB.4 = 1  'Como entrada (RHT03 inicio)
PORTB.3 = 1  'Luz lcd a ON (RB3)
PORTA.7 = 1  'Led amarillo a OFF
PORTB.0 = 1  'Led verde a OFF
PORTB.1 = 0  'LED RHT03 a OFF
'-----------------------------------------
'Lcdinit
End Proc                                         
Título: Re: Problema con Leds y un solo pulsador
Publicado por: dogflu66 en 04 de Enero de 2014, 14:21:53
He quitado el Include del SeUp de la placa EBbasic.
Se le ha eliminado la configuración del display y del puerto serie.
Solo he dejado la configuración de los pin I/O y del reloj interno.
Como el micro no es el mismo que el tuyo tienes que reconfigurar los fuses, los pin de entrada y los de salida.
Y si cambias los pin en las etiquetas (symbol) no tienes que tocar el resto del programa.

Código: [Seleccionar]
'**********************************************************************************
'Programa de ejemplo para trabajar con led y teclas
'Placa PicEBasic, 01/2014
'Basic Pic Simulator IDE (PSI), v6.96_04, Pic16F88
'**********************************************************************************
'----------------------------------------------------------------------------------
Define CONF_WORD = 0x2f50
Define CONF_WORD_2 = 0x3ffc
Define CLOCK_FREQUENCY = 8  'Oscilador a 8Mhz
'Define SIMULATION_WAITMS_VALUE = 1  'Activar para simulación
'-----------------------------------------
AllDigital  'Los pin I/O digitales
OSCCON = 0x7e  'Reloj interno a 8Mhz
TRISA = 0x00  'Puerto A como salidas
TRISB = 0x00  'Puerto B como salidas
TRISA.6 = 1  'Como entrada (RA6, tecla S1)
TRISA.5 = 1  'Como entrada (RA5, tecla S2)
'-----------------------------------------
WaitMs 1000  'Pausa de 1 Seg.
'-----------------------------------------
Symbol ledv = RB0  'Etiqueta al led verde
Symbol leda = RA7  'Etiqueta al led amarillo
Symbol tecla1 = RA6  'Etiqueta a la tecla S1
Symbol tecla2 = RA5  'Etiqueta a la tecla S2
Const ledon = 0  'Led encendido
Const ledoff = 1  'Led apagado
Const teclaon = 0  'Tecla pulsada

ledv = ledoff  'Led verde a Off
leda = ledoff  'Led ambar a Off

Dim flag As Bit  'Bandera de control, establece el turno del led
flag = 0  'Bit a cero

'Rutina principal
void_main:

If tecla2 = teclaon And flag = 0 Then Gosub led1  'Si se cumple, salto con retorno a Led1
If tecla2 = teclaon And flag = 1 Then Gosub led2  'Si se cumple, salto con retorno a Led2

Goto void_main
End                                              
'Rutina para el control del parpadeo led1
led1:
ledv = ledon  'Pin RA1 a estado alto
WaitMs 500  'Pausa de medio segundo
ledv = ledoff  'Pin RA1 a estado bajo
WaitMs 300
Toggle flag  'Invierte bit
Return                                            
'Rutina para el control del parpadeo led2
led2:
leda = ledon
WaitMs 500
leda = ledoff
WaitMs 300
Toggle flag
Return
Título: Re: Problema con Leds y un solo pulsador
Publicado por: Atomium en 19 de Enero de 2014, 17:27:02
Hola,

Primero dar las gracias a dogflu66 por su ayuda, sin su ayuda me habria sido imposible hacerlo.

Haciendole unos cambios me ha llegado a funcionar el el Real Pic Simulator:

Aqui pongo el codigo con los cambios efectuados por si lo necesita alguien:

'**********************************************************************************
'Programa de ejemplo para trabajar con led y pulsador
' Pic16F84 a 4 Mhz
'**********************************************************************************
'----------------------------------------------------------------------------------

Define CLOCK_FREQUENCY = 4  'Oscilador a 4Mhz

'-----------------------------------------
AllDigital          'Los pin I/O digitales
TRISA = 0x00  'Puerto A como salidas
TRISB = 0x00  'Puerto B como salidas
TRISA.0 = 1    'Como entrada (RA6, tecla S1)
'-----------------------------------------
WaitMs 1000  'Pausa de 1 Seg.
'-----------------------------------------
Symbol ledv = RA1        'Etiqueta al led verde
Symbol leda = RA2        'Etiqueta al led amarillo
Symbol tecla1 = RA0      'Etiqueta a la tecla S1
Const ledon = 0             'Led encendido
Const ledoff = 1             'Led apagado
Const teclaon = 0           'Tecla pulsada

ledv = ledoff                'Led verde a Off
leda = ledoff                'Led ambar a Off

Dim flag As Bit               'Bandera de control, establece el turno del led
flag = 0  'Bit a cero

'Rutina principal
void_main:

   If tecla1 = teclaon And flag = 0 Then Gosub led1         'Si se cumple, salto con retorno a Led1
   If tecla1 = teclaon And flag = 1 Then Gosub led2         'Si se cumple, salto con retorno a Led2

Goto void_main
End
'Rutina para el control del parpadeo led1
led1:
   ledv = ledoff  'Pin RA1 a estado bajo
   WaitMs 500    'Pausa de medio segundo
   ledv = ledon  'Pin RA1 a estado alto
   WaitMs 300
   Toggle flag    'Invierte bit
Return
'Rutina para el control del parpadeo led2
led2:
   leda = ledoff
   WaitMs 500
   leda = ledon
   WaitMs 300
   Toggle flag
Return


Título: Re: Problema con Leds y un solo pulsador
Publicado por: dogflu66 en 20 de Enero de 2014, 05:44:42
Felicidades; me alegró saber que te ha funcionado. ((:-))