RTD / PT100 1000 measurement: Library for MCP 3551 22bit ADC.

Hi everybody,
Past one month I was testing the MCP3551-PT100 with a UNO and was very successful except very rarely reading shows -247 and ovf. But it happened very rare and for my application, it was okay. But two days back I switched from UNO to ATMEGA 2560 due to the need of extra pins and UNO stopped receiving sketch(some problem). When the time of connection, display shows correct room temperaure for 5-10 seconds then it went to -247 and ovf one after other. Then it didn't shown correct temperature till now. I checked all the connections and everything is OK(infact i changed only the MISO, SCK and SS connections related to MCP3551). I checked byteCode in serial and have seen that it is alternating between 0 and 2097151-2097140). Output showing '-247.14' and "ovf". Cant figure out whats happening..
somebody please help. Please find my sketch below..

#include <LiquidCrystal.h>
#include <MCP3551.h>
#include <SPI.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const int pushButton = 8;
const int MCPPin = 53;
float calRAdevice1 = 13340;
float RTD;
const int RZero = 100;
MCP3551 myRTD(MCPPin);
double temperature;
void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);  
  lcd.setCursor(0, 0);                                           
  lcd.print("ADC& PT100");   
  delay (1000);
  pinMode(pushButton, INPUT);
}
void loop() {
  temperature = digitalLowPass(temperature, myRTD.getCode() ,0.90);   
  int buttonState = digitalRead(pushButton);
  bool rtdReady = myRTD.getCode();
  if(rtdReady)
  { // Serial.println(getRTD1.byteCode);    
    //calculate RTD acc. MCP AN1154:
    RTD = calRAdevice1 * (float(myRTD.byteCode) / ( 2097152.0 - float(myRTD.byteCode)));    
    //This is part of a calculation for T(RTD)
    RTD = (RTD / RZero) - 1;
    float temperature = (RTD * (255.8723 + RTD * (9.6 + RTD * 0.878)));    
    lcd.setCursor(0,1);
    lcd.print(temperature);
    Serial.println(temperature);
    Serial.println(myRTD.byteCode);
    delay (500);
  }
}  
double digitalLowPass(double last_smoothed, double new_value, double filterVal)
{
  double smoothed = (new_value * (1 - filterVal)) + (last_smoothed * filterVal);
  return smoothed;
}