[Tutorial] y manejo de Proton IDE

Aqui les dejo el código

Código:
Device 16F877A
Xtal 8

DelayMS 1000

'justificacion,voltaje de referencia etc.
ADCON0 = %10000001  '-page 127 DATASHEET del 16f877a (configuracion de A.0) 
ADCON1 = 14 ' -page 128 Datasheet del 16f877a (configuracion de A.0) set the ADC all digital except for AN 0
'http://melabs.com/support/887migration.htm
'Salidas y entradas
TRISA = %000001 'Salidas-->PORTA.0 = Entrada
TRISB = %00000000 'Salidas
TRISC = %00000000 'Salidas

'Declaraciones del ADC
Declare Adin_Res 8   '10
Declare Adin_Tad FRC
Declare Adin_Stime 100

Declare Hserial_Baud = 9600
Declare Hserial_RCSTA = %10010000
Declare Hserial_TXSTA = %00100000
Declare Hserial_Clear = On


Dim dato As Byte'Word


inicio:
dato = ADIn 0
HSerOut [#dato,13]


If dato>30 Then     '1
PORTB.0 = 1  
Else
PORTB.0 = 0
EndIf 


If dato>42 Then      '2
PORTB.1 = 1  
Else
PORTB.1 = 0
EndIf 


If dato>54 Then      '3
PORTB.2 = 1  
Else
PORTB.2 = 0
EndIf 


If dato>66 Then      '4
PORTB.3 = 1  
Else
PORTB.3 = 0
EndIf 


If dato>78 Then     '5
PORTB.4 = 1  
Else
PORTB.4 = 0
EndIf 


If dato>90 Then      '6
PORTB.5 = 1  
Else
PORTB.5 = 0
EndIf 


If dato>102 Then      '7
PORTB.6 = 1  
Else
PORTB.6 = 0
EndIf 


If dato>114 Then      '8
PORTB.7 = 1  
Else
PORTB.7 = 0
EndIf 


If dato>126 Then      '9
PORTC.0 = 1  
Else
PORTC.0 = 0
EndIf 


If dato>138 Then      '10
PORTC.1 = 1  
Else
PORTC.1= 0
EndIf 


If dato>150 Then      '11
PORTC.2 = 1  
Else
PORTC.2 = 0
EndIf 

If dato>162 Then      '12
PORTC.3 = 1  
Else
PORTC.3 = 0
EndIf 


If dato>174 Then      '13
PORTC.4 = 1  
Else
PORTC.4 = 0
EndIf 

If dato>186 Then      '14
PORTC.5 = 1  
Else
PORTC.5 = 0
EndIf 

GoTo inicio


video

 

Adjuntos

  • vumetro con 16f877a.rar
    58.2 KB · Visitas: 48
Hola una consulta compilo con el proton y me arroja tres archivos pero ninguno con extensión hex;ayuda por favor

Hola...Sera por que tiene errores el archivo que compilas por lo que no lo puede hacer y estos te los marca en un archivo con extensión ".err" ...¿que extensión tienen los archivos que genera la salida?
Saludos.

Ric.
 
Saludos.
Estoy tratando de hacer andar un dimmer con un PIC12F683 pero éste no me funciona como corresponde y quisiera que me orienten en lo que estoy haciendo mal.

El código es el siguiente:
Código:
OSCCON=%01100000                        '4MHZ
ANSEL = %00110001
CMCON0 = 7
TRISIO = %11111101
GPIO  = %00000000
WPU = 0'%00110000
ADCON0=%10000000 ;CANAL0,A/D-ON
        

Declare ADIN_RES 10
Declare ADIN_TAD FRC
Declare ADIN_STIME 50
On_Hardware_Interrupt  GoTo FLASH'ON_INTERRUPT FLASH

GIE = 0
INTF = 0   ' Limpia el flag de Int. del GP2 
T0IF = 0 ' Limpia el flag de Int. del TMR0
T0CS = 0 ' Define al TMR0 se utiliza como timer
PSA = 0 ' Asigna el pre-escalador al TMR0
PS2 = 0 ' Asigna al pre-escalador 256
PS1 = 0 
PS0 = 0 
TMR0 = 207 ' Carga inicialmente al registro TMR0
PEIE = 1 ' Habilita las int. de periféricos
T0IE = 0 ' Habilita la interrupción por TMR0
INTE = 1  ' Habilita la interrupción por GP2
GIE = 1 ' Habilita interrupciones globales

Conteo = 0 ' Limpia la variable Conteo
Conteo_T0 = 0 ' Limpia la variable Conteo_T0

Loop: 
valor = (ADIn 0) /4
 GoTo Loop
 End

Disable ' 

FLASH:   
If INTF = 1 Then
Conteo_T0=0
T0IE = 0
Conteo = Conteo + 1 'incrementa conteo
T0IE = 1
INTF = 0 
EndIf

If T0IF = 1 Then
Conteo_T0 = Conteo_T0 + 1 ' Incrementa Conteo_T0
T0IE = 0 ' Deshabilita la interrupción por TMR0
TMR0 = 207 ' Carga inicialmente al registro TMR0
T0IF = 0 ' Limpia el flag de int. del TMR0
T0IE = 1 ' Habilita la interrupción por TMR0

If   Conteo_T0<valor Then
ZVS =1
Else
ZVS =0
EndIf 

EndIf
Context Restore
Resume

Gracias de ante mano.
 
Última edición por un moderador:
Hi aun mi cabeza me da vuelta con el dimmer tengo el inconveniente de un palpadeo pero no logro ver donde esta el problema.

veo que el pulso de salida no es estable, me varia el ancho de este agradeceria un comentario.
 
Hola. Les consulto.
Estoy haciendo este programa con Proton IDE y funciona bien en el proteus, pero con una advertencia: (logic contention(s) detected on net)
Y cuando lo hago en el protoboard, me junta la imagen con la medición del voltímetro y no entiendo por qué.
PHP:
Device = 18F4550
 
 XTAL = 4
 TRISA = %11111111 
 ADCON0 = %10000000 
 ADCON1 = %00001010 
 
 ' Resultado con justificación a la derecha
 ADIN_RES 8 
 ADIN_TAD FRC
 ADIN_STIME 50 
 
 
 Dim lectura As Word
 Dim lectura1 As Word
 Dim amper As Float
 Dim VOLT As Float 
 
 Declare LCD_DTPORT PORTD 
 Declare LCD_RSPIN PORTB.2 
 Declare LCD_ENPIN PORTB.5 
 Declare LCD_RWPIN PORTB.4 
 Declare LCD_CS1PIN PORTB.1 
 Declare LCD_CS2PIN PORTB.0 
 LCD_TYPE = GRAPHIC 
 INTERNAL_FONT = On 
 FONT_ADDR = 0
 GLCD_EXTERNAL_PRINT = PPRINT
 Cls
 DelayMS 100
 
 Dim Xpos As Byte
 Dim Ypos As Byte
 Dim Addr As Word
 Dim char As Byte 
 
 DelayMS 100 
 For Ypos = 0 To 7
 For Xpos = 0 To 127
 
 Addr = (Ypos*128)+Xpos
 char = CRead imagen+Addr
 LCDWrite Ypos,Xpos,[char]
 Next 
 Next 
 
 DelayMS 500
 
 Cls
 
 bucle: 
 lectura= ADIn 0
 VOLT= (lectura * 50) /1023 
 Print Font Arial____8
 Print At 0,10,"Volt "
 Print Font ArialK____12
 Print At 15,10, DEC1 VOLT
 
 
 lectura1= ADIn 1
 amper= (lectura1 *50) / 1023
 Print Font Arial____8
 Print At 0,65,"Amper"
 Print Font ArialK____12
 Print At 15, 60,DEC1 amper 
 DelayMS 100 
 
 GoTo bucle
 
 End 
 Include "imagen.inc"
 Include "ARIALk12.TXT"
 Include "arial8.txt"
 
Última edición por un moderador:
NO eso no probé , lo que hace es mostrar la imagen, no limpia la pantalla y muestra los datos del voltímetro y amperímetro , si sacas la imagen muestra los datos del voltímetro y amperímetro pero se pixela un poco en las muestras, como varias en los refrescos de pantalla? gracias por responder
 
No funciona probé 3 pic diferentes el pic 16f887 ni siquiera muestra algo , el pic 18f4550 muestra la imagen y arriba de la imagen muestra los datos del voltímetro, y con el 16f877a hace lo mismo que con el 18f4550 y no se porque no limpia la pantalla , me dan una mano con el código , gracias
 
Buenas callecuatro1976
lastimosamente no manejo muy bien el proton ide pero te adjunto unos archivos, en proteus funciona, pero no lo probé físicamente.
 

Adjuntos

  • Voltimetro.rar
    172.1 KB · Visitas: 55
Declare GLCD_EXTERNAL_PRINT [/SIZE][/SIZE]= PPRINT
Cls
DelayMS
100

Dim Xpos As Byte
Dim
Ypos As Byte
Dim
Addr As Word
Dim
char As Byte

For
Ypos = 0 To 7
For Xpos = 0 To 127
Addr = (Ypos*128)+Xpos
char = CRead imagen+Addr
LCDWrite Ypos,Xpos,[char]
Next
Next
DelayMS
1000
Cls

bucle:
lectura= ADIn 0
VOLT = (lectura* 50)/1023
Print Font Arial____8
Print At 0,10,"Volt "
[/SIZE] Print Font ArialK____12
Print At 15,10, DEC1 VOLT," "[/SIZE]


solucionado agregue la línea
DeclareGLCD_EXTERNAL_PRINT [/size]
= PPRINT
y para refrescar la pantalla se coloca comillas
Print At 15,10, DEC1 VOLT," "
lo subo por si le sirve a alguien , saludos
 
Hola, estoy haciendo un programa y quiero liberar el puerto b6 y b7 utilizando el oscilador interno, en el PIC 16F88. Configure todo y el programa funciona, pero tiene un defecto ... que los tiempos (delays) se alteran.:confused:

Si hago un tiempo de 1seg se convierte como en 300 ms, todo lo demas funciona muy bien. Dejo el encabezado del programa, por si alguien me puede ayudar. Muchas gracias.

Código:
Device 16F88
Config INTRC_IO,PWRTE_ON,WDT_OFF,BODEN_OFF,CP_OFF,LVP_OFF 

OSCCON = %01110100 '8mhz
OSCTUNE = %00011111 'f maxima
CMCON = 7
ALL_DIGITAL = TRUE
PORTB_PULLUPS = off
TRISA = %00011111
TRISB = %00000000
'DEFINO COMUNICACION CON PANTALLA LCD

LCD_DTPIN = PORTB.4 'Configuracion del LCD
LCD_RSPIN = PORTB.2
LCD_ENPIN = PORTB.3
LCD_INTERFACE = 4
LCD_LINES = 2
LCD_TYPE = 0
'*****************************************
'DEFINO EL BUS 12C

Declare SDA_PIN = PORTB.0
Declare SCL_PIN = PORTB.1
Declare SLOW_BUS On
 
La palabra de configuración en el PIC16F88 es diferente a otros PIC16.
Aparte de configurar el registro OSCCON, también debes definir la frecuencia de operación. Con Xtal = XXMHz

Prueba de ésta forma:
PHP:
Device  16F88
Reminders = Off
Config1 INTRC_IO,CCP1_RB3,WRT_PROTECT_OFF,LVP_OFF,PWRTE_ON,WDT_OFF
Config2 IESO_OFF,FCMEN_OFF
Reminders = On

Xtal = 8MHz


Inicio:
    OSCCON = %01110010
Si necesitas que los pines con ADC sean digitales, únicamente usa; All_Digital = On
Esto configura todo el registro ANSEL en 0.
Y el registro CMCON es para la configuración de los comparadores análogos.
 
La palabra de configuración en el PIC16F88 es diferente a otros PIC16.
Aparte de configurar el registro OSCCON, también debes definir la frecuencia de operación. Con Xtal = XXMHz

Prueba de ésta forma:
PHP:
Device  16F88
Reminders = Off
Config1 INTRC_IO,CCP1_RB3,WRT_PROTECT_OFF,LVP_OFF,PWRTE_ON,WDT_OFF
Config2 IESO_OFF,FCMEN_OFF
Reminders = On

Xtal = 8MHz


Inicio:
    OSCCON = %01110010
Si necesitas que los pines con ADC sean digitales, únicamente usa; All_Digital = On
Esto configura todo el registro ANSEL en 0.
Y el registro CMCON es para la configuración de los comparadores análogos.

Gracias, probare a ver que pasa. (y)



Fue exactamente como lo indicaste; ya funciona perfectamente. Eres un experto Darkbytes, muchas gracias.
 
Última edición:
Buenas amigos.:apreton:
aquí con una pregunta, que me salio de un dilema. aunque no soy experto en proton, se que ustedes lo pueden ser.
Tengo estas dos tablas. que están en lenguaje Basic para picaxe.

symbol VoltsTbl = 0
eeprom 0,(255,246,237,229,221,214,207,201)
eeprom 8,(195,190,184,179,175,170,166,162)
eeprom 16,(158,154,151,147,144,141,138,135)
eeprom 24,(133,130,128,125,123,121,118,116)
eeprom 32,(114,112,111,109,107,105,104,102)
eeprom 40,(101,99,98,96,95,93,92,91)
eeprom 48,(90,88,87,86,85,84,83,82)
eeprom 56,(81,80,79,78,77,76,75,74)

symbol SineTbl = 64
eeprom 64,(0,25,50,74,98,120,142,162)
eeprom 72,(180,197,212,225,236,244,250,254)
eeprom 80,(255,254,250,244,236,225,212,197)
eeprom 88,(180,162,142,120,98,74,50,25)

Si las meto tal cual a proton, da error. :rolleyes:
Si las meto en un (LookUpL VoltsTbl), me dice que es muy grande..:LOL:
Como las acomodo a proton basic... Mientras ustedes me responden amablemente, yo sigo intentando..(y)
 
Como Proton difiere en algunas instrucciones a PBP, debes usar la instrucción "Edata"
Con esa instrucción debes escribir todos tus datos dentro de la misma.

Así por ejemplo:
Código:
Write_Data:
    EData   255,246,237,229,221,214,207,201,195,190,184,179,175,_
            170,166,162,158,154,151,147,144,141,138,135,133,130,_
            128,125,123,121,118,116,114,112,111,109,107,105,104,_
            102,101,99,98,96,95,93,92,91,90,88,87,86,85,84,83,82,_
            81,80,79,78,77,76,75,74,0,25,50,74,98,120,142,162,180,_
            197,212,225,236,244,250,254,255,254,250,244,236,225,_
            212,197,180,162,142,120,98,74,50,25
    Return
 
Hola Amigo D@rkbytes.:apreton:

Ya había contemplado esto, pero hay una duda.
Como esto lo hace la EEprom desde su dirección cero, acortando tu ejemplo

Write_Data:
EData 255,246,237,229,221,214,207,201,195,190,184,179,175..Ocuparía desde 0 a la 12 posición

Write_Data2:
EData
212,197,180,162,142,120,98,74,50,25, Esta , ocuparía desde la 13 a la 22 posición.

En mi ejemplo son dos tablas con nombre diferente, pero guardadas en memoria EEprom, y siguen este método de almacenamiento.. Estaría correcto, la verdad he estado revisando el manual de proton, pero no hay ejemplo parecido, de tabla partida como esta y almacenada en EEprom.:unsure:
 
La instrucción "EData" escribe siempre desde la dirección 0

Sintaxis:
EData Constant1 { ,...ConstantN, etc. }

Así que una instrucción EData posterior, sobreescribirá los datos de la anterior desde la dirección 0.

Como tus datos llevan un almacenamiento en orden consecutivo, no tendrás problema mientras sepas desde donde buscar los datos.

Si lo quieres hacer por orden de dirección, puedes usar la instrucción; "EWrite"

Sintaxis:
Ewrite Address, [ Variable {, Variable…etc } ]

Esta instrucción es la equivalente a "EEPROM" de PBP.
Para leer, se usa; "ERead"

Sintaxis:
Variable = Eread Address
 
Atrás
Arriba