desktop

[Tutorial] y manejo de Proton IDE

En CCS hay una carpeta que se llama ejemplos, proton lo tiene igual? o de donde salen los ejemplos, que ye vienen hechos por default, saludos

Cuando se instala el proton ide, te genera una carpeta de usuario "PDS" dentro de "mis documentos", dentro de la cual existen a su vez, tres subcarpetas que son:

LIBRARY
SAMPLES
USER

Dentro de la carpeta de samples encontraras todos los ejemplos.

Así que si utilizas un portable o algo asi del Proton ide, no encontraras esta carpeta que te genera la instalación completa.
 
Última edición:
Pues no me genero esa carpeta ya le di buscar por todos lados y nada, si hay algun alma caritativa que me pase esa carpeta se lo agradecería mucho, le di buscar en mi disco C y no encuentra, solo los samples de CCS y Pic basic



Ya lo encontre jeje, se instalo en otra dirección ,saludos y gracias
 
Última edición:
Si me refiero al pwm por harwere(hpwm), o lo que es lo mismo utilizar el modulo pwm que tiene el 16f88.

Para hacerlo por harw en el 876 solo hay que decirle que active los modulos del micro en este caso tiene dos CCP1 y CCP2 y que genere el PWM con la sentencia HPWM.
Device=16F876
Xtal 4
'
'
'
' configuracion LCD
'
'
LCD_Type = 0 ' LCD alfanumerica tipica

LCD_DTPin = PORTB.4 ' datos PORTB.4,5,6,7

LCD_RSPin = PORTB.1 ' LCD RS pin
LCD_ENPin = PORTB.3 ' LCD EN pin
LCD_Interface = 4 ' 4-bit LCD
LCD_Lines = 2 ' 2-Line LCD
'
'
'
'
'

Declare CCP1_Pin PORTC.2 'activar ccp1 PWM por harwere
Declare CCP2_Pin PORTC.1 'activar ccp2 PWM por harwere


Declare Adin_Res 8 'resultado de 8-bit

Declare Adin_Tad FRC 'OSC interno elegido

Declare Adin_Stime 100

TRISC = 1 '
TRISB = 0 'poner puerto b salida
TRISA =00000111 ' Configure AN0 y AN1(PORTA.0 y PORTA.1) entrada
ADCON1.7 =0 'sin justificacion un solo registro

'
'
' variables
'


Dim b As Byte
Dim c As Byte
Dim pulsa_1 As Byte
Dim pulsa_11 As Byte
Dim pulsa_2 As Byte
Dim pulsa_22 As Byte
Dim x As Word


' PROGRAMA
'
'

inicio:



b =ADIn 0 'coloca la conversión en la variable b
DelayUS 3
c=ADIn 1 'coloca la conversión en la variable c
DelayUS 3

x=ADIn 2

x=x*300
HPWM 1,b,x
HPWM 2,c,x+1000
If PORTC.0=1 Then pulsa_1=0
If PORTC.0=0 Then pulsa_1=1
PORTC.4=pulsa_1
' b=11
' c=22
Print At 2,1,"dato ",Dec3 b,"-",Dec3 c
DelayMS 100
' Print At 2,1,"dato "," ","-"," "
GoTo inicio



Con el 88 si lo configuro igual NO me funciona.

Si utilizo este ejemplo si que funciona:

' Demonstrate Hardware PWM
' Output a 1KHz signal with duty cycle sweeping from 20% to 80% once per second

Device 16F88
Declare Xtal 4

Dim Duty As Word ' Duty cycle value (CCPR1L:CCP1CON<5:4>)

TRISB.0 = 0 ' Set PORTC.2 (CCP1) to output
CCP1CON = %00001100 ' Set CCP1 to PWM
T2CON = %00000101 ' Turn on Timer2, Prescale=4
PR2 = 249 ' Set PR2 to get 1KHz out
Duty = 200 ' Set duty cycle to 20%
Loop:
CCP1CON.4 = Duty.0 ' Store duty to registers as
CCP1CON.5 = Duty.1 ' a 10-bit word
CCPR1L = Duty >> 2
Duty = Duty + 10 ' Increase duty cycle
DelayMS 17 ' Delayms 1/60 of second
If Duty < 800 Then Loop ' Do it again unless 80% duty cycle
Duty = 200 ' Reset to 20% duty cycle
GoTo Loop ' Do it forever

Pero me gustaría hacerlo con el HPWM y no tener que configurar tantos registros.
 
rayos!, por mas que veo las rutinas para hacer funcionar un servo en proton no entiendo, existen algunas cosas que mas de uno no sabemos para que son, espero alguien pueda hacer un pequeño tutorial para enseñarnos como se hace desde ya muchas gracias, seguire investigando
 
Te paso el pedasito de codigo que use para generar una portadora de 38Khz 50% Duty con un 12f683

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
 
buenos dias amigos, necesito ayuda o consejos con respecto a que estoy realizando una caminadora con control de pulsación cardíaca, necesito saber que comando puedo utilizar para ir variando la velocidad del motor dependiendo a las pulsaciones que tenga a la entrada. un ejemplo: si en la entrada tengo 120 pulsaciones por min necesito que el motor baje su velocidad.
y necesito hacer por lo menos 4 velocidades. si tienen algun ejemplo mejor. espero su ayuda.
 
Hola dabopeyton,

Yo no soy el idóneo para responderte, es interesante lo que haces, pues he visto aquí mismo en el foro como toman una señal, por ejemplo de un potenciómetro, y la montan en pwm. Será posible hacer lo mismo con la orden count que me imagino estás utilizando en el proyecto, es solo una sugerencia, esperemos que otros foreros puedan asesorarte mejor.

Suerte.
 
Hola dabopeyton,

Yo no soy el idóneo para responderte, es interesante lo que haces, pues he visto aquí mismo en el foro como toman una señal, por ejemplo de un potenciómetro, y la montan en pwm. Será posible hacer lo mismo con la orden count que me imagino estás utilizando en el proyecto, es solo una sugerencia, esperemos que otros foreros puedan asesorarte mejor.

Suerte.

Hola Amigo DEPREDADORX1, me puedes dar un ejemplo o ubicar el link del ejemplo que me dices, para ver si puedo adaptarcelo a lo que quiero. ya que me interesa ir avanzando con el proyecto. gracias de ante mano.
 
Hola dabopeyton,

Este ejemplo es del proyecto trabuquito, del forero captroya, tendrías que adaptarlo a tus necesidades, eliminar lo del rf y probar con Count, en este ejemplo se toma la señal recibida y se monta para controlar dos motores con los modulos pwm del pic que direccionan un pequeño barco a radiocontrol.

Código:
        Device=16F876     
                  Xtal 4
     
   TRISC =%11000000       'poner el puerto c como salida  
   TRISB = 0         'poner puerto b salida

'Declare	Serial_Baud = 9600
'Declare	Rsout_Pin = PORTC.6
'Declare	Rsout_Mode = TRUE
'Declare	Rsout_Pace = 1
'Declare	Rsin_Pin = PORTC.7
'Declare	Rsin_Mode = TRUE


Declare	Hserial_Baud = 9600				' Set baud rate to 9600
Declare	Hserial_RCSTA = %10010000       ' Enable serial port and continuous receive
Declare	Hserial_TXSTA = %00100100       ' Enable transmit and asynchronous mode
Declare	Hserial_Clear = On	
 
Declare CCP1_Pin  PORTC.2   'activar ccp1 PWM por harwere
Declare CCP2_Pin PORTC.1     'activar ccp2 PWM por harwere

TRISA =00000000         ' Configure AN0 (PORTA.0) entrada

 Dim b As Word
 Dim c As Byte
Dim d As Byte
 Dim e As Byte
  Dim f As Byte
   Dim g As Byte
 Dim alto As Byte
 Dim centro As Byte
 Dim bajo As Byte
 
 inicio:
 HSerIn  [b,c] 
 HPWM 1,b,500
 HPWM 2,c,500
 
 GoTo inicio
 
Última edición:
Que tal gente? estoy construyendo un dimmer para un proyecto de domótica, ya tengo todo funcionando, pero se me ocurrio que para evitar cableados los dimmers sean por infrarrojos con protocolo rc5 que ya esta incorporado en proton ide, el problema es que cuando entro a la interrupcion por segunda vez despues no se que pasa y ya no hace nada el dimmer. alguien sabe a que se debe? este es el código con el que estoy probando.
Código:
Device= 16F88
On_Interrupt GoTo INTERRUPCION

@CONFIG_REQ
@__CONFIG _CONFIG1, CP_OFF & CCP1_RB0 & DEBUG_OFF & WRT_PROTECT_OFF & CPD_OFF & LVP_OFF & BODEN_OFF & MCLR_OFF & PWRTE_ON & WDT_OFF & INTRC_IO 
@__CONFIG _CONFIG2, IESO_OFF & FCMEN_OFF
 
Xtal 8
All_Digital= true
PortB_Pullups = true

TRISA.0 = 1
TRISB.0 = 1

OSCCON.6 = 1
OSCCON.5 = 1
OSCCON.4 = 1

Symbol GIE = INTCON.7
Symbol INT0IE = INTCON.4
Symbol INT0IF = INTCON.1
Symbol INTEDGE=OPTION_REG.6

Dim paso As Byte
Dim brillo As Byte

INTCON = 0 
DelayUS 500
GIE=0
INT0IF=0
INTEDGE=0
INT0IE=1
GIE=1

GoTo INICIO

INTERRUPCION:

While GIE=1                             ' make sure to disable the Global interrupt
GIE=0                                      ' Disable Global interrupt
Wend

If INT0IF = 1 Then
High PORTA.1
DelayMS 1500
Low PORTA.1
DelayMS 1500

INT0IF = 0
EndIf
Set GIE
Context Restore
Return

' esto es para ver si el return no funciona y sigue desde acá
DelayMS 2500
High PORTA.1
DelayMS 2500
Low PORTA.1

INICIO:

For brillo = 0 To 9 
GoSub DIMMER
Next brillo

For brillo = 9 To 0 Step -1
GoSub DIMMER
Next brillo
 
GoTo INICIO

DIMMER:

For paso = 0 To 20
DelayMS brillo
High PORTA.1
DelayUS 10
Low PORTA.1

While PORTA.0 = 1
Wend

DelayMS brillo
High PORTA.1
DelayUS 10
Low PORTA.1
 
While PORTA.0 = 0
Wend
Next paso
Return
 
Última edición:
Hola tengo un simple problema que no puedo resolver, hice un control remoto pero necesito poner a dormir el pic 12f683 y no pude hacerlo andar, elprograma anda perfecto esta todo temrinado solo necesito que se duerma y se active cuando aprete algun boton, si pueden darme una mano se los agradeceria.

;Asi consume 0.41mA y la CR2032 es de 240mA, duraria 24 días.

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

;######################################### TRANSMISOR ###########################################
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 = %00000001 ;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
;INTCON.1 = 0 ' Clear the PortB[4..7] interrupt flag
;Sleep

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

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

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

GoTo start
 
Hola,

Estoy probando el código del dimmer y no me arroja ningún error, parece funcionar bien, esperemos que algun expert pueda echarle una ojeada a ver si encuentra el error.


Suerte.
 
Última edición:
Biker2k3

Como respondi a tu pregunta en el post #2023 del thread del PicBasicPro (https://www.forosdeelectronica.com/posts/646607/) el Proton+ necesita que le indiques el tamaño del SLEEP en segundos permitiendo solo un máximo de 65535 (poco más de 18 hs).

También te recomende que lo usaras directamente en ASM desde tu programa de Proton asi:

Código:
ASM
SLEEP
ENDASM

Ya que ahi lo pone realmente a dormir hasta que lo vuelvan a despertar.

En ese post te pase un link de un manual del Proton+ que dice otra cosa con respecto al SLEEP.


El µControlador al entrar en el modo Sleep debe quedar consumiendo mucho menos de 100 µA salvando las corrientes que malgastes con PullUp's/PullDown's para lo cual debes analizar la necesidad o el re-diseño de las mismas.



Saludos, JuanKa.-

P.D.: Para que te puedan ayudar mejor pon también el circuito que quieres usar, así será mas sencillo hacerte recomendaciones.-
 
La verdad que parece ser algún error del Proton, porque hay veces que entra 3-4-5 veces bien en la interrupción y despues se queda apagado... es mas, hice un código en pic simulator ide que hace lo mismo y funciona bien...
Está bien la parte donde se sale de la interrupción?
 
Que tal fernandoae,

Pues no pude probar en proteus con el f88, traté de agregar una parte del codigo a una interrupcion por puerto b.0 de un 16f877 y dejó de funcionar de inmediato, no me deja trabajar con esos ciclos for, quizás sea más fácil con pwm.
 
El tema es que el pwm no sirve en este caso porque estamos trabajando con altena y triacs, por eso se usa el control de fase, que consiste en detectar cuando la señal pasa por cero volts, esperar un tiempo determinado y disparar el triac, por eso si o si tiene que ser asi ;)

Yo al principio crei que era el pic, pero despues lo simulé en proteus (no me gusta usar simuladores :D) y pasaba lo mismo... ya vamos a ver que puede ser, estoy viendo de conseguir una version nueva del compilador.
 
Hola J2C te respondi en el otro foro hace un rato https://www.forosdeelectronica.com/posts/648361/

Ahora para facilitar las cosas necesitaria algun ejemplo en proton de un 12f683 que se ponga en sleep y se despierte cuando cambie de estado alguna entrada. Ya con eso lo iria modificando para adaptarlo a mi programa.

Intente hacer eso solo y tampoco me funciona, el pic se duerme y no se despierta por nada del mundo. gracias
 
Atrás
Arriba