problema tlc5940 + MAX187 (SPI)

Salve a tutti ragazzi,
sto realizzando un sistema in grado di pilotare un motore dc con PWM a 4096 step(ottenuto grazie al TLC5940).
L’arduino dovrà incrementare la velocità del motore e leggere la velocità del motore dal suo encoder ed il valore in tensione di una cella di carico. Questo valore in tensione viene campionato attraverso l’ADC 12bit MAX187.
Le librerie che ho usato sono:
//MAX187 SPI ADC
ADC - MyDuino.

con:
sck collegato al pin 52 del mio MEGA (sck);
cs collegato al pin 53 del mio MEGA (sa);
dout collegato al pin 50 del mio MEGA (sa);

//tTLC5940
http://arduino.cc/playground/Learning/TLC5940

//PROBLEMA
I due blocchi, presi singolarmente funzionano bene, ma nel momento in cui li integro mi danno non pochi problemi.
In particolare ho notato che quando inserisco Tlc.init() nel setup(), la misura dell’ADC ha comportamenti strani, in
particolare quando metto l’Input a 0V, ottengo una lettura pari a 2500mV anzichè 0.0mV

//CODICE

// MAX187 ADC
#include <SPI.h>
const int slaveSelectPin = 53;

int result;
byte highByte;
byte lowByte;
int refVolt = 5000;
int voltage = 0.0;
int time=0;
int last_tima=0.0;


//TLC594
#include <FreqMeasure.h>
#include "Tlc5940.h"
int channel = 1;
double frequency=0; 
double sum=0;
double rpm=0;
float valore_cella=0.0;
int count=0;

void setup() {
//  Tlc.init();
  pinMode (slaveSelectPin, OUTPUT);
  SPI.begin();  
  FreqMeasure.begin();
  Serial.begin (115200);
}

void loop()
{
//   valore_cella= leggi_cella();

  for(int i=0; i<4096; i++)
  {
    time=millis();
    Tlc.set(channel, i);
    Tlc.update();
 
    if(((millis()-time)>>1000)||(
    (millis()-time)<<1500))
    {
      //double frequenza=freq();
      //rpm = (frequenza/210) * 60;
      valore_cella= leggi_cella();
      Serial.print ("RPM: ");
      Serial.print (rpm);      
      Serial.print("\t");
      Serial.print(valore_cella); 
      Serial.println("mV"); 
      time=0.0;
    }
    delay(1);
 }  

}

// FUNZIONE LETTURA CELLA DI CARICO

int leggi_cella()
{ 
  time= millis();
  float value = 0.0;
  float avg = 0.0;  
  for (int i=0; i<10000; i++)
  {    
    highByte = 0;
    lowByte = 0;      
    digitalWrite(slaveSelectPin,LOW);
    delayMicroseconds(100) ; 
    highByte = SPI.transfer(0x00);
    lowByte = SPI.transfer(0x00);
    digitalWrite(slaveSelectPin,HIGH); 
   
    result = (highByte & 127) << 5;  
    result = result + (lowByte >> 3);
    voltage =  (float) refVolt/4096 * result;  
    value = value + voltage;  
  }   
  avg = (int)(value/10000);  
  return avg;  
//  delay (1000); // don't start blasting out of the serial port yet!
 }
 
//LETTURA FREQUENZA ENCODER
 double freq() 
{

  if (FreqMeasure.available()) {
    // average several reading together
    sum = sum + FreqMeasure.read();
    count = count + 1;
    if (count > 100) 
    {
       frequency = F_CPU/(sum / count);
      //Serial.println(frequency);
      sum = 0;
      count = 0;
    }
   return frequency; 
  }
}

//BLOCCO SINGOLO MOTORE

#include <FreqMeasure.h>
#include "Tlc5940.h"

double frequency=0; 
double sum=0;
double rpm=0;
int count=0;
int channel = 1;


void setup() 
{  
  Serial.begin(57600);
//
Tlc.init();
  FreqMeasure.begin();
}


void loop() 
{
  
  for(int i=0; i<4096; i++)
  {
    Tlc.set(channel, i);
    Tlc.update();
    double frequenza=freq();
    rpm = (frequenza/210) * 60;
    Serial.print ("frequenza: ");
    Serial.println (rpm);      
    delay(5);
 }  
}

double freq() 
{

  if (FreqMeasure.available()) {
    // average several reading together
    sum = sum + FreqMeasure.read();
    count = count + 1;
    if (count > 100) 
    {
       frequency = F_CPU/(sum / count);
      //Serial.println(frequency);
      sum = 0;
      count = 0;
    }
   return frequency; 
  }
}

// BLOCCO SINGOLO ADC

// MAX187 ADC
#include <SPI.h>
const int slaveSelectPin = 53;

int result;
byte highByte;
byte lowByte;
int refVolt = 5045;
int voltage = 0.0;
float time=0;

void setup() {

  pinMode (slaveSelectPin, OUTPUT);
  SPI.begin();
  Serial.begin (115200);
}

void loop(){
  time= millis();
  float value = 0.0;
  float avg = 0.0;  
  
for (int i=0; i<10000; i++)
{
  
  highByte = 0;
  lowByte = 0;
    
  digitalWrite(slaveSelectPin,LOW);
  delayMicroseconds(50) ; 

  highByte = SPI.transfer(0x00);
  lowByte = SPI.transfer(0x00);
  
  digitalWrite(slaveSelectPin,HIGH); 
 
  result = (highByte & 127) << 5;

  result = result + (lowByte >> 3);

  voltage =  (float) refVolt/4096 * result;

  value = value + voltage;  
}   

  avg = (int)(value/10000);  
  time = millis() - time;  
  Serial.print(result, DEC); 
  Serial.print("\t");
  Serial.print(avg); 
  Serial.print("mV"); 
  Serial.print("\t");  
  Serial.print ("tempo di misura: ");
  Serial.println(time);

  delay (1000); // don't start blasting out of the serial port yet!

Da cosa può dipendere secondo voi?
Pensavo eventualmente di accendere e spegnere il TLC5940, ma non so quale sia la funzione per spegnere il chip.
Grazie mille anticipatamente