Caracteres extraños en LCD16x2

Muy buen día gente del foro, tengo un pequeño detalle con mi LCD espero me puedan brindar información al respecto.
No tengo problemas con mi LCD 16x2 al estar haciendo pruebas, hago cambios en el codigo, cargo de nuevo pero no me aparece el texto que debería imprimir, en su lugar imprime caracteres bastante raros, presiono reset y en pocas ocaciones se corrige, en la mayoria de las veces tengo que desconectar el usb y volver a conectar para que funcione bien o incluso para cargar el programa me dice:
"avrdude: stk500v2_getsync(): timeout communicating with programmer" y tengo que desconectar y volver a conectar para que funcione, alguien sabe porque??

Estoy usando un lector SD, LCD16x2 y un keypad y 2 led, solo alimento con el usb de la pc y todo funciona bien, solo ese detalle de tener que desconectar y volver a desconectar, ¿Alguien sabe porque?
Gracias por su tiempo!

No dices como tienes conectado todo o el código que usas.
Luce como que algo esta consumiendo de mas pero solo es una idea.

Gracias por responder, tengo un Arduino Mega 2560, el LCD lo tengo conectado igual que en la imagen solo que yo uso los pines 8 al 13:
8 - RS
9 - E
10 - 13, D4-D7
A - resistencia d 220 ohms
k - tierra

Para el modulo SD seguí las instrucciones de la imagen por el puerto ICSP usando ese mismo 5V y ground del puerto.

keypad:
filas en pines 22, 23, 24, 25
columnas en pines 26, 27, 28, 29

Todo funciona bien, solo que al modificar el codigo e intentar cargarlo de nuevo, en ocasiones me marca error de que no se encuentra conectado el arduino, o si lo encuentra carga el programa pero el LCD me manda caracteres extraños y tengo que desconectar y volver a conectar el usb para que funcione, actualmente termine el codigo y hace su función, leer el SD, un txt que almacena contraseñas, con el keypad introducir una contraseña y buscar una coincidencia en el txt.
Anexo el codigo, repito, todo funciona bien, solo que si hago modificaciones al codigo al momento de cargarlo, si no marca error el LCD me imprime cosas raras.

#include <LiquidCrystal.h>
#include <Keypad.h>
#include <SPI.h>
#include <SD.h>
char txt[150];
const int chipSelect = 4;
int i;
int ii;
int iii;
int v = ',';
const byte rows=4;
const byte cols=4;
int ledv= A2;
int ledr= A3;
char customKey;
char menu;

char keys[rows][cols]=  //crear el teclado como en fisico
{
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowpins[rows]={22, 23, 24, 25};  //pines para las filas 1234
byte colpins[cols]={26, 27, 28, 29};  //pines para las columnas ABCD

//crea y nombra el teclado
Keypad customKeypad = Keypad(makeKeymap(keys),rowpins,colpins,rows,cols);
Keypad kpd = Keypad(makeKeymap(keys),rowpins,colpins,rows,cols);
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); //inicializo lcd
//                     rs,e, D4,D5, D6, D7
char pss1[4],pss2[4];
void setup()
{
  Serial.begin(9600);
  pinMode(A2, OUTPUT);
  pinMode(A3, OUTPUT);
  lcd.begin(16,2);
  analogWrite(ledv,LOW);
  analogWrite(ledr,LOW);

  //LCD: Saludo inicial
  lcd.begin(16, 2);
  lcd.setCursor(6,0);
  lcd.print("Anmo");
  lcd.setCursor(2,1);
  lcd.print("Technologies");
  delay(3000);
  lcd.clear();
  delay(500);
  lcd.setCursor(1,0);  
  lcd.print("Buenas tardes");
  lcd.setCursor(0,0);
  delay(1500);
  lcd.clear(); 


//Lectura del SD

 while(!Serial){
  ;
 }
 Serial.print("Initializing SD card...");
 if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    return;
 }
 Serial.println("card initialized.");
 File dataFile = SD.open("pass.txt");

  // if the file is available, write to it:
  if (dataFile) {
    for (i = 0; i <= 150; i++)
      {
        txt[i] = dataFile.read();
        Serial.print(txt[i]);
        analogWrite(ledv,255);
      }
    }
  
  // if the file isn't open, pop up an error:
  else
  {
    Serial.println("error opening pass.txt");
  }

  delay(250);
  analogWrite(ledv,0);
  analogWrite(ledr,0);
}



void loop()
{  
  File dataFile = SD.open("pass.txt");
  int i=0,j=0,f=0,w=0,k=0;


    //pide que ingreses la contraseña
    analogWrite(ledr,0);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("SISTEMABLOQUEADO");
    lcd.setCursor(6,1);
  
      for(i=1;i<=4;i++)
      {
        pss1[i]=kpd.waitForKey();
        lcd.print("*");
        delay(250);
      }
      
    lcd.clear();
    delay(100);
    lcd.setCursor(4,0);
    lcd.print("Buscando...");
    delay(1000);
    //Lee el arreglo (txt)
    for (ii = 1; ii <= 150; ii++)
    {
      //Si encuentra una coma en el txt
      if (txt[ii] == v)
      {
        
        //Guarda los siguientes 4 valores del txt en el arreglo pass2[] (Datos de la contraseña del txt).
        for(iii = 1; iii < 5; iii++)
        {
          pss2[iii] = txt[ii+iii];
        }
        
        //Ciclo for para comparar las contraseñas, del txt con la introducida
        for(k=0;k<=3;k++)
        {
          //Compara las contraseñas, las del txt con la introducida, si coinciden los 4 caracteres suma 1 a w de lo contrario resetea w a 0.
          if(pss1[k]==pss2[k])
          {
            w++;
          }
          
          else
          {
            w = 0;
          }
        }

        //Si encuentra una contraseña que coincida con el txt permite el acceso
        if(w==4)
        {
          lcd.clear();
          analogWrite(ledv,255);
          lcd.setCursor(2,0);
          lcd.print("PASS CORRECTO");
          lcd.setCursor(0,1);
          lcd.print("ACCESO PERMITIDO");
          delay(3000);
          lcd.clear();
          analogWrite(ledv,0);         
          w = 0;
          break;
          break;
        }
      }
      if(ii == 149)
        {
          analogWrite(ledr,255);
          lcd.clear(); 
          lcd.setCursor(1,0);
          lcd.print("ERROR DE CODIGO");
          lcd.setCursor(0,1);
          lcd.print("INTENTE DE NUEVO");
          delay(1000);
        }
  }  
dataFile.close();
}

Gracias por su tiempo!

Por lo que leo tiendo a pensar que algo esta consumiendo mas de la cuenta y por eso falla la carga o tienes que reiniciar.
Entiendo que todo funciona bien individualmente pero no en conjunto.
Probaste con una fuente de 7 a 9V externa?

No cuento con el plug para el toma corriente del arduino, mañana lo compro y pruebo con una pila de 9V. solo que me entra una duda, no hay problema si alimento el arduino con la pila de 9V y aparte conecto el usb-serial? No daña mi puerto usb o el arduino no sufre daño alguno?

Pila de 9V no.. tiene solo 100mA y se te va a consumir enseguida. Que sea una fuente de 9V con positivo al centro como se requiere.

No hay problema con ambas cosas conectadas.