Autor Tema: PIC BASIC del PIC Simulator IDE Oshonsoft (Índice en página 1)  (Leído 603783 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #30 en: 04 de Diciembre de 2006, 09:28:49 »
Hola, te cuento que para el LCD, se podría usar un shift, como el CD4094 o 74HC4094 que no es un shiht normal, sino que mediante el pin strobe se refrescan las salidas al momento de completar el shift internamente, es una buena opción, lo e visto funcionando, lo que si para eso ya no va a ser posible implementar el modulo para LCD`s del PIC Simulator IDE, pero se podría construir una librería para eso, y lo bueno que todo el LCD se controlaría con solo 3pines

También te cuento, que en un proyecto que tengo actualmente casi terminado, estos trabajando con un LCD y un teclado matricial conectados al mismo puerto, y no es tan complicado, para ahorrar pines se pueden poner los pulsadores en el mismo bus de datos, si es que se conecta el LCD directo al puerto usando el shift ya no es factible. En si consiste en el momento de leer el teclado, configurar las sólidas para el LCD como entradas y leer el teclado, luego a la hora de escribir en el LCD se conf nuevamente como entradas, eso si hay que ubicar por ahí unas resistencias para que si se presiona un pulsador o botón del teclado en mi caso cuando se esta escribiendo en el circuito no se produzca un corto, en realidad se produce igual, solo que al tener esa resistencia la corriente es insignificante, incluso ni se pierde el dato que se esta mandando al LCD.

Otra cosa, porque no usar un PIC un poquito mas grande, podria ser un 16F876, con ese andaria de sobra para implementar todo, o no es mucho mas caro, yo lo consigo poco menos de 2 dólares mas que el 16F88, y físicamente son solo 10 pines mas, el PCB no se incrementaría demasiado, y al poder conectar todo directo al PIC, va a ser posible implementar todos los módulos de control que trae este compilador.



Saludos
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #31 en: 04 de Diciembre de 2006, 09:54:25 »
Lo del 876A es una buena posibilidad, si no queda otra con el 16F88. Como decis, el costo es casi el mismo, y fisicamente me parece que es mas eficiente un intefrado mas grande que dos o tres chicos...Veamos que dice Dogflu66.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #32 en: 04 de Diciembre de 2006, 12:03:58 »
Para corregir el problema con el 16f88 seria de utilizar el puerto A para controlar el lcd, quedando el RA4 libre para poder hacer pruebas con el ADC, que para lo que queremos en este caso seria suficiente.

Lo que si tenemos que tener en cuenta es lo que queremos, una placa simple o usar un micro superior que lo ideal seria cambiar la filosofia de la placa para poder aprovechar los nuevos recursos de este.

echar un vistazo a la placa que utilizo normalmente, el teclado y led los coloco en unos modulitos a parte que se conectan a los conectores de expansión, la placa no es muy grande y tiene un poco de todo con lo que tiene salidas de potencia para controlar motores, reles, etc.

lo unico que yo le implementaria a la placa seria un conmutador para poder programar el micro en placa de una forma mas eficiente de lo que hace ahora y colocaria unos puentes para seleccionar los modulos ccp, que ahora no son utilizados ya que en un principio debido a utilizarla a 20Mhz estos modulos no suelen tener mucha utilidad, pero solo es cuestion de dejar un zocalo para cambiar cristales.

aqui podeis echar un vistazo al es quema y a la placa... asi que como yo no tengo preferencias vosotros mismo decidis... si puedo seguire el hilo desde el curro.

http://www.freewebs.com/glafebre/miguelito.htm
« Última modificación: 04 de Diciembre de 2006, 12:06:20 por dogflu66 »
Saludos desde Granada, España.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #33 en: 04 de Diciembre de 2006, 12:12:18 »
Hola Dogflu66!
Si podemos usar el 16F88 con el LCD en PORTA, mejor...
Yo pensaba este proyecto como un "periferico" de algun proyecto mayor....tu "chiquitina V1.4" me parece que excede por mucho esa premisa (por cierto, felicitaciones por Miguelito!)

Me voy a almorzar, seguimos en un rato.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #34 en: 04 de Diciembre de 2006, 12:37:42 »
Ahora que lo pienso, si lo planteamos como un periferico de un proyecto mayor, creo qeu si es mejor usar el 16F88, obtendriamos un placa mas compacta y economica aunque sea poco para las futuras aplicaciones.

Taria bueno ademas de dejar prevista la comunicacion RS232, otras como I2C p SPI que este pic lo trae incorporado. y seria de utilidad a la hora de coenctar esre periferico al Ahora que lo pienso, si lo planteamos como un periférico de un circuito mayor, creo que si es mejor usar el 16F88, obtendríamos un placa mas compacta y económica aunque sea poco para las futuras aplicaciones.

Estaría bueno además de dejar prevista la comunicación RS232, tener  I2C o SPI que este pic lo trae incorporado. y seria de utilidad a la hora de conectar este periférico.

Ahora corríjanme si estoy equivocado:
Lo que obtendríamos seria un periférico con comunicación serial (ver cuales) el cual abarca un LCD, una botonera, un par de led y una entrada analogica, la cual por ejemplo conectando un potenciómetro se puede establecer el control de algún dispositivo.

La verdad me parece de gran utilidad, seria una buena interfaz para el usuario de cualquiera de nuestros proyectos o aplicaciones con pic, u solo nos robaria un par de pines en la placa principal.

Saludos, muy buena iniciativa muchachos!!

PD: dogflu66 muy lindo el Miguelito
« Última modificación: 04 de Diciembre de 2006, 12:39:34 por ESTECA55 »
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #35 en: 04 de Diciembre de 2006, 14:06:19 »
Pues manos a la obra, seria de hacer un primer esquema y verlo.
Tengo un programita que utiliza el lcd con 4bit de datos, asi que si hay algun problema lo edito en el foro.

Bueno sigo currando a la noche sigo.
Saludos desde Granada, España.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #36 en: 04 de Diciembre de 2006, 17:23:45 »
Sirve este esquema para empezar?
PD: El que se ria el "soft de diseño" esta en problemas... :mrgreen:
PD2: los pines que estan sin nombre es por que deberiamos ver cual conviene usar. Y falto la expansion para la memoria I2C.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #37 en: 04 de Diciembre de 2006, 20:28:06 »
Escribe en el LCD "HOLA MUNDO".
Código: [Seleccionar]
'NOMBRE: 16F88_PicEBasic_LCD_01
'MICRO: PIC16F88, 8Mhz reloj interno, PSI v7.41, By COS
'Uso del LCD con bus de datos a 4Bit y sin pin de RW
'************************************************************************************************
Define CONF_WORD = 0x2f10  'Configuración de bits (fuses)
Define CONF_WORD_2 = 0x3ffc  'Configuración de bits (fuses)
Define CLOCK_FREQUENCY = 8  'Frecuencia del reloj a 8 Mhz
Define SIMULATION_WAITMS_VALUE = 1  'Suprime los tiempos de espera Waitms, solo activar esta linea en simulacion
'-------------------------------------Puertos del LCD---------------------------------------------
Define LCD_BITS = 4  'indicamos que el bus de datos del lcd sera de 4bit
Define LCD_DREG = PORTA  'el bus de datos sera el puerto A
Define LCD_DBIT = 0  'el bus de datos seran los 4 bit menos significativos del puerto A
Define LCD_RSREG = PORTB  'el bit de control RS sera del puerto B
Define LCD_RSBIT = 7  'se usara el RB7 como RS
Define LCD_EREG = PORTB  'el bit de control E sera del puerto B
Define LCD_EBIT = 6  'se usara el RB6 como E
'Define LCD_RWREG = PORTA 'el bit de control RW sera del puerto A (si se suprime el compilador no protesta)
'Define LCD_RWBIT = 5 'se usara el RA5 como RW (si se suprime el compilador no protesta)
Define LCD_COMMANDUS = 2000  'Tiempo de espera despues de ejecutar un comand del lcd en uSeg.
Define LCD_DATAUS = 50  'Tiempo de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 5  '(50) 'Tiempo de espera despues de inicializar el Display, solo se ejecuta una vez en mSeg., trucado para simulacion
'------------------------------------Definicion de puertos------------------------------------------
ANSEL = 0x00  'los pin I/O digitales (no analogicos)
OSCCON = 0x7e  'set intrc To 8mhz, se usara reloj interno a 8Mhz
CMCON = 0x07  'comparador a off
TRISA = 0x00  'Puerto A como salidas
TRISB = 0x00  'puerto B como salidas
'------------------------------------Inicio------------------------------------------------------------
Lcdinit  'inicializa el lcd sin cursor
WaitMs 500  'pausa para estabilizar
main:  'comienza el programa principal
Lcdcmdout LcdClear  'borra el display
WaitMs 1000  'hace una pausa de 1Seg.
Lcdout "HOLA MUNDO"  'escribe en el display
WaitMs 1000  'hace una pausa de 1Seg.
Goto main  'impide que termine el programa principal
End

Ahi dejo el programita para simular el LCD, a mi me funciona correctamente, a la hora de activar el modulo LCD del simulador, indicarle que tome la configuracion por defecto de pin segun le indica el codigo fuente.
Lo proximo seria simular el LCD y la entrada analogica a ver si da alguna incompatibilidad.

PD. Los tiempos estan trucados para no tener que esperar tanto en el Simulador, los tiempos reales son los que estan indicados entre parentesis.

PD. Corregido ya que este ejemplo se realizo antes de tener la Placa EBasic construida, asi que lo modifique para que funcione sobre ella.

PD. 22/07/07, solo correccion en la descripcion de los pin del LCD.

PD. 15/11/07, añado la configuracion de bit (fuses) del micro y la velocidad del clock en el programa.
« Última modificación: 12 de Junio de 2016, 14:16:03 por dogflu66 »
Saludos desde Granada, España.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #38 en: 04 de Diciembre de 2006, 20:58:15 »
Perfecto!
Para hacer el PCB uso el mismo "programa" que para los esquemas, asi que espero a que definamos bien todo antes de dibujar nada... ;)

Saldudos.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #39 en: 04 de Diciembre de 2006, 21:21:16 »
Recordar configurar el registro de bit antes de hacer nada con el compilador de basic
es una buena costumbre.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #40 en: 06 de Diciembre de 2006, 09:42:36 »
Dejo un ejemplo mas, es un poco lento pero merece la pena verlo en el Simulador.
El control y gestion del tiempo es un tema muy importante en la programacion.
Muestra en el display la frase "HOLA MUNDO" con parpadeo y también parpadeo el led amarillo con distinta cadencia cada uno.

Código: [Seleccionar]
'***************** Placa Entrenadora ***************************************
'NOMBRE: 16F88_PicEBasic_02
'MICRO: PIC16F88, 8Mhz reloj interno, PSI v7.41, By COS
'Uso del LCD con bus de datos a 4Bit y sin pin de RW
'Activacion del Timer1 por rebose cada 1mSeg.
'implementacion de timer (bases de tiempos)por soft
'cambio de estado del RA7 de forma cíclica (led intermitente)
'***********************************************************************
Define CONFIG = 0x2f50  'Configuración bits (Fuses)
Define CONFIG2 = 0x3ffc  'Configuración bits (Fuses)
Define CLOCK_FREQUENCY = 8  'Clock en Mhz
Define SIMULATION_WAITMS_VALUE = 1  'Activar para simulación
'-------------------------------------Puertos del LCD---------------------------------------------
Define LCD_BITS = 4  'indicamos que el bus de datos del lcd sera de 4bit
Define LCD_DREG = PORTA  'el bus de datos sera el puerto A
Define LCD_DBIT = 0  'el bus de datos seran los 4 bit menos significativos del puerto A
Define LCD_RSREG = PORTB  'el bit de control RS sera del puerto B
Define LCD_RSBIT = 7  'se usara el RB7 como RS
Define LCD_EREG = PORTB  'el bit de control E sera del puerto B
Define LCD_EBIT = 6  'se usara el RB6 como E
'Define LCD_RWREG = PORTA  'el bit de control RW sera del puerto A (si se suprime el compilador no protesta)
'Define LCD_RWBIT = 5  'se usara el RA5 como RW (si se suprime el compilador no protesta)
Define LCD_COMMANDUS = 2000  'Tiempo de espera despues de ejecutar un comand del lcd en uSeg.
Define LCD_DATAUS = 50  'Tiempo de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 50  'Tiempo de espera despues de inicializar el Display, solo se ejecuta una vez en mSeg.
'------------------------------------Definicion de puertos------------------------------------------
ANSEL = 0x00  'Los pin I/O digitales (no analogicos)
OSCCON = 0x7e  'Set intrc To 8mhz, se usara reloj interno a 8Mhz
CMCON = 0x07  'Comparador a off
TRISA = 0x00  'Puerto A como salidas
TRISA.5 = 1  'Como entrada, no permite ser usada como salida digital
TRISB = 0x00  'Puerto B como salidas
PORTB.3 = 1  'luz lcd a on (RB3)
'------------------------------------Inicialización de Interrupciones-----------------------------
T1CON.TMR1CS = 0  'asigna el reloj interno al timer1, se incrementa cada ciclo de instruccion
T1CON.T1CKPS0 = 0  'factor del preescales del timer1, 0
T1CON.T1CKPS1 = 0  'factor del preescales del timer1, 0
TMR1H = 0xf8  'carga el registro del contador para que desborde cada 1mSeg, byte alto
TMR1L = 0x30  'carga el registro del contador para que desborde cada 1mSeg, byte bajo
T1CON.TMR1ON = 1  'habilitacion del TMR1, comienza a incrementarse
PIE1.TMR1IE = 1  'activa las interrupciones del timer1
INTCON.PEIE = 1  'bit de habilitacion de interrupciones de perifericos
'Inicializa el LCD ----------------------------------------------------------------------------------
Lcdinit  'inicializa el lcd sin cursor
'Variables de los timer****************************************
Dim timer_base As Byte  'tiempo referencia para los timer por soft del programa
Dim timer_base_tiempo As Byte  'contiene el valor del tiempo del timer_base
Dim timer1_ms As Word  'base de tiempos en ms
Dim timer2_ms As Word  'base de tiempos en ms
Dim timer3_ms As Word  'base de tiempos en ms
Dim timer1_100ms As Byte  'base de tiempos msx100
Dim timer2_100ms As Byte  'base de tiempos msx100
Dim timer3_100ms As Byte  'base de tiempos msx100
Dim timer1_ms_tiempo As Word  'contiene el valor del tiempo del timer1_ms
Dim timer2_ms_tiempo As Word  'contiene el valor del tiempo del timer2_ms
Dim timer3_ms_tiempo As Word  'contiene el valor del tiempo del timer3_ms
Dim timer1_100ms_tiempo As Byte  'contiene el valor del tiempo del timer1_100ms
Dim timer2_100ms_tiempo As Byte  'contiene el valor del tiempo del timer2_100ms
Dim timer3_100ms_tiempo As Byte  'contiene el valor del tiempo del timer3_100ms
'Asignacion de valores a las variables--------------------------
timer_base = 0
timer1_ms = 0
timer2_ms = 0
timer3_ms = 0
timer1_100ms = 0
timer2_100ms = 0
timer3_100ms = 0
timer_base_tiempo = 100  'cuenta 100mSeg
timer1_ms_tiempo = 500  'cuenta 500 mSeg.
timer2_ms_tiempo = 500
timer3_ms_tiempo = 5
timer1_100ms_tiempo = 1  'cuenta 0.1 Seg.
timer2_100ms_tiempo = 1
timer3_100ms_tiempo = 1
'------------------------------------------------------------------------------
Enable  'INTCON.GIE habilita todas las interrupciones globales
WaitMs 500  'pausa para estabilizar
timer1_ms_tiempo = 2  '500
timer2_ms_tiempo = 3  '250
Dim flag As Bit
'------------------------------------rutinas del Programa----------------------
main:  'comienza el programa principal
If timer1_ms >= timer1_ms_tiempo Then  'refresco el display cada timer1_ms_tiempo
Toggle flag
Lcdcmdout LcdClear  'borra el display
If flag = 0 Then Lcdout "HOLA MUNDO"  'escribe el caracter "A" en el display
timer1_ms = 0  'reinicio el timer1_ms
Endif
If timer2_ms >= timer2_ms_tiempo Then  'cambio de estado el pin RA7 cada timer2_ms_tiempo
Toggle RA7
timer2_ms = 0  'reinicio el timer2_ms
Endif
Goto main  'impide que termine el programa principal
End                                               
'--------------------------------Interrupciones---------------------------------------------------
On Interrupt  'Comienzan las rutinas de las interrupciones, desactiva las interrupciones
Save System  'Guarda los valores del sistema para poder reemprender el curso normal del programa
If PIR1.TMR1IF = 1 Then  'Comprueba que la interrupción del timer1 es activa
'Bases de tiempos
timer_base = timer_base + 1
If timer1_ms < timer1_ms_tiempo Then timer1_ms = timer1_ms + 1
If timer2_ms < timer2_ms_tiempo Then timer2_ms = timer2_ms + 1
If timer3_ms < timer3_ms_tiempo Then timer3_ms = timer3_ms + 1
If timer_base >= timer_base_tiempo Then
If timer1_100ms < timer1_100ms_tiempo Then timer1_100ms = timer1_100ms + 1
If timer2_100ms < timer2_100ms_tiempo Then timer2_100ms = timer2_100ms + 1
If timer3_100ms < timer3_100ms_tiempo Then timer3_100ms = timer3_100ms + 1
timer_base = 0
Endif
TMR1H = 0xf8  'Recarga el contador del timer1 para que desborde pasado 1mSeg, byte alto
TMR1L = 0x30  'Recarga el contador del timer1 para que desborde pasado 1mSeg, byte bajo
PIR1.TMR1IF = 0  'Borra el flag de salto del tmr1
Endif
Resume  'Activa las interrupciones y retorna al curso normal del programa antes del salto


PD. Cambio el RA5 por el RA7, ya que el RA5 no puede ser seleccionada como Salida Digital.
PD Bis. Segunda correccion cambio RA7 y RA6 por RB7 y RB6 respectivamente para mantener compatibilidad con el esquema de la placa

PD. Donde dice "timer_base = 100  'cuenta 100mSeg", tiene que decir "timer_base_tiempo = 100  'cuenta 100mSeg"
« Última modificación: 12 de Junio de 2016, 14:52:07 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #41 en: 06 de Diciembre de 2006, 23:05:04 »
Al final me anime y basandome en el esquema de Aitopes confeccione este ultimo
Aqui lo dejo para que lo corrijan, modifiquen y etc.

PD. Cambio el RA5 por el RA7, ya que el RA5 no puede ser seleccionada como Salida Digital.
« Última modificación: 13 de Junio de 2016, 14:21:42 por dogflu66 »
Saludos desde Granada, España.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #42 en: 07 de Diciembre de 2006, 06:28:12 »
Hola Carlos! No le veo errores, esta perfecto!
Estoy medio "callado" por que tengo que resolver varias cosas para poder viajar a la kedada del viernes, pero prometo el lunes seguir con el proyecto.
Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #43 en: 07 de Diciembre de 2006, 20:32:07 »
Estuve trabajando con el Pic Simulator IDE, y me di cuenta que con el pin RA5 tenia resultados raros, asi que segui investigando y resulta que es un pin que no se puede seleccionar como salida digital.
Asi que corregi los esquemas anteriores, cambiando el pin RA5 por el RA7 y viceversa.

Saludos desde Granada, España.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #44 en: 08 de Diciembre de 2006, 11:55:49 »
Hola:

A la espera de ver como te queda la placa master  :mrgreen: