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

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #270 en: 04 de Agosto de 2007, 21:31:38 »
Bueno, lo primero es decir que nunca fue mi intencion la de realizar programas
del estilo declarar un variable o encender (prender) un led, por lo que
son mas que simples ejercicios son verdaderos programas de cierto nivel
avanzado. Por todo esto me alegro de tu pregunta ya que el programa hizo
que tuvieras que referenciarte en el datasheet del micro para poder entenderlo
ya que esa fue mi intencion y tambien te digo que ahora no me acuerdo de
la extrapolacion entre el data y la tabla de configuracion del manual del PSI.
pero te lo miro en brevedad y asi refresco mi memoria y afianzo mis bases.
Asi que gracias por la pregunta... pana.
Saludos desde Granada, España.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #271 en: 05 de Agosto de 2007, 03:01:25 »

Define ADC_CLOCK = 5  '16Tad a 8Mhz = 2uSeg, minimo permitido por el micro 1.5uSeg, configuracion ADC

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.

REGISTER 12-2: ADCON0: A/D CONTROL REGISTER (ADDRESS 1Fh) PIC16F88 DEVICES ONLY

R/W-0    R/W-0   R/W-0  R/W-0  R/W-0    R/W-0      U-0  R/W-0
ADCS1  ADCS0   CHS2   CHS1   CHS0   GO/DONE    —   ADON
bit 7                                                                             bit 0

bit 7-6 ADCS<1:0>: A/D Conversion Clock Select bits
           If ADCS2 = 0:
               00 = FOSC/2
               01 = FOSC/8
               10 = FOSC/32
               11 = FRC (clock derived from the internal A/D module RC oscillator)
              
            If ADCS2 = 1:
               00 = FOSC/4
               01 = FOSC/16
               10 = FOSC/64
               11 = FRC (clock derived from the internal A/D module RC oscillator)


Sobre esa pregunta puedes ver en el registro que si ADCS2 = 1 quiere decir que estas escogiendo dividir entre dos el reloj cuando escoges alguna otra opción que no es el RC interno; escoges la opción 01 = FOSC/16, entonces:

 ADCON1.6     ADCON0.7    ADCON0.6
   ADCS2          ADCS1         ADCS0

      1                  0                    1               -------------------->   5


Sobre lo del 205..... es no lo he visto aún, dame tiempo.


Lo del reloj ya lo había experimentado pero en PBP "ADC_CLOCK = 3". Siempre 3, ¿por qué? porque siempre agarran el tiempo del RC interno, la última combinación [11 = FRC (clock derived from the internal A/D module RC oscillator)]


Edición:
Tratando de saber el por qué de ese num2=205, después de ver el código original me surgen dudas:

1.- Se declara num1 como palabra, supongo para tener los 10 bits del AD, ¿o para realizar las divisiones?
2.- Se comenta 'ADCON1=01000000 el cual indicaría una justificación a la izquierda y por ende la utilizacion de los diez bits en forma inverza, como para utilizar solo 8 bits, los del ADRESH y descartar los del ADRESL(izquierda el de menor peso y derecha el de mayor). Habría que ver cuál registro toma, o si toma los dos y los guarda en num1.
3.- Si utiliza solo 8 bits para el cálculo, quizá eso influya en que num2=205.


Tengo la cabeza algo confusa, vengo llegando de manejar de con mi novia (45 minutos) y son las 11:12 PM xD



Edición#2:

Acaba de venirme algo a la mente pero no se cómo explicarlo asi que lo pondré tal y como vino:

1024/5 = 204.8

¿Tendrá algo que ver?

¿Corrección del menor?

No se pero creo que va por ahí


Edición#3:
Ahora estoy peor, siempre que busco la relación voltaje/bit realizo lo siguiente  5v/10bits = 5v/1024 = 4.88 mV/incremento.

Perdido perdido perdido....



Edición#4:
Dogflu, ¿qué programa utiliza para los PCBs?
« Última modificación: 05 de Agosto de 2007, 03:28:14 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #272 en: 05 de Agosto de 2007, 08:11:37 »
Es el Eagle (Igel) Mario, y jeje cuando me recupere de la fiesta de ayer refresco la memoria sobre el modulo ADC, jeje...  :mrgreen:
Saludos desde Granada, España.

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #273 en: 05 de Agosto de 2007, 10:30:16 »
hola y muchísimas gracias. todo aclarado en lo que respecta a la conversión ad del programa.

he programado -algo- en pbp y difiere a la hora de hacer las cosas. un ejemplo sencillo de algo que en su día realicé es esto:

Código: [Seleccionar]
DEFINE OSCCAL_1K 1
define OSC 4

@ DEVICE pic12F675, 0x1fc4 ' palabra de configuración: oscilador interno IO. PWRT y BOREN enables

DEFINE ADC_BITS 8       ' numero de bits
DEFINE ADC_SAMPLEUS 50  ' tiempo de muestreo en microsegundos

TRISIO = %001101    ' GP0 y GP2 son entradas; GP1 y GP4 son salidas
CMCON = %00000111   ' deshabilita comparadores
ADCON0 = %10000001  ' GP0 es la entrada del conversor A/D
ANSEL = %00110001   ' oscilador interno(FRC). GP0 analógica,
                    ' las demás son digitales
...
...
ADCIN 0, variable

la solución tal como creía estaba en la tabla 12-1 (página 118): 16 TOSC - 1 - 01 - 10Mhz que establece los valores de bit en los registros ADCON0 y ADCON1 y ese valor 5 del ADC_CLOCK lo tenía delante mio en esa tabla: 1-01

decía en un post anterior amigo dogflu que soy de los que leen, leen, leen y luego preguntan (citando a maunix una vez más) y me gusta aprender y para ello tengo que entender lo que está pasando... copiar un listado de un programa no me lleva a lado ninguno si no entiendo lo que hace..  :shock:

muchas gracias de nuevo a ambos y un saludo

pd: nos queda el valor de 205 para num_2 pero antes recupérate de la juerga  8) 8)

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #274 en: 05 de Agosto de 2007, 11:11:57 »
Mario el bit ADFM del registro ADCON1 está a 0 lo cual nos indica que trabajaremos con 10 bits y justificado a la izquierda. ahora bien, tal como dice dogflu:

num_2 = 205 ' asigna factor de corrección para 5v

entonces 10 bits = 1024 y 1024/205 = 4,995 ¿estoy en lo correcto?

un saludo

EDITO: o, tal como tu apuntabas, 1024/5 = 204,8
« Última modificación: 05 de Agosto de 2007, 11:52:28 por xocas06 »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #275 en: 05 de Agosto de 2007, 12:51:50 »
Como veo que todo esta aclarado tan solo dejo mi traduccion de lo que Vladimir
nos expone en el manual del PSI, la que al no ser muy extensa nos oblica a buscar
en el datasheet del micro en particular para poder obtener un mayor rendimiento del
modulo, pero si nos deja lo suficiente como para poder trabajar con el ADCIN por primera vez.

Usando el modulo interno A/D.
La declaracion ADCIN esta disponible como un apoyo para el uso del modulo interno, convertidor A/D.
Su primer argumento es:
Es el numero de canal ADC o la entrada desde donde convertir y el segundo argumento es un variable que se usará para
almacenar el resultado de la conversión. La declaracion ADCIN usa dos parámetros para su mejor configuracion
segun la necesidad de nuestro programa ADC_CLOCK y ADC_SAMPLEUS que toman valores por defecto  3 y 20.
Estos valores pueden ser cambiados, para nuestro beneficio,  usando la directiva DEFINE. ADC_CLOCK determina
la elección de la fuente de reloj del ADC (la gama permitida va desde 0-3 o 0-7 dependiendo del dispositivo usado,
son los tiempos de conversion y estos los da el ADC y un multiplo de la velocidad del cristal usado ya que puede darse
la paradoja que a menor velocidad de reloj puede que nos coincida un valor mas aproximado a la velocidad mas rapida
de conversion del modulo interno ADC).
El parametro ADC_SAMPLEUS indica el tiempo deseado  de adquisición en microsegundos (0-255).
La declaracion ADCIN presupone que el pin correspondiente se configura como entrada analógica
(los registros afectados por ADCIN son TRIS, ADCON1 y en algunos micros tambien el registro ANSEL).

y despues viene un ejemplo escueto pero que es suficiente para poder usar el ADCIN.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #276 en: 05 de Agosto de 2007, 13:10:02 »
num_2 como tal indicais se puede obtener de varias formas
lo importante es saber que es una constante que nos permite
simplificar los calculo, y se obtiene de los valores 1024 (10bit)
y 5V como tension de referencia. y una vez obtenido el numero
se incrementa o decrementa en algunas unidades a tanteo para
corregir la desviación del 7805 que no suele entregar casi nunca
los 5V, esto tambien se puede corregir midiendo el voltaje de
alimentacion del micro con el voltimetro. y de esta forma cambiando
el voltaje de 5V por el real en la ecuación.
Saludos desde Granada, España.

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #277 en: 05 de Agosto de 2007, 13:16:20 »
gracias dogflu, estaba completamente atascado al principio y lo tenía tal como sospechaba ante mis ojos.

ahora trato de aprender algo sobre lo que no tengo la menor experiencia que es la comunicación i2c y la comunicación spi. he visto que en el datasheet hay bastantes cosas al respecto pero ¿conocerás por acaso algún documento o web del tipo spi (o i2c) para torpes?.

comenzaré buscando en el foro antes de nada

un saludo

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #278 en: 05 de Agosto de 2007, 13:20:36 »
PD. tambien nos permite incluir los decimales como parte entera en todos los
calculos y asi mejoramos la precision.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #279 en: 05 de Agosto de 2007, 13:36:33 »
Pues no tengo nada sobre I2C, pero puedes leer el data
de la memoria del ejemplo, en el obtendras muchas respuestas
y el del DS1624 dejalo para lo ultimo..jeje
Saludos desde Granada, España.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #280 en: 05 de Agosto de 2007, 23:43:00 »
¿conocerás por acaso algún documento o web del tipo spi (o i2c) para torpes?.


http://www.robot-electronics.co.uk/htm/using_the_i2c_bus.htm

No es para torpes pero tiene lo escencial.


Mario el bit ADFM del registro ADCON1 está a 0 lo cual nos indica que trabajaremos con 10 bits y justificado a la izquierda.


Ya lo había señalado. La pregunta era sobre cómo trabajará, explico:
Si en PBP le dices ADC_BITS = 8, el compilador toma el valor del ADRESH y justifica a la izquierda para tomar los 8 bits de mayor peso y descartar los 2 de menor que son ADRESL<7,6>.

En ese sentido va la pregunta, pareciera que utilizaría los 8 bits del ADRESH pero habrá que ver si alguien cof**dogflu**cof pudiera decirnos cuáles registros se utilizan al aplicar esa instrucción en este programa.

Estoy viendo el ambiente de programación y pinta bien (IDE) y no está tan caro, a diferencia del PBP y sus 250 dólares, bueno, sus 15 dólares de actualización (espero que salga la 2.48 y tenga algo nuevo  :?).

Estoy viendo si consigo el nuevo de CCS (aunque no se C) pero es de 575 dólares, y al parecer no es muy estable. Quizá me decida por el SWORDFISH (150 dólares).

Dogflu, muy buen tema... muy didáctico.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #281 en: 06 de Agosto de 2007, 07:02:28 »
gracias Mario por el link.

te comento como yo lo veo y a modo de pensamiento en voz alta (que no basado en la experiencia...)

el resultado de ADCIN es un valor de 10 bits, que se almacena en los registros ADRESH:ADRESL. el valor de ADFM determina si este resultado estará justificado a la izquierda o a la derecha y en cualquier caso 'despreciará' los 6 bits más/menos significativos.

en el ejemplo del programa, ADCIN le asigna el valor obtenido a la variable num_1 que es una variable del tipo Word y por tanto (entiendo yo) está haciendo uso de los 10 bits de la lectura. si quisiera quedarme solamente con los 8 bits más significativos despreciando los demás crearía una variable del tipo Byte que tomase el valor de la parte alta de num_1 :

Dim num_1 As Word
Dim mivar As Byte
mivar = num_1.HB

yo estoy con el paso del pbp al psi y por ahora estoy contento con el cambio. si hecho algo en verdad de menos es que en pbp ya tengo el winpic800 y gtp-usb+ configurados para realizar en un solo click la programación del pic vía icsp, ver el resultado y volver al programa...

un saludo

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #282 en: 06 de Agosto de 2007, 19:27:40 »
Bueno, estuve repasando la configuración del modulo ADC según el uso que hace la función ADCIN.
Y este comandito es cabezón, según el simulador solo nos deja trabajar en 10bit, reconfigura los registros
cada vez que entra en acción, por ejemplo el ADCON1.ADFM lo ignora por mas que lo cambiemos a mano.

Aquí dejo un programita para que juguéis con los registros y podáis comprobar vosotros mismos.
Si va muy lento podéis suprimir los literales de la información que sale por el puerto serie.
y si tenéis alguna duda para configurar el simulador para ver los datos serial... pues no tenéis mas que preguntar.

Mientras sigo con la experimentación pero ya descargando el programa en la EBasic a ver que pasa.

PD: [28/10/08] Verificado que en la ultima  versión del compilador, si la variable de salida de datos de ADCIN es un Byte en vez de Word, ADCIN se configura de forma automática a 8Bit. No verificado en versiones anteriores.
« Última modificación: 27 de Octubre de 2008, 21:54:34 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #283 en: 06 de Agosto de 2007, 19:35:27 »
El programita:

Código: [Seleccionar]
'********************************** PIC Entrenadora BASIC (PicEBasic)***************************
'NOMBRE: 16F88_Pic_EBasic_Ejemplo_26
'MICRO: PIC16f88
'FECHA/AUTOR: 08/07 - By COS, PSI v7.41
'Version: 1.0
'Estudio del modulo ADC y relacion con ADCIN
'Envia al puerto serie por emulación un registro predeterminado de 8bit en formato binario.
'**********************************************************************************************************
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
'***********************************************************************************************************
'_____Asignacion de I/O y valores de inicio de las salidas
ANSEL = %00000000  'Los pin I/O digitales
Define ADC_SAMPLEUS = 10  'El minimo posible, 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
'________________________________________________________________________
CMCON = 0x07  'Comparador a off
OSCCON = 0x7e  'Set intrc To 8mhz, se usara reloj interno a 8Mhz
TRISA = 0x00  'Puerto A como salidas
TRISB = 0x00  '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)
PORTB.3 = 1  'Luz lcd a on (RB3)
PORTA.7 = 1  'Led amarillo a off
PORTB.0 = 1  'Led verde a off
'_____Main Programa
Dim adc_4 As Word  'Contendra el valor de la entrada del ADC
main:
While RA6 = 0  'Pausa, mientras este pulsada la tecla S1
Wend
ADCON1 = %11000000
Adcin 4, adc_4  'Lee el valor de la entrada analogica y lo guarda en adc_4
Serout PORTB.5, 2400, "adc_4 ", #adc_4, " adc_4.HB ", #adc_4.HB, " adc_4.LB ", #adc_4.LB, CrLf  'escribe la lectura del ADC
Serout RB.5, 2400, "ADCON0 "
Call lcd_bit(ADCON0)
Serout RB.5, 2400, " ADCON1 "
Call lcd_bit(ADCON1)
Serout RB.5, 2400, " ANSEL "
Call lcd_bit(ANSEL)
Serout RB.5, 2400, CrLf
'Añadir los registro que querais....
WaitMs 500
Goto main
End                                               
'Envia por el puerto serie el valor de "registro" en formato binario
Proc lcd_bit(registro As Byte)
Dim n As Byte
Dim var As Byte
var = 0
For n = 7 To 0 Step -1  'Numero de bit de la variable
var.0 = registro.n
Serout RB5, 2400, #var  'Envia el bit al puerto serie
Next n
End Proc   
« Última modificación: 20 de Junio de 2016, 10:54:20 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: PIC BASIC del PIC Simulator IDE
« Respuesta #284 en: 06 de Agosto de 2007, 19:45:24 »
Los registro afectados y bit principales ya los indique en el programa al que os referís.
Lo que ocurre es que como no se comento en su día ya no me acordaba...  :mrgreen:
y claro si me dan a elegir entre 8 o 10bit me quedo con los 10...  :mrgreen:

'_____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

De todas formas seria fácil crearnos una función en la que pudiéramos elegir la resolución del ADC.
Incluso si os apetece podeis crearla vosotros mismos y luego la comentamos...   :mrgreen:
« Última modificación: 06 de Agosto de 2007, 20:21:37 por dogflu66 »
Saludos desde Granada, España.