[Tutorial] y manejo de Proton IDE

Intenté leer 2 puertos por medio de la configuración A/D que me daba la hoja de datos pero me devuelve un error en la simulación,
(Adjunto una foto con el error) pero me lee perfectamente los valores del canal 12 y el 5.
Las advertencias son porque no estás seleccionando los canales adecuadamente.
Si obtienes lecturas puede ser porque estás usando un simulador.
¿Se puede utilizar mas de un canal A/D a la vez?
Sí, puedes usar todos los conversores disponibles seleccionando qué canal se usará.
¿Cómo se puede configurar eso?
Con el registro ADCON0

¿A que se debe ese error?
No son errores, son advertencias.
Cuando se genera un error el simulador deja de funcionar.

Así debe ser el programa para usar los canales 5 y 12:
PHP:
Inicio:
    Dim Valor_ADC1    As Word
    Dim valor_ADC2    As Word
     
    
    OSCCON = 0b01100000
    
    While OSCCONbits_IOFS = 0       ; Esperar hasta que el oscilador interno sea estable.
        Nop
    Wend
    
    ADCON2 = 0b10000011             ; Resultado de la conversión con justificación a la derecha.
 
    Cls ; Limpia o inicializa la pantalla.

Programa:
    ADCON1 = 0b00000000             ; Configurar el conversor para leer todos los canales.
    ADCON0 = 0b00010100             ; Activar el canal 5
    
    Valor_ADC1 = ADIn 5             ; Leer el resultado de la conversión.  
    
    While ADCON0bits_GO = 1         ; Esperar a que esté lista la conversión.
        Nop
    Wend      

    ADCON0 = 0b00110000             ; Activar el canal 12
    
    valor_ADC2 = ADIn 12            ; Leer el resultado de la conversión.  
    
    While ADCON0bits_GO = 1         ; Esperar a que esté lista la conversión.
        Nop
    Wend 
    
    ADCON1 = 0x0F                   ; Deshabilitar los conversores AD.     
    
    Print At 1,1, "Canal 05: ", Dec4 Valor_ADC1
    Print At 2,1, "Canal 12: ", Dec4 valor_ADC2
    
    DelayMS 50                      ; Éste retardo se puede omitir.
    
    GoTo Programa
    
    End
 
Última edición:
Hola a todos, hace un tiempo hize un programa en proton de un temporizador de 6 rangos, este funciona perfecto, le intento agregar un pulsador para que active un relay y asignar una potencia en cada etapa del mismo la cual se visualiza con un led en cada estado del relay, en la simulacion funciona bien, arme esta parte en protoboard y la primera vez cambia el relay pero se apaga en segundos, despues se vuelve erratica la funcion del pulsador y el apagado del relay persiste, no se que estoy haciendo mal?????? podria alguien por favor, revisar esta parte del codigo (linea 110, funcion del pulsador) de antemano gracias¡
 

Adjuntos

  • rangos.rar
    28.1 KB · Visitas: 30
Verifica si con los cambios que realicé al programa, ya funciona correctamente, o al menos un poco mejor.
 

Adjuntos

  • rangos.rar
    28.3 KB · Visitas: 39
Hola D@rkbytes, mejoro notablemente el programa, sobre todo la funcion del pulsador de cambio, se estabilizo... nunca habia usado el comando button y me parece que es mas estable que if- then....solo tuve que cambiar los valores de delay-rate y obtuve la respuesta que deseaba, te agradesco tomes tu tiempo para compartir tus conocimientos, ! Muchas gracias D@rkbytes !!
 
Nunca había usado el comando Button y me parece que es mas estable que if - then.
Sí, así es, ya que produce un anti rebote que mejora las condiciones de contacto del pulsador.

Acabo de ver que tuve un error en las variables para Button.
Las declaré pero sólo usé B0 en todas las comprobaciones.
Eso provoca que no se genere el bucle de comprobación del pulsador.

Actualiza el programa por el siguiente:
PHP:
Ver_Rango:  ; Bucle para visualizar el contador.
    Button P_Mas, 0, 255, 255, B0, 0, Menos     ; Verificar si se ha pulsado P_Mas
    Inc Rango   ; Incrementar variable "Rango"
    If Rango > 6 Then Rango = 0
    GoSub Visualizar
Menos:                 
    Button P_Menos, 0, 255, 255, B1, 0, Enter   ; Verificar si se ha pulsado P_Menos
    Dec Rango   ; Decrementar variable "Rango"
    If Rango < 0 Then Rango = 6
    GoSub Visualizar
Enter:
    Button P_Enter, 0, 255, 255, B2, 0, Cambiar ; Verificar si se ha pulsado P_Enter
    GoTo Temporizador
Cambiar:
    Button P_Cambio, 0, 255, 255, B3, 0, Salir  ; Verificar si se ha pulsado P_Enter
    If Cambio = 0 Then
        Cambio = 1
        High Relay
    Else
        Cambio = 0
        Low Relay
    End If
Salir:
    GoSub Visualizar
    GoTo Ver_Rango
Saludos.
 
Hola D@rkbytes, buen dia... si, lo note y compile con esos cambios, tambien la declaracion del pull up interno, el compilador me marcaba un aviso (declaracion no reconocida, "en ensamblador") asi que la corregi y pues funciono bien.... de nueva cuenta, gracias por tu ayuda, Salu2
 
hola como están, muy bueno este post, para aprender a programar pic en basic :), mi consuta es que, me descargue proton IDE SE y no me reconoce el pic 18f4550 cuando lo declaro, por ello consulto que version de proton IDE es la necesaria ? y donde podria descargarla, el post esta un poco inactivo, pero me atrevo a consultar :)
 
gracias amigo ya logre conseguirlo :D, intente descargarlo desde hay, pero sin resultado, no pude descargarlo, a lo mejor era mi Internet que es muy lento :/ , mil gracias de nuevo
 
Que tal amigos anexo la primera parte del tutorial del manejo de proton de 10 partes.

Queridisimo Mecatrodatos, pasaron 7 años desde que enviaste ese comentario, no se si leeras esta cita jajaja Ojala que si :D ... Estuve rastreando todas las partes y pude descargar hasta la parte 6, me faltarian las 4 restantes. Por favor, ¿Me las podrìas facilitar? desde ya muchas gracias. Y también gracias por iluminar con estos aportes, me sirvieron de mucho!:apreton:
 
Se que el grupo esta inactivo. Pero sino es así, necesito una ayuda o un poco mas informacion de usar el PWM... No el HPWM... O que me aconsejar para varial la luz de un LED? O un motor DC?... He probado usar PWM PORTB.0,150,255 y nada....
 
Es mejor usar PWM por hardware (Instrucción HPWM) que por software. (Instrucción PWM)
Si quieres variar la intensidad de un LED, necesitas una variable que modifique el parámetro "Duty"

Parámetros de la instrucción PWM:
PWM Pin, Duty, Cycles

El problema con la instrucción PWM es que únicamente genera pulsos determinados por el parámetro "Cycles"
Por lo tanto, esa instrucción debe estar llamándose constantemente para mantener los pulsos y que se muestren cambios en la intensidad del LED cuando cambie el ciclo activo. "Duty"

Con HPWM no sucede eso, ya que al usarse el módulo CCP, siempre se estará generando PWM.
En este caso, lo único que se tiene que modificar es el parámetro "Dutycycle" (Usando una variable)

Parámetros de HPWM:
HPWM Channel, Dutycycle, Frequency
 
Con HPWM no sucede eso, ya que al usarse el módulo CCP, siempre se estará generando PWM.
En este caso, lo único que se tiene que modificar es el parámetro "Dutycycle" (Usando una variable)

Parámetros de HPWM:
HPWM Channel, Dutycycle, Frequency

Hola Darkbytes. Quería saber, si en este caso la función HPWM tiene que esperar hasta que el programa pase por la variable que controla el Dutycycle para que haya algún cambio a la salida. Gracias.
 
Así es, porque esta instrucción necesita parámetros que únicamente son modificados cuando se invoca.
Sin embargo, mantiene los pulsos constantes, contrariamente a la instrucción PWM.
 
Es mejor usar PWM por hardware (Instrucción HPWM) que por software. (Instrucción PWM)
Si quieres variar la intensidad de un LED, necesitas una variable que modifique el parámetro "Duty"

Parámetros de la instrucción PWM:
PWM Pin, Duty, Cycles

El problema con la instrucción PWM es que únicamente genera pulsos determinados por el parámetro "Cycles"
Por lo tanto, esa instrucción debe estar llamándose constantemente para mantener los pulsos y que se muestren cambios en la intensidad del LED cuando cambie el ciclo activo. "Duty"

Con HPWM no sucede eso, ya que al usarse el módulo CCP, siempre se estará generando PWM.
En este caso, lo único que se tiene que modificar es el parámetro "Dutycycle" (Usando una variable)

Parámetros de HPWM:
HPWM Channel, Dutycycle, Frequency


Me anduvo bien el PWM, no tengo problema con esto... Pero hay diferencia con HPWM.... Como se usa? Me podrias pasar un ejemplo?, con cualquiera... LED o MOTORDC...


Por que la parte de canal, no se que canal se refiere...
 
El uso de todas las instrucciones se encuentra en la ayuda de Proton.
También se incluyen ejemplos en la carpeta PDS\Samples.
La diferencia entre PWM y HPWM, es que la primera genera PWM por software y la segunda por hardware.
Por eso la primer letra de la instrucción tiene una H. (Hardware)
Así que la instrucción HPWM únicamente puede funcionar con PIC's que tengan módulo CCP.
Y como algunos PIC tienen varios módulos CCP, por eso HPWM requiere saber por qué canal se va a generar la señal. (Channel)

Adjunto un ejemplo con HPWM.
 

Adjuntos

  • HPWM Samples.jpg
    HPWM Samples.jpg
    150.5 KB · Visitas: 21
  • 16F628A Pulsadores y PWM.rar
    19.5 KB · Visitas: 44
Última edición:
El uso de todas las instrucciones se encuentra en la ayuda de Proton.
También se incluyen ejemplos en la carpeta PDS\Samples.
La diferencia entre PWM y HPWM, es que la primera genera PWM por software y la segunda por hardware.
Por eso la primer letra de la instrucción tiene una H. (Hardware)
Así que la instrucción HPWM únicamente puede funcionar con PIC's que tengan módulo CCP.
Y como algunos PIC tienen varios módulos CPP, por eso HPWM requiere saber por qué canal se va a generar la señal. (Channel)

Adjunto un ejemplo con HPWM.

Esta bueno la funcion, la mayorias de mis pic tienen el CCP. Asi que mas tarde me pongo con ese tema. Muy bueno el ejemplo.

Cambiando de tema, tengo un problema, ahora estoy simulando en proteus un servo motor con LCD 16X2, todo bien, pero cuando lo monto en protoboard, el LCD y el led de encendido del trafo parpadea cuando actua el Servo, puede ser que consuma mucho el servomotor?.... He usado la función Servo Port.Pin, Variable .. Si necesitas un vídeo, avísame así lo subo en youtube y veas como actúa físicamente.
 
Sube un esquema de tu proyecto, y fotos del mismo para poder ver como fue implementado en la práctica.
Ya que la fuente de motor debe estar de tal forma que los pulsos que genera no afecten al micro.
Que tipo de servomotor estas utilizando? marca y modelo del mismo por favor
 
Sube un esquema de tu proyecto, y fotos del mismo para poder ver como fue implementado en la práctica.
Ya que la fuente de motor debe estar de tal forma que los pulsos que genera no afecten al micro.
Que tipo de servomotor estas utilizando? marca y modelo del mismo por favor

1 X ServoMotor MG90S
1 X PIC16F887 con 8MHz y 22pF

Pensaba si 5V alimentar al servo con una PILA 9V con LM7805 y el PIC conectada a otra fuente 5V, andaría me parece... Separar las dos cosas... Y no todo en un mismo lugar....
 

Adjuntos

  • 123.jpg
    123.jpg
    50.7 KB · Visitas: 19
  • 123A.jpg
    123A.jpg
    31.4 KB · Visitas: 14
Atrás
Arriba