desktop

Curso de programación de PIC en PICBasic Pro

amigo ludbeck me imagino que ese DCD=DEC verdad?

no... DCD mete un 1 segun la posicion que indiques digamos DCD 2 pone 00000100

en este caso metemos DCD B0 donde B0 es el valor del rele y lo agregamos al valor del puerto A, y se reduce un buen el codigo
 
Muy bueno ese también, Aunque si el dato que llega a B0 es otro activa otra cosa seria lo unico, aunque esta genial porque como indicas reduce bastante el código buena esa(y)
 
muy ingenioso ludbeck, muy buen aporte, la pregunta es la siguiente, para mi caso como utlizo el 628A los puertos A.6 y A.7 son para el oscilador, no le afectará a este que esos puesrtos cambien de estado? porque por lo que veo se va a utlizar todo el puerto A.

tambien habria que probarle poniendo no en orden logico osea no partiendo de ACTIVAR 0 sino de cualquier rele osea un ACTIVAR 4 para que se active solo el 4 y no los demas, osea en desorden si permite eso?
 
Última edición:
Rey....
:unsure: no, si no llega de 0 a 7 no creo que haga nada con los reles... no lo he probado... pero no puede ser, ademas de que el RA5 no funcionaria porque ese es solo de entrada..

por otro lado se pude poner un limitador como:
If B0>7 then Goto inicio

despues de la linea de recepcion... pero bueno es otra de tantas maneras de hacerlo...
 
pero hay otra cosa q estamos olvidando que si yo activo el rele 4 por ejm debe llegarme un SMS que el rele 4 esta activado o desactivado segun sea el caso, por para el ejm de ludbeck solo salta a la siguiente linea que corresponde al SMS de "R1 activado"por lo tant tendiamos que direccionar con un goto o gosub a cualquier subrutina que contenga los mensajes de confirmacion
 
bueno es que ahi ya tendrias que pensar que y que va a hacer el micro... como Activar o Desactivar, y pues ya no seria lo mismo... osea la idea en general si pero con modificaciones como mas parametros para decir si es para activar o desactivar, consulta de estado, etc...

bueno tienes un largo camino por recorrer... y yo ya me voy a la camita...:D

buenas noches... a ambos....
 
Alguien me puede ayudar es con un programa en PROTON que es muy similar a PBP

El tema es asi es un control remoto, quiero que este en modo sleep hasta que aprete un boton, tengo 3 botones en GP1, GP4 y GP5


Device 12F683
Config INTRC_OSC_NOCLKOUT,WDT_OFF,MCLRE_OFF,CP_Off,PWRTE_ON
All_Digital=True ' Coloca todo los pines como digitales (PBP alldigital)

Include "modedefs.bas"
TRISIO = %11111010 ;Pongo todo como entrada menos gpio.0 y gpio.2
CMCON0 = 7 ;12f683 Analog comparators off (en 12f629 es CMCON = 7)
GPIO = 0 ;apaga todas las salidas

TRISIO.2 = 0 ' CCP1 (GPIO.2 = Output)
PR2 = 25 ' Set PWM Period for approx 38KHz
CCPR1L = 13 ' Set PWM Duty-Cycle to 50%
CCP1CON = %00001100 ' Mode select = PWM
T2CON = %00000100 ' Timer2 ON + 1:1 prescfale


INTCON.7 = 1 ' Turn Off global interrupts
INTCON.3 = 1 ' Enable PortB[4..7] interrupt

start:

INTCON.0 = 0 ' Clear the PortB[4..7] interrupt flag
Sleep

If GPIO.5 = 1 Then
SerOut GPIO.0,N1200,[$FF,$FF,"12345","A","1"] ;Envia con la clave 12345 y el dato A
High GPIO.0 : DelayMS 4000
GoTo start
EndIf

If GPIO.4 = 1 Then
SerOut GPIO.0,N1200,[$FF,$FF,"12345","B"] ;Envia con la clave 12345 y el dato A
High GPIO.0 : DelayMS 4000
GoTo start
EndIf

If GPIO.3 = 1 Then
SerOut GPIO.0,T1200,[$FF,$FF,"12345","C"] ;Envia con la clave 12345 y el dato A
High GPIO.0 : DelayMS 4000
GoTo start
EndIf

If GPIO.1 = 1 Then
SerOut GPIO.0,N1200,[$FF,$FF,"12345","C"] ;Envia con la clave 12345 y el dato A
High GPIO.0 : DelayMS 4000
GoTo start
EndIf

GoTo start

El programa anda perfecto si borro la instruccion "sleep" pero si la dejo no se despierta nuncaaa
 
mmm primero... para que quieres que se "duerma"???? si es para bajar el consumo, date cuenta que un micro consume algo asi como 20mA, digamos en stanby... lo de dos LEds...:eek: es mmuy poco...
 
mmm primero... para que quieres que se "duerma"???? si es para bajar el consumo, date cuenta que un micro consume algo asi como 20mA, digamos en stanby... lo de dos LEds...:eek: es mmuy poco...

Es un control remoto con una pilita CR2032 (d eunos 230mAh), por eso tiene que consumir muy poco en reposo tiene que durar mucho tiempo
 
Biker2k3

..... El programa anda perfecto si borro la instruccion "sleep" pero si la dejo no se despierta nuncaaa
En PROTON+ Compiler Development Suite debes utilizar la sentencia:

Código:
SLEEP [[I][COLOR=royalblue]tiempo[/COLOR][/I]]
Que encontraras en la página 371 de 405 del archivo Proton Users Guide.
donde tiempo es un número de 1 a 65535 y donde cada unidad representa 1 seg. Esta función en PROTON+ usa el WatchDogTimer que tu has deshabilitado.


También puedes utilizar la función Sleep directamente en ASM colocada dentro de tu programa en PROTON de la siguiente manera:

Código:
ASM
[[I]label[/I]] SLEEP
ENDASM
Para lo cual deberas leer en la Datasheet del Pic12F683 la página N° 110 de 176.

El Proton+ no soporta la función NAP que posee el PicBasicPro que además solo coloca al Pic en Sleep por un maximo de 2,304 Segundos (menos de 2 seg. y medio).



Saludos, JuanKa.-
 
Última edición:
Mañana continuo por aca mucho éxito amigos buenas noches (y)

Hola amigo Reyvilla retomando lo de ayer he avanzado en el codigo, bueno el problemita que tengo esque tengo que poner algunos enter para que se active o desactive el rele, puesto que como esta en la línea del SERIN2 pongo un pause de 100ms y luego de eso que vaya al otro SERIN2, por lo tanto como esta en ese bucle, si el rele esta desactivado yo pongo "Activar R1" y si no cae justo en la linea que contiene esa palabra toca volver a enviar osea teclear enter.

Por otro lado vi que ya no es necesario poner la instruccion SKIP, puesto que con el WAIT es mas q suficiente.

Si puedes revisale y simulale por favor y me comentas que paso.

Código:
include "modedefs.bas"
DEFINE OSC 4
CMCON=7
TRISA = %00000000 'todo el puerto a como salida
TRISB = %00000001 'todo el puerto b como salida menor portb.0 es entrada
SYMBOL REL1 = PORTA.0
SYMBOL REL2 = PORTA.1
SYMBOL REL3 = PORTA.2
SYMBOL REL4 = PORTA.3
SYMBOL REL5 = PORTA.4
SYMBOL REL6 = PORTA.5

SYMBOL RX = PORTB.0   'RX ENTRADA 
SYMBOL TX = PORTB.1   'TX SALIDA
B0 VAR BYTE
B1 VAR BYTE
;TX = 1
'serout2 Tx,16780,[13] 'ponle esta linea tambien

INICIO:
    GOTO ACTIVAR

ACTIVAR:
    SerIn2 tX,16468,100,DESACTIVAR,[WAIT("Activar R"),DEC B0]
    
    SELECT CASE B0

        CASE 0
            serout2 RX,16468,["ERROR DE COMANDO"]
            GOTO INICIO

        CASE 1
            HIGH REL1
            PAUSE 1000
            GOTO ENVIAR1
            GOTO INICIO

        CASE 2
            HIGH REL2
            PAUSE 1000
            GOTO ENVIAR2
            GOTO INICIO

        CASE 3
            HIGH REL3
            PAUSE 1000
            GOTO ENVIAR3
            GOTO INICIO
    end select
    GOTO INICIO
    
DESACTIVAR:
    SerIn2 tX,16468,100,INICIO,[WAIT("Desactivar R"),DEC B1]  
    
    SELECT CASE B1

        CASE 0
            serout2 RX,16468,["ERROR DE COMANDO"]
            GOTO INICIO

        CASE 1
            LOW REL1
            PAUSE 1000
            GOTO DESACTIVAR1
            GOTO INICIO

        CASE 2
            LOW REL2
            PAUSE 1000
            GOTO DESACTIVAR2
            GOTO INICIO

        CASE 3
            LOW REL3
            PAUSE 1000
            GOTO DESACTIVAR3
            GOTO INICIO
    end select
    GOTO INICIO

ENVIAR1:
    serout2 RX,16468,["AT+CMGF = ",#B0,13]
    PAUSE 1000
    serout2 RX,16468,["AT+CMGS=",34,"092661649",34,13]
    PAUSE 1000
    SEROUT2 RX,16468,["R1 activado ",#B0,26]
    GOTO INICIO
    
ENVIAR2:
    serout2 RX,16468,["AT+CMGF = ",#B0,13]
    PAUSE 1000
    serout2 RX,16468,["AT+CMGS=",34,"092661649",34,13]
    PAUSE 1000
    SEROUT2 RX,16468,["R2 activado ",#B0,26]
    GOTO INICIO
    
ENVIAR3:
    serout2 RX,16468,["AT+CMGF = ",#B0,13]
    PAUSE 1000
    serout2 RX,16468,["AT+CMGS=",34,"092661649",34,13]
    PAUSE 1000
    SEROUT2 RX,16468,["R3 activado ",#B0,26]
    GOTO INICIO
    
DESACTIVAR1:
    serout2 RX,16468,["AT+CMGF = ",#B0,13]
    PAUSE 1000
    serout2 RX,16468,["AT+CMGS=",34,"092661649",34,13]
    PAUSE 1000
    SEROUT2 RX,16468,["R1 desactivado ",#B0,26]
    GOTO INICIO
    
DESACTIVAR2:
    serout2 RX,16468,["AT+CMGF = ",#B0,13]
    PAUSE 1000
    serout2 RX,16468,["AT+CMGS=",34,"092661649",34,13]
    PAUSE 1000
    SEROUT2 RX,16468,["R2 desactivado ",#B0,26]
    GOTO INICIO
    
DESACTIVAR3:
    serout2 RX,16468,["AT+CMGF = ",#B0,13]
    PAUSE 1000
    serout2 RX,16468,["AT+CMGS=",34,"092661649",34,13]
    PAUSE 1000
    SEROUT2 RX,16468,["R3 desactivado ",#B0,26]
    GOTO INICIO

Amigo ludbeck si puedes revisale este codigo.

gracias
 
Última edición por un moderador:
El Proton+ no soporta la función NAP que posee el PicBasicPro que además solo coloca al Pic en Sleep por un maximo de 2,304 Segundos (menos de 2 seg. y medio).

oki.... no sabia eso... casi proton no lo he usado... estaba adivinando, como dicen "quien quite es chicle y pega" :D

Gracias por la aclaracion JuanKa....

Pull

mmmm... como que no me agrada mucho ese codigo... donde entra al bucle "desactivar"????
 
Si amigo creeme que a mi tampoco me agrada mucho q digamos, sucede que esta en un bucle entre el primero serin2 y el segundo serin2 puesto que: SERIN2 RX,16468,100,DESACTIVAR,[WAIT("Activar R"),DEC B0], osea si no ve la palabra "Activar R", pasa a DESACTIVAR en la cual esta contenido el: SerIn2 tX,16468,100,INICIO,[WAIT("Desactivar R"),DEC B1], SI no recibe la palabra "Desactivar R" vuelve a inicio, y asi se mantiene hasta que vea una de esas dos palabras
 
mmm.. no me refiero a que como lo tienes se mantiene dentro del bucle "Activar" si llega algo se va a los bucles enviar1 enviar 2 etc y de ahi se va de nuevo a el bucle "Activar y ahi se mantiene...

la pregunta que te debes hacer es cuando va a pasar por el bucle "Desactivar", si no se me pasa por alto algo nunca va a pasar por ahi asi como lo tienes...

a mi se me ocurre que desde el Modem debes de mandar algo asi como "AccionA" o "AccionD" y de ahi se va a un bucle que espere a que se reciba "Activar 1" o "Desactivar 2"... segun sea el caso
 
Atrás
Arriba