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

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

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #255 en: 28 de Julio de 2007, 10:54:51 »
PD. Quien maneja normalmente el assembler esta mas familiarizado con estos registros, flag... etc.
otro PD. no los he utilizado nunca y no tengo ni idea de como se usan.
« Última modificación: 28 de Julio de 2007, 11:05:04 por dogflu66 »
Saludos desde Granada, España.

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #256 en: 28 de Julio de 2007, 11:10:35 »
gracias dogflu, suponía que algo de eso era porque con la primera variable que me pasó fue con la S -que asocié al stack- y lo mismo con C de carry o Z de zero pero como probé con un par de pics y me sucedía lo mismo, al final ya no estaba seguro...

y también sucede Ariel que no suelo usar variables de este estilo porque al final se pierden en el código y no nos dicen nada... si te digo que usé una 's' para no escribir 'salida' .... :lol: :lol:  bueno, al menos sirvió para descubrir algo

un saludo

edito: vaya, este hace mi post 500, ya voy siendo mayor de edad

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #257 en: 28 de Julio de 2007, 11:25:38 »
Me pico la curiosidad, asi que le voy a enviar el programa con los errores a ver si me envia documentacion sobre el tema.
y lo mismo no puedo compilarlas de ninguna forma asi que tienen que ser solo palabras reservadas...  :?
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #258 en: 28 de Julio de 2007, 11:38:17 »
Aqui dejo un excelente estudio realizado con el Basic del PSI, lastima que no este en Castellano.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #259 en: 28 de Julio de 2007, 11:40:25 »
La direccion (se me olvido ponerla antes  :lol:):

http://www.smilen.net/mex/SD_report_med9.pdf

Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #260 en: 28 de Julio de 2007, 22:58:43 »
Un nuevo ejemplo para trabajar con una E2Prom externa y Temperatura I2C en la EBasic.

La imagen de la plaquita:



La placa tiene un Led, una E2Prom (24LC04B) y un DS1624

« Última modificación: 29 de Julio de 2007, 09:15:54 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #261 en: 28 de Julio de 2007, 23:05:02 »
El programa de Test para el Led y la E2Prom es un contador
que nos muestra en pantalla tanto la direccion de escritura
como el dato a escribir, en el caso de error de lectura el led
de la plaquita queda iluminado durante 5Seg. al mismo tiempo
que se muestran los datos erroneos en pantalla.
En este caso el RB4 (led) nos funciona como flag de error del puerto I2C.

Código: [Seleccionar]
'***************** Placa Entrenadora (PIC EBasic) **************************************
'NOMBRE: 16F88_Pic_EBasic_EJEMPLO_24
'Descripción: TEST DE LA PLACA EBasic_I2C (Led y 24LC04B)
'Micro: PIC16F88 / 8mhz reloj interno
'Fecha/Autor: 29/7/07, By COS, PSI v7.41
'Versión: 1.0
'Programa de Test para el Led y la E2Prom
'Muestra en pantalla tanto la dirección de escritura
'Como el dato a escribir. En el caso de error lo
'indica tanto luminosamente como en pantalla.
'*********************************************************************************
Define CONF_WORD = 0x2f50  'Configuración de bits (fuses)
Define CONF_WORD_2 = 0x3ffc  'Configuración de bits (fuses)
Define CLOCK_FREQUENCY = 8  'Frecuencia del reloj en Mhz
'Define SIMULATION_WAITMS_VALUE = 1  'Hace que se ignoren los tiempos de los WaitMs
'-------------------------------------Puertos del LCD-------------------------------------
Define LCD_BITS = 4  'Indicamos que el bus de datos del lcd será de 4bit
Define LCD_DREG = PORTA  'Bus de datos será el puerto A
Define LCD_DBIT = 0  'Bus de datos serán los 4 bit menos significativos del puerto A
Define LCD_RSREG = PORTB  'Bit de control RS será del puerto B
Define LCD_RSBIT = 7  'RB7 como RS
Define LCD_EREG = PORTB  'Bit de control E será del puerto B
Define LCD_EBIT = 6  'RB6 como E
Define LCD_COMMANDUS = 2000  'Tiempo de espera después de ejecutar un comando del lcd en uSeg.
Define LCD_DATAUS = 50  'Tiempo de espera después de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 50  'Tiempo de espera después de inicializar el Display.
'*********************************************************************************
'------------------------------------Definición de puertos--------------------------------------------------
AllDigital  'los pin I/O digitales
'ANSEL = %00010000  'los pin I/O digitales y RA4 analógico
CMCON = 0x07  'comparador a off
OSCCON = 0x7e  'set intrc To 8mhz, se usara reloj interno a 8Mhz
TRISA = 0xff  'Puerto A como entradas
TRISB = 0xff  'puerto B como entradas
'TRISA.4 = 1  'como entrada (RA4, adc)
'TRISA.6 = 1  'como entrada (RA6, tecla S1)
'TRISA.5 = 1  'como entrada (RA5, tecla S2)
TRISB.3 = 0  'como salida RB3
TRISA.7 = 0  'como salida RA7
TRISB.0 = 0  'como salida RB0
TRISA.4 = 0  'como salida RA4
PORTB.3 = 1  'luz lcd a on (RB3)
PORTA.7 = 1  'led amarillo a off (RA7), negado
PORTB.0 = 1  'led verde a off (RB0), negado
PORTA.4 = 0  'led EB_I2C a off (RA4)
'------------------------------------Inicio-----------------------------------------------
'--------------------------------variables generales--------------------------------------
Dim addr As Byte  'dirección i2c
Dim data As Byte  'dato i2c
Dim n_random As Byte  'contendrá el numero deseado
'------------------------------------asignación de valores a las variables------------------
'--------------------------------------Reasignación de nombres--------------------------
Symbol sda = RB1  'asignamos nombre al pin que hará de SDA del puerto I2C
Symbol scl = RB4  'asignamos nombre al pin que hará de SCL del puerto I2C
Symbol led_amarillo = RA7  'led amarillo
Symbol led_verde = RB0  'led verde
Symbol luz_lcd = RB3  'iluminación del lcd
Symbol s1 = RA6  'tecla S1
Symbol s2 = RA5  'tecla S2
Const p_off = 0  'apaga el led
Const p_on = 1  'enciende el led
Const p_st = 2  'no cambia estado el led
Const w_on = 1  'se escribe y lee en la E2Prom
Const w_off = 0  'Solo se lee la E2Prom
'---------------------------------------------------------------------------------------
Lcdinit  'inicializa el LCD sin cursor
WaitMs 100  'pausa de 100 mSeg.
Lcdout "Test P. EB_I2C"  'Imprime el texto en el LCD
WaitMs 3000  'pausa de 3Seg.
Call led(p_off, p_off, p_off)  'led a off
n_random = random(0, 0)  'inicializa random (timer0)
'--------------------------------Rutina Programa---------------------------------------
main:
Lcdcmdout LcdClear  'borra lcd
For addr = 0 To 255  'addr tomara los valores desde 0 hasta 255,bucle
Lcdcmdout LcdLine1Home  'cursor línea 1 y principio
Lcdout "Escribiendo: ", #addr  'se escribe en el lcd
data = d_e2prom(addr, addr, 1)  'se llama a la función RW del I2C
Lcdcmdout LcdLine2Home  'cursor línea 2 y principio
Lcdout "leyendo: ", #data, " "  'se escribe en el lcd
WaitMs 100  'se espera 100mSeg.
If _error = 1 Then  'bit de error si esta a 1
Lcdcmdout LcdClear  'borra el lcd
Lcdout "Error: "  'imprime en el display
Lcdcmdout LcdLine2Home  'cursor al principio de la línea 2
Lcdout #addr, "  ", #data, "      "  'imprime en el display
WaitMs 5000  'se hace una pausa de 5Seg.
Endif  'cierra el if
Next addr  'cierra el bule for
End                                               
'------------------------------Rutinas-----------------------------------------------
'Escribe y lee en la E2Prom, dirección, dato, E2P_RW = 1 escribe y lee
Dim _error As Bit  'Flag indicador de error
Function d_e2prom(e2p_addr As Byte, e2p_data As Byte, e2p_rw As Byte) As Byte
RA4 = 1  'activa el led de la placa EB_E2Prom
_error = 1  'Marca error
If e2p_rw = 1 Then I2CWrite RB1, RB4, 0xa0, e2p_addr, e2p_data  'escribe en el I2C
WaitMs 5  'pausa para que el chip termine la escritura
I2CRead RB1, RB4, 0xa1, e2p_addr, d_e2prom  'lee en el puerto I2C
If d_e2prom = e2p_data Then
_error = 0  'Borra error
RA4 = 0  'Apaga el led placa EBasic_I2C
Endif
End Function                                     
'calcula números aleatorios, n_max = numero máximo y n_ini = numero mínimo
Function random(n_max As Byte, n_ini As Byte) As Byte
OPTION_REG.T0CS = 0  'selecciona reloj interno
n_max = (n_max + 1) - n_ini  'arregla el numero máximo
random = (TMR0 Mod n_max) + n_ini  'siendo n_max el numero máximo y +n_ini valor mínimo
End Function                                     
'controla el estado de los led, call (x,x)
Proc led(amarillo As Byte, verde As Byte, eb_i2c As Byte)
If amarillo = 1 Then RA7 = 0  'led amarillo a on
If amarillo = 0 Then RA7 = 1  'led amarillo a off
If verde = 1 Then RB0 = 0  'led verde a on
If verde = 0 Then RB0 = 1  'led verde a off
If eb_i2c = 1 Then RA4 = 1  'led EB_I2C a on
If eb_i2c = 0 Then RA4 = 0  'led EB_I2C a off
End Proc                                     
« Última modificación: 09 de Octubre de 2016, 20:06:20 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #262 en: 29 de Julio de 2007, 07:46:52 »
Ahora si la placa Real:

« Última modificación: 03 de Mayo de 2014, 15:46:43 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #263 en: 29 de Julio de 2007, 07:53:49 »
El esquema de la EBasic_I2C:

« Última modificación: 03 de Mayo de 2014, 15:49:50 por dogflu66 »
Saludos desde Granada, España.

Desconectado allado

  • PIC10
  • *
  • Mensajes: 10
    • Circuitos Impresos
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #264 en: 01 de Agosto de 2007, 10:59:01 »
CONSULTA...........Hola... por favor necesito confirmar si esta placa soporta ISCP .. (programación en circuito)... y si no lo soporta si seria factible añadirlo.

Gracias.
La humildad es el hilo con el que se encadena la gloria.

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #265 en: 01 de Agosto de 2007, 11:11:07 »
hola allado, bienvenido al foro

si soporta icsp, concretamente tiene un conector -sl3- para su programación en circuito

un saludo

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #266 en: 02 de Agosto de 2007, 18:46:15 »
El programa para el Test del DS1624 midiendo temperaturas positivas con dos decimales.

Código: [Seleccionar]
'***************** Placa Entrenadora (PIC EBadic) ***************************************
'NOMBRE: 16F88_Pic_EBasic_EJEMPLO_25
'Descripcion: TEST DE LA PLACA EBasic_I2C (Led y DS1624), Temperatura positiva)
'Micro: PIC16F88 / 8mhz reloj interno
'Fecha/Autor: 29/7/07, 2/08/07, By COS, PSI v7.41
'Version: 1.1
'Se añade TEST para el DS1624 (temperatura)
'*****************************************************************************************
Define CONF_WORD = 0x2f50  'Configuración de bits (fuses)
Define CONF_WORD_2 = 0x3ffc  'Configuración de bits (fuses)
Define CLOCK_FREQUENCY = 8  'Frecuencia del reloj en Mhz
'Define SIMULATION_WAITMS_VALUE = 1  'Hace que se ignoren los tiempos de los WaitMs
'-------------------------------------Puertos del LCD-------------------------------------
Define LCD_BITS = 4  'Indicamos que el bus de datos del lcd sera de 4bit
Define LCD_DREG = PORTA  'Bus de datos sera el puerto A
Define LCD_DBIT = 0  'Bus de datos seran los 4 bit menos significativos del puerto A
Define LCD_RSREG = PORTB  'Bit de control RS sera del puerto B
Define LCD_RSBIT = 7  'RB7 como RS
Define LCD_EREG = PORTB  'Bit de control E sera del puerto B
Define LCD_EBIT = 6  'RB6 como E
Define LCD_COMMANDUS = 2000  'Tiempo de espera despues de ejecutar un comando 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.
'------------------------------------Definicion de puertos-----------------------------------
AllDigital  'los pin I/O digitales
'ANSEL = %00010000  'los pin I/O digitales y RA4 analogico
CMCON = 0x07  'comparador a off
OSCCON = 0x7e  'set intrc To 8mhz, se usara reloj interno a 8Mhz
TRISA = 0xff  'Puerto A como salidas
TRISB = 0xff  'puerto B como salidas
'TRISA.4 = 1  'como entrada (RA4, adc)
'TRISA.6 = 1  'como entrada (RA6, tecla S1)
'TRISA.5 = 1  'como entrada (RA5, tecla S2)
TRISB.3 = 0  'como salida RB3
TRISA.7 = 0  'como salida RA7
TRISB.0 = 0  'como salida RB0
TRISA.4 = 0  'como salida RA4
PORTB.3 = 1  'luz lcd a on (RB3)
PORTA.7 = 1  'led amarillo a off (RA7), negado
PORTB.0 = 1  'led verde a off (RB0), negado
PORTA.4 = 0  'led EBbasic_I2C a off (RA4)
'------------------------------------Inicio--------------------------------------------
'Reasignacion de nombres------------------------------
Symbol sda = RB1  'asignamos nombre al pin que hara de SDA del puerto I2C
Symbol scl = RB4  'asignamos nombre al pin que hara de SCL del puerto I2C
Symbol led_amarillo = RA7  'led amarillo
Symbol led_verde = RB0  'led verde
Symbol luz_lcd = RB3  'iluminacion del lcd
Symbol s1 = RA6  'tecla S1
Symbol s2 = RA5  'tecla S2
'Variables generales---------------------------------------
Dim temperatura As Word  'temperatura entero .HB, decimales .LB
Dim temperatura_aux As Long  'calculo de los decimales
'--------------------------------------------------------------------------------------
Lcdinit  'inicializa el LCD sin cursor
WaitMs 100  'pausa de 100 mSeg.
Lcdout "Test P. EB_I2C"  'Imprime el texto en el LCD
WaitMs 3000  'pausa de 3Seg.
'--------------------------------Rutina Principal---------------------------------------
main:
temperatura = 0
temperatura_aux = 0
temperatura = d_ds1624(0, 0, 0)  'genera una lectura en el chip ds
WaitMs 1000  'pausa de 1Seg, tiempo maximo de conversion del chip ds
temperatura = d_ds1624(0, 0, 1)  'lee la lectura en dos bytes (13bit)
temperatura.LB = ShiftRight(temperatura.LB, 3)  'elimina bit que no se usan (decimales)
temperatura_aux = (temperatura.LB * 3125) / 1000  'calcula la parte decimal
temperatura.LB = temperatura_aux.LB  'Inserta los decimales
Lcdcmdout LcdLine2Home  'cursor al principio de la linea 2
Lcdout "Temp. +", #temperatura.HB, "."  'imprime en el lcd
If temperatura.LB < 10 Then Lcdout "0"  'mantiene el formato dos decimales
Lcdout #temperatura.LB, "     "  'imprime en el lcd
WaitMs 1000  '0  'hace una pausa de 10Seg.
Goto main
End                                               
'------------------------------ Subrutinas y Funciones ----------------------------------
'Funcion de lectura/escritura del DS1624
'ds1624_rw=0 el chip prepara un lectura, ds1624_rw=1 el chip entrega una lectura
'ds1624_rw=2 se hace una lectura del registro de control.
Function d_ds1624(ds1624_h As Byte, ds1624_l As Byte, ds1624_rw As Byte) As Word
'I2CPrepare sda, scl
RA4 = 1  'led placa I2c a On
If ds1624_rw = 0 Then  'solicita una lectura de temperatura
I2CWrite sda, scl, %10010010, 0xac, 0x00  'incializa el registro de control
WaitMs 10  'pausa para que termine la escritura
I2CWrite1 sda, scl, %10010010, 0xee  'comienza una conversion
Endif
If ds1624_rw = 1 Then  'hace la lectura de la temperatura
I2CWrite1 sda, scl, %10010010, 0xaa  'prepara el chip para lectura de temperatura
I2CRead1 sda, scl, %10010011, ds1624_h, ds1624_l  'lee la temperatura
Endif
If ds1624_rw = 2 Then  'hace una lectura del registro de control
I2CRead sda, scl, %10010011, 0xac, ds1624_l  'lee registro de control
ds1624_h = 0  'borra byte alto de antiguos valores
Endif
d_ds1624.HB = ds1624_h  'actualiza la temperatura
d_ds1624.LB = ds1624_l  'actualiza decimales temperatura o indica datos registro control
RA4 = 0  'led placa i2c a Off
End Function



PD. 22/01/09, Inserte esta línea en el código "temperatura.LB = temperatura_aux.LB  'Inserta los decimales".
Sin la línea no interviene el acondicionado y calculo de los decimales. Por algún motivo desconocido la omití al pegar el programa.
« Última modificación: 13 de Junio de 2016, 15:57:31 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #267 en: 02 de Agosto de 2007, 18:50:21 »
PD. y el que quiera terminar , le recomiendo
que se lea el Datasheet del DS1624, con solo ver el data se le quitan a uno las ganas de hacer algo con este chip.

otro PD. he sudado tinta china para poderlo poner en marcha.
Saludos desde Granada, España.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #268 en: 03 de Agosto de 2007, 02:10:25 »
Pues tengo uno por aquí al que cualquier día le meto mano. Menos mal que la tinta ya la has sudado tú  :mrgreen:

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #269 en: 04 de Agosto de 2007, 16:20:24 »
hola

bueno, voy poco a poco metiéndole en mano al psi y he decidido hacerlo desde lo más básico y procurando no dejarme nada atrás, pero no contaba con encontrarme tan pronto con cosas que no entiendo. en el ejemplo de conversión analógico-digital de los primeros post ( http://www.todopic.com.ar/foros/index.php?topic=14917.msg95256#msg95256 ) me encuentro con esto:

Código: [Seleccionar]
'**************************************DEFINICION DE PUERTOS*************************************
'----------------------ASIGNACION DE I/O y valores de inicion de las salidas---------------------
ANSEL = %00000000  'los pin I/O digitales
Define ADC_SAMPLEUS = 0  'el minimo, configuracion del ADC
Define ADC_CLOCK = 5  '16Tad a 8Mhz = 2uSeg, minimo permitido por el micro 1.5uSeg, configuracion ADC
'_______________registros afectados por Define ADC_CLOCK y ADCIN________________
'ANSEL = %00010000  'los pin I/O digitales y RA4 analogico
'ADCON0 = %01100000  'Fosc/16 a 8Mhz (ADCON1.ADCS2=1) =2uSeg (minimo 1.uSeg), channel RA4
'ADCON1 = %01000000  'voltage reference (AVdd/AVss) y seleccion de escala division clock/2 ADCON1.ADCS2=1

bien, revisando el data veo que tal configuración de ADCON0, ADCON1 y ANSEL consiguen lo que necesito para la lectura. así mismo ADCIN se asigna más adelante a RA4 y con OSCCON determinamos el uso de oscilador interno a 8Mhz.

lo que no entiendo es que las líneas de configuración de ANSEL y ADCON son meros comentarios... entonces... ¿de dónde toma la asignación? ¿de ADC_CLOCK y ADCIN? ¿cómo?

el manual dice que ADC_CLOCK puede tomar valores de 0..3 o 0..7 según el pic. en la página 118 del datasheet debe estar la solución pero no consigo verla y ese valor ADC_CLOCK = 5 me tiene completamente desorientado.

¿hace referencia en el datasheet al valor de 205 para num_2 o lo sabes por experiencia?

un saludo