TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Leonsport en 22 de Junio de 2004, 07:00:00
-
Tengo un proyectillo en mente. Lo q intento hacer es sustituir un potenciometro de volumen de un equipo de audio por uno digital controlado por infrarrojos.
¿Alguna sugerencia?
salu2
-
Yo tenía la misma idea que planteas, peor emitiendo por RF...
Y la solución que me dieron, fué usar la entrada analógica del pic, para leer el estado del potenciometro...
una vez que tengas el valor del potenciometro, solo falta mandar datos... ya sea por rf como plantee yo, o por IR como tu dices...
La pena, es que mi proyecto se quedó en el tintero, por falta de tiempo...
Espero que tengas suerte con tu proyecto, porque es muy interesante....
-
Yo estoy con algo de eso para una radio que me estoy intentando fabricar.
El caso es que tienes integrados que realizan esa funcion, potenciometros digitales; por ejemplo:
MCP42100 (Microchip) -> Pot. Digital 2x100K (control bus SPI)
y de Dallas otro montón más; tengo el DS1267 de Dallas y el MCP42100 de Microchip con los que
pensaba probar a controlar la ganancia del preamplificador pero acabo de conseguir el PGA2311 de
Texas (control por bus SPI)y como que es mucho más completo.
La parte del receptor de infrarrojos es mucho más simple, basta con incluir un receptor apropiado,
por ejemplo un SFH5110 o similares conectado directamente a un PIC que se ocupe también del
potenciometro digital y ya está, que código hay por ahí a montones..
Un saludo.
-
Voy a hecharle un vistazo a esos potenciometros q mencionas y voy a ver como podria hacer el tema.
salu2
-
teneis rutinas para comunicacion por IR por ahi?
poco a poco recopilando informacion a ver q se puede hacer
salu22
-
Así a lo rápido he encontrado esto http://www.fortunecity.es/arcoiris/tarot/572/mandos.html
Tiene un ejemplo en ASM, sigo buscando.
Un saludo.
-
No esta mal esa web, aclara algo el tema.
Por cierto.... en los potenciometros digitales esos q me dijiste, como interpretan los datos q le vienen del receptor.
-
No entiendo bien la pregunta, haber si acierto: en principio he visto tres tipos,
1) comunicación por SPI
2) comunicación por I2C
3) tienen unas patillas UP y DOWN para aplicar pulsos y variar el valor de la resistencia.
(ahora mismo no se si existe la opcion de lineal/logaritmico)
El caso es que la resistencia de estos chips está dividida en pasos y en los de SPI & I2C
indicas directamente en que paso quieres colocarte (ejem: chip de 100K, lineal y dividida en
100 pasos, cada paso equivale a 1K y si nos colocamos en el 50 tedremos una resistencia de
50K, algo así
mientras que en los otros debemos ir de uno en uno.
Espero que se entienda, luego da igual que el chip sea un potenciometro digital o un reostato
por que el control es igual. Lo siento pero ya se que me explico muy mal.
Un saludo.
-
Si te he entendido perfectamente.
Precisamente un conseguido adquirir un pot digital (ds1869).Por lo q he visto va por UP-DOWN.
tambien he visto q tiene una entrada digital para conectar un micro.Entonces por lo q me dices introduciendo los datos provenientes del receptor por una de estas patas UP-DOWN podria variar el valor de la resistencia para (subir o bajar).
Sigo investigando rutinas de IR y pot digitales.
-
No se como funciona la línea de control del DS1869 pero añadiendo los terminales UP y DOWN a 2 líneas de un PIC
puedes controlarlo. Si solo fuese control de volumen le añades dos pulsadores en lugar del PIC y listo.
* Por lo general estos chips están disponibles con distintos valores de resistencia, y a parte es interesante fijarse en
los pasos que hay desde el valor mínimo hasta el máximo, para un control más preciso.
* Me gustan más los que se pueden controlar por I2C porque así en mi diseño solo uso dos líneas, pero por aprovechar
material puede que añada el DS1869 que tengo para controlar el contraste del LCD o alguna tonteria parecida. Ya te contaré
porque ando liado y ultimamente no tengo tiempo de montarlo, que es lo unico que me falta.
http://www.dh3ben.de/html/electronics/pga2311_preamp.shtml aqui encontraras un ejemplo del PGA 2311 + PIC18LF452 +
Receptor infrarrojos. Por lo que he leido el programa está preparado para seleccionar una de las funciones de control y
mediante un mando a distancia por infrarrojos memorizar el comando enviado el cual será asociado a dico control. Algo así he
entendido yo, el caso es que incluye código ASM, (tengo ganas de pillar algo en BASIC)
Un saludo.
-
Bueno, ya he conseguido unos comandos en basic q se integran en el pbp y mediante llamadas y tal puedes conseguir hacer algo con infrarrojos.No parece difícil de entender pero tengo q probarlo mas a fondo.
Ahora tendría q ver una vez pille los comandos el receptor, q secuencia obtendría para enviar al pot digital y poder investigar el tema, ya q no sé como lo interpretaría si pongo esas 2 lineas a las patillas up-down.Se supone q por cada pulso aumenta el valor.
con el poco tiempo q tengo ahora, a ver si puedo conseguir algo.
salu222
-
Bueno, he probado a hacer algo con esos comandos q antes he comentado y parece q la recepcion del mando a distancia la realiza.
Lo q hace es comprobar el código de identificacion del transmisor y lo guarda en una variable y esa variable es la q mandaría por alguna patilla del puerto. Ahora tendría q ver lo q manda de esa variable.
Con hserout y el hiperterminal podria ver esos datos?
salu222
-
Yo hice esos mismos pasos para interpretar los datos enviados por un mando RF...
lo que tienes que hacer, es leer los datos que recibes por el puerto de IR, y como muy bien dices, sacarlos por puerto serie hacia el hiperterminal...
si el pic que usas tiene usart, utiliza el hserout, y si el pic no tiene usart, los sacas con serout2...
-
el mando a distancia q tengo envia primero 1byte q contiene la info de la tecla pulsada y otro byte intercambiando datos.
He hecho una rutina para la recepcion según esas características utilizando 2 teclas de ese mando y saco los datos con serout2.
Cuando marco la tecla q quiero parece q hay respuesta y saca datos por donde le digo, pero al visualizarlos con el hyperterminal salen caracteres muy raros.
A ver si alguien puede ayudarme en ello.
salu2222222
-
Te saldrán caracteres ascii....
para que te saque los valores en binario, decimal, hexacedimal, solo tienes que poner
por ejemplo:
hserout[bin(value),10,13]
BIN()
HEX()
DEC()
pongo el 10,13 para que te pinte byte a byte con un salto de linea, y retorno de carro...
así te será mas facil interpretar los datos...
-
Un ejemplo para manejar un digital pot MCP41050 con SPI.
Define LOADER_USED 1
define OSC 20
" include "modedefs.bas"
CS var PORTB.5 " Chip select pin
SCK var PORTB.6 " Clock pin
SI var PORTB.7 " Data in pin
comando var byte " comando
cursor var byte " posicion cursor
TRISB = 0 " todo salidas
ADCON1 = 7 " Set PORTA and PORTE to digital
Pause 100 " Wait for LCD to start up
comando=00010001
For cursor=0 to 255
CS = 0
Shiftout SI, SCK, 1, [comando, cursor]
cs=1
Pause 5000
next cursor
cursor=128
CS = 0
Shiftout SI, SCK, 1, [comando, cursor]
cs=1
End
-
Con ese comando me aparecen los codigos en binario, pero al final me aparecen 2 caracteres q no sé q son, tienen forma como de un cero cuadrao.
Para el pot digital seguiré investigando a ver si con la rutina que me ha puesto el amigo RGL y buscando un poco me aclaro más.
salu2222
-
RGL el ejemplo ese de donde lo has sacado?
Es q no he trabajao con esa instruccion shiftout y no sé q hace en este caso. Si pudieras comentar un poco q hace esta rutina lo agradeceria.
salu222
-
Ese ejemplo es la prueba que he estado haciendo la semana pasada y la he sacado de la poca mollera que me queda sana.
El comando shift ya lo dice la palabra desplaza los bit sincronizados con una señal de reloj. Un pin saca el reloj y otro saca los datos sincronizados con él. Lo mismo puedes hacer en asm si es que te interesa controlar todo el proceso y no dejarle este tema a PBP. Puedes ver el Data Sheet de Microchip para ver como es el protocolo de comunicación SPI del pot.
Saludos
Ricky
Madrid-España
-
ABAGO, estan leidos con el q viene con el pic basic pro.
RGL, en ese programa lo de comando=00010001 que valor es?
salu22222222
-
Será que estás comunicando con el terminal serie del microcode???
Intenta leer con el hyperterminal de windows...
creo recordar que yo hice unas pruebas con el terminal de microcode, y me pasó lo mismo...
-
Vamos a ver,
El ejemplo que he puesto es para controlar el potenciometro digital a través de interfaz SPI, no es para puerta RS232, ni nada de eso.
Es un Chip Select, una señal de reloj síncrona con una señal de datos: Estos tres pines entran directamente al potenciometro y según los datos que vayamos metiendole el cursor se irá posicionando.
La otra parte del proyecto es la de leer por infrarrojo o por RF y que no tiene que ver con esta. Digamos son dos cosas diferentes.
La variable "comando" tiene un valor que le dice al potenciómetro que coja el valor de la variable "cursor" y se ajuste a ese valor (ver datasheet).
No hay más información.
Saludos
Ricky
Madrid-España
-
Abago nunca he probao con el de windows y no sé como se configura para eso.
El potenciometro q me he agenciao tiene una entrada digital y unos pines para subir o bajar el valor de la resistencia interna.
Por cada pulso q meta por las patillas up o down se incrementa o disminuye el valor del pot.
Pero claro....ese valor q obtengo del receptor segun la tecla q apriete tengo q adaptarlo al pot digital y no lo veo nada facil.
salu2222
-
Es muy sencillo...
ejecutas el hyperterminal...
luego te metes en el menú de configurar conexión..
pones el puerto en el que estás conectando, por ejemplo el COM1
seleccionas las velocidad a la que comunicas
luego, marcas los parámetros de bit de datos,paridad, bit de parada que suelen ser 8N1
y marcas el control de flujo habitualmente como NONE, en caso de que tu circuito gestione el control de flujo, ya pones el tipo de control de flujo que utilizas...
luego le das a conectar... y poco mas....
-
Abago tenias razon, con el hyperterminal de windows si lee bien el asunto. Ahora me sale justo el comando de la tecla que pulso, aunque solo utilizo 2 teclas del mando.
Ahora con ese comando tendria q hacer algo para q el pot digital al reconocerlo subiera a bajara la resistencia interna q lleva.
Eso ya es mas complicao....a ver si alguien me inspira.
salu2222222
-
Comentaste que el pot. digital tenía entradas de up/down, pues basta con aplicar pulsos en esos terminales y ya está.
Un saludo.
-
como dice jose, usando las entradas UP/DOWN del potenciómetro digital, lo tendrías muy facil...
haz los cálculos para ver la cantidad de posiciones que admite el potenciómetro en la entradas up/down, y creaté una tabla proporcional, en la que cada vez que pulses el mando y reconozcas el comando, ejecute n pulsos al potenciómetro...
-
He probao q una vez reconozca la tecla pulsada, con el comando pulsout envie un pulso de la duración mas o menos que me pone en el datasheet del pot digital y parece ser q al pin q se lo aplico si q experimenta un cambio.
Para q cuente solo el numero de pulsos correspondiente a cada pin up/down, por ejemplo en posición UP tiene 10 posiciones pensé en hacer esto:
pulsos=10
pulso=pulsos-1
pulsout portb.5,1
if pulso=0 then empieza desde 0 otra vez
De todas formas si alguien tiene messenger y quiere, me gustaria comentar unas cosas de forma más rápida.
salu22
-
Hola amigos a ver si pueden ayudarme:
Estas 2 lineas q pongo abajo es si aprieto el boton nº13 del mando me de una respuesta el receptor e identifique tecla pulsada.
IF PALABRA1 = 13 THEN "al apretar tecla 13 y se compruebe q es....
IF PALABRA2 =48 THEN " ...........................................................
(acción a realizar por rb4)
Pues bien, lo q necesito ahora es una rutina q haga lo siguiente:
EL potenciómetro digital tiene una serie de posiciones para up/down. Lo q necesito es poner justo despues de esas líneas algo q cuente el numero de posiciones q quiero para UP/DOWN.
El pin rb4 lo tengo conectao a la entrada UP del pot digital y rb5 a down.
salu222222
-
No termino de entender el proceso de funcionamiento que planteas...
Esplicalo de otro modo, a ver si me entero y puedo darte una solución!!!
-
Intentaré explicarlo de otra manera.......
Al pulsar la tecla 13 por ejemplo del mando a distancia quiero que me mande un pulso por rb4, la cual está conectada a la patilla UP del pot digital.
El pot digital tiene un numero de posiciones para moverlo al valor máximo UP y otros valores para DOWN.
Pues si pulso la tecla del mando quiero q mande un pulso,si la pulso otra vez otro pulso...y así hasta el numero max q necesite el pot para la patilla UP y cuando llegue a ese numero q empiece de nuevo desde la posicion inicial.
Creo q me expliqué mejor.
-
Mas o menos me he quedado con la idea, pero no comprendo la utilidad...
quieres pulsar la tecla UP n veces para llevar al potenciometro digital a la posición necesaria mediante pulsos propiciados por rb4.
y si el potenciometro llega al final de escala, ponerlo a 0
si es esa la idea, panteaté crear una variable para almacenar la posición lógica dal potenciómetro...
si pulsas up, y llegas a final de escala, solo tendrás que calcular los pulsos down que necesitas para llegar a la posición necesaria...
No se si he encauzado bien la respuesta, pero es un comienzo...
-
AHora q estoy pensando no me haría falta lo de regresar a la posicion inicial, puesto q o se baja o se sube volumen.
solo aplicaría pulsos por rb4 a la patilla UP para subir el volumen hasta q pueda y lo mismo por rb5 a la patilla DOWN para q me baje le volumen.
Tendría q mirar la duración de los pulsos del pot digital.
salu2222222
-
Creo que sería mejor que buscases un pot. digital controlado por I2C o SPI (te permite un mayor control del valor actual), y con un rango mayor, una escala de 10 posiciones no da para mucha precisión sobre el volumen.
Un saludo.
-
Las 10 posiciones las puse de ejemplo.
Según leí el pot digital se puede ajustar en 64 pasos lineales mediante los pulsadores UP y DOWN.
Los pulsos a enviar tienen q ser de más de 1ms de duración.
-
supongo que los potenciómetros con los que trabajas, tendrán un final de carrera, con lo que si pulsas el pin up y ya está a valor maximo, no tendrá ningún efecto...
para mandar el pulso al pin, supongo que puede ser así....
pulsout portb.4,100 "pulso de 1ms en portb.4
luego, si lo que quieres es tener distintas teclas y que cada una mande un valor de incremento al potenciómetro...
te creas un select case con las distintas opciones, y yas ta..
-
Creo que eso es exactamente lo que quiere, algo para enviar un pulso por una línea del pic, y luego usar dos líneas: UP & DOWN del potenciómetro.
un saludo.