Conexión GPRS

Buenas, llevo mucho tiempo intentando hacer funcionar un modulo gprs quadband de libelium y me funciona esporadicamente, pero no he conseguido saber el motivo.
No puede ser de alimentación por que lo alimento a traves de un LD1085v50 que da 3A.
Voy a explicar las pruebas que he hecho:
Si le uso sin el ATMEGA en un duemilanova poniendo los puentes en alimentacion externa, y USB conecta con el servidor con las siguientes

instrucciones:

AT+CPIN="8400"
AT&K3
AT+KCNXCFG=0,"GPRS","internet","oange","orange"
AT+KCNXTIMER=0,60,2,70
AT+KCNXPROFILE=0
AT+CGATT=1
AT+KTCPCFG=0,0,"xxx.xxx.xxx.xxx",5523
AT+KTCPCNX=1
AT+KTCPSND=1,18
HOLA MUNDO
--EOF--Pattern--
AT+KTCPCLOSE=1,1

Funciona siempre. Uso el programa Terminal v1.9b, con macros creadas y solo espero a que conteste OK despues de AT+KTCPCNX=1, ya que lo demás contesta antes de que pulse el siguiente boton de macro.

En cuanto pongo el ATMEGA y cargo el siguiente programa

#include <NewSoftSerial.h>

#define rxPin 6
#define txPin 8

NewSoftSerial nss(rxPin, txPin);

void setup()
{
  pinMode(2, OUTPUT);
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  
  Serial.begin(57600);
  nss.begin(57600);
  
  nss.println("Inicializando");
  digitalWrite(2,HIGH);
  delay(3000);
  digitalWrite(2,LOW);
  nss.println("Módulo encendido");
  
  delay(1000);
  Serial.println("AT+CPIN=\"8400\"");
  delay(1000);
  while (Serial.available() > 0)
  {
    char c;
    c = Serial.read();
    nss.print(c);
    delay(5);
  }
  nss.println("PIN");
  for (int i=0;i<10;i++)
  {
    nss.print(".");
    delay(3000);
  }
  nss.println(".");
  nss.println("Registrado");
  
  Serial.println("AT&K3");
  nss.println("AT&K3");
  delay(100);
  Serial.println("AT+KCNXCFG=0,\"GPRS\",\"internet\",\"orange\",\"orange\"");
  nss.println("AT+KCNXCFG=0,\"GPRS\",\"internet\",\"orange\",\"orange\"");
  delay(100);
  Serial.println("AT+KCNXTIMER=0,60,2,70");
  nss.println("AT+KCNXTIMER=0,60,2,70");
  delay(100);
  Serial.println("AT+KCNXPROFILE=0");
  nss.println("AT+KCNXPROFILE=0");
  delay(100);
  Serial.println("AT+CGATT=1");
  nss.println("AT+CGATT=1");
  delay(100);
  Serial.println("AT+KTCPCFG=0,0,\"xxx.xxx.xxx.xxx\",5523");
  nss.println("AT+KTCPCFG=0,0,\"xxx.xxx.xxx.xxx\",5523");
  delay(500);
  while (Serial.available() > 0)
  {
    char c;
    c = Serial.read();
    nss.print(c);
    delay(5);
  }
  
  delay(100);
  Serial.println("AT+KTCPCNX=1");
  nss.println("AT+KTCPCNX=1");
  nss.println("Esperamos 50s");
  delay(50000);
  while (Serial.available() > 0)
  {
    char c;
    c = Serial.read();
    nss.print(c);
    delay(5);
  }
  
  Serial.println("AT+KTCPSND=1,10");
  nss.println("AT+KTCPSND=1,10");
  delay(100);
  Serial.println("HOLA MUNDO");
  nss.println("HOLA MUNDO");
  delay(100);
  Serial.println("--EOF--Pattern--");
  nss.println("--EOF--Pattern--");
  delay(100);
  Serial.println("AT+KTCPCLOSE=1,1");
  nss.println("AT+KTCPCLOSE=1,1");
  delay(100);
  while (Serial.available() > 0)
  {
    char c;
    c = Serial.read();
    nss.print(c);
    delay(5);
  }
  
  Serial.println("AT+PSCPOF");
  nss.println("AT+PSCPOF");
  nss.println("Módulo apagado");
}

void loop()
{
}

que hace lo mismo y envia por softserial las contestaciones despues de esperar los 50s a que conecte me pone NO CARRIER.

He probado con varios modulos, y con todos hace lo mismo.

¿Alguna idea para probar?

Atentamente

juan

P.D. Ademas de con varios módulos he probado también con un arduino ONE y con un atmega en placa perforada y con todos pasa lo mismo.
P.D. Si alguien ha conseguido que funcione la conexión gprs del módulo dualband de libelium también me vale, que también tengo alguno para probar.