Ejemplos Pic Simulator.docx

26
Con el permiso de dogflu y los moderadores me gustaria empezar un mini cursillo de comandos basicos del programa pic simulator ide con ejemplos y explicando las dudas que pueda tener el personal (aunque yo sea un principiante, un noob :?). Hago esto por que personalmente me costó mucho encontrar informacion, codigos y esquemas sobre este compilador y me gustaria ayudar a la gente que empieza la programacion con pic como yo. El programa para simular será el programa Isis de Proteus 7 professional. El programa para crear el codigo en basic y compilarlo sera el PIC SIMULATOR IDE. Recomiendo que miren un poco esta web ucontrol para las personas que quieran aprender mas cosas a parte de las que haremos en el cursillo, quiero destacar que hago el cursillo en calidad de aprendiz, ire explicando las cosas que voy aprendiendo con los topic de este foro y las diferentes paginas web que hay en internet, pero con esquemas hechos y codigos hechos por mi, naturalmente no me gusta copiar codigos, por que copiando no se aprende. El mini cursillo seria el siguiente: 1. Encender y apagar led. (hecho pagina1) 2. Parpadeo de led. (hecho pagina1) 3. Encender led en funcion de un pulsador. (hecho pagina1) 4. Utilizar matriz de led. (hecho pagina1) 5. Utilizar matrid de led con un 74ls164 (registro de desplazamiento 8bit) (hecho pagina1) 6. Utilizar display 7 segmentos con pic. (contador 0 9 hecho pagina1) 7. Utilizar display de 7 segmentos con pic + 74ls164 (registro de desplazamiento 8bit) ... (lo que vaya surgiendo). ¿ Que opinais al respecto ?

Transcript of Ejemplos Pic Simulator.docx

Page 1: Ejemplos Pic Simulator.docx

Con el permiso de dogflu y los moderadores me gustaria empezar un mini cursillo de comandos basicos del programa pic simulator ide con ejemplos y explicando las dudas que pueda tener el personal (aunque yo sea un principiante, un noob  :?). Hago esto por que personalmente me costó mucho encontrar informacion, codigos y esquemas sobre este compilador y me gustaria ayudar a la gente que empieza la programacion con pic como yo.

El programa para simular será el programa Isis de Proteus 7 professional.El programa para crear el codigo en basic y compilarlo sera el PIC SIMULATOR IDE.Recomiendo que miren un poco esta web ucontrol para las personas que quieran aprender mas cosas a parte de las que haremos en el cursillo, quiero destacar que hago el cursillo en calidad de aprendiz, ire explicando las cosas que voy aprendiendo con los topic de este foro y las diferentes paginas web que hay en internet, pero con esquemas hechos y codigos hechos por mi, naturalmente no me gusta copiar codigos, por que copiando no se aprende.

El mini cursillo seria el siguiente:

1. Encender y apagar led. (hecho pagina1)2. Parpadeo de led. (hecho pagina1)3. Encender led en funcion de un pulsador. (hecho pagina1)4. Utilizar matriz de led. (hecho pagina1)5. Utilizar matrid de led con un 74ls164 (registro de desplazamiento 8bit) (hecho pagina1)6. Utilizar display 7 segmentos con pic. (contador 0 9 hecho pagina1)7. Utilizar display de 7 segmentos con pic + 74ls164 (registro de desplazamiento 8bit)... (lo que vaya surgiendo).

¿ Que opinais al respecto ?

Correjido el fallo ortografico (gracias a dogflu), cambiado el "echo" por "hecho" ya que hacer se escribe con "h" y esta "h" la conservan todos sus derivados 

jim_17:Si, me pase por su tema, y ha hecho un trabajo muy bueno, pero creo que (sin despreciar el gran trabajo que ha echo) ahi se maneja mas la funcion de lcd y no tanto las otras multiples funciones cuotidianas que existen en el compilador. No entiendo lo que quieres decir on empatar su tema, me lo puedes explicar ?  :-/

aitopes:Hola Jim!Adelante con el poryecto, ayudare en lo que pueda. (y probablemente te "robe" algunos ejemplos para mejorar el "cursillo" que tengo en uControl ;).

Aqui va  el primer ejemplo:

Page 2: Ejemplos Pic Simulator.docx

ENCENDER Y APAGAR UN LED a una frecuencia de 1 HZ:

El PIC es un 16F627A (o 628A, o648A, o casi cualquiera de 18 pines). El LED esta con su anodo en PORTB.0, y tiene el catodo conectado a GND.

Código:

 TRISB = %00000000 'Declaro TODO el puerto B como salidas.

 loop: 'Comienzo un bucle. Esta es solo una etiqueta "a la que puedo saltar".

   PORTB.0 = 1  'Pongo el pin en alto, el led enciende.   WaitMs 500   'Espero medio segundo

   PORTB.0 = 0  'Pongo el pin en bajo, el led se apaga.   WaitMs 500   'Espero medio segundo

 Goto loop 'Salto a la etiqueta "loop", y recomienza el bucle.

END 'Fin del ejemplo

Saludos!  :mrgreen:

jim_17:Aitopes felicitaciones con tu pagina web, me ayudo mucho a comprender el desplazamiento de registro. Espero que el año que viene pueda ayudar mas al foro por que ya estaré estudiando ingenieria electronica. Aqui os va una foto del esquema con el conocido 16f84a con el codigo de aitopes.

Si alguien no comprende lo que es frecuencia 1hz os lo explico:    frecuencia = 1/tiempo que tarda en hacer un ciclo--->  por lo tanto el tiempo en hacer un ciclo = 1s -----> un ciclo = encender una vez el led y apagarlo, es decir, la mitad de tiempo para encender el led 500ms y la otra mitad para apagarlo 500ms.

jim_17:Aqui os pongo un ejemplo mas de como encender un led dependiendo del estado de un boton. Si el boton esta activado el led se enciende, si esta apagado el led se apaga. (Estas seran las funciones basicas, las pasaré rapido, si hay alguna duda preguntad)Código:

' Encender un led en funcion de '' un boton pic 16f84a ''''''''''''''''''''''''''''''''''''''

TRISA = %00000001 'Establecemos el pin RA0 como pin de entradaTRISB = %00000000 'Establecemos todos los pines del puertoB como salidasPORTB = %00000000 'Empezamos poniendo el puerto b a 0 (led apagado)

Page 3: Ejemplos Pic Simulator.docx

main: 'programa principal (cadauno pone la etiqueta que quiere)If PORTA.0 = 1 Then  ' Si el pulsador esta activado enciende el ledHigh PORTB.0 'Tambien podemos utilizar portb.0 = 1Else ' Si el pulsador no esta activado el led no se enciendeLow PORTB.0 'Tambien podemos utilizar portb.0 = 0EndifGoto mainEnd                                               

Otra forma de hacer lo mismo que el ejemplo anterior, pero más rapido y con menos codigo:

Citar

'   Encender un led en funcion de   ''      un boton pic 16f84a   ' Version 2'''''''''''''''''''''''''''''''''''''

TRISA = %00000001    'Establecemos el pin RA0 como pin de entradaTRISB = %00000000    'Establecemos todos los pines del puertoB como salidasPORTB = %00000000   'Empezamos poniendo el puerto b a 0 (led apagado)

main:    'programa principal (cadauno pone la etiqueta que quiere)    PORTB.0 = PORTA.0  'Copio en el pin del led el estado del pulsador...goto mainEnd 

jim_17:Tienes toda la razón. Maneras de hacer un "programa" hay miles, la cuestion esta en encontrar la propia.

Mañana si puedo pasaré los temas 4 y 5 en el foro, porque creo que esto es muy basico y la gente no entra mucho y asi poder seguir con algo mas avanzado.

dogflu66:Cita de: jim_17 en 05 de Diciembre de 2007, 16:44:05

Si, me pase por su tema, y ha echo un trabajo muy bueno, pero creo que (sin despreciar el gran trabajo que ha echo) ahi se maneja mas la funcion de lcd y no tanto las otras multiples funciones cuotidianas que existen en el compilador. No entiendo lo que quieres decir on empatar su tema, me lo puedes explicar ?  :-/

Cuando te dijeron lo de "empatar su tema", El moderador se referia a no iniciar temas redundantes, ya que entre otras muchas funciones la de

Page 4: Ejemplos Pic Simulator.docx

un moderador es la de intentar mantener el foro ordenado, con esto tambien se refiere a que ningun hilo es propiedad de nadie, ni siquiera delque lo creo, un hilo puede ser continuado por uno o mas foreros, simplemente tiene que tener en cuenta que la continuaciondel hilo este relacionada con el tema abierto previamente.

PD. Esto solo lo aclaro como moderador que soy tambien de este nuestro y magnifico foro Todopic.

De todas formas tengo que aclarar que el hilo anterior sobre el PSI, es un hilo que se basa en una placa entrenadora,por lo que todos sus ejemplos se mueven al rededor de este hard, siendo el lcd uno mas de sus dispositivos, si se sigueindagando en el hilo se puede ver que toma una nueva direccion para interactuar con la pantalla y teclado del pc entreotras cosas.En realidad nunca tuve la intencion de que fuera un hilo basico, ya que lo que se expone es lo que se suele buscarcon los pic y que se suele tardar incluso años en conseguirlo.

Y por supuesto tienes todo mi apoyo a este nuevo hilo.... ASI QUE ANIMO Y ADARLE DURO... :-)

jim_17:Thanks, mi intención haciendo esto es facilitarle la busqueda a la gente que empieza como yo, y haciendo esto tambien aprendo y asi me obligo a aprender.

Como ya tengo otro esquema preparado os paso la matriz de led 2 X 8 (dos filas, ocho columnas)

Led parpadeando.Aquí teneis el código:

Código:

TRISA = 0 'puerto A como salidaTRISB = 0 'puerto B como salidaSymbol fila1 = PORTA.0  'establecemos fila1 = porta.0Symbol fila2 = PORTA.1 'establecemos fila2 = porta.1Dim parpadeo As Byte 'variable parpadeo como byteDim reset As Byte 'variable reset como byteDim i As Byte 'variable i como bytePORTA = 0 'todo el puerto a = 0PORTB = 0 'todo el puerto b = 0

main: 'etiqueta programa principalGosub reset 'apaga todos los ledHigh fila1  'encendemos la fila 1 y vamos variando portbGosub parpadeo 'enciende y apaga el ledLow fila1 'apaga la fila1 para empezar con la fila2

Page 5: Ejemplos Pic Simulator.docx

Gosub resetHigh fila2Gosub parpadeoLow fila2Goto main  'hacemos un bucle para que el parpadeo sea constanteEnd                                               reset:PORTA = 0 'porta = 0 apagamos todas las filasPORTB = %11111111 'portb = %11111111 porque los led se encienden cuando portb.n = 0 el portb actua de masaReturn                 ' volvemos para continuar con el codigo                                          parpadeo:PORTB.0 = 0  'lo ponemos a 0 para prender el 1r ledWaitMs 200 ' esperamos 200 ms para ver el led encendidoPORTB.0 = 1 ' con un 1 apagamos el ledPORTB.1 = 0 'hacemos lo mismo con los led de al ladoWaitMs 200PORTB.1 = 1PORTB.2 = 0WaitMs 200PORTB.2 = 1PORTB.3 = 0WaitMs 200PORTB.3 = 1PORTB.4 = 0WaitMs 200PORTB.4 = 1PORTB.5 = 0WaitMs 200PORTB.5 = 1PORTB.6 = 0WaitMs 200PORTB.6 = 1PORTB.7 = 0WaitMs 200PORTB.7 = 1Return  'volvemos del sub para continuar con el codigo

Otro de lo mismo, pero este insertado como "codigo freebasic"

CódigoGeSHi (freebasic):'**********************************************************'Led intermitente******************************************

Page 6: Ejemplos Pic Simulator.docx

'**********************************************************AllDigital  'todos los pin como I/OTRISB.0 = 0  'PIN Puerto RB0 como salidaSymbol led = PORTB.0  'Se asigna nombre al pin 0 del port Bmain:  'Nuestro ProgramaHigh led  'Enciende el led, Polariza AnodoGosub espera  'Salto con retorno a la rutina de esperaLow led  'Apaga el led, Polariza AnodoGosub espera  'Salto con retornoGoto main  'Hace que nuestro programa no termine nuncaEnd  'Separador (interrupciones y subrutinas).    espera:  'Rutina de PausaWaitMs 500  'Interrumpe el programa durante medio segundoReturn  'Retorna despues del salto generado por un Gosub.

jim_17:Lo que yo quiero no es que parpadee el led, sino que se vaya encendiendo un led tras otro. Ahora cuelgo como hacer un contador 0 - 9  utilizando los pines del pic.     a = portb.0b = portb.1c = portb.2d = portb.3e = portb.4f = portb.5g = portb.6

         a b c d e f  g           PORTB       Decimal0 =    0 0 0 0 0 0 1 =    01000000  =     641 =    1 0 0 1 1 1 1 =    01111001  =     1212 =    0 0 1 0 0 1 0 =    00100100  =     363 =    0 0 0 0 1 1 0 =    00110000  =     484 =    1 0 0 1 1 0 0 =    00011001  =     255 =    0 1 0 0 1 0 0 =    00010010  =     186 =    0 1 0 0 0 0 0 =    00000010  =      27 =    0 0 0 1 1 1 1 =    01111000  =      1208 =    0 0 0 0 0 0 0 =    00000000  =      09 =    0 0 0 0 1 0 0 =    00010000  =      16

Aqui os paso el codigo y la respectiva foto del montaje en Isis

Código:

TRISA = %11111110TRISB = %10000000PORTA.0 = 0 ' display de anodo comunPORTB = %01111111 ' ponemos el portb = 1 por que el display se enciende cuando le enviamos un cero al catodo

Page 7: Ejemplos Pic Simulator.docx

Dim i As Byte 'variable i para la funcion for

main: ' etiqueta principalFor i = 0 To 9 ' como es un contador de 0 9 utilizamos la funcion forPORTB = LookUp(64, 121, 36, 48, 25, 18, 2, 120, 0, 16), i  ' seleccionamos el numero que queremos marcar con la funcion lookupPORTA.0 = 1 ' si i = 1 selecciona el 121WaitMs 100 ' encendemos porta.0 y esperamos 100 msNext iGoto main 'volvemos a main para iniciar el bucleEnd                                               

jim_17:Vale, veo que no le interesa a mucha gente este mini-cursillo, pero no pasa nada, a medida que vayamos ampliando conocimientos seguramente ya le interesará a mas personas.

SE ADMITEN PROPUESTAS.           

Aqui os dejo el esquema para encender las luces de una matriz de led 8X2 una a una.

CódigoGeSHi (freebasic):Symbol fila1 = PORTA.0  'establecemos porta.0 como fila1Symbol fila2 = PORTA.1  'establecemos porta.1 como fila2Symbol clock = PORTB.6  'establecemos el clock como portb.6Symbol data = PORTB.7  'establecemos data como portb.7Dim reset As ByteDim contador As ByteTRISB = %00000000  'puerto b como salidaTRISA = %00000000  'puerto a como salidaPORTB = %00000000  'puerto b apagadoPORTA = %00000000  'puerto a apagado  main:  'etiqueta principalGosub reset  'enviamos 0 al registro de desplazamientofila1 = 1  'activamos la fila 1Gosub uno  'enviamos un 1 al primer pin del registro de desplazamientoWaitMs 100  'esperamos 0.1sGosub parpadeo  'le vamos enviando 0 al registro del desplazamiento y asi conseguimos el juego optico

Page 8: Ejemplos Pic Simulator.docx

fila1 = 0  'desactivamos la fila1fila2 = 1  'activamos la fila2 y repetimos el mismo procesoGosub unoWaitMs 100Gosub parpadeofila2 = 0Goto main  'volvemos a main para continuar con el bulceEnd                                                 reset:For reset = 0 To 7  'enviamos un 1 ocho vecesdata = 1  'los led se prenden cuando enviamos un 0 al registro de desplazamientoclock = 0 '---WaitUs 2 '---Todo lo marcado con un --- simboliza el procesoclock = 1 '--- que se sigue para enviar un uno logico al registroWaitUs 2 '---   de desplazamientoNext reset 'repetimos el enviar un 1 siete veces masReturn           ' volvemos a la rutina cuando acaba el proceso                                 parpadeo:For contador = 0 To 7  'enviamos un uno ocho veces y asi vamos moviendo el registrodata = 1 'la misma explicacion que en resetclock = 0WaitUs 2clock = 1WaitMs 100  'esperamos 100ms para mover el led encendido hacia el ladoNext contadorReturn  'volvemos a la rutina                      uno:data = 0 'con este proceso enviamos un 0clock = 0 'para que se prenda el primer ledWaitUs 2 'y luego poder mover el led prendidoclock = 1 'con el registro de desplazamientoWaitUs 2 'Return   'volvemos a la rutina

Como dije ya una vez, hay muchas maneras de hacer un codigo ahora os pondré aqui las etiquetas de los sub reset y parpadeo con la funcion while.

CódigoGeSHi (freebasic):reset:reset = 0While reset < 8  'mientras reset sea menor que ocho

Page 9: Ejemplos Pic Simulator.docx

data = 1            'el programa hara la funcion de enviar un 1 al registro de desplazamientoclock = 0WaitUs 2clock = 1reset = reset + 1  ' sumamos un uno a reset cada vez que envia un uno al registro WaitUs 2              ' de desplazamiento para que no sea un bulce infinitoWend                  ' para indicar que aqui acaba el codigo que queremos que se repita mientrasReturn                 ' reset sea menor que 8 --> reset < 8                         'volvemos a la rutina                                  parpadeo:contador = 0While contador < 8    'establecemos el mismo criterio que lo explicado en resetdata = 1clock = 0WaitUs 2clock = 1WaitMs 100contador = contador + 1WendReturn              

aitopes:Citar

Vale, veo que no le interesa a mucha gente este mini-cursillo, pero no pasa nada, a medida que vayamos ampliando conocimientos seguramente ya le interesará a mas personas.

Hola Jim!No, no creo que sea asi. El hilo ya casi llega a las 100 visitas, y hace muy poco que esta disponible.  :mrgreen:

Por lo pronto, le voy a poner una chincheta para que este "a mano".

Y sigue asi, que es muy util tener ejemplos claros y sencillos sobre este buen BASIC. ;)

jim_17:Bueno, solamente queda un esquema mas, ya ire pensando y poniendo mas esquemas, espero que aun que sea una tonteria, si necesitais que se explique algun esquema, lo que sea, si quereis añadir algo propio al cursillo, podeis hacerlo. No me gusta que solo posteen los moderadores, eso me hace pensar que no le interesa a nadie, alomejor es que es muy basico lo que hacemos, pero si quereis hacer algo mas high pedidlo.

Page 10: Ejemplos Pic Simulator.docx

Aqui os va el codigo de como manejar el registro de desplazamiento para hacer un contador 0 9.

 CódigoGeSHi (freebasic):Dim und As Byte  'variable de unidadesDim u As Byte  'variable u para utilizar en la funcion forDim i As Byte  ' variable i para utilizar en la funcion forTRISA = 0  'puerto a como salidaTRISB = 0  ' puerto b como salidaPORTA = 0  'todos los pines puerto a apagadosPORTB = 0  'todos los pines del puerto b apagados Symbol dato = PORTB.7  ' dato sera igual a portb.7Symbol clock = PORTB.6  'clock sera igual a portb.6 main: 'etiqueta principalFor i = 0 To 9  'desde 0 hasta el 9und = LookUp(126, 12, 182, 158, 204, 218, 250, 14, 255, 222), i  'buscamos el numero que queremosGosub enviar  'enviamos los datos al registro de desplazamientoNext i  'siguiente numeroGoto main  'iniciamos bucleEnd  'finalizamos el programa                     enviar: For u = 0 To 7                        'enviamos 8 datosIf und.7 = 0 Then           'si el bit 7 de la variable und = 0dato = 1 'envia un uno al registro de desplazamientoclock = 0 'porque los led se encienden cuando hay un 0WaitUs 1 'clock = 1 'WaitUs 1 'Elsedato = 0 'si el bit 7 es igual a 1clock = 0 'envia un 0 al registro de desplazamientoWaitUs 1 'porque los led se encienden con un 0 logicoclock = 1 'WaitUs 1 'Endif 'finalizamos el la condicionund = ShiftLeft(und, 1) 'movemos todos los bits hacia la izquierdaNext u 'siguiente variable 1PORTA.0 = 1 'una vez estan todos los bits enviadosWaitMs 200 'encendemos porta.0 y esperamos 200msPORTA.0 = 0 'luego apagamos el porta.0 

jim_17:Bueno, bueno, bueno, me estube 2h intentando descubrir un fallo que hice en el

Page 11: Ejemplos Pic Simulator.docx

programita. El fallo era que modificaba la variable dec, y no me permanecian los numeros decimales,  :P. Aqui os dejo el esquema y el codigo. Una cosa, alguien sabe como hacer el recuadro de proteus mas grande ? estube mucho rato mirando y nada ...  :-). Si hay algo que no entendeis no dudeis en preguntar. Tambien tengo que decir que las funciones que utilizo con "for" tambien se pueden hacer con la funcion "while", mas arriba hay un ejemplo.

Aqui el codigo

CódigoGeSHi (freebasic):Symbol data = PORTB.7  'dato de los decimalesSymbol clock = PORTB.6Dim d As Byte 'para la aplicacion for de los decimalesDim u As Byte 'para la aplicacion for de las unidadesDim i As Byte 'para la aplicacion for de envio de datosDim e As Byte 'para la aplicaciof for de envio de datosDim dec As Byte 'almacenaremos los datos decimalesDim und As Byte 'almacenaremos los datos de las unidadesTRISA = 0 'puerto a como salidasTRISB = 0 'puerto b como salidasPORTA = 0 'puerto a apagadoPORTB = 0 'puerto b apagado main:For d = 0 To 9  'decimales del 0 al 9dec = LookUp(252, 96, 218, 242, 102, 182, 190, 224, 254, 246), d  'buscamos el decimalFor u = 0 To 9  'unidades del 0 al 9und = LookUp(252, 96, 218, 242, 102, 182, 190, 224, 254, 246), u  'buscamos la unidadPORTA.0 = 0  'apagamos porta para enviar los datosGosub enviar2  'enviamos primero los datos de las unidadesGosub enviar1  'luego enviamos los datos de los decimalesPORTA.0 = 1 'encendemos los displayWaitMs 100 'esperamos 100ms para ver el cambio rapidoNext u 'siguiente unidadNext d 'cuando acaba de escribir todas las unidades escribe un decimal mas y vuelve a escribir 9 unidadesGoto main 'hacemos un bucleEnd  'finalizamos el programa                     enviar1:  'sub enviar1, enviamos los datos decimalesFor i = 0 To 7 'enviamos 8 bit de datosIf dec.0 = 0 Then 'si el bit 0 de la variable dec es igual a 0data = 0 'envia un cero logicoclock = 0 'porque el display ahora se enciende con un uno logicoWaitUs 2 'en el registro de desplazamientoclock = 1 'WaitUs 2 '

Page 12: Ejemplos Pic Simulator.docx

Elsedata = 1 'envia  un uno logicoclock = 0 '...lo explicado antesWaitUs 2 'clock = 1 'WaitUs 2 'Endif 'finalizamos la funcion ifdec = ShiftRight(dec, 1) 'desplazamos un bit hacia la derechaNext i 'next, para enviar el siguiente bitdec = LookUp(252, 96, 218, 242, 102, 182, 190, 224, 254, 246), d  'como la variable dec ha sido modificada debemos hacer que sea como anteriormente porque sino solo nos enviara 0Return  'volvemos a la rutina                      enviar2: 'sub enviar2, enviamos los datos de las unidadesFor e = 0 To 7 'enviamos 8 bit de datosIf und.0 = 0 Then 'si el bit 0 de la variable und = 0data = 0 'envia un cero logicoclock = 0 'por que el display se enciende con un uno logicoWaitUs 2 'en el registro de desplazamientoclock = 1 'WaitUs 2 'Else data = 1 'envia un uno logicoclock = 0 '...lo explicado anteriormenteWaitUs 2 'clock = 1 'WaitUs 2 'Endif 'finalizamos la funcion ifund = ShiftRight(und, 1) 'desplazamos un bit hacia la derechaNext e 'next para enviar el siguiente bitReturn 'volvemos a la rutina        

aitopes:Hola Jim!Buenisimo el ejemplo.

Podria mejorarse un  poquitin...utilizando solo una rutina para escribir en el display. Antes de llamarla, se carga en una variable auxiliar el valor a mostrar, y luego llamas a la rutina. Esto haria el codigo mas compacto, mas fácil de mantener, y ademas evitarias tener que volver a "reconstruir" la variable despues de usarla en la rutina...

Si puedo, el lunes posteo el programa con esas modificaciones. ;)

Saludos!

Page 13: Ejemplos Pic Simulator.docx

mundotronic:Hola jim_17!, la verdad es una gran idea hacer este curso de PSI, ya que resulta muy util y a mi parecer de todos los basic que conozco es el mas versatil y rapido para aprender. A proposito Aitopes, debo agradecerte por hacer tan didactica uControl, desde tu sitio aprendi todo lo que se de electronica y especialmente de micros y PSI (ademas de haber hecho la entrenadora para pics de 18 pines y el modulo de 8 entradas/salidas).Adelante con el Hilo y cuando tenga un tiempito cuelgo algunos ejemplos de los proyectos que tengo realizados.

Saludos! :-/

PD: Adelante con este hilo que a medida que avanza se pone cada vez mas interesante!

RockLee_89:Define SIMULATION_WAITMS_VALUE = 10  'este instruccion es para la simulacion si lo quieren quemar en el micro solo quiten esta lineaAllDigital  'todos los pines como digitalesTRISB = %00000000  'todo el puerto B configurado como salidaDim a As Byte  'a la pongo como variable de tipo bytea = 0RB.0 = 1  'pongo a 1 el pin b0 del puerto bWaitMs 500  'le doy un retardo de 500msinicio:

For a = 1 To 7 Step 1  'en esta instruccion repito a a 7 veces y depues que ejecute el otro forRB = ShiftLeft(RB, 1)  'desplazo el 1 que esta en el pin rb.0 del puerto b hacia la izquierdaWaitMs 500  'le dejo un retraso de 500msNext a

a = 0  'pongo a=0 para no usar otra variableFor a = 1 To 7 Step 1  'es otro bucle for que repetira 7 veces lo que esta adentro de este bucleRB = ShiftRight(RB, 1)  'desplazo el 1 que esta en el pin rb.0 del puerto b hacia la derechaWaitMs 500  'le doy un retraso de 500msNext a   Goto inicio

RockLee_89:Ahora el mismo programa del coche fantástico pero con instrucciones (if  then)

Define SIMULATION_WAITMS_VALUE = 10  'este instruccion es para la simulacion si lo quieren quemar en el micro solo quiten esta lineaAllDigital  'todos los pines como digitales

Page 14: Ejemplos Pic Simulator.docx

TRISB = %00000000  'todo el puerto B configurado como salida

RB.0 = 1  'pongo a 1 el pin b1 del puerto bWaitMs 500  'le doy un retardo de 500ms

izquierda:RB = ShiftLeft(RB, 1)  'desplazo el 1 que esta en el pin rb.0 del puerto b hacia la izquierdaWaitMs 500  'le dejo un retraso de 500msIf RB.7 = 1 Then Goto derecha  'si rb.7=1 salto ala secuencia de derechaGoto izquierda

derecha:RB = ShiftRight(RB, 1)  'desplazo el 1 que esta en el pin rb.1 del puerto b hacia la derechaWaitMs 500  'le doy un retraso de 500msIf RB.0 = 1 Then Goto izquierda  'si rb.0=1 salto ala secuencia de izquierdaGoto derecha

RockLee_89:el mismo ejemplo que los 2 anteriores pero ahora utilizando los siclo wile y wend

Define SIMULATION_WAITMS_VALUE = 10  'este instruccion es para la simulacion si lo quieren quemar en el micro solo quiten esta lineaAllDigital  'todos los pines como digitalesTRISB = %00000000  'todo el puerto B configurado como salidaDim a As ByteRB.0 = 1  'pongo a 1 el pin b1 del puerto bWaitMs 500  'le doy un retardo de 500msa = 0izquierda:

While a < 7  'si a es menor a 7 ejecunta lo que esta entre while y wenda = a + 1RB = ShiftLeft(RB, 1)  'desplazo el 1 que esta en el pin rb.0 del puerto b hacia la izquierdaWaitMs 500  'le dejo un retraso de 500ms

Wend  'si no es menor a 7 ejecuta lo que esta despues de wenda = 0

While a < 7  'si a es menor a 7 ejecunta lo que esta entre while y wenda = a + 1RB = ShiftRight(RB, 1)  'desplazo el 1 que esta en el pin rb.1 del puerto b hacia la derechaWaitMs 500  'le doy un retraso de 500ms

Wend  'si no es menor a 7 ejecuta lo que esta despues de wenda = 0Goto izquierda

Page 15: Ejemplos Pic Simulator.docx

dogflu66:

RockLee_89:Bueno amigos el siguiente programa que les dejo es un contador de 0  a 99 con 2 circuitos 7447 y 2 display  de ánodo común.

El programa esta implementado con el puerto (a)  para poder sumar una variable la cual cera programado en la eeprom del pic y la cual cera el punto final del contador cuyo valor cera mínimo de 0 y máximo de 99.

El programa funcionara de esta manera, cuando inicializa la aplicación entrara ala subrutina la cual  prendera un led que cera puesto en el puerto a pin 4 (ra.4), indicando que el programa está listo para sumar y guardar el dato en el cual uno desea que su contador ce detenga.

 El pulsador que se encuentra en el puerto a pin 0 (ra.0) es el encargado de sumar la variable y mostrarla en el displey.

El pulsador que se encuentra en el puerto a pin 1 (ra.1) es el encargado de restar  la variable y mostrarla en el displey.

El pulsador que se encuentra en el puerto a pin 2 (ra.2) es el encargado de guardar la variable en la memoria interna del pic y apagar el led puesto en (ra.4) indicando que ya quedo un dato guardado.

El programa solo suma una variable y la compara con la variable anteriormente guardada y si son = termina el programa.

Espero que le sea de alguna utilidad como practica usando instrucciones if.. Then,  gosub, y read y write Saludos desde Tamaulipas México ce despide rockLee_89

RockLee_89:Define SIMULATION_WAITMS_VALUE = 10  'solo para simulacionAllDigital  'todos los pines digitalesTRISA = %000111  'pines ra.0,ra.1,ra.2 como entradasTRISB = %00000000  'puerto b como salidaDim a As ByteDim b As Bytea = 0b = 0Gosub dato  'saltar ala subrutina

inicio:

Read 0, a  'leer lo que esta en la memoria en la casilla 0 y guardarlo en la variable a

Page 16: Ejemplos Pic Simulator.docx

If b = a Then  'un comparadar para termino de nuestro programaEnd                                               Endif

b = b + 1  'simple contadorPORTB = b  'y lo saca por el puerto b en binarioWaitMs 1000

Goto inicio

dato:RA.4 = 1  'encender el pin ra.4 (este es el led)

If RA.0 = 1 Then  'si ra.0=1 le suma 1 ala variable aa = a + 1If a = 100 Then  'una simple condicion para que solo llegue a 99a = 0Endif

PORTB = a  'lo saca por el puerto b el valor de la variable a para ver que numero estaWaitMs 50Endif

If RA.1 = 1 Then  'si ra.1=1 le resta 1 ala variable aa = a - 1If a = 255 Then  'una simple condicion para que cuando a este a 0 y ustedes le quieran restar no los aparesca ff o 255 numero que sobrepasa nuestro contadora = 0Endif

PORTB = a  'lo saca por el puerto b el valor de la variable a para ver que numero estaWaitMs 50Endif

If RA.2 = 1 Then  'si ra.2 es = a 1 entoncesRA.4 = 0  'apaga el led que indica que ya guardo un datoWaitMs 50Write 0, a  'y escribe el dato el cual quedo prestablecido en la casilla 0, lo que hay en la variable aReturn  'regresar a donde fue llamada la subrutinaEndifGoto dato

si en algo la regue o tienen algunas ides o mejoras para el programa tenga la confianza de decírmelo ya que nadie nace sin equivocarse y el fin son programas didácticos para que  los novatos como yo tengan una idea de cómo hacer simples circuitos y que recuerden que la practica hace al maestro..

tenia pensado que Leyera la variable a y si es mayor a 0 y menor a 99 se ejecute el

Page 17: Ejemplos Pic Simulator.docx

programa para que así no esté como esclavo de que cada que lo conectes no estar guardando el dato acada rato pero ce me paso bueno pero el ejemplo jala que es lo bueno jiji

Saludos y nos veremos después con mas ejemplos 

RockLee_89:Bueno amigo hoy les  dejare unos ejemplos fáciles y tratare de explicarles como utilizar un lcd  de 16 caracteres y 2 líneas  (16x2) 

Casi todos los lcd de 16x2 bueno al menos los que yo e visto y manejado vienen con sus 16 pines aunque no recuerdo bien si los LCD que no tienen luz de fondo los traigan los 16 bueno en si con luz o sin luz es lo de menos

Bueno lo adjunto ya que lo explique de cómo conectarlo y los comandos comunes del lcd para su manejoy como es mucho no quiero echarme mucho royo aqui y aburrirlos mejor les dejo el archivo de word asi el que quiera le da una leida y entiende algo sobre el lcd su conecion y su manejo en este lenguaje

RockLee_89:Bueno amigos aquí empezamos con el primer programa d manejo del lcd el programa saca un texto por la línea 1 del lcd y pasa a la línea 2 del lcd y escribe otra frase.

Define SIMULATION_WAITMS_VALUE = 10  'solo para simulacionDefine LCD_BITS = 4  'defino la conexion de 4 bits . cuando ponemos conexion de 8 bits el lcd_dbit es ignoradoDefine LCD_DREG = PORTB  'defino la conexion del puerto bDefine LCD_DBIT = 4  'defino la conexion de los altos (4,5,6,7) del puerto bDefine LCD_RSREG = PORTB  'define el uerto b como conexion rsDefine LCD_RSBIT = 0  'define el pin donde ira conectado rsDefine LCD_EREG = PORTB  'define el puerto donde estara el pin de eDefine LCD_EBIT = 2  'defino la conecion de e por el pin 2Define LCD_RWREG = PORTB  'defino a r/w por el puerto bDefine LCD_RWBIT = 1  'defino el pin 1 como r/w este pin lo podemos ignorar u poner con una resistencia a tierra ya que solo queremos escribir en el lcd y no leerDefine LCD_COMMANDUS = 1000  'define la demora en microsegundo en la escrituraDefine LCD_DATAUS = 100  'define cuanto la escritura  de un datoDefine LCD_INITMS = 100  'define la demora de la inicizion del lcdLcdinit 2  'el cursor subrayado

inicio:Lcdout "hola amigos"  'saco por la linea uno de lcdWaitMs 2000  'retardo para visualizarloLcdcmdout LcdLine2Home  'paso ala linea 2 del lcdLcdout "de todo pic"  'saco por la linea dos de lcdWaitMs 2000  'retardo para visualizarlo

Page 18: Ejemplos Pic Simulator.docx

Lcdcmdout LcdClear  'borro lo que hay en el lcdGoto inicio

RockLee_89:Bueno eso es todo por hoy ,maña  implementare la opción de count port para poder medir la frecuencia esta no la he implementado hasta valores de kilos, ya que no ce si llegue con 555 convencional hasta esta frecuencia ya que no cuento con un osciloscopio ni un  generador para ver estas frecuencias  pero he medido frecuencias con un 555 de  160 hz y medí con un acoplado de un transformador y una simple fuente de ½ onda una señal de 60 u 61 hz que es la frecuencia en México en la red eléctrica con lo cual creo que esta función si sirve para poder medir frecuencias, si alguien la ha implementado en frecuencias en MHz y KHz puede comentar si con esta simple instrucción pude  funcionar o ce tiene que modificar.

El pic simulador cuenta con osciloscopio y generador  pero como soy algo lelo todavía no le he movido pero esto del 555 y el acoplado de la luz eléctrica si esta calado en físico. bueno eso sería todo  subiré fotos que le tome al lcd y al proto donde hice esta aplicación también tengo pensado usar esta misma aplicación para medir las rpm de un motor cuando tenga tiempo de hacer la conexión del motor  y su placa ce los mostrareEspero que les allá servido de algo lo que e posteado que mi fin es ayudar al foro y a los novatos como yo como podrían usar algunas simples aplicaciones que el compilador nos da.Desde Tamaulipas México ce despide RockLee_89 hasta la próxima.

fabio2012:Hola a todos,no puedo subir el ejemplo del contador de 4 digitos porque no me funciono el 7447 :( :( (lo queria subir con video para ver su funcionamiento por que en proteuz no se puede apreciar)pero subo un un ejemplo de un variador (podemos a ser que prenda mas lijeros y mas lento), espero que sea de utilidadaca va el ejemplo:AllDigitalTRISA = %11111111TRISB = %11111110Dim xy As ByteDim veces As Byteveces = 100inicio:PORTB = %00000001Gosub timerPORTB = %00000000Gosub timer

Page 19: Ejemplos Pic Simulator.docx

Goto inicioEnd timer:If RA0 = 0 Then Gosub restarIf RA1 = 0 Then Gosub sumarFor xy = 100 To vecesWaitMs 5Next xyReturn sumar:If veces > 150 Then Returnveces = veces + 5Return restar:If veces < 10 Then Returnveces = veces - 5Return

subo tambien simulacion en proteuzespero que sea de utilidad,voy a tratar de seguir subiendo ejemplos saludos :) :)