Curso de programación de PIC en PICBasic Pro


Gox


tienes el archivo de proteus???

como lo estas probando?

Dark
no te entendi muy bien

pero mira este texto de la ayuda del microcode...
The first array location is element 0. In the fish array defined above, the elements are numbered fish[0] to fish[7] yielding 8 elements in total. Because of the way arrays are allocated in memory, there are size limits for each type:
 
Última edición:
lo que pasa es lo siguiente, en sentido horario esta a la perfeccion y cuando completa una vuelta lo repite sin ningun problema, pero cuando selecciono el sentido antihorario, digamos que hace una vuelta completa y despues energiza 3 bobinas y se para y ya no responde.
Adjunto el codigo que utilizo y mi archivo de proteus.
PD: deje parte de mi codigo, para no hacerme bolas (todavia no le entiendo bien :oops:), tome parte final de tu codigo y lo anexe al mio.
 

Adjuntos

  • com.rar
    11.6 KB · Visitas: 65
Traducción de la ayuda de PBP

La primera ubicación dentro del arreglo es el elemento cero. En el arreglo fish anterior los elementos
están numerados fish (0) a fish (7) conteniendo 8 elementos en total .
Dada la forma en que los arreglos están localizados en memoria hay límites de tamaño para cada tipo.
Ósea que lubeck tu dices colocar un Array[4] por que se usaran 4 valores
Pero para que declarar a VAR BYTE[4] si a VAR BYTE[3] ya contiene 4 elementos.
 
Última edición:
mmm.. creo que estoy dormido ya, porque no entiendo a que te refieres Dark... :D
mañana le doy una leida completa.... para ver en que la estoy errando...

buenas noche a ambos!!
 
Hola a todos, tengo un problema y no se como solucionarlo, leo el estado de un potenciometro con la palabra "POT", y lo muestro en un LCD desde 0 hasta 255, ahora, como hago para cambiar la escala, para cuando este en 0 muestre 88, y cuando este en 255 muestre 108. Esto no puedo resolverlo con una regla de tres directa ya que no es lineal. Como se podra resolver?, desde ya muchas grasias.

En este momento solo se me ocurre 2 opciones....una que hagas una tabla con la correspondencia de cada valor entre POT y el valor que quieres que represente y otra es que encuentres una expresión matemática que refleje los valores que toma el POT.......ya sabes que la regla de 3 simple no se puede aplicar pero la matemática no se termina ahí. Habría que muestriar(ya que con 2 valores de 256 posibles solo se puede adivinar los valores intermedios) y buscar una expresión que represente dichos valores lo mas exactos posible según tu proyecto tolere/requieras.

Ric.
 
Última edición:
GOX

lo de los array no tiene ningun chiste....

tienes un numero de variables digamos...

jorge=100
lubeck=200
pedro=40
kilo=300
son cuatro variables con cuatro diferentes valores.... lo mismo puedes hacer con un array...
a[0]=100
a[1]=200
a[2]=40
a[3]=300
tambien son cuatro diferntes variables pero la diferencia es que se llaman igual y tienen un "indice" el cual puedes manejar con una constante u otra variable....

digamos
a[1]=1
es lo mismo que si cuando b=1...
a=1

y mira este codigo... en teoria conserva la posicion del motor...
 

Adjuntos

  • com.rar
    16.9 KB · Visitas: 78
Última edición:
GOX

lo de los array no tiene ningun chiste....

tienes un numero de variables digamos...

jorge=100
lubeck=200
pedro=40
kilo=300
son cuatro variables con cuatro diferentes valores.... lo mismo puedes hacer con un array...
a[0]=100
a[1]=200
a[2]=40
a[3]=300
tambien son cuatro diferntes variables pero la diferencia es que se llaman igual y tienen un "indice" el cual puedes manejar con una constante u otra variable....

digamos
a[1]=1
es lo mismo que si cuando b=1...
a=1

y mira este codigo... en teoria conserva la posicion del motor...


Hola lubeck, muchas gracias de verdad estoy agradecido y a la vez un poco avergonzado :oops:, el codigo que me proporcionaste, va a la perfeccion.
Hay partes que no le entiendo, pero tendre que ponerme a leer y estudiar para entender bien este pequeño universo de los microcontroladores :).
Mil gracias, tendras alguna pagina o informacion para ponerme a estudiar y leer :D.
salu2
 
Hola a todos, tengo un problema y no se como solucionarlo, leo el estado de un potenciometro con la palabra "POT", y lo muestro en un LCD desde 0 hasta 255, ahora, como hago para cambiar la escala, para cuando este en 0 muestre 88, y cuando este en 255 muestre 108. Esto no puedo resolverlo con una regla de tres directa ya que no es lineal. Como se podra resolver?, desde ya muchas grasias.

hola mi amigo ojala pueda ayudarte yo hice lago parecido

si tu dices que quieres hacer esto solo deberias hacer esto con una simple regla de 3 no se si usaste eso me avisas como vas con esto asi podemos resolverlo o mira antes yo postie un programa que usaba 3 potenciometros con el ADC y escale los valores para que me los indique en un LCD 16x2
 
me parece que no Dark...

mira el archivo adjunto a este link...
https://www.forosdeelectronica.com/f24/matrix-leds-arrays-pic-basic-pro-45923/

igual voy a hacer una prueba, pero a mi me habia omitido la ultima variable, y alguien en el tema ya lo menciono... y como lo he dimensionando siempre asi y nunca he tenido problemas pues no lo he verificado.... :D
OK. Saludos
Bien, pues me puse a jugar con el manejo de Arrays y encontre algo interesante.
Si creo un Array de 3 Elementos PEj. a VAR BYTE[3]
se supone me deberia cargar desde el 0 hasta el 3 y lo hace pero al modo que experimente.
Los cargo como:
a[0]=1
a[1]=2
a[2]=3
a[3]=4

Si los mando llamar independientemente, si me muestra el valor de a[0] hasta a[3] ;)
En cambio si los mando llamar por medio de un FOR x=0 TO 3
Si me omite el valor de a[3] :confused:
Entonces si declaro a VAR BYTE[4] con el FOR... NEXT si me da el valor de a[3] :unsure:
Ahora lo que no entiendo es porque si me da el valor de a[3] si lo llamo independientemente.
Hice la misma prueba en VB6 y ahí si me muestra el valor de a[3] con un FOR x=0 TO 3
Así que puede ser debido a que VB6 es de 32Bits aunque me parece ilogico
porque solo se esta trabajando con un Array de 4 valores.
Bien, así que entonces queda claro que para que no se omita el valor del ultimo elemento
se tiene que declarar uno mas.
Pero ya me quedo esa duda de por que un llamado independientemente x=a[3] si funciona.
Declarando solo a VAR BYTE[3] y con un FOR... NEXT no funciona.....
No hice la prueba con valores WORD que pudiera ser otra causa.
Gracias lubeck (y) y saludos a todos. :apreton:
Aqui les dejo el resultado del experimento. BYE4NOW
 

Adjuntos

  • Experimento Arrays.rar
    22.2 KB · Visitas: 95
Última edición:
esto de los arreglos lo veo muy importante me ha dado una idea como para seguir con mi seguidor de linea
ademas amigos alguien m puede explicar una conexion serie por 485 lo quiero hacer con labview y 2 esclavos mas y si no es mucho pedir pueden explicarme como son las iterrupciones en este compilador no la entiendo bien
 
puede explicar una conexion serie por 485 lo quiero hacer con labview y 2 esclavos mas
a mi también me gustaría aprender esa comunicacion.... no he visto ninun codigo en PBP aunque debo aclarar que no lo he buscado mucho...

y si no es mucho pedir pueden explicarme como son las iterrupciones en este compilador no la entiendo bien

las interrupciones tampoco son muy complicadas, lo que hay que visualizar es que es lo que se llama como una bandera o un Flag, osea un 1 o un 0, y que esa variable siempre esta en un registro del pic y se cambia por Hardware y generalmente la modifica un modulo del pic (como el USART, Timer, I2c, etc) o los puertos IO....

como ya dije se cambia por Hardware, el picbasic lo detecta y llama una rutina a la hora que se detecta...

la instruccion que pone en "alerta" es On interrupt goto MiInt, donde MiInt es la subrrutina...

En la subrrutina se de deshabilita esa "alerta" para no crear conflicto o que se vuelva a ejecutar mientras la esta realizando , se regresa de donde fue llamada con las sig. instrucciones y se habilita la "Alerta"...

DISABLE
MiInt:
led = 1
RESUME
ENABLE

cada pic tiene su forma de activar esas interrupciones....
generalmente hay que ver el Datashit del pic en cuestion para configurar los registros involucrados dependiendo del modulo, el IntCON, y el Option_reg...

espero no haber olvidado mucho :D
 
Última edición:
muchas gracias pero no tendras por ahi un ejemplito para poder entenderte mejor la verdad no te entiendo muy bien que se diga disculpandome por la ignorancia
 
un ejemplito para poder entenderte mejor la verdad no te entiendo muy bien que se diga disculpandome por la ignorancia

ok... el tema es que no hay un ejemplo que siempre te funcione... porque cada modulo es diferente, es a base de configurar registros...

o lo que es lo mismo de que interrupcion quieres un ejemplo es diferente el de los puertos IO al del USART o al del I2c etc etc...

por otro lado ya investigue un poco del 485, y a lo que entiendo es lo mismo que el serial la diferencia es que hay que activar un puerto para habilitar la transimision del max485, si es half-duplex... voy intentar hacer un ejemplo pronto y lo subo, si alguien tiene uno ya echo pues que mejor...:D
 
Última edición:
a ver que opinan....

hice este ejemplo del RS-485... todos los pics tiene el mismo codigo (para no batallar) segun yo la unica diferencia de enviarlo como i2c, spi, o por serial entre el 485 y el 232, es que se tiene que habilitar el envio con un puerto....

Va el ejemplo con el Serin....
 

Adjuntos

  • RS-485.rar
    10.3 KB · Visitas: 120
Última edición:
Muy bien lubeck!!! el próximo año construire una red 485 con PLC's y espero
poder poner un micro en la red con tu ejemplo...

P.D. podrías pasarme tu fondo de escritorio...:D
 
Atrás
Arriba