Banner publicitario de PCBWay

Curso de programación de PIC en PICBasic Pro

Hola como enviar pwm por un pic 12f683 ,el mismo tiene modulo ccp. en la pata 5 o Gpio.2

ccp1con= %0000110 ;%0000110
hpwm ccp1con,100,100

seria asi???
 
A parte de la sugerencia que te dio D@rkbytes te sugiero que si quieres comprender/entender a fondo el uso de ese y otros módulos del pic leas la hoja de datos del PIC en cuestión, el tema de ese modulo se trata de la pagina 77 en adelante.
 

Adjuntos

  • 41211d_.pdf
    2.9 MB · Visitas: 1
saludos cordiales amigos del foro, luego de tantos años vuelvo a retomar los estudios que por infinidad de situaciones me habia alejado, pido su colaboracion en el siguiente programa cuyo fin es realizar un par de secuencias de leds conectadas al puerto b del 16f628a. la secuencia o efecto 1 consiste en el desplazamiento hacia la izquierda y terminado el ciclo se desplaza de derecha a izquierda como efecto 2, , y asi continua indefinidamente hasta que presionando el boton del puerto a enclavaria el efecto que se esta ejecutando de forma indefinida, no logro identificar el porque la compilacion me lanza errore que no logro identificar, aqui el avance del codigo, mil gracias por su generosa contribucion
Código:
@ DEVICE INTRC_OSC, MCLR_OFF, LVP_OFF, WDT_OFF

DEFINE OSC 4
CMCON = 7 ' Deshabilitar comparadores (puerto A digital)
TRISB = %00000000 ' PORTB como salida
TRISA = %00000001 ' RA0 como entrada (Pulsador de enclavamiento)
PORTB = 0

' Variables
i var byte
boton var PORTA.0

Main:
    ' Efecto 1: Desplazamiento Izquierda
    For i = 0 to 7
        PORTB = 1 << i
        PAUSE 100
        Gosub VerificarEnclavar ' Llama a verificar el botón constantemente
    Next i
    
    ' Efecto 2: Desplazamiento Derecha
    For i = 7 to 0 step -1
        PORTB = 1 << i
        PAUSE 100
        Gosub VerificarEnclavar
    Next i
Goto Main

VerificarEnclavar:
    if boton = 0 then ' Si el botón está presionado (lógica negativa)
        Pause 50 ' Pequeño antirrebote
        if boton = 0 then
            ' EFECTO ENCLAVADO: Se queda aquí por siempre
            goto $
        endif
    endif
Return
 
Hola, dejame sacar un poco el oxido que tengo.. estas usando MPASM? Tenes pbp 2.47 o pbp 3? La verdad que hace rato que no lo estoy usando, peronfijate si te conpila así:

Código:
' --- Configuración de Fusibles ---
#CONFIG
__config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLR_OFF & _LVP_OFF & _CP_OFF
#ENDCONFIG

' --- Definiciones ---
DEFINE OSC 4
CMCON = 7       ' Puerto A digital
TRISB = 0       ' Puerto B como salida
TRISA = 1       ' RA0 como entrada
PORTB = 0

' --- Variables ---
i var byte
boton var PORTA.0

Main:
' Efecto 1: Desplazamiento Izquierda (0 a 7)
For i = 0 to 7
PORTB = 1 << i
Pause 100
Gosub VerificarEnclavar
Next i

' Efecto 2: Desplazamiento Derecha (7 a 0)
For i = 7 to 0 step -1
PORTB = 1 << i
Pause 100
Gosub VerificarEnclavar
Next i
Goto Main

VerificarEnclavar:
If boton = 0 then       ' Si presionas (asumiendo Pull-up externa)
Pause 50            ' Antirrebote
If boton = 0 then
' Bucle infinito para "enclavar" el LED actual
Enclavado:
Goto Enclavado
Endif
Endif
Return

End

Si le pifio, seguro que Dark va a dar con la tecla ;)
 
Buenas noches amigo Torres Electronico,gracias por el interes, ando bastante oxidado como comentaba tuve que lastimosamente dejar las practicas y el estudio y tratando de retomar los temas despues de años, efectivamente el programa compila y simula, la cuestion es que enclava pero un solo led y la idea es que enclave el efecto osea si esta corriendo de izquierda a derecha, efecto 1 sea el que se quede enclavado haciendo el desplazamiento indefinidamente y no pase al efecto 2 de derecha a izquierda automaticamente, o si esta corriendo el desplazamiento efecto 2 al presionar buton pues sea este el efecto que se mantenga desplazandose indefinidamente, hasta que reinicie el reset, no se como crear un bucle infinito en la misma línea de código, impidiendo que el programa continúe con el efecto siguiente automaticamente. gracias mil por la atencion prestada.
 
Buenas noches amigo Torres Electronico,gracias por el interes, ando bastante oxidado como comentaba tuve que lastimosamente dejar las practicas y el estudio y tratando de retomar los temas despues de años, efectivamente el programa compila y simula, la cuestion es que enclava pero un solo led y la idea es que enclave el efecto osea si esta corriendo de izquierda a derecha, efecto 1 sea el que se quede enclavado haciendo el desplazamiento indefinidamente y no pase al efecto 2 de derecha a izquierda automaticamente, o si esta corriendo el desplazamiento efecto 2 al presionar buton pues sea este el efecto que se mantenga desplazandose indefinidamente, hasta que reinicie el reset, no se como crear un bucle infinito en la misma línea de código, impidiendo que el programa continúe con el efecto siguiente automaticamente. gracias mil por la atencion prestada.
Hola , si veo algunos problemas lógicos.
A mi me gusta mas el Assembler , pero para muchos, es mas duro, asi que.....
Tratando de acercarme a lo tuyo , hice un arreglo de tu problema.
Tratá de aprender a manejear interrupciones , así vas a dar un salto de "calidad" en la resolusión de tus programas.
Despues pasalo a tu sintáxis. Saludos
👇
----------------------------------------------------------------------
Código:
@ DEVICE INTRC_OSC, MCLR_OFF, LVP_OFF, WDT_OFF

DEFINE OSC 4
CMCON = 7 ' Deshabilitar comparadores (puerto A digital)
TRISB = %00000000 ' PORTB como salida
TRISA = %00000001 ' RA0 como entrada (Pulsador de enclavamiento)
PORTB = 0

' Variables
i var byte
boton var PORTA.0
----------------------------------Programa
Main:
set botonOK = 0
set efecto = 0

Efecto1: .................rem Izquierda
efecto =1
For i = 0 to 7
PORTB = 1 << i
PAUSE 100
if botonOK = 0 then Gosub Verificar
Next i
if botonOK =1 and efecto = 1 then goto Efecto1

Efecto2: ................ rem Derecha
efecto = 2
For i = 7 to 0 step -1
PORTB = 1 << i
PAUSE 100
if botonOK =0 then Gosub Verificar
Next i
if botonOK =1 and efecto =2 then goto efecto 2
Goto Main
---------------------------------------------
Subrutinas :
(esta parte no me gusta mucho como la trataste pero te la dejé, fijate si la podes mejorar )
Verificar:
if boton = 0 then Pause 50
if boton = 0 then botonOK=1
endif
endif
Return
------------------------------------------------
 
Última edición:
Atrás
Arriba