Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

01/11/2014 #1

Avatar de ingeniero18

Programación lmc835
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
02/11/2014 #2

Avatar de chclau

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
02/11/2014 #3

Avatar de TRILO-BYTE

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
02/11/2014 #4

Avatar de ingeniero18

chclau dijo: Ver Mensaje
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...
02/11/2014 #5

Avatar de chclau

ingeniero18 dijo: Ver Mensaje
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.
10/11/2014 #6

Avatar de ingeniero18

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
11/11/2014 #7

Avatar de chclau

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.
07/08/2015 #8

Avatar de ingeniero18

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...
07/08/2015 #9

Avatar de TRILO-BYTE

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);
07/08/2015 #10

Avatar de ingeniero18

TRILO-BYTE dijo: Ver Mensaje
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...
08/08/2015 #11

Avatar de TRILO-BYTE

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
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.