Autor Tema: Teclado Analógico Para 16F628A (ahorro de pines) SIN ADC!!!  (Leído 9774 veces)

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

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Teclado Analógico Para 16F628A (ahorro de pines) SIN ADC!!!
« en: 02 de Julio de 2007, 00:15:27 »
QUE?
Hola a Todos. Esta es una idea que tuve hace tiempo, aunque seguramente no soy el primero en pensarlo.
Se trata de implementar un teclado 4x4 (o posiblemente de hasta 32 teclas) en un 16F628A.

POR QUE?
Me motiva a esto el hecho de haber diseñado un teclado para alarma donde un pic se encarga de esta tarea y transmite en forma serial al pic central que es otro pic igual. Si el pic central se encargase de controlar el teclado directamente me ahorraría un pic, pero son muchos cables aún siendo un teclado matricial y el gran problema: no me alcanzan los pines del pic central

ANALOGICO?
Usar un teclado analógicos en un pic con ADC no es nuevo, el teclado y su circuitería son en realidad un DAC que envía una señal de tensión al conversor del pic y este en su interior recupera la información de la tecla presionada.

COMPARADORES
Bién, los pics más económicos como es el caso del 16F628A no tienen ADC, pero si comparadores
Pienso que usando los comparadores que provee el 16F628A se podría implementar un teclado con 1 o 2 líneas solamente.

QUE LES PARECE?
Bueno, esta es la idea. Me voy a poner a dibujar un circuito (en realidad acabo de comenzar)
Mientras espero alguna respuesta por si alguién sabe algo del tema, piensa que puede ser factible o no, o simplemente quiere participar en este muy pequeño proyectito.

Saludos

PD. Yo uso CCS v. 3.235 (PIC C) y trato de simular en proteus 6.7 sp3

« Última modificación: 02 de Julio de 2007, 06:02:21 por Menta »
     

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Teclado Analógico Para 16F628A (ahorro de pines)
« Respuesta #1 en: 02 de Julio de 2007, 01:35:36 »
Hola Menta .....

ANALOGICO?
Usar un teclado analógicos en un pic con ADC no es nuevo, el teclado y su circuitería son en realidad un DAC que envía una señal de tensión al conversor del pic y este en su interior recupera la información de la tecla presionada.

Este sistema se empezó a ver masivamente, hace unos 15 o 20 años cuando AIWA sacó al mercado las series NSX y CX en su línea de audio para el hogar.

Sería algo así como poner muchas resistencias en serie, de igual valor (o nó) y aplicar por el extremo más alejado al pin del microcontrolador VCC, para luego en cada unón de resistencias, colocar un pulsador a GND. Ésto acompañado de un resistor pull-up.

De ésta forma, de acuerdo al valor de resistencias que hayamos usado en la serie, podríamos colocar mucho más que 32 pulsadores en el teclado.
En PBP o Protón se utiliza la instrucción POT, que sirve para leer un potenciómetro, tomando del mismo hasta 256 muestras.
Segun la resolución en bits que se emplee, por lo que tranquilamente y si la lógica no indica lo contrario, se podrían colocar mucho más que 100 pulsadores.

QUE LES PARECE?
Bueno, esta es la idea. Me voy a poner a dibujar un circuito (en realidad acabo de comenzar)
Mientras espero alguna respuesta por si alguién sabe algo del tema, piensa que puede ser factible o no, o simplemente quiere participar en este muy pequeño proyectito.

Claro que es factible, de hecho, puedes conseguir un circuito en la web (Está plagado de circuitos AIWA por todos lados)

Ahora viene el lado contrario.

Como te dije antes, uso programas basados en Basic, por lo que por ése lado, me voy a ver muy limitado de participar del proyecto, pero eso no quita que participe del mismo, del lado hardware.

El problema Nº 1 y a vencer, es la calidad de los pulsadores, ya que los mismos se ven siempre afectados por el entorno de trabajo de la aplicación.
Ésto significa que con el tiempo, la suciedad y el desgaste, los contactos de los pulsadores pierdan el valor ideal de resistencia cero al pulsarlos.
Es una falla que provoca que se pulse un botón y el sistema interprete que se está activando otro y actúa distinto a nuestras intenciones operativas.
Se agrava aún más éste defecto, si lo que se debe activar son llaves o switch's de algún automatismo.
Los resultados pueden ser impredecibles y hasta destructivos.
Ejemplo de ésto en un reproductor de CD, pulsamos PLAY y se activa FF ó STOP.

De la calidad de los pulsadores / teclas / switch's / soft touch, etc. que uses en el diseño y el mantenimiento regular que le dés al sistema,  depende el éxito funcional del mismo.

Es una opinión de las tantas que obtendrás, que la valido en todo lo que me han dado de comer los AIWA con esa falla, a lo largo de éstos años.

No por todo ésto te quiero desalentar; pero no quería dejar de contarte mi experiencia y reitero mi participación en lo que pueda ayudar en el proyecto.

Saludos

Mario

PD1: Ojalá ésto termine mejor que lo del Analizador de Espectro.
PD2: Respuesta a tu firma. "Yo soy uno de los que no".

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Teclado Analógico Para 16F628A (ahorro de pines)
« Respuesta #2 en: 02 de Julio de 2007, 02:08:09 »
Gracias Mario por la información.
La instrucción a la que haces referencia: POT que toma 256 muestras, supongo que usa el adc, pero como en este caso no tenemos adc y usaremos comparadores la señal "interna" de Vref puede tomar 16 valores posibles usando un gran divisor resistivo como el que se usa en la entrada y que tú tambien detallas.
Teniendo en cuenta que tenemos 2 comparadores, podemos poner 16 teclas en cada uno, o separar las teclas que necesitemos en los 2 comparadores (8 y 8 por ej.) y lograr así mayor diferencia entre tensiones contíguas haciendo el sistema más eficiente en cuanto a inmunidad al ruido.

Es decir,
Con Vdd=5v tengo 16 tensiones con saltos de 0.20833 v.  o  0.15625 v. (según modo LOW o HIGH)
si uso 8 teclas en cada comparador puedo usar saltos dobles de hasta  0.41667 volts.

Lo de los pulsadores es verdad, eso limita un poco el campo de aplicación de estos teclados.

PD1: Tengo un NSX-S22 hace más de 10 años y las teclas andan bárbaro, la lectora sí que no duró ni 3 años, el control de volumen falla de tanto en tanto.
PD2: Respeto tus PDs, pero que hablen los hechos
« Última modificación: 02 de Julio de 2007, 02:35:06 por Menta »
     

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Teclado Analógico Para 16F628A (ahorro de pines)
« Respuesta #3 en: 02 de Julio de 2007, 02:51:50 »
Bueno, a ver... para el que le interese es más o menos esto (aunque no anda  :mrgreen: )

Mi idea era ir conmutando Vref desde valores altos hacia abajo, cuando Vref fuese menor que la señal que proviene desde el teclado sabría entre qué valores se encuentra dicha tensión, ergo, sabría que tecla se ha pulsado.
El tema es que al simular (y pueden comprobarlo uds mismos) no funciona.
Cuando una tecla está pulsada, el nivel momentáneamente es constante, la variación o barrido lo hace Vref, pero al cambiar parece que se desactiva la comparación o algo así, aún no lo analizé en profundidad.

Nota: El pin A2 conectado al operacional y al capacitor es sólo a fin de comprovar el valor de Vref, todo eso no iría en una aplicación final. En la imagen puede verse la importancia del ahorro de pines; se maneja un lcd y el teclado y sobrarían 8 pines, además podría obtener uno extra del lcd, podría intercambiar B3 por B0 si necesitase de la interrupción EXT, etc
     

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Teclado Analógico Para 16F628A (ahorro de pines)
« Respuesta #4 en: 02 de Julio de 2007, 03:45:35 »
Sacado del documento Tips & Thicks de Microchip ...

Ahorrándonos pines para leer interruptores

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Teclado Analógico Para 16F628A (ahorro de pines)
« Respuesta #5 en: 02 de Julio de 2007, 06:01:10 »
Muchas Gracias RedPic
Ahora que lo veo recuerdo haber entrado a tu página en alguna oportunidad y ver esos circuitos, pero no recordaba que había uno de tiempo. Esta muy bueno, ya lo voy a analizar, aunque en principio creo que dado el planteo principal de este miniproyecto (ya que en rigor forma parte de otro mayor que no es completamente mio) lo mejor es usar los comparadores.
Los demás circuitos que figuran en el link se valen del ADC por lo que no los puedo usar, el de tiempo es interesante, pues qué pic no tiene un timer disponible?!

Volviendo a mi circuito, creo que ya tengo una solución, no es muy ortodoxa, pero debería funcionar:
Pienso hacer variar la señal de la tecla pulsada a mayor frecuencia que la variación de Vref de modo que primero se estabilice un valor de Vref y para ese momento la señal de entrada atraviese o no ese umbral de tensión (eso va a depender de cual tecla se pulsó)
Lo tengo en la cabeza, pero ya es muuuy tarde. Mañana lo pruebo y lo subo funcione o no.
Saludos.
     

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Teclado Analógico Para 16F628A (ahorro de pines) SIN ADC!!!
« Respuesta #6 en: 02 de Julio de 2007, 11:42:31 »
Hola Menta.

Lo que te comentaba de la instrucción POT, es para entradas comunes, no de ADC, Como por ejemplo para un 16F84A.
La corrección que hay que hacerle al texto que escribí antes, es que en la parte de GND y en serie con la "Resistencia Variable", vá un capacitor, del cual se miden los tiempos de descarga.

Te dejo el texto del HELP del Protón donde habla de esa instrucción y de la aclaración de lo que te decía del capacitor.

POT
Syntax
Variable = POT Pin , Scale
 
Overview
Read a potentiometer, thermistor, photocell, or other variable resistance.
 
Operators
Variable is a user defined variable.
Pin is a Port.Pin constant that specifies the I/O pin to use.
Scale is a constant, variable, or expression, used to scale the instruction's internal 16-bit result. The 16- bit reading is multiplied by (scale/ 256), so a scale value of 128 would reduce the range by approximately 50%, a scale of 64 would reduce to 25%, and so on.

 
Example

DIM VAR1 as BYTE
Loop:
   VAR1 = POT PORTB.0 , 100       ' Read potentiometer on pin 0 of PORTB.
   PRINT @VAR1 , " "          ' Display the potentiometer reading
   GOTO Loop             ' Repeat the process.
 
Notes
Internally, the POT instruction calculates a 16-bit value, which is scaled down to an 8-bit value. The amount by which the internal value must be scaled varies with the size of the resistor being used.

1
The pin specified by POT must be connected to one side of a resistor, whose other side is connected through a capacitor to ground. A resistance measurement is taken by timing how long it takes to discharge the capacitor through the resistor.
 
The value of scale must be determined by experimentation, however, this is easily accomplished as follows: -
 
Set the device under measure, the pot in this instance, to maximum resistance and read it with scale set to 255. The value returned in VAR1 can now be used as scale: -

 
   VAR1 = POT PORTB.0 , 255


Éste es el programita para leer el potenciómetro que trae de ejemplo el Protón, (POT.bas) para sacar el valor leído.

' Display the result of POT

Device 16F84
XTAL = 4      
RSOUT_PIN = PortB.0       

Dim Result as Byte      

Rsout Cls            ' Clear the serial LCD
Inf:   Result = Pot PortB.1,255      ' Read the potentiometer
Rsout at 1,1,@Result,"  "      ' Display the result
Delayms 100         ' A small delay
Goto Inf            ' Do it forever


Como se vé, es un sistema que no usa PIC con ADC.

CCS no trae alguna instrucción al menos similar, que se pueda adaptar ?

Saludos.
Mario

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Teclado Analógico Para 16F628A (ahorro de pines) SIN ADC!!!
« Respuesta #7 en: 02 de Julio de 2007, 12:34:28 »
AHHHHH!!!!

Ahora sí, disculpá no sabía que era así. Es muy interesante esa función.
La verdad que no hice una búsqueda exhaustiva por PicC, pero te diría que no hay nada de eso, no obstante con un poquito de trabajo no debe ser muy dificil implementar una función de ese tipo en PicC
Lo voy a tener muy en cuenta. A ver si me consigo alguna versión de Proton para husmear un poco

Mientras tanto con el comparador (mi obsesión) funcionó bien, no está nada depurado, por defecto toma la tecla 16, pero al presionar alguna lee muy bien el valor. La rutina es una función y no usa la interrupción, pero me parece que se adaptaría facilmente a una rutina de interrupción por comparador, eso es fundamental para atender a otras tareas, pero creo que dado el objetivo que me había planteado este esquema resuelve el problema.
Aquí está adjunto, pueden bajarlo y testear la simulación, este anda  :-/

Sólo se agregan a las teclas 20 resistencias y un bc548 y usa RA0 y RA7

Pasos siguientes serían:
  • Calibrar las resistencias para que den los valores exactos de tensión requeridos.
  • Usar el otro comparador en conjunto.
  • Pasar la rutina a la interrupción #INT_COMP.
  • Probarlo físicamente con un cable considerablemente largo y sin protección de malla para ver los efectos del ruido.
  • Expandir la función con procesos de redundancia de consulta a modo de filtros contra el ruido.
« Última modificación: 02 de Julio de 2007, 13:49:48 por Menta »
     

Desconectado robo3001

  • PIC10
  • *
  • Mensajes: 2
Re: Teclado Analógico Para 16F628A (ahorro de pines) SIN ADC!!!
« Respuesta #8 en: 15 de Diciembre de 2008, 09:39:54 »
Bueno, hize la prueba con el comando POT de PBASIC y pues en la simulación del ISIS no me funciona.... será cuestion de configurar bien los parametros, asi que para subir un aporte pues cambie de pic x uno con ADC 877A donde por medio de 1 solo pin se hace la lectura del teclado de 3x4.

http://www.fileden.com/files/2008/9/15/2099518/TECLADO%20ANAL%D3GICO.rar


 

anything