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

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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #690 en: 07 de Enero de 2011, 11:31:50 »
Pues ese error que me indicas creo que seda cuando hay una comparación de registros de tipos distintos.
Los BIT solo se pueden comparar con BIT:

dim n as byte
dim j as bit
If RA0 = 1 Then n = 1
If RA0 = j Then n = 0

PD. De pesado para nada, lo que ocurre es que algunas veces mis repuestas pueden hacerme parecer seco o muy seco,  :x, pero es porque lo mismo estoy con un proceso que me deja 5 o 6 minutos libres en el curro, y contesto rapidamente desde el trabajo. :D
Saludos desde Granada, España.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #691 en: 07 de Enero de 2011, 14:24:17 »
De pesado para nada, lo que ocurre es que algunas veces mis repuestas pueden hacerme parecer seco o muy seco,  :x, pero es porque lo mismo estoy con un proceso que me deja 5 o 6 minutos libres en el curro, y contesto rapidamente desde el trabajo. :D
Si decia lo de pesado era por la cantidad de preguntas, no por las repuestas ni por la forma de las mismas, ya que siempre me han ayudado mucho.

Con respecto a tu propuesta, entiendo que lo deberia de realizar es una vez leido el pin del puerto asignar su valor a una variable y despues comparar enrtre si ya los dos valores de las variables ¿Es eso?

Gracias
Todos los días se aprende algo nuevo.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #692 en: 07 de Enero de 2011, 14:32:44 »
Si y No, se puede de las dos maneras.

Const k1 = 0
Dim bytes As Byte
Dim n As Byte
Dim j As Bit
Symbol k2 = RA0
bytes = 0
If RA0 = 1 Then n = 1
If RA0 = j Then n = 0
If k2 = 1 Then n = 0
If k2 = k1 Then n = 0
bytes.0 = RA0  'Requiere cambio de tipos
bytes = RA0  'ERROR al compilar
If RA0 = bytes.0 Then n = 1
« Última modificación: 07 de Enero de 2011, 15:03:47 por dogflu66 »
Saludos desde Granada, España.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #693 en: 07 de Enero de 2011, 16:12:36 »
Gracias de nuevo por la respuesta y gracias a ellas adjunto el proyecto terminado y probado.
Esta realizado con un PIC16F887 y probado sobre una tarjeta de desarrollo(trainer) realizada por mi. Ahora empezaré a dibujar la tarjeta definitiva a montar en el equipo final. Basicamnete el programa es una máquina de estados.
Adjunto el programa completo. De momento no tiene comunicaciones que se las pondré mas adelante. ¡¡¡ Por estas vacaciones creo que está bien lo realizado!!! ;-).
Esperaré unos dias a que termine la pcb (cuando la temine incluiré las correspondientes fotos)y me pondré con ellas. Espero que me sigan echando una manita. Para un sistema embarcado en ferrocarril, evitando comunicaciones MVB ¿Cual me dirian que serian las mas adecuadas e insensibles a todo tipo de ruidos? ¿Quizás CAN?
Bueno les dejo unas breves caracteristicas del proyecto:
Código: [Seleccionar]
Equipo de control para un motocompresor. Éste motocompresor dispone en la parte del compresor
de unos presostatos(mínima y máxima) para supervisar la generacion de la presión. Tambien dispone
 de un sensor de temperatura para controlar la temperatura del aceite del carter del compresor.
Por otra parte para el control del motor se utiliza el correspondiente contactor trifásico 400V a.c. con
las correspondientes protecciones térmicas.
La tarjeta de control además procesa las señales de puesta en marcha y parada; vigila cuando se produce
 una falta de tensión alterna o está fuera de un valor; y la señal de rearme de averías.
El sistema motocompresor también lleva incorporado un sistema para secar el aire generado por el motocompresor.
Ésta opción se vigila también con la tarjeta de control.
No dispone de comunicaciones que se incluirán más adelante.
Saludos y muchas gracias por las ayudas recibidas.
F.
« Última modificación: 07 de Enero de 2011, 16:15:09 por Fer_TACA »
Todos los días se aprende algo nuevo.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #694 en: 08 de Enero de 2011, 08:28:17 »
Felicidades Fermín quedare a la espera de noticias. De todas formas te recuerdo que  para los que nos dedicamos a esto, el terminar el código que realiza la acción deseada solo es una parte. Hay otro código que hay que insertar que es el encargado de proveer de las protecciones contra interferencias por Software, y otro no menos importante, el más importante según mi criterio y al que no se le da en general mucha importancia en los foros, sobretodo por la nueva moda de las simulaciones en las que se reduce el hardware a la mínima expresión, quedando un hard inútil y que engaña totalmente al que comienza en estos temas. No basta con un simple hardware en el que se pueda ubicar nuestro código, también este hard tiene que tener su correspondiente extra de elementos para las protecciones contra interferencias. Si no tenemos en cuenta estas dos opciones corremos el riesgo que nuestro proyecto solo funcione en nuestras casas.
Saludos desde Granada, España.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #695 en: 08 de Enero de 2011, 09:29:54 »
Efectivamente Carlos, estoy contigo respecto a todo el tema de las protecciones, sobre todo en un ambiente tan hostil como es el ferrocarril.
Para el hardware ten cuenta que para poder embarcar un producto, este debe de cumplir con la norma EN50155. Entre otras cosas como el rango de temperatura(-40ºC.... +85ºC minimo) hay otros requisitos sobre todo de compatibilidad electromagnetica y te aseguro, ya que he tenido que pasar algunas pruebas en laboratorios, que estas son muy duras.
Para ello, a nivel de hardware, entre otras hay que añadir por ejemplo a la fuente de alimentacion los correspondientes filtros y para las señales de I/O tambien protegerlas adecuadamente.

De momento, digamos que el nucleo principal, programa adjuntado, estaría mas o menos listo, falta pulir y proteger como bien dices. Pero a partir del mismo, es desde donde debo seguir con el desarrollo del proyecto, que segun vaya avanzando iré publicando.
¿Crees que la comunicacion por CAN puede ser un modelo adecuado para este tipo de aplicaciones?¿se puede implementar con PSI?.
Aunque no se, quizas para seguir tambien aprendiendo, empiece por una comunicacion sencilla, a base de RS232, aunque se que el alcance no es grande o bien me decante por un RS485. Tengo unos dias para pensar y valorar.
F.
Todos los días se aprende algo nuevo.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #696 en: 08 de Enero de 2011, 10:18:59 »
Te recomiendo el dirver RS485 ya que es compatible con la uart del PIC. Tienes que inventar un protocolo que controle el Pin de Tx/Rx del chip (comunicación bidireccional half duplex). De hecho este protocolo es prácticamente el mismo para trabajar posteriormente si fuera necesario con  módulos de RF. Lo que sí tendrás es que utilizar cable apantallado, ya que incluso el drive RS485 puede llegar a tomar interferencias, pero con un protocolo adecuado de petición de tramas de datos erróneas va bien. De todas formas recomiendo que estudies todas las posibilidades.
Revisa el indice del hilo, ya hay algo de info soble problemas que te puedes encontrar, y sobre la conexion del driver a la uart del pic.

Las interferencias en el cable de datos no tienen la importancia sobre el drive RS485, este las suele tolerar muy bien, es más bien, porque pueden entrar en nuestra placa a través de él e interferir en el clock del micro por ejemplo.
« Última modificación: 08 de Enero de 2011, 10:29:18 por dogflu66 »
Saludos desde Granada, España.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #697 en: 08 de Enero de 2011, 14:48:37 »
Revisaré el hilo y tomaré en cuenta las indicaciones.
Todos los días se aprende algo nuevo.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #698 en: 09 de Enero de 2011, 18:20:21 »
El ultimo ejemplo sobre arrays, este ejemplo se implementa en una memoria Ram I2C PCF8570T (I2CRam), la ventaja de este tipo de chip con interfase I2C es que se escribe y se lee a la misma velocidad del bus. Que lo hace interesante para datalogger o simplemente como expansión de memoria de datos del usuario.

Código: vb.net
  1. 'Rutina para trabajar con I2CRam (PCF8570T) como array 2 dimensiones
  2. 'Definido como tabla de 16x16
  3. 'By dogflu66 para EBasic
  4. '********************************************************************
  5. Define CONF_WORD = 0x2f10
  6. Define CONF_WORD_2 = 0x3ffd
  7. Define CLOCK_FREQUENCY = 8
  8. '********************************************************************
  9. Dim x As Byte
  10. Dim y As Byte
  11. Dim n As Byte
  12.  
  13. ANSEL = 0x00  'Los pin I/O digitales
  14. CMCON = 0x07  'Comparador a off
  15. OSCCON = 0x7e  'Set intrc To 8mhz, se usara reloj interno a 8Mhz
  16. TRISA = 0xff
  17. TRISB = 0xff
  18.  
  19. Hseropen 9600
  20. main:
  21.         n = 255
  22.         For x = 0 To fh
  23.                 For y = 0 To fh
  24.                         max = n  'Valor decreciente a guardar en la memoria
  25.                         Call max(x, y, "W")  'Actualiza array
  26.                         n = n - 1
  27.                 Next y
  28.         Next x
  29.         Hserout CrLf  'Linea en blanco
  30.         For x = 0 To fh
  31.                 For y = 0 To fh
  32.                         Call max(x, y, "R")  'Lee array
  33.                         Hserout "max(", #x, ",", #y, ")=", #max, CrLf  'Imprime valores
  34.                 Next y
  35.         Next x
  36. 'Goto main
  37. End                                              
  38. 'Rutina para trabajar con I2Cram (PCF8570) como arrays 2 dimension Pic16F88
  39. 'max = variable de paso
  40. 'i1 = Primer indice del array
  41. '21 = Segundo indice del array
  42. 'rw = "W" o "w" o 1 => Escribe en array
  43. 'rw = "R" o "r" o 0 => Lee del array
  44. Function max(i1 As Byte, i2 As Byte, rw As Byte) As Byte
  45.         Const ind2 = 16  'Número de columnas o también número de elementos por fila
  46.         Dim ind As Byte  'Indice del vector de trabajo
  47.         ind = i1 + i2 + (i1 * (ind2 - 1))  'Calcula indice array
  48.         If rw = "R" Or rw = "r" Or rw = 0 Then I2CRead RB1, RB4, 0xa0, ind, max  'Lee en el puerto I2C
  49.         If rw = "W" Or rw = "w" Or rw = 1 Then I2CWrite RB1, RB4, 0xa0, ind, max  'Escribe en el I2C
  50. End Function
« Última modificación: 09 de Enero de 2011, 22:13:21 por dogflu66 »
Saludos desde Granada, España.

Desconectado Amaro Pargo

  • PIC10
  • *
  • Mensajes: 4
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #699 en: 14 de Febrero de 2011, 16:15:00 »
Aquí les dejo un ejemplo de comunicación 1-Wire. Se me daba la dificultad de que para envíar al LCD un dato numérico, solo se puede hacer en decimal (anteponiendo # en la variable) por lo que para solucionarlo implementé una subrutina para la conversión a hexadecimal y mostrarlo en código ASCII en el LCD. Espero que les sirva de ayuda.

Código: [Seleccionar]
'****************************************************************
'*  Nombre     : 1-wire.bas                                     *
'*  Autor      : ARM (Tenerife-España)                          *
'*  Fecha      : 14/02/2011                                     *
'*  Version    : 1.0                                            *
'*  Compilador : Básic del Pic Simulator IDE v. 6.83            *
'*  Notas      : Este programa lee un dispositivo tipo 1-wire™  *
'*             : y muestra la familia, su ID y el CRC grabado   *
'*             : en la ROM y la muestra en un display LCD32     *
'****************************************************************
'Definición de la conexión del LCD: tipo 2x16, bus de 8 datos a
'través del puerto B, rs en RA0, e en RA1 y r/W en RA2
'----------------------------------------------------------------
Define LCD_LINES = 2  '2 filas
Define LCD_CHARS = 16  '16 columnas
Define LCD_BITS = 8  '4 bits
Define LCD_DREG = RB  'puerto a conectar los 4 bits
Define LCD_RSREG = RA  'puerto para rs
Define LCD_RSBIT = 1  'rb0 a rs
Define LCD_EREG = RA  'puerto para e
Define LCD_EBIT = 2  'rb1 a e
Define LCD_RWREG = RA  'puerto para r/W
Define LCD_RWBIT = 3  'rb2 a r/W
'Define LCD_READ_BUSY_FLAG = 1
'Definición de la frecuencia de reloj (4 MHz) y de la palabra de
'configuración: XT, CP off, PWRT On y Watchdog Timer off
'----------------------------------------------------------------
Define CONF_WORD = 0x3ff1
Define CLOCK_FREQUENCY = 4  'Se usa un oscilador de 4 MHz
'Definición del puerto y bit de conexión del dispositivo 1-Wire™
'----------------------------------------------------------------
Define 1WIRE_REG = PORTA
Define 1WIRE_BIT = 0
'Asignación de variables
'----------------------------------------------------------------
Dim id(8) As Byte
Dim index As Byte
Dim dig1 As Byte
Dim dig2 As Byte
Dim x As Byte
'Inicialización de dispositivos (LCD)
'----------------------------------------------------------------
Lcdinit  'Inicializa el LCD
WaitMs 500  'Pausa de 1/2 segundo para estabilizar el LCD
'Programa principal
'----------------------------------------------------------------
main:
'Iniciar la comunicación y ordenar la lectura ($33 = Leer ROM):
1wireInit  'Inicializa el bus de comunicación 1-Wire™
1wireSendByte 0x33  'Envía comando $33 al dispositivo esclavo
WaitMs 1  'Pausa de 1 milisegundo
'Obtener la ID:
For x = 0 To 7  'Bucle para la lectura del código ROM completo
1wireGetByte id(x)  'Lee 1 byte y lo almacena en el array
Next x  'repite el bucle hasta completar las 8 lecturas
'Enviar ROM al lcd:
Lcdout "Familia = "  'Mostrar en el LCD
x = 0  'Primer índice del array a visualizar (tipo de familia)
Gosub mostrar_hexadecimal  'Rutina de conversión a hexadecimal
Lcdcmdout LcdLine2Home  'Cursor a la 1ª posición de la 2ª linea
For x = 6 To 1 Step -1  'Los 6 siguientes índices del array (ID)
Gosub mostrar_hexadecimal  'Rutina de conversión a hexadecimal
Next x  'Repite el bucle hasta mostrar los 6 bytes del ID
Lcdout "-"  'Mostrar en el LCD
x = 7  'Último  índice del array a visualizar (CRC)
Gosub mostrar_hexadecimal  'Rutina de conversión a hexadecimal
End  'Fin del programa                           
'Rutina de conversión a hexadecimal y visualizado en LCD
'----------------------------------------------------------------
mostrar_hexadecimal:
index = id(x) / 16  'Cálculo del primer dígito en hexadecimal,
dig1 = LookUp("0123456789ABCDEF"), index  'y su obtención
index = id(x) Mod 16  'Cálculo del segundo dígito en hexadecimal,
dig2 = LookUp("0123456789ABCDEF"), index  'y su obtención
Lcdout dig1, dig2  'Mostrar la conversión en el LCD
Return  'Regresa de la subrutina
« Última modificación: 01 de Septiembre de 2013, 21:35:34 por dogflu66 »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #700 en: 15 de Febrero de 2011, 21:20:28 »
Hola Amaro Pargo, no puedo compilar el codigo, me tira error. Parece que falta la etiqueta de la subrutina "mostrar_hexadecimal".
Saludos desde Granada, España.

Desconectado michelelectro

  • PIC10
  • *
  • Mensajes: 3
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #701 en: 16 de Febrero de 2011, 19:26:03 »
Hola todos bueno tengo un GLCD  controlador k180s  y bueno la cuestión es quiero subirle imágenes y e buscado el dicho generador todopic  pero nada no lo e encontrado pido ayuda aver quien me lo puede sapasar   es pero sus respuestas .... :)gracias.
« Última modificación: 04 de Abril de 2011, 20:59:45 por michelelectro »

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #702 en: 17 de Febrero de 2011, 06:35:08 »
¿Pero que programa?

Si no indicas que ¡¡ ¡no podremos echar una mano!!! ;-)
Todos los días se aprende algo nuevo.

Desconectado Amaro Pargo

  • PIC10
  • *
  • Mensajes: 4
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #703 en: 22 de Febrero de 2011, 20:03:15 »
Hola Amaro Pargo, no puedo compilar el codigo, me tira error. Parece que falta la etiqueta de la subrutina "mostrar_hexadecimal".

Uy!, es verdad. Se me quedó atrás la etiqueta de la subrutina al hacer copy-paste. Disculpa dogflu66. Pongo de nuevo el código:

Código: [Seleccionar]
Define LCD_Lines = 2  '2 filas
Define LCD_CHARS = 16  '16 columnas
Define LCD_BITS = 8  '4 bits
Define LCD_DREG = RB  'puerto a conectar los 4 bits
Define LCD_RSREG = RA  'puerto para rs
Define LCD_RSBIT = 1  'rb0 a rs
Define LCD_EREG = RA  'puerto para e
Define LCD_EBIT = 2  'rb1 a e
Define LCD_RWREG = RA  'puerto para r/W
Define LCD_RWBIT = 3  'rb2 a r/W
'Define LCD_READ_BUSY_FLAG = 1

Define CONF_WORD = 0x3ff1
Define CLOCK_FREQUENCY = 4  'Se usa un oscilador de 4 MHz

Define 1WIRE_REG = PORTA
Define 1WIRE_BIT = 0

Dim id(8) As Byte
Dim index As Byte
Dim dig1 As Byte
Dim dig2 As Byte
Dim x As Byte

Lcdinit
WaitMs 500  'Pausa de 1/2 segundo para estabilizar el LCD

iniciar_conversion:
1wireInit
1wireSendByte 0x33
WaitMs 1

obtener_id:
For x = 0 To 7
1wireGetByte id(x)
Next x

enviar_lcd:
Lcdout "Familia = "
x = 0
GoSub mostrar_hexadecimal
Lcdcmdout LcdLine2Home
For x = 6 To 1 Step -1
GoSub mostrar_hexadecimal
Next x
Lcdout "-"
x = 7
GoSub mostrar_hexadecimal

End  'Fin del programa                           

mostrar_hexadecimal:
index = id(x) / 16
dig1 = LookUp("0123456789ABCDEF"), index
index = id(x) Mod 16
dig2 = LookUp("0123456789ABCDEF"), index
Lcdout dig1, dig2
Return

Espero que ahora si puedas compilarlo. Dime que tal te fue.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #704 en: 24 de Febrero de 2011, 22:43:07 »
Ahora si que compila, cuando tenga un rato libre le dedico un tiempo.
Saludos desde Granada, España.