Curso de programación de PIC en PICBasic Pro

muchas gracias por el aporte estudiare lo que pretendiste hacer porque yo tengo quq hacelo con LAbview haber que sale
 
muchas gracias por el aporte estudiare lo que pretendiste hacer porque yo tengo quq hacelo con LAbview haber que sale

el esquema del video se supone que sirve para cualquier programa que maneje el puerto serial...
sea labview, VB, VC o similar...


no lo he probado en la realidad, me base en el datashit del max-485

P.D. podrías pasarme tu fondo de escritorio...

la imagen la baje del internet, nada mas pon Bandera de mexico en google imagenes, seguro te sale....
 
Última edición:
Hola a todos y de antemano les agradezco su ayuda, Estoy armando un pequeño panel por cierto ya tengo una parte construído, el problema es que quiero mostrar una frase larga "TECENTER TE DESEA FELIZ NAVIDAD" y solo he podido mostrar "TECENTER TE DE", adjunto mi simulacion en proteus y mi codigo en pbp, espero me puedan ayudar....gracias
 

Adjuntos

  • MATRIZ DE LED.rar
    56.4 KB · Visitas: 160
Hola a todos y de antemano les agradezco su ayuda, Estoy armando un pequeño panel por cierto ya tengo una parte construído, el problema es que quiero mostrar una frase larga "TECENTER TE DESEA FELIZ NAVIDAD" y solo he podido mostrar "TECENTER TE DE", adjunto mi simulacion en proteus y mi codigo en pbp, espero me puedan ayudar....gracias

Hola muy simpatico el proyecto el problema que veo es la cantidad de elementos que quieres colocar en la variable FILA[96], el pbp no te permite mas ya que lo maximo para el tipo de variable ya lo superaste.

4.5 ARRAYS (ARREGLOS)
Los arreglos de variables pueden ser creados en una manera similar a las variables.
Etiqueta VAR tamaño (número de elementos)
Etiqueta es cualquier identificador, excluyendo palabras claves, como se describió anteriormente.
Tamaño es BIT, BYTE ó WORD. Número de elementos es cuantos lugares en el arreglo se desean. Algunos ejemplos de creación de arreglo son los siguientes:
sharks var byte[10]
fish var bit [8]

La primera ubicación dentro del arreglo es el elemento cero. En el arreglo fish anterior los elementos están numerados fish (0) a fish (7) conteniendo 8 elementos en total .
Dada la forma en que los arreglos están localizados en memoria hay límites de tamaño para cada tipo.

Tamaño Número máximo de elementos
BIT 128
BYTE 64
WORD 32

de momento es lo unico de echo ya modifique tu codigo y avance hasta "teccenter te desea",
con otra variable fila 2 te dejo el aechivo para que lo revises...saludoss

PD: Por cirerto hay otro post que es el correcto para este tema te dejo el link.

https://www.forosdeelectronica.com/f24/matriz-leds-pic-pbp-66035/
 

Adjuntos

  • MATRIZ.rar
    1.9 KB · Visitas: 144
Gracias por tu aporte, pero no logro solucionar del todo, además cuando lo simulo en proteus aparece la ultima letra y regresa al inicio sin terminar el recorrido del panel....q hagooo ayudaaa por favor
 
Bueno ese fue solo un ejemplo de como solucionar el problema, lo otro esta de tu parte, yo modifique el código para que no hiciera todo el recorrido ya que tarda bastante y no tenia tiempo de esperar, tu puedes modificarlo a tu gusto...saludoss

Vídeo de la simulación y correcion del inicio de la matriz


 
Última edición:
Hola amigos del foro, se que esto no tiene que ver con picbasic pero queria dejar un aporte de un reloj parlante en Visual Basic, solo le falta programar la parte del TEXT1.TEXT y decirle al programa que cuando sea igual label2 a text de una alerta para la alarma, el reloj dice la hora cada vez que pasa de una hora a otra.
 

Adjuntos

  • Reloj parlante VB6.zip
    1.5 MB · Visitas: 132
Bueno ese fue solo un ejemplo de como solucionar el problema, lo otro esta de tu parte, yo modifique el código para que no hiciera todo el recorrido ya que tarda bastante y no tenia tiempo de esperar, tu puedes modificarlo a tu gusto...saludoss

Vídeo de la simulación y correcion del inicio de la matriz


http://www.youtube.com/watch?v=-iMzk19ilHM

parec estar chevere el video pero no se lo puede ver dice que es privado
 
Reyvilla una pregunta, bueno aun no soluciono del todo este problema que tengo pero te agradezco tu apoyo. Dime es cuestión solamente de modificar código de programa para mostrar todo el mensaje o derrepente la memoria del pic no abastece....
 
una pregunta sera que yo puedo enviar un array de 16 bits mediante el serial para implementarlo a mi red 485 del micro osea

var1[16]=1101010011011101

esto me facilitaria para no tener que operar nada solo enviar y listo

ojala alguien me pueda ayudar




amigo lubek seria posible me ayudes el codigo y un poco me expliques como hiciste la comu
nicacion con el pc y visual la verdad tengo que hacerlo con labview pero no entiendo como usar
los max485
 
Última edición:
una pregunta sera que yo puedo enviar un array de 16 bits mediante el serial para implementarlo a mi red 485 del micro osea

var1[16]=1101010011011101

esto me facilitaria para no tener que operar nada solo enviar y listo

ojala alguien me pueda ayudar
Mmmm.... creo que si... porque no deberia?, nada mas define el arreglo tipo word...




amigo lubek seria posible me ayudes el codigo y un poco me expliques como hiciste la comu
nicacion con el pc y visual la verdad tengo que hacerlo con labview pero no entiendo como usar
los max485

es exactamenete igual al 232 excepto que hay que actvar unos milisegundos el pin 2 y 3 del max 485... en el ejemplo del 485 que puse la diferencia entre hacerlo con un 232 serian las lineas marcadas con rojo...

Código:
CmCOn=7
TrisA=1
TrisB=0
Define BUTTON_PAUSE 200
BVar var byte
SVar Var Byte
Low PortB.0
BVar=0

Main:
 serin PortB.1,0,0,Sub_ser,Svar
  if Svar="J" then toggle portA.1 
 Sub_Ser:
 Button PortA.0,1,150,50,Bvar,0,Sub_button
[COLOR="Red"]  High PortB.0 ' activa pin 2 y 3 del max 485
  pause 10[/COLOR]
  serout   PortB.2,0,["J"]
 [COLOR="Red"] low PortB.0 'desactiva pin 2 y 3 del max 485[/COLOR]
 sub_button:
 
Goto Main

para hacerlo con labview tienes que usar ademas del TX y RX el RTS del puerto serial, para activar el pin 2 y 3
 
Última edición:
En el 12f675 se tiene que calibrar el oscilador con la instruccion DEFINE OSCCAL_1K 1
*si ya se borro de la memoria el dato de calibracion que viene de fabrica la instruccion no servira y tendrias que ajustarlo manualmente con el registro OSCCAL... o no calibrarlo pero obviamente estará fuera de tiempo (o sea que no seran los 4MHz exactos) o podria no funcionar el pic...

y claro definir el fuse INTOSCIO sin ClkOut

@ device intoscio

o el Intosc con ClkOut

@ device intosc
 
Última edición:
Algún manual para aprender a usar tmr0 en pic basic pro?

hola no creo que exista un manual especifico para el TMR0 del 12F675 y PBP, yo utilizo mucho la ayuda del datasheet para ese tipos de cosas ya que alli es donde se encuentra la información necesaria para controlar el TMR0 como la dirección y los bit para la Habilitación de cada uno de los bit's de registro OPTION, en el PBP tu indicas que bit deseas cambiar, ejemplo para habilitar las interrupciónes por desboramiento del TMR0 si lees en la hora de datos te indica que tienes que colocar el bit 7 del registro INTCON en 1, para hacer eso con el PBP seria:

INTCON = %10000000 ' con esto habilitas todas las interrupciones.

Ahora si quieres habilitar por desbordamiento del TMR0 la hoja te indica que tienes que colocar el bit 2 del mismo registro INTCON en 1 entonces quedaria asi:

INTCON = %10000100 ' con esto habilitas todas las interrupciones y habilitas la interrupcion por desbordamiento del TMR0.


Y quedaria asi.

ON INTERRUPT GOTO SUSB-RUTINA 'Define el vector de interrupción y a donde debe dirigirse al
producirse la interrupción.

INTCON = %10010000 'Habilita únicamente la interrupción externa por el GPIO.2

Nota: En el caso de las interrupciones hay que recordar desabilitarlas momentáneamente
para que no ocurran errores si se mantiene la interrupción o se ejecuta otra, y al finalizar la
sub-rutina de la interrupcion volver habilitarlas para eso:


ON INTERRUPT GOTO SUSB-RUTINA 'Define el vector de interrupción y a donde debe dirigirse al
producirse la interrupción.

INTCON = %10010000 'Habilita únicamente la interrupción externa por el GPIO.2

INICIO:
...
...
...
GOTO INICIO

SUSB-RUTINA:
Disable 'Deshabilita el procesamiento de ON INTERRUPT
...
...
...
INTCON = %10010000 'habilita la interrupción GPIO.2
Resume 'Continua la ejecucion despues de una interrupción
Enable 'Habilita el procesamiento de ON INTERRUPT
GOTO INICIO
END

Bueno así como para el 12F675 ocurre igual con lo demás PIC, lo que hay que estar pendiente es que quieren que haga el pic con la interrupción y después de ella y que tipo de interrupción va a usar.

Yo apenas estoy con esto y me interesa para la detección de cruce por cero para la activación de un triac voy a ver si hago un ejemplo y lo coloco...cualquier cosa me avisas








Y así como para interrupciones también para el presscaller y el registro OPTION.

A mi me costo bastante entenderlo hasta que me puse con la hoja de datos del 12F675
y una vez lo entiendes lo demas registros puede controlarlos de forma directa y a gusto de lo que se requiera.
 
Última edición:
Hola a todos feliz año, retomando el tema de las interrupciones con el PIC12F675 en PBP, me he decidido a realizar un pequeño circuito de un dimmer digital con dos pulsadores, con los cuales se baja o se sube la intensidad de luz, el programa es bien sencillo no llega a los 300bytes.

Descripcion y Funcionamiento:
El circuito consta de 3 entradas:
GPIO-5 y GPIO-4, los cuales son los pulsadores para atenuar la luz.
GPIO-2, Detección del cruce por cero por INT. Externa.
GPIO-3, NC

La salida.
GPIO.1, para el control del Gate del Triac.

A traves de la activacion de la interrupcion exeterna del PIC-INT.GPIO.2, se logra detectar
los flancos de bajada o subida.

Para lograr eso con PBP, se realiza una configuracion en el REGISTRO INTCON del pic
el cual tiene los siguientes bit's de configuracion segun Hoja de Datos:

REGISTRO INTCON, conformado de 8 bits de configuración:

bit 7 GIE: Global Interrupt Enable bit 'bit de habilitación de todas las interrupciones
1 = Enables all unmasked interrupts
0 = Disables all interrupts

bit 6 PEIE: Peripheral Interrupt Enable bit 'bit de habilitación de interrupción perimetral
1 = Enables all unmasked peripheral interrupts
0 = Disables all peripheral interrupts

bit 5 T0IE: TMR0 Overflow Interrupt Enable bit 'bit de habilitación de interrupción por desborde del TMR0
1 = Enables the TMR0 interrupt
0 = Disables the TMR0 interrupt

bit 4 INTE: GP2/INT External Interrupt Enable bit 'bit de habilitación de interrupción externa por GPIO.2
1 = Enables the GP2/INT external interrupt
0 = Disables the GP2/INT external interrupt

bit 3 GPIE: Port Change Interrupt Enable bit(1)'bit de habilitación de interrupción externa por cambio de estado en el puerto completo GPIO.
1 = Enables the GPIO port change interrupt
0 = Disables the GPIO port change interrupt

bit 2 T0IF: TMR0 Overflow Interrupt Flag bit(2) 'bit de habilitación de bandera de interrupción por desborde del TMR0
1 = TMR0 register has overflowed (must be cleared in software)
0 = TMR0 register did not overflow

bit 1 INTF: GP2/INT External Interrupt Flag 'bit de habilitación de bandera interrupción externa por GPIO.2
1 = The GP2/INT external interrupt occurred (must be cleared in software)
0 = The GP2/INT external interrupt did not occur

bit 0 GPIF: Port Change Interrupt Flag 'bit bit de habilitación de bandera interrupción externa por cambio de estado en el puerto completo GPIO.
1 = When at least one of the GP5:GP0 pins changed state (must be cleared in software)
0 = None of the GP5:GP0 pins have changed state

ENABLE: habilitado
DISABLE: des-habilitado

Ya conociendo cada bit del registro, tome la decisión de realizar la siguiente configuración:

INTCON = %10010000 'Habilita la interrupción GPIO.2

Ya teniendo esta configuración cuando exista un cambio en el PIN GPIO.2 se generara una interrupción.

Ahora el problema esta en que tipo de cambio se va a detectar, por flanco de bajada o de subida, en este caso como es para la detección de cruce por cero para la activación del triac se necesitan detectar ambos flancos de lo contrario no se encendería de manera optima la lampara.

Para definir el tipo de detección o el modo, esta el registro OPTION, el cual también esta conformado por 8Bit.

bit 7 GPPU: GPIO Pull-up Enable bit ' bit de habilitación de las resistencias PULL-UP internas
1 = GPIO pull-ups are disabled
0 = GPIO pull-ups are enabled by individual PORT latch values

bit 6 INTEDG: Interrupt Edge Select bit ' bit de habilitación del tipo de flanco de interrupción externa por GPIO.2
1 = Interrupt on rising edge of GP2/INT pin 'Por flanco ascendente
0 = Interrupt on falling edge of GP2/INT pin 'Por flanco descendente

bit 5 T0CS: TMR0 Clock Source Select bit ' bit de habilitación de tipo de fuente clock para el TMR0
1 = Transition on GP2/T0CKI pin
0 = Internal instruction cycle clock (CLKOUT)

bit 4 T0SE: TMR0 Source Edge Select bit ' bit de habilitación del tipo incremento del clock si es GPIO.2 la fuente.
1 = Increment on high-to-low transition on GP2/T0CKI pin
0 = Increment on low-to-high transition on GP2/T0CKI pin

bit 3 PSA: Prescaler Assignment bit' bit de habilitación y pre-establecimiento del presscaler
1 = Prescaler is assigned to the WDT
0 = Prescaler is assigned to the TIMER0 module
bit 2-0 PS2:pS0: Prescaler Rate Select bits


El bit que nos permite elegir por que tipo de flanco va activarse la interrupcion externa del GPIO.2 es el bit 6 el cual establece dos modos por flanco(1) ascendente y por flanco(2) descendente.

Como necesitamos ambos pero solo permite uno, se debe jugar con la configuración de estos bit turnandolos en cada flanco de tal manera que se logre detectar ambos.

Se puede hacer con sentencias IF...THEN
con ! ó con ^...

He realizado pruebas con todas y funcionan y quedarian asi:

OPTION_REG.6 = OPTION_REG.6 ^%1
OPTION_REG.6 = !OPTION_REG.6
en el caso de if...then
se pregunta si se encuentra en 1 ó 0 y se cambia de estado.

Teniendo esto claro con un ciclo de interrupción se puede lograr controlar el triac.

Aquí un ejemplo de incremento de una variable para la atenuación de un bombillo.

@ device pic12f675,intrc_osc,wdt_on,pwrt_off,mclr_oFF,bod_off,protect_off
Define OSC 4


DEFINE OSCCAL_1K 1
CMCON = 7
ANSEL = 0
TRISIO = %00111101
GPIO = %00000000
OPTION_REG = %01000000
WPU = %00110000

SUBE VAR GPIO.5
BAJA VAR GPIO.4
TRIAC VAR GPIO.1
A VAR WORD

TRIAC = 0
a = 0 'PUNTO DE ACTIVACION MINIMO 0ms MAXIMO 8.3ms EN TEORIA
PAUSE 500

ON INTERRUPT GOTO CRUCE_POR_CERO 'Define el vector de interrupción
INTCON = %10010000 'Habilita la interrupción GPIO.2

INICIO:
A = A + 1
IF A >= 3800 THEN
A = 0
ENDIF
GOTO INICIO

DISABLE
CRUCE_POR_CERO:
PAUSEUS A
IF A => 1 THEN
TRIAC = 1
PAUSEUS 100
TRIAC = 0
ENDIF
INTCON.1=0
OPTION_REG.6 = OPTION_REG.6 ^%1
RESUME
ENABLE
END

Bueno hasta aquí he logrado llegar cualquier cosa que este mal me avisan para corregirla aun sigo aprendiendo de los triac, PIC y del PBP...saludosss :apreton:

PD: Luego subo la simulacion.
 
Última edición:
hola amigos una gran pregunta ya porfin pude comprar los micros para mi red y los 75176 para la comunicacion 485 pero tengo un gran problema tengo 1 16F877A para usarlo como master y otros dos 16F628A como esclavos pero no se como configurarlos y poder usarlos para la comunicacion serial ojala me pudieran ayudar a hacerlo
 

Amigo lubeck en el diseño de esa pequena red 485 colocas entre el max232 y el max485 unas 40106 asi esta bien el conversor 232 a 485 o es por fines de la simulacion nada disculpen la pregunta tan ignorante pero estoy tratando de hacer la red y con ello quiero ver si comienzo a armarla y poder seguir probando de antemano gracias por la ayuda que me puedan brindar
 
Atrás
Arriba