Curso de programación de PIC en PICBasic Pro

...y a Python lo odio...
"Ya no te ajunto"* :ROFLMAO:

Soy Pytoniso total, me encanta de la A a la Z

Yo aprendí a programar en basic de los 80, también ensamblador. Pasar a basic estructurado fue fácil, pasar a objetos no tanto.
C medio me aclaro pero nunca me ha gustado. C++ y C# lo justo tirando a "modificar un poco y ya"
He probado java, javascript, pascal... y por último python y claramente me quedo con la serpiente para todo caso y condición.

El resumen sería que hay que aprender de todo para poder elegir, y que a cada uno le irá una u otra cosa. Si no aprendes el lenguaje X no puedes elegir no usarlo, estás obligado a no usarlo porque lo desconoces.

*Es lo que decíamos en el cole a los 5 años cuando nos enfadábamos con un compañero.
 
Hace muuuuchos me decidí a aprender Cobol por que en esa época era bastante bien pagado en aplicaciones de mainframe. No es que me gustara, solo que parecía que valía la pena y era potencialmente rentable poner algo de tiempo ahí...
Compré un pequeño libro ..tipo "Aprenda Cobol para mermos"...y creo que no llegué a la sexta página, cuando ví que había que tabular y usar espacios para una suerte de identado que definía los alcances de las estructuras de control 🤮 🤮🤮🤮
Y en Python es exactamente la misma porquería...
Si...ya sé que los editores se toman el trabajo de hacerlo, pero luego de años de usar delimitadores para las estructuras de control ...sencillamente no soporto su inexistencia 🤷‍♂️
 
Buenos días compañeros.
Como todos ustedes se habrán dado cuenta, soy nuevo en el foro de Picbasic Pro.
Agradezco el haberme permitido pertenecer a este fabuloso foro.

En este punto me gustaría aclarar un par de cosas.
En ningún momento mi intención ha sido que alguien de ustedes haga el programa por mí.
La ayuda que he solicitado es de orientación para saber cómo debo proceder para solucionar mis inquietudes y poder mejorar mi programa.
Si alguien amablemente me proporciona algún código, será para que yo lo analice y pueda utilizarlo como una base para lo que deseo desarrollar.

Agradezco a todas las personas que han respondido, en realidad valoro mucho su colaboración porque han invertido tiempo y paciencia para ayudarme.
Estoy buscando la teoría sobre los temas que me sugirieron tales como interrupciones, banderas, contadores, etc. Si alguien tiene ejemplos de código sobre estos temas donde se pueda aprender a utilizarlos les agradeceré muchísimo.

Para finalizar quiero decir que en relación a mi pregunta sobre el momntacargas, que creo que a más de uno ha confundido, lo que quise consultar es que si es posible detectar un pin de entrada solo en el momento que se produce el cambio de “1” a “0” es decir en el flanco de bajada. De lo que he podido leer al parecer es posible usando una interrupción, pero me gustaría saber si alguien conoce otra manera de hacerlo.
Saludos!
 
Estoy buscando la teoría sobre los temas que me sugirieron tales como interrupciones, banderas, contadores, etc. Si alguien tiene ejemplos de código sobre estos temas donde se pueda aprender a utilizarlos les agradeceré muchísimo.
Sobre este mismo post hay bastantes ejemplos, y en el Foro también.
No necesitas salir cuando lo tienes todo en casa.
 
Sobre este mismo post hay bastantes ejemplos, y en el Foro también.
No necesitas salir cuando lo tienes todo en casa.
Gracias por tu respuesta amigo.
He buscado valga la redundancia con el Buscador que está en la parte superior derecha de la página donde está una lupa, pero me despliega unos resultados que cuando entro se trata de programación en C u otro diferente de Picbasic Pro. Estaré haciendo algo mal al momento de la búsqueda?
 
La crítica no es hacia vos sino hacia el lenguaje, que es una bestia prehistórica que debió morir en los 80's pero aún sigue viva destrozando la forma de pensar de los programadores...y en especial de los novatos.
Yo uso C y C++ hace muchos años para programar microntroladores, pero también los he programado en PLM y en assembler. También programo en Java y en Python, pero no microcontroladores...y a Python lo odio...

... Este tópico no está referido a nada de lo que usas; Sería bueno Doc que tratemos de no desvirtuar el tema. Yo uso también otros lenguajes y sin embargo, me aferró al pedido concreto y al hilo del tópico "PICBASIC PRO"....

Volviendo al tema original, llegó a casa y te escribo unas líneas de ejemplo, pero con unas modificaciones, ya que el contador en caso de ser electrónico, te conviene hacerlo por una interrupción de hardware y un par de banderas para activar y desactivar la interrupción por puerto y no tener falsos disparos.
 
... Este tópico no está referido a nada de lo que usas; Sería bueno Doc que tratemos de no desvirtuar el tema.
Yo solo le respondí lo que el me preguntó:
A propósito, cuál es el lenguaje que tu utilizas?
Me refiero al de programación.
y hasta ahí llegó mi explicación 🤷‍♂️. No escribí ningún ejemplo en C ni en ningún otro lenguaje, así que no creo desvirtuar nada...
 
Volviendo al tema original, llegó a casa y te escribo unas líneas de ejemplo, pero con unas modificaciones, ya que el contador en caso de ser electrónico, te conviene hacerlo por una interrupción de hardware y un par de banderas para activar y desactivar la interrupción por puerto y no tener falsos disparos.
Genial!
Muchas gracias amigo.
Aprecio mucho tu interés en ayudarme.
Perdona el atrevimiento, pero me gustaría pedirte que cuando escribas esas líneas de ejemplo que mencionas, por favor las comentes para de esa manera poder entender mejor y familiarizarme con los términos sobre interrupciones, banderas, etc.
Mientras tanto seguiré leyendo sobre esos temas.
Un Saludo!
 
Buenas noches amigos del foro, espero que todos se encuentren bien.
Primero que nada quiero agradecer a todos por su ayuda desinteresada y de manera especial a los compañeros torres.electrónico, unmonje y D@rkbytes por su tiempo y paciencia.
He leído lo que me recomendaron, es decir sobre las interrupciones y lo puse en práctica, pero no obtuve los resultados deseados, debe ser por mi falta de experiencia, pero valió la pena porque aprendí algo nuevo en el mundo de la programación de PICs con PBP.
Finalmente resolví mi problema colocando un sensor (fin de carrera, etc.) en cada piso y con eso asunto solucionado en cuanto a la llegada al piso.
El paso siguiente será intentar implementar un programa para manejo de dirección, es decir subir y bajar, luego el control de puerta, etc.
Espero contar con su ayuda si tropiezo con alguna dificultad y tengo alguna inquietud.
Adjunto dejo esquema y programa.
Cordial saludo!
 

Adjuntos

  • Foro.rar
    19.7 KB · Visitas: 7
Buenas noches amigos del foro, espero que todos se encuentren bien.
Primero que nada quiero agradecer a todos por su ayuda desinteresada y de manera especial a los compañeros torres.electrónico, unmonje y D@rkbytes por su tiempo y paciencia.
He leído lo que me recomendaron, es decir sobre las interrupciones y lo puse en práctica, pero no obtuve los resultados deseados, debe ser por mi falta de experiencia, pero valió la pena porque aprendí algo nuevo en el mundo de la programación de PICs con PBP.
Finalmente resolví mi problema colocando un sensor (fin de carrera, etc.) en cada piso y con eso asunto solucionado en cuanto a la llegada al piso.
El paso siguiente será intentar implementar un programa para manejo de dirección, es decir subir y bajar, luego el control de puerta, etc.
Espero contar con su ayuda si tropiezo con alguna dificultad y tengo alguna inquietud.
Adjunto dejo esquema y programa.
Cordial saludo!
¿ Como funciona una interrupción ?
Se debe aclarar que es una tarea relativamente compleja, muy detallada, pero muy eficaz a la vez.
En ella pierde el programador el control lineal del programa, para ganar en eficacia y seguridad.

Los dispositivos que aceptan este tipo de recursos, lo hacen de varias manera pero todos se comporta de manera semejante al ejemplo que describo a continuación a saber :

1- Se lee toda la documentación respecto de las interrupciones en la hoja de datos del dispositivo elegido.
2- En la hoja de datos se aclaran los diferentes tipos de interrupciones de ese dispositivo (PIC, micro, etc)
3- En la hoja de datos figuran las dirección de memoria donde se atienden ESAS interrupciones.

4- En muchas PICs simples, por ejemplo, esa dirección de memoria suele ser 0x0004 hexa del banco 0 de memoria. En otros micros, hay varias direcciones de salto, varias interrupciones o todo es mas complejo.
5- La interrupción es inmediata y ocurre por hardware inmediatamente, ni bien se cumpla la condición de salto, por ende cuando se salta a la interrupción, al llegar a ella lo primero que se hace es guardar todos los registros de memoria, con los que se estaba trabajando, al momento de la interrupción.
Eso se hace con la instrucción PUSH X,RX , que guarda el registro X del Pic en el STACK RX1 por ejemplo.
6- Terminado los PUSH, se escribe el codigo donde se resuelve la interrupción. Se termina relevando el bit de interrupción y antes de retornar al lugar donde se estaba ejecutando el codigo de programa anterior, se deben recuperar los datos con los que se estaba trabajando mediante las instrucciónes POP RX1,X que hubiera, finalmente se ejecuta la instrucción RETURN INT para volver al programa principal, como si nada hubiera ocurrido. 👇 Ver abajo

ver esto
 
Buenos días a los Amigos del Foro.
Como dijo Dario en otra parte, solo nos acordamos del Foro de Electrónica cuando necesitamos algo, jajaja, bueno.
Tengo un Programita en PICBasic Pro que, con PIC16F877A funciona correctamente, pero cuando quiero hacerle funcionar con un PIC18F452, no me compila, me dice que tengo un error de sintaxis en el OPTION_REG:
¿Por qué? ¿Cuál es la palabra clave en MicroCode Studio para continuar con el proyecto?
Gracias.
Código:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2023 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 17/08/2023                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

    Define Osc 20               ; Define el Oscilador para un Cristal
    
    ADCON1 = 7
    TRISA = 0
    TRISE = 0
    TRISC = 0
    TRISD = 0

    I Var Word                  ; Declaración de la variable “I” tipo Byte.
    OK Var Byte                 ; Variable OK para igualar a la Variable I que regresa de la conversion del TMR0 CON 1 seg.
    OK = 0
    TIEMPO_FASE1 Var Byte
    TIEMPO_FASE2 Var Byte
    TIEMPO_FASE1 = 5
    TIEMPO_FASE2 = 7

    On Interrupt GoTo retardo   ; Define el vector de Interrupción
    
    Symbol TOIF = INTCON.2      ; Alias para el bit 2 del registro INTCON.
    Symbol GIE = INTCON.7       ; Alias para el bit 7 del registro INTCON.
    Symbol LED = PORTA.0        ; Alias para el pin RA0
    Symbol LEDR = PORTA.1
    Symbol LEDY = PORTA.2
    Symbol LEDG = PORTA.3

    OPTION_REG = %00000111      ; Configuración del Registro OPTION
    INTCON = %10100000          ; Configuración del Registro INTCON

PROGRAMA_2FASES:
    Disable
    i = ok           

Inicio:
    If OK = TIEMPO_FASE1 Then paso11
    ok = ok + 1     
    PORTA = %00001100
    PORTC = %00000110
    PORTD = %00001000
    PORTE = %00000001
    Call retardo
    GoTo inicio

paso11:
    ok = 0

paso1: 
    If OK = 3 Then paso22
    ok = ok + 1
    PORTA = %00001010
    PORTC = %00000110
    PORTD = %00001000
    PORTE = %00000001
    Call retardo
    GoTo paso1
        
paso22:
ok = 0             

paso2:
    If OK = TIEMPO_FASE2 Then paso33
    ok = ok + 1
    PORTA = %00100001
    PORTC = %00000001
    PORTD = %00000110
    PORTE = %00000100
    Call retardo
    GoTo paso2

paso33:
    ok = 0             

paso3:
    If OK = 3 Then retea
    ok = ok + 1
    PORTA = %00100001
    PORTC = %00000001
    PORTD = %00000101
    PORTE = %00000010
    Call retardo     
    GoTo paso3

retea:
    ok = 0       
    GoTo INICIO       

Retardo:
    For I = 1 To 1000           ; Repetimos la interrupción 1000 veces para obtener un retardo de 1 segundo.
        Call Retardo1
    Next I
    Return

Retardo1:
    TMR0 = 236                  ; Cargamos el dato en TMR0

Espera:
    If TOIF = 1 Then Reseteo    ; pregunta si TOIF es igual a 1, es decir,
                                ; pregunta si TMR0 se desbordo.
    GoTo Espera                 ; Salta a la etiqueta “Espera”.

Reseteo:
    TOIF = 0                    ; Inicializa la bandera TOIF
    Return
    Resume

    End
 

Adjuntos

  • WhatsApp Image 2023-08-27 at 8.11.04 AM.jpeg
    WhatsApp Image 2023-08-27 at 8.11.04 AM.jpeg
    169.8 KB · Visitas: 7
Última edición por un moderador:
Tengo un Programita en PICBasic Pro que, con PIC16F877A funciona correctamente, pero cuando quiero hacerle funcionar con un PIC18F452, no me compila, me dice que tengo un error de sintaxis en el OPTION_REG:

¿ Sera porque el PIC18F452 no posee el registro OPTION ?

Mejor lee las hojas de datos para configurar bien ese microcontrolador o volverás preguntando porque el programa no corre bien una vez que logres compilarlo. :LOL:
 
Tengo un Programita en PICBasic Pro que, con PIC16F877A funciona correctamente, pero cuando quiero hacerle funcionar con un PIC18F452, no me compila, me dice que tengo un error de sintaxis en el OPTION_REG:
El PIC18F452 no tiene el registro OPTION, usa el registro T0CON para configurar el prescaler del Timer0

Leyendo la hoja de datos te puedes enterar de muchas cosas.
 
pero aparte de configurar el cristal en el 18f452.inc de xt por hs, hay otra cosa que configurar?
Muchas cosas, ese programa es un caos, y más si se migra a un PIC18.
Mirate todos los registros en las hojas de datos para comparar, y aprende a usar las interrupciones.
Las interrupciones no se llaman desde el programa, se generan, ya sea interna o externamente.
Checa bien tu estructura y busca cómo usar la instrucción Enable y Disable de PBP.
 
Buenas noches, Darbytes, con respecto al tema de fuses para compilar 18f452 tome lo que escribiste en este post: Problema con PIC16F877A y cristal de 20 Mhz. y cuando compilo en PBP me salen dos errores y es por los corchetes que hay, uno tiene corchete a la izquierda encerrando una letra B, y la otra esta encerrando y le eh puesto delante de caada una de estas lineas de mi pic 18f452.inc un ; punto y coma y compila bien, estara bien, lo que hice? Gracias
 

Adjuntos

  • WhatsApp Image 2023-09-07 at 11.53.30 PM (1).jpeg
    WhatsApp Image 2023-09-07 at 11.53.30 PM (1).jpeg
    149.7 KB · Visitas: 18
Última edición:
Atrás
Arriba