Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
Device 16F876A
Symbol SDA_PORT = PORTC.4
SDA_PIN = PORTC.4
Symbol SCL_PORT = PORTC.3
SCL_PIN = PORTC.3
ALL_DIGITAL = true
LCD_DTPIN = PORTB.4'lcd pins DB4-DB7
LCD_RSPIN = PORTA.1 'lcd pin 4 RS
LCD_WRPIN = PORTA.2
LCD_ENPIN = PORTA.3 'lcd pin 6 EN
LCD_INTERFACE = 8 '4 'pins portb4 - portb7
LCD_LINES = 2
LCD_TYPE = 0
SLOW_BUS = On
Dim light As Byte
Dim rango As Word
Symbol srf1 = $FE
Symbol srf081 = srf1
Symbol srf2 = $E0
Symbol srf082 = srf2
Symbol cmdreg=0
Symbol lightreg=1
Dim posicion As Byte
Dim pos1 As Word
Dim pos2 As Word
Dim pos3 As Word
posicion = 0
pos1 = 1000
pos2 = 1500
pos3 = 2000
Symbol pin PORTC.0
DelayMS 200
Cls
While 1=1
BusOut $FE,$00,[$51]
BusOut srf1,cmdreg,[81]
DelayMS 80 '66
BusIn $FE,$01,[light,rango]
BusIn srf081,lightreg,[light,rango]
Print At 1,1, "Med1=" ,Dec rango, "cm ", DEC2 light,"lux "
DelayMS 100
Wend
Case 1:
If range = 10 Then
Servo pin , pos1
Cls
Print At 2,1,"Estas en frente"
DelayMS 190
Case 2:
If range = 12 Then
Servo pin,pos2
Cls
Print At 2,1,"Estas a la izq"
DelayMS 190
Case :
If range = 8 Then
Servo pin ,pos3
Cls
Print At 2,1,"Estas a la dcha"
DelayMS 190
EndIf
EndIf
EndIf
End Case
Para asociar valores con el uso de los Cases, debes hacerlo de esta forma.no sé como asociar el rango con las instrucciones case.
Mira por aquí: ¿Cómo subo imágenes, archivos y demás?No sé como se pega el rar.
Es muy sencillo, tal vez no estés conectando bien el motor.Buenas tardes, soy nuevo en esto de programar PIC, tengo una tarea que es controlar un motor D.C por medio de PWM en el programa Proton IDE, pero he buscado como hacerlo con HPWM y PWM pero no se mueve el motor D.C.
Por favor, ¿alguien me puede explicar como se debe hacer para moverlo?
Device 16F88
Reminders = False
Config1 INTRC_IO,CCP1_RB3,LVP_OFF,BODEN_OFF,PWRTE_ON,WDT_OFF
Config2 IESO_OFF,FCMEN_OFF
Reminders = True
;*******************************************************************************
Xtal = 8 ; Frecuencia del oscilador
Create_Coff = True
Declare Adin_Res = 8 ; 8 bits para el resultado
Declare Adin_Tad = FRC ; Usar el oscilador RC interno
Declare Adin_Stime = 50 ; 50us para el muestreo
Dim Duty As Byte ; Variable para controlar el ciclo activo.
Inicio:
OSCCON = %01110100 ; Oscilador interno a 8MHz, estable.
TRISB = %11110111 ; Configurar RB3 como salida (CCP1)
Programa:
Duty = ADIn 1 ; Leer el canal 1 y guardar el valor en Duty
HPWM 1,Duty,1000 ; Generar PWM con el ciclo activo de 0 a 100% @ 1KHz.
GoTo Programa
End
Device 16F628A
Reminders = False
Config FOSC_INTOSCIO,WDT_OFF,PWRTE_ON,BOREN_OFF,LVP_OFF
Reminders = True
;*******************************************************************************
Xtal = 4 ; Frecuencia del oscilador (Interno)
Inicio:
PortB_Pullups = True ; Activar resistencias Pull-Up en puerto B
TRISB = %11110111 ; Configurar RB3 como salida (CCP1)
Dim Duty As Byte ; Variable para controlar el ciclo activo.
Duty = 127 ; iniciar el ciclo activo a la mitad (50% Aprox.)
Call Cargar_Duty ; Iniciar el módulo PWM por hardware.
Programa:
If PORTB.1 = 0 Then
DelayMS 50
Duty = Duty +1 ; Incrementar el ciclo activo.
Call Cargar_Duty ; Recargar el periodo del ciclo activo.
End If
If PORTB.0 = 0 Then
DelayMS 50
Duty = Duty -1 ; Decrementar el ciclo activo.
Call Cargar_Duty ; Recargar el periodo del ciclo activo.
End If
GoTo Programa
Cargar_Duty:
HPWM 1,Duty,1000 ; Generar PWM con el ciclo activo de 0 a 100% @ 1KHz.
Return
End
LECTURA:
vadc=0
vadc = ADIn 0
If vadc > 530 Then
GoTo adelante
ElseIf vadc < 490 Then
GoTo atras
Else GoTo inicio
EndIf
adelante:
PWM PORTB.0,70,50
vadc = ADIn 0
ciclo = Abs ((vadc/2)+150)
ciclo=~ciclo
HPWM 1,ciclo,1600
If vadc > 530 Then
GoTo adelante
Else GoTo LECTURA
EndIf
atras:
PWM PORTB.1,70,50
vadc=ADIn 0
ciclo = Abs ((vadc/2))
ciclo= (ciclo + (vadc/7))
HPWM 1,ciclo,1600
If vadc < 490 Then
GoTo atras
Else GoTo LECTURA
EndIf
End
El valor para modificar el ciclo activo de 0 a 100% es de 0 a 255.al generar la salida tiene brincos, es decir, no es lineal, de repente se va a cero y regresa.
Es decir, tengo problemas con el algoritmo al calcular el ciclo de trabajo del hpwm.
Espero haberme explicado y que alguien tenga idea de que hacer.
Tal vez se deba a que estás usando el pin RA4 que tiene drenador abierto y estás colocando una resistencia de 10k hacia VDD y otra del mismo valor hacia la base del transistor, lo cual suma 20k.Hola. Recién comienzo en lo de programación y tengo un proyecto al que no le encuentro solución.
Se trata de un pulsador que al presionarlo enciende el foco a 12 V. y al presionarlo por 2 seg. cambia de rele y enciende el foco a 9 V. y si se vuelve a presionar se apaga el foco.
En el proteus se ve bien, pero al probarlo en la placa no hace el cambio, se apaga el foco.