[Tutorial] y manejo de Proton IDE

Tengo una pequeña duda, ya que poseo en mi poder un 12f629, me gustaría saber si alguien logro usar RC5in con este pequeñin, lo e usado en el 18f2550 pero no se si se logre el mismo resultado en los enanos, de antemano les agradezco y les envío un cordial saludo
 
Saludos a todos. hace tiempo ya que me choco con un problema constante al momento de efectuar una interrupción debido ala recepción de datos del puerto serial, sucede que se cuelga y no regresa al programa, la solución que normalmente le daba era recibir los datos dentro del programa principal y ya no por interrupción pero de esta forma no esta activo en todo momento. les adjunto un programa en el cual se paraliza después de recibir un dato.gracias de antemano¡¡¡
 

Adjuntos

  • control por sofware y manual.rar
    60.5 KB · Visitas: 105
Última edición:
Hola... Estoy desarrollando un proyecto pero me quede en una parte porque ni idea de como hacerlo...

Lo que quiero es esto,

Tengo un LCD, cómo saben ellos tienen dos pines los cuales si se alimentan los led's del LCD encienden... Bueno tengo un botón con el cual entro al menú y hago ciertas cosas... Lo que quiero es que cuando presione el botón se inicie un temporizador de 3 minutos y que al mismo tiempo un puerto del pic se ponga en 1 y encienda los leds del LCD... Y al cabo de los 3 minutos se apaguen los leds... Y si se vuelve a presionar el botón que se repita el ciclo... Espero me hayan entendido y puedan ayudarme...
Trabajo con pic 16f887 en protón ide...

Nunca he trabajado con interrupciones ni con el timer... Esto es para hacer un ahorro de energía, ya que qlimento el circuito con una batería...

Gracias
 
Hola amigos:apreton:
No se si esta pregunta ya fue resuelta, o no tiene solución, pero.
¿Por que proton ide me genera nueve archivos diferentes al compilar?
¿Son todos estos necesarios? ¿esto se puede configurar?, la verdad no encuentro como...:unsure:
 
Todos los compiladores generan varios archivos para poder crear el archivo final *.hex.
Algunos editores de código tienen opciones para establecer que archivos serán creados y de que forma.
Sin embargo en Proton IDE estas opciones no están incluidas y los archivos que se generan al compilar no se pueden evitar.
Lo que puedes hacer para limpiar los archivos que a final de cuentas te puedan resultar innecesarios, es crear un archivo por lotes *.bat que realice una limpieza de esos archivos.
 
Me lo sospeche desde un principio.:LOL:
Gracias por aclarar mi duda amigo D@rkbytes:apreton:



Ahora si una pregunta de programacion.:oops:
En este trozo de código...

loop:
COUN = Counter ENTRADA,100
RPM=COUN*10*60 ' RPM=COUN*10*60
goto loop
Disable


Interrrupcion
???, codigo
???
Resume
Enable 'reactiva interrupciones
End

por que el código de interrupción no se me ejecuta antes de que termine el tiempo de conteo de COUN, lo que deseo en la interrupciÓn es pasar el valor de pulsos contados a un display
cuadruple de 7segmentos, esto de la interrupción lo estoy haciendo cada 5 ms;¿ Hay alguna restriccion con esta instrucción COUN?.:unsure:
 
Última edición:
Saludos a todos. ¿Cómo podría resumir un poco el programa que adjunto?
Pues así como está no termina de funcionar, creo que si fuesen instrucciones case si pitaría, pero no sé como asociar el rango con las instrucciones case. Una ayuda a este aprendiz.
Adjunto el programa.
Muchas gracias por resolver mis dudas.

Código:
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

No sé como se pega el rar.
 
no sé como asociar el rango con las instrucciones case.
Para asociar valores con el uso de los Cases, debes hacerlo de esta forma.

Select Case Valor
Case Valor_X1
; Código
Case Valor_X2
; Código
Case Valor_X3
; Código
Case Else
; Código por defecto cuando no se encontró Valor_XX
EndSelect

También se pueden usar varios valores en una sola sección.

Case 1, 2, 3, 4
; Código cuando el valor sea 1, 2, 3 o 4

O comparaciones:

Case > 135
Print At 1,1,"Es mayor a 135 "
Case < 135
Print At 1,1,"Es menor a 135 "

No sé como se pega el rar.
Mira por aquí: ¿Cómo subo imágenes, archivos y demás?

Suerte.
 
Última edición:
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?
 
Última edición por un moderador:
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?
Es muy sencillo, tal vez no estés conectando bien el motor.

Este es un ejemplo usando el ADC para variar el ciclo activo con un potenciómetro. (PIC16F88)
Código:
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
Este otro ejemplo es para variar el ciclo activo con pulsadores. (PIC16F628A)
Código:
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
En ambos casos se usó PWM por hardware porque se genera siempre un pulso constante.
El LED conectado antes de la base del transistor sirve como monitor del ciclo activo del PWM.

Nota:
También se puede usar un Power MOSFET.

Espero estos ejemplos te sean de utilidad.

Suerte.
 

Adjuntos

  • Con ADC SCH.jpg
    Con ADC SCH.jpg
    58.6 KB · Visitas: 63
  • Con pulsadores SCH.jpg
    Con pulsadores SCH.jpg
    55.4 KB · Visitas: 52
Hola a todos y gracias de antemano.

Estoy haciendo un proyecto con pic16f873a y programando con proton ide.

Debo leer un voltaje en la entrada analógica y determinar si sube o baja, una vez determinado esto, debo generar una salida analógica de 4v a 0v.

Ya lo hice pero tengo problemas, 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.

Saludos y gracias.


Código:
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
 
Última edición por un moderador:
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.
El valor para modificar el ciclo activo de 0 a 100% es de 0 a 255.
Debes tener en cuenta que la función PWM genera pulsos solo durante determinados ciclos, no es constante.
La función HPWM siempre genera una salida constante pues lo hace por hardware.

Ambas funciones cambian su ciclo activo con valores de 0 a 255.
Por ejemplo, si deseas el 50% aproximadamente del ciclo activo, debes poner un valor de 127

Saludos.
 
Hola.

Estoy trabajando en un proyecto para la universidad sobre un seguidor de linea que esta controlado a través de un PIC16F887, este funciona en base a un control PID.

He hecho gran parte de la programación pero no he conseguido que funcione.
Me gustaría que alguien me ayude revisando el código y dándome consejos.
(Es primera vez que uso PID y no sé si esté bien estructurado o formulado el código)

Adjunto el código en .bas para que lo abran con PROTON IDE.
La simulación esta hecha en Proteus 8.1

Gracias. Espero prontas respuestas.(y)
 

Adjuntos

  • CODIGO NUEVO 1.zip
    80.1 KB · Visitas: 56
Última edición por un moderador:
Buenas tardes, soy nuevo en la programación, y me he decidido a hacer un programa para un proyecto planteado en clases, que en realidad lo veo complicado para ser principiante en en proton ide, El funcionamiento del proyecto que trata de un sistema de acceso por tecnología RFID que se comunica a una computadora y una pantalla lcd tiene una salida para un relé que se activa dependiendo si se da acceso a la persona o no. me podrían indicar que variables tengo que tener en cuenta, como inicializar tanto la pantalla lcd y la interfaz con la computadora, como tomar los datos del RFID, abajo dejo el esquema del circuito.

Gracias de antemano..!
 

Adjuntos

  • circuito1.JPG
    circuito1.JPG
    35.3 KB · Visitas: 77
Hola, recien comienzo en lo de programacion y tengo un proyecto al que no le encuentro solucion, 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... ya le agrege optoacopladores y nada... No es ruido.... Es tal mi desesperacion que llegue a pagarle a un Peruano (Alex Tineo Juiro de microsistemas AT) que se dice "programador" y dejo el programa peor y solo se quedo con mi dinero, Hojala alguien me pueda ayudar, adjunto programa y simulacion, de antemano gracias....
 

Adjuntos

  • luz.rar
    49.7 KB · Visitas: 45
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.
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.
Me parece que es un valor algo alto para llevar a saturación al transistor.

Prueba con el esquema del circuito que adjunto y también un programa más simplificado.

Suerte.
 

Adjuntos

  • luz II.rar
    11.5 KB · Visitas: 50
  • luz_SCH.jpg
    luz_SCH.jpg
    64.4 KB · Visitas: 59
Atrás
Arriba