[Tutorial] y manejo de Proton IDE

Que bueno este tutorial sobre el manejo de PROTON Basic, ya descargue los 7 archivos, muy buenos todos.
Creo q con esos seria nivel principiante. Ahora tengo q multiplexar displays de 7 segmentos para mostrar la temperatura en grados C utilizando el conversor A/D del 16F877A.
No tengo incoveniente alguno en realizar la conversion ADC, ya que todo se resume a una regla de tres simple. Lo que si es algo nuevo para mi es el manejo de las interrupciones y recien estoy empezando a documentarme sobre el tema, pero creo q con un ejemplo despejaria mis dudas.
Tengo entendido que PROTON tiene dos formas de manejar las interrupciones, segun su manual de usuario:

- On Interrupt : interrupcion por software
- On_Interrupt : interrupcion por hardware

Segun el manual de PROTON, la mas eficiente y RECOMENDADA es por medio de hardware. Para ello se definen todos los registros. He aqui un ejemplo con el 16F84:

PHP:
' Flash an LED attached to PortB.0 at a different rate to the
' LED attached to PortB.1
Device = 16F84
On_Hardware_Interrupt Goto Flash
' Assign some Interrupt associated aliases
Symbol T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable
Symbol T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
Symbol GIE = INTCON.7 ' Global Interrupt Enable
Symbol PS0 = OPTION_REG.0 ' Prescaler ratio bit-0
Symbol PS1 = OPTION_REG.1 ' Prescaler ratio bit-1
Symbol PS2 = OPTION_REG.2 ' Prescaler ratio bit-2
' Prescaler Assignment (1 = assigned to WDT 0 = assigned to oscillator)
Symbol PSA = OPTION_REG.3
' Timer0 Clock Source Select (0 = Internal clock 1 = External PortA.4)
Symbol T0CS = OPTION_REG.5
Symbol LED = PORTB.1
Goto Over_interrupt ' Jump over the interrupt subroutine
' Interrupt routine starts here
Flash:
' xor PortB with 1, Which will turn on with one interrupt
' and turn off with the next the LED connected to PortB.0
PORTB = PORTB ^ 1
T0IF = 0 ' Clear the TMR0 overflow flag
Context Restore ' Restore the registers and exit the interrupt
Over_interrupt :
TRISB = %00000000 ' Configure PortB as outputs
PORTB = 0 ' Clear PortB
' Initiate the interrupt
GIE = 0 ' Turn off global interrupts
PSA = 0 ' Assign the prescaler to external oscillator
PS0 = 1 ' Set the prescaler
PS1 = 1 ' to increment TMR0
PS2 = 1 ' every 256th instruction cycle
T0CS = 0 ' Assign TMR0 clock to internal source
TMR0 = 0 ' Clear TMR0 initially
T0IE = 1 ' Enable TMR0 overflow interrupt
GIE = 1 ' Enable global interrupts
Inf:
Low LED
DelayMs 500
High LED
DelayMs 500
Goto Inf

segun el comentario inicial, sirve para parpadear dos LEDs a distintas frecuencias.
Alguien capo q me de una mano con el codigo sobre todo en la interrupcion por desborde del timer0.
Gracias.
 
Última edición por un moderador:
Saludos adiktofer,

Pues lo mejor, creo yo, es ir de lo básico a lo complejo, primero este ejemplo sencillo para que te relaciones con una interrupción bien sencilla, te adjunto un documento que quizas te ayude.
Device = 16F877A
Xtal = 4

'Declaration for Analog to Digital Conversion
Adin_Res = 8 '10 bit resolution
Adin_Tad = FRC 'RC OSC
ADIN_DELAY = 50 '10us delay for sampling


'Declaration for LCD
Declare LCD_Type = 0 ;LCD is Alpha
Declare LCD_DTPin = PORTD.4 ;LCD data line starting port.pin
Declare LCD_ENPin = PORTD.1 ;LCD EN line
Declare LCD_RSPin = PORTD.0 ;LCD RS line
Declare LCD_Interface = 4 ;LCD 4 line interface
Declare LCD_Lines = 2


Symbol LED= PORTB.1
Symbol LED2=PORTB.2

On Interrupt GoTo interrupcion ; En caso de interrupción ir a subrutina interrupción
INTCON=%10010000 ; el bit 7 habilita las interrupciones en general
; El bit 4 habilita la interrupción B.0

PROG:
High LED
DelayMS 200
Low LED
DelayMS 200
GoTo PROG

Disable ; Desabilita las interrupciones en el handler

interrupcion:
High LED2
DelayMS 2000
Low LED2
INTCON=%10010000 ; Habilita la interrupción B.0 (INTCON.1=0)
Resume ; Retorna al programa donde ocurrió la interrupción
Enable ; Habilita las interrupciones después del handler
End
 

Adjuntos

  • TEMPORIZADORES Y CONTADORES CON PIC16F877.rar
    504.8 KB · Visitas: 368
Buenas estoy empezando a trabajar con proton y he realizado algunos programas, les comento que trabajo mucho con PBP por lo cual se me ha hecho fácil entender el proton, hace poco tenia problemas con la configuración de los fuses y encontré un programita interesante para resolver este problema les anexo el link de descarga, es de mucha ayuda a la hora de programar en proton.

https://rs297dt.rapidshare.com/#!do...roton_picbasic_Fuse_generator.rar|206|R~0|0|0

PD: yo lo descargue y lo probé esta bien completo aunque solo trabaja con mas o menos 10 pic los mas populares.
 
que tal buenos dias, tengo un problema con el 16f84a, lo que pasa es que hice una alarma para un local, pero a la hora de encender el pic la mayoria de los leds a las salidas se encienden por un tiempo muy pequeño tiempo y se apagan casi inmediatamente, mi duda es si no habra alguna instruccion de proton ide para evitar que las salidas enciendan hasta que no se cumplan las condiciones del programa.
desde ya gracias por la ayuda.
 
capaz que es solo configuracion de tu programa nada mas

hola amigos un favor alguien monto el protocolo modbus en un micro sabe alguien como hacerlo
ojala pudieran postear algo de eso por favor
espero me puedan ayudar con informacion con el tema
 
hola amigo mecatrodatos quisiera hacerlo por rs232 me parece el mas facil hasta para poder
armarlo porque no se como se hace en 485.
es para hacer una pequena red para una comunicacion entre maestros y esclavos y poderlo montar en labview talvez estoy delirando pero es un proyecto de la U y no se por donde atacar primero he tratado de leer algo sobre el tema pero me tiene mas confundido las cosas.
sera que tienes algo con lo que pueda comenzar para poder trabajar porque si me siento en el limbo y no quiero seguir nadando contracorriente gracias de antemano por la ayuda que me puedas prestar muy agradecido por la atencion que le des a este mensaje
 
Pido disculpas a atricio por interrumpir el hilo que lleva pero necesito formular una pregunta a ver si encuentro respuesta en el foro, me gustaría saber que programa o complemento para proton puedo utilizar para convertir en código las imágenes y así trabajarlas con una pantalla gráfica, hasta ahora no he podido no he logrado dar con Pic BasicPlus glcd que menciona Mecatrodatos en la última guía que publicó, estaría supremamente agradecido si pudieran orientarme al respecto.
 
Gracias Mecatrodatos,

Respecto al complemento Data Mate no he logrado que me funcione, siempre obtengo un error de ejecución 429 que no sé a que debe y tengo la versión de Proton ide 2.0.0.7 con compilador 3.5.1.1. Tendré que probar con los otros programas.

Nuevamente gracias por la ayuda y espero poner a trabajar lo más pronto posible poner a trabajar una de una pantalla gráfica.
 
DEPREDADORX1:

Sera subir el programa porque hay casos en que falta librerias para ubicacion de registros, por otro lado vere si puedo subir otra tutoria de manejo de Glcd con los otros programas que conozco y el plugin de proton.
 
Muchas gracias por atender nuestras inquietudes y bueno, seguiremos expectantes ese material a ver si nos ponemos manos a la obra con algun proyecto especial con pantallas gráficas, a mi particularmente me interesa hacerme un velocímetro digital con algún tipo de animación bien colorida, ojalá y pueda materializarlo.

Hasta nuevo aviso.
 
:) hola amigos... soy estudiante de ing de telecomunicaciones y necesito ayuda con una practica de laboratorio, que se refiere a lo siguiente:
1. Implementar un mecanismo para monitorear el ángulo de desplazamiento de una articulación usando como elemento transductor: a) un potenciómetro b) fibra óptica y opto-acoplador, muestre a través de una pantalla LCD la lectura del sensor y accione un servo-motor posicionándolo al ángulo leído (entre 0 – 180°), una mecanismo robótico equivalente al mecanismo sensor para reproducir sus movimientos.

:) Yo he realizado la siguiente configuracion en proton pero no se porque no me corre en proteus...

Device 16F877
XTAL 20
ADCON1= $80
TRISA =$1
Declare LCD_DTPIN PORTD.4
Declare LCD_RSPIN PORTD.1
Declare LCD_EMPIN PORTD.2
LCD_INTERFACE = 4
LCD_LINES = 2
LCD_TYPE = 0
DelayMS 150
Cls
Dim potenc As Word
Dim POS As Word
Dim ang As Byte
Dim a As Byte
Inicio:
potenc= ADIn 0
ang= LookDownL potenc,<[$002,$080,$0ff,$180,$200,$27f,$2ff,$37f,$3ff]
POS = LookUpL ang,[1000,1167,1250,1333,1500,1665,1750,1832,3000]
Servo PORTC.0 , POS
Print At 1,1, "servo motor"
Print At 2,1, HEX potenc
DelayMS 1000
GoTo Inicio


Si me pueden ayudar se lo estaria muy agradecida... Gracias...(y)
y son excelentes las tutoriales he aprendido mucho :)
 
Hola Diogra,

Pues hice unas modificaciones para el lcd y aparentemente funciona, te tocaría mirar bien si lo que está haciendo es lo que requieres, de cualquier forma, aun sin ser expertos estamos en disposición de ayudarte en lo que podamos.

Aquí te adjunto lo que hice y mucha suerte con lo tuyo.
 

Adjuntos

  • CONTROL DE POSICION BRAZO.rar
    53.3 KB · Visitas: 213
hola a todos los del foro, si alguien pudiera ayudarme, el problema que tengo es el siguiente: estoy ralizando transmision y recepcion de datos por usb con proton ide y visual basic 6.0, pero solo logro realizar el envio de datos del visual al pic o solamente del pic a la pc, pero no logro ambas al mismo tiempo.
 
Atrás
Arriba