[Tutorial] y manejo de proton IDE

Hola que tal buen día,
alguien me podría apoyar para poder definir el oscilador externo en el pic16f883.
¿Cuando te refieres a usar oscilador externo, a que tipo te refieres?
Hay externo con cristal XT, HS (High Speed), con resonador, R/C y fuente de reloj externa.

Los tipos de palabra de configuración desde el 16F882 hasta el 16F887 son los mismos.
Esta es una configuración clásica con cristal.
Código:
Config1 XT_OSC,LVP_OFF,FCMEN_ON,IESO_OFF,BOR_OFF,CPD_OFF,CP_OFF,MCLRE_ON,PWRTE_ON,WDT_OFF
Config2 WRT_OFF,BOR21V
Para otras configuraciones, estas son las disponibles.
Config1 LP_OSC, Etc,Etc. (Oscilador con resonador de baja frecuencia. Hasta 200KHz.)
Config1 XT_OSC, Etc,Etc. (Oscilador a Xtal. Hasta 4MHz.)
Config1 HS_OSC, Etc,Etc. (Oscilador a Xtal. Hasta 20MHz.)
Config1 EXTCLK_OSC, Etc,Etc. (Oscilador Digital Externo)
Config1 INTRC_OSC_NOCLKOUT,Etc,Etc. (Oscilador R/C Interno. Sin salida de reloj)
Config1 INTRC_OSC_CLKOUT,Etc,Etc. (Oscilador R/C Interno. Con salida de reloj)
Config1 RC_OSC_NOCLKOUT,Etc,Etc. (Oscilador R/C Externo. Sin salida de reloj)
Config1 RC_OSC_CLKOUT,Etc,Etc. (Oscilador R/C Externo. Con salida de reloj)

Como puedes ver, son 8 tipos diferentes para la selección del oscilador.
El uso del registro OSCCON es sobre todo para cuando se usa el oscilador interno del PIC.
Un ejemplo de configuración para 8MHz estable, sería de esta manera...
OSCCON = %01110101
La información de configuración del registro OSCCON y más información esta en la hoja de datos.

Si deseas utilizar los puertos A y B como digitales, debes establecer los registros ANSEL y ANSELH en 0
ANSEL = 0 ; Puerto A Digital I/O
ANSELH = 0 ; Puerto B Digital I/O

Espero esta información te sea de utilidad.

Suerte.
 
Gracias por responder!!!!

Carptroya: el código que me enviaste lo probé en el pic y no me funciono, en la simulación si enciende el led, pero en físico no, se queda encendido el led en porta.0
Sobre el código al quererlo compila no me deja me arroja un error (Anexo error 1)

D@rkbytes: Puse el código pero me arroja unos errores al compilar, me apareció también con el código que me paso Carptroya, no se si tenga algún problema o realice mal algo..
(Anexo error 2)

Saludos y gracias.
 

Adjuntos

D@rkbytes: Puse el código pero me arroja unos errores al compilar, me apareció también con el código que me paso Carptroya, no se si tenga algún problema o realice mal algo..
(Anexo error 2)
Saludos.
En el programa que subió carptroya, la palabra de configuración esta escrita en lenguaje ensamblador.
Las configuraciones que publique, están como se deben escribir en Proton.

Si te fijas bien, veras que se usa Config1 y Config2 para declarar las palabras de configuración.
Y tu estas escribiendo solamente Config en las dos palabras.

Ahora, compilando el programa de carptroya, no te debe producir error.
Si te produce error, debes actualizar la versión del programa que estas usando.

Suerte.
 
Última edición:
Que tal, buen dia señores..

alguien sabra porque me marca este warning al compilar el archivo, el error aparece con la version 2.0, antes tenia la 1.4 y no me aparecía el warning......
el mismo programa con la versión 1.4 no aparece nada..pero la cambie porque la 1.4 no me marcaba error con los fuses y ya con la 2.0 no..pero ahora marca este warning..


saludos

Me falto el error...... :)
 

Adjuntos

Que tal, buen dia señores..

alguien sabra porque me marca este warning al compilar el archivo, el error aparece con la version 2.0, antes tenia la 1.4 y no me aparecía el warning......
el mismo programa con la versión 1.4 no aparece nada..pero la cambie porque la 1.4 no me marcaba error con los fuses y ya con la 2.0 no..pero ahora marca este warning..


saludos

Me falto el error...... :)
Lo que te avisa el compilador que los comandos son viejos y pueden ser eliminados en las versiones mas nuevas. Consulta la ayuda de tú versión y que comandos hacen lo mismo que los que estas usando en este momento.
Supongo que lo hacen con el fin de que si cambias a una nueva versión tus programas aun sean compila bles/portables aunque yo tengo la 3.5.2.7 y todavía aparecen.
Saludos.

Ric.
 
Última edición:
Revisando la ayuda, la instruccion read se remplaza por lread cread y restore creo que no..
le intente emigrar el programa a estas instrucciones pero no me funciono..

intento hacer una matriz de led 8x8. tome la ayuda de una pagina "neoteo.com" ahi viene este programa...

Me podrian echar la mano en emigrar este programa sin utilizar la instruccion restore por lo que me aparece de error.... le intente pero no me salio

saludos,

Se me paso subir el archivo
 

Adjuntos

Revisando la ayuda, la instruccion read se remplaza por lread cread y restore creo que no..
le intente emigrar el programa a estas instrucciones pero no me funciono..

intento hacer una matriz de led 8x8. tome la ayuda de una pagina "neoteo.com" ahi viene este programa...

Me podrian echar la mano en emigrar este programa sin utilizar la instruccion restore por lo que me aparece de error.... le intente pero no me salio

saludos,

Se me paso subir el archivo
No se por que quieres cambiar los comandos si lo que te esta dando es una advertencia solamente pero al menos en mi versión lo compila correctamente y genera el archivo a cargar los cuales adjunto(tuve que modificar solamente la linea Read = Letra y quitarle el signo igual).
Por otro lado acostumbra a adjuntar las reformas que has echo y no te funcionaron por que no todos tomamos las cosas desde el mismo punto de vista.
Saludos.
Ric.
 

Adjuntos

Que tal ricbevi,

lo que pasa es que en la simulación en proteus veía unos mensajes con unas instrucciones que con la version anterior no me aparecian...pero con lo que me comentaste me anime armar la matriz en físico y me funciono a la perfección,,,

Gracias por el apoyo, saludos!!!!
 
que tal compañeros del foro, he estado buscando acerca de como hacer un cronometro en proton pero no tenido mucha suerte, lo que he hecho es poner algunas instrucciones para pintar el resultado en un LCD pero los pulsos de reloj necesarios para cada instrucción se van acumulando y no queda nada preciso, por ahí vi que seria mas correcto utilizar el tmr0 pero la verdad es que tampoco encontré información clara acerca de eso, alguien que me pueda proporcionar información , desde ya muchas gracias
 
que tal compañeros del foro, he estado buscando acerca de como hacer un cronometro en proton pero no tenido mucha suerte, lo que he hecho es poner algunas instrucciones para pintar el resultado en un LCD pero los pulsos de reloj necesarios para cada instrucción se van acumulando y no queda nada preciso, por ahí vi que seria mas correcto utilizar el tmr0 pero la verdad es que tampoco encontré información clara acerca de eso, alguien que me pueda proporcionar información , desde ya muchas gracias
Saludos.
Este ejemplo está escrito en PICBasic, pero si ya conoces algo de Proton no te será difícil entenderlo.
Proton usa PICBasic como lenguaje de programación, pero con otra sintaxis.
Así que si deseas migrar el ejemplo a Proton tampoco te resultará difícil hacerlo.

Cronómetro

Suerte.
 
Bueno gracias D@rkbytes quizás fui algo lejos, ya vi el ejemplo y pensé que debería empezar con ejemplos mas fáciles para enseñarme a usar el TMR0 y no se si alguien tenga algún ejemplo de como encender y apagar un led, tan simple como eso pero no se hacerlo con el TMR0, desde ya gracias.
 
Bueno gracias D@rkbytes quizás fui algo lejos, ya vi el ejemplo y pensé que debería empezar con ejemplos mas fáciles para enseñarme a usar el TMR0 y no se si alguien tenga algún ejemplo de como encender y apagar un led, tan simple como eso pero no se hacerlo con el TMR0, desde ya gracias.
Saludos nuevamente mendek.
No sé si ya viste este ejemplo, se trata del incremento del TMR0 por el pin RA4 (T0CKI)
A estas horas del partido ya es para tratar con ejemplos un poco más avanzados con el TMR0. :D
Pero déjame hacer una recopilación de algunos proyectos que tengo, y posteriormente los subiré.

;******************************** 08/01/2013 *********************************
Para no crear otro post, aquí mismo adjunto los programas de ejemplo usando el TMR0
Vienen mezclados, pero son para lenguaje PICBasic.
Nota: Incluí dos ejemplos para Amicus18, que vendría siendo el Proton para PIC18
Por lo tanto esos programas deben ser compilados con Amicus18 IDE
Aquí unos archivos que ya había subido al Foro.
Tutorial TMR0 (PDF)
Los Timers del PIC16F84A (RAR)

Hasta pronto. Feliz y Prospero Año 2013 a todos. (y)
 

Adjuntos

Última edición:
buenas tardes, muchas gracias por ofrecer tus conocimientos gracias a ello he hecho mis programitas bien bonitos, jeje.

hoy me dirijo a ti para hacerte una pregunta, estoy haciendo un semaforo con pic16f877 y quiero que cuando este en verde genere un sonido en otro puerto donde este un buzzer, como hago que suene? con decirle por ejemplo PORTA.1=1 es suficiente?? o es algun tipo de libreria como sound, frecuency?? De ante mano muchas gracias.:D

ah se me olvido otra cosita, quiero hacer un control para encender el semaforo, disculpa mi abuso, como lo haria?? jiji gracias. :D
 
Última edición:
buenas tardes, muchas gracias por ofrecer tus conocimientos gracias a ello he hecho mis programitas bien bonitos, jeje.

hoy me dirijo a ti para hacerte una pregunta, estoy haciendo un semaforo con pic16f877 y quiero que cuando este en verde genere un sonido en otro puerto donde este un buzzer, como hago que suene? con decirle por ejemplo PORTA.1=1 es suficiente?? o es algun tipo de libreria como sound, frecuency?? De ante mano muchas gracias.:D

ah se me olvido otra cosita, quiero hacer un control para encender el semaforo, disculpa mi abuso, como lo haria?? jiji gracias. :D
Supongo que te refieres a mi...
Bien, pues con respecto a tus preguntas...
Si solo quieres activar un buzzer, así como lo describes basta, PORTX.X = 1
Lo puedes controlar con un transistor simplemente.
Si quieres generar sonidos, si debes utilizar la función SOUND
SOUND Pin,[Note,Duration{,Note,Duration...}]

Hace tiempo subí un ejemplo de un semáforo, quizá te pueda servir para darte una idea.
Semáforo con PIC12X508

Suerte.
 
Supongo que te refieres a mi...
Bien, pues con respecto a tus preguntas...
Si solo quieres activar un buzzer, así como lo describes basta, PORTX.X = 1
Lo puedes controlar con un transistor simplemente.
Si quieres generar sonidos, si debes utilizar la función SOUND
SOUND Pin,[Note,Duration{,Note,Duration...}]

Hace tiempo subí un ejemplo de un semáforo, quizá te pueda servir para darte una idea.
Semáforo con PIC12X508

Suerte.
Jeje muchas gracias, se me olvido colocar a quien me refería, pero muchas gracias tu semáforo esta mucho mejor que el mio jajajaja (claro Estoy comenzando a programar... :LOL:), cuando lo termine lo subo para que me feliciten tambien, ademas le voy agregar un control remoto para encenderlo espero poder hacerlo sin preguntar. Saludos :apreton:
 
Supongo que te refieres a mi...
Bien, pues con respecto a tus preguntas...
Si solo quieres activar un buzzer, así como lo describes basta, PORTX.X = 1
Lo puedes controlar con un transistor simplemente.
Si quieres generar sonidos, si debes utilizar la función SOUND
SOUND Pin,[Note,Duration{,Note,Duration...}]

Hace tiempo subí un ejemplo de un semáforo, quizá te pueda servir para darte una idea.
Semáforo con PIC12X508

Suerte.
HOLA D@rkbytes como estas? oye no se que sucede ayer hice este programa y funciona perfecto "device 16f877", luego hoy me puse a hacer lo del semáforo que te mencione anteriormente y no funciona, inclusive usando parte del otro programa y nada el pulsador no funciona, solo funciona cuando asigno que el pulsador sea igual a 1 y que encienda el led, pero al colocarle luego del "then" delayms 100 deja de funcionar . Que estaré haciendo mal?? o que estará pasando?? de ante mano gracias.
 

Adjuntos

Última edición por un moderador:
HOLA D@rkbytes como estas? oye no se que sucede ayer hice este programa y funciona perfecto "device 16f877", luego hoy me puse a hacer lo del semáforo que te mencione anteriormente y no funciona, inclusive usando parte del otro programa y nada el pulsador no funciona, solo funciona cuando asigno que el pulsador sea igual a 1 y que encienda el led, pero al colocarle luego del "then" delayms 100 deja de funcionar . Que estaré haciendo mal?? o que estará pasando?? de ante mano gracias.
Saludos.
Prueba entonces así...
Código:
Device 16F877

Config HS_OSC,WDT_OFF,PWRTE_ON,LVP_OFF,BOREN_OFF

Xtal=20

TRISD = 0
TRISB = 1

PORTD = 0

Dim a As Byte

All_Digital = 1

Inicio:
    If PORTB.0=1 Then
Bucle:
    DelayMS 400
    PORTD.0=1
    PORTD.1=1
    DelayMS 200
    PORTD.0=0
    PORTD.1=0
    DelayMS 600
    PORTD.2=1
    PORTD.3=1
    DelayMS 200
    PORTD.2=0
    PORTD.3=0
    DelayMS 400
    PORTD.4=1
    PORTD.5=1
    DelayMS 200
    PORTD.4=0
    PORTD.5=0
    DelayMS 600
    PORTD.0=1
    PORTD.1=1
    DelayMS 200
    PORTD.0=0
    PORTD.1=0
    DelayMS 600
    PORTD.2=1
    PORTD.3=1
    DelayMS 200
    PORTD.2=0
    PORTD.3=0
    DelayMS 400
    PORTD.4=1
    PORTD.5=1
    DelayMS 200
    PORTD.4=0
    PORTD.5=0
    DelayMS 600
    GoTo Bucle
    Else
    GoTo Inicio
    EndIf
    End
Te recomiendo que no solo te refieras a una sola persona, si tu caso lo pueden resolver otras más.
De esta manera podrás recibir colaboración y opiniones de otras personas. :cool:

Suerte.
 
Hola. estoy desarrollando un proyecto para medir temperatura utlizando un lm35 y PIC 16f877a.
soy nuevo en esto y es i primer proyecto. quisiera saber como cambio el estado de un puerto. por ejemplo tengo un el portc.5 = 0 y quiero ponerte un switch que al apretarlo me coloque ese mismo puerto en 1 y asi prender un led para decir que mi lm35 esta funcionando. o si hay otra forma de hacerlo

si alguien me pudiera ayudar estaria muy agradecido