Programación lmc835

#1
Gente!!! Ando trabajando con el circuito integrado LMC835 que es un ecualizador gráfico, al cual se configuran las ganancias de sus bandas mediante una palabra, por lo que quiero hacerlo con un PIC. Se necesitan tres señales para su configuración: un clock, una de datos y otra de strobe. Según vi en el datasheet del ecualizador (si no me equivoco) el clock debería ser de unos 200kHz.
Mi duda es la siguiente: no se cómo formular las líneas de código para generar estas tres señales con el PIC, el cual trabaja a 4 MHz.

Si alguien me puede tirar una punta, arranco... el problema principal es que nunca generé con un micro señales a partir de un clock distinto al del micro (suena tonto pero es así).
Muchas gracias

p.d.: adjunto señales del datasheet del ecualizador
 

Adjuntos

#2
No te hagas mucho problema por la frecuencia del reloj en si, lo que importa es cumplir los tiempos de setup y hold para data y strobe.

O sea que lo que tenes que hacer es
1. escribir 0 a la salida de reloj
2. escribir el dato
3. escribir uno a la salida de reloj
4. escribir cero a la salida de reloj..., etc
y al final escribir al strobe

No se en que programas, si resultara muy rapido podes intercalar NOPs entre algunos de los pasos para asegurar el timing

Saludos
 
#3
segun las formas de onda

el estrobe es como el CE chip enable, el clock es por cada dato un clock
es muy parecido al SPI asi que pues no hay nada de que preocuparse.

el tiempo lo puedes dictar con un timer
 
#4
No te hagas mucho problema por la frecuencia del reloj en si, lo que importa es cumplir los tiempos de setup y hold para data y strobe.

O sea que lo que tenes que hacer es
1. escribir 0 a la salida de reloj
2. escribir el dato
3. escribir uno a la salida de reloj
4. escribir cero a la salida de reloj..., etc
y al final escribir al strobe

No se en que programas, si resultara muy rapido podes intercalar NOPs entre algunos de los pasos para asegurar el timing

Saludos
Entendido chclau, pero luego de poner nuevamente a cero el clock ¿no debería esperar un tiempo como para cumplir aprox. con los 200kHz de funcionamiento del lmc835? Sino el pic me hará todas las operaciones a 4MHz y el ecualizador no interpretará nada...
 
#5
Entendido chclau, pero luego de poner nuevamente a cero el clock ¿no debería esperar un tiempo como para cumplir aprox. con los 200kHz de funcionamiento del lmc835? Sino el pic me hará todas las operaciones a 4MHz y el ecualizador no interpretará nada...
Lo que se tiene que cumplir son los tiempos de setup y hold entre datos y clock, entre strobe y clock, etc., si no se cunplen, tenes que agregar retardos en los lugares correspondientes para conseguirlo.

Revisa los diagramas de tiempo del fabricante y si el PIC no los esta cunpliendo, agrega retardos.
 
#6
Gente!!! Solucionado el tema de la comunicación con ambos integrados. Hago un par de consultas de principiante para seguir con este tema:
1º) Si tengo varias variables con nombre idéntico (ej. data1, data2, data3,...) ¿Puedo hacer un "for" variando el número con el que terminan dichas variables como para ir seleccionando una por una en distintos loops?

2º) Si tengo una variable binaria de ocho bits (ej. 0b01100001) ¿tengo posibilidad de enviar esta variable bit a bit por una pata de un puerto? Es decir, primero el 1, luego el 0, luego el otro 0, etc.

Muchas gracias
 
#7
1) Para eso lee sobre variables de tipo array, data(1), data(2), etc.

2) Si, es lo que se denomina conversion paralelo-serie, y para eso se usa un registro de desplazamiento en HW o una operacion de shift en un micro en SW.
 
#8
He programado el pic para lograr tal comunicación y, con ayuda de un osciloscopio, grafiqué las tres señales y verifiqué estar cumpliendo con los requisitos del datasheet del integrado, pero no logro programarlo, por lo que necesito una alternativa.
¿se podrá realizar la programación del LM835 con un PIC mediante comunicación SPI? Estuve leyendo algo sobre el tema pero quería que alguien me asegure si tal comunicación tiene que ver con lo que necesito para no perder tiempo leyendo tanto en Internet ya que ando con los tiempos muy justos...
 
#9
basicamente tiene adentro un registro de corrimiento es decir es como controlar casi cualquier 74HS595
es basicamente SPI.

te pongo un pedazo de programa en C de como puedes hacer comunicacion para un registro de corrimiento


Código:
char _74HC595(char dato)
{
   char i,dat=0;   
   LATCH=0;
 
 
   for(i=0; i!=8 ; i++)
   {

      
      dat=dato<<i;
      dat=dat&0b10000000;

      if(dat==0)
      {
         DATA=0;
      }
      else 
      {
         DATA=1;
      }

      CLOCK=0;
      CLOCK=1;          
   }
   
   LATCH=1;
   
   return dato;
}

esta algo incompleto el codigo pero de que funciona la funcion funciona solo debes razonar el codigo para que veas que internamente el lmc835 tiene un vulgar registro de corrimiento de 8 bits es decir un 74HC595 en su interior.

programarlo no seria dificil

pues dentro de la funcion en el main lo puedes haces asi:

void main ()
{
char comando;
while (1)
{
comando=0XAF; //un ejemplo de un comando de 8 bits
//puedes enviar un binario no hay tos
comando=0b00010101;

_74HC595(comando);
 
#10
basicamente tiene adentro un registro de corrimiento es decir es como controlar casi cualquier 74HS595
es basicamente SPI.

te pongo un pedazo de programa en C de como puedes hacer comunicacion para un registro de corrimiento


Código:
char _74HC595(char dato)
{
   char i,dat=0;   
   LATCH=0;
 
 
   for(i=0; i!=8 ; i++)
   {

      
      dat=dato<<i;
      dat=dat&0b10000000;

      if(dat==0)
      {
         DATA=0;
      }
      else 
      {
         DATA=1;
      }

      CLOCK=0;
      CLOCK=1;          
   }
   
   LATCH=1;
   
   return dato;
}

esta algo incompleto el codigo pero de que funciona la funcion funciona solo debes razonar el codigo para que veas que internamente el lmc835 tiene un vulgar registro de corrimiento de 8 bits es decir un 74HC595 en su interior.

programarlo no seria dificil

pues dentro de la funcion en el main lo puedes haces asi:

void main ()
{
char comando;
while (1)
{
comando=0XAF; //un ejemplo de un comando de 8 bits
//puedes enviar un binario no hay tos
comando=0b00010101;

_74HC595(comando);
Gracias por tu respuesta TRILO-BYTE!!! Teniendo en cuenta que lo que me pasaste funcionaría al clock del pic, ¿cómo haría para bajar esa frecuencia? Ya que la máxima que admite el LMC835 es 500kHz...
 
#11
Si y no . No y si
Recuerda que un pic es lento necesita 4 ciclos para una instruccion es decir no correra a4 Mhz
El programa en realidad correra a menos de 1MHz
Le puedes meter un retardo en cada clock para que de menos de 500khz

No siempre la funcion trabajara, solo cuando se manda llamar
 
Arriba