[SOLVED]LCD 16x2 showing garbage

This is the last code i tested. I chaged th pins in the LCD to 9,8,7,6,5,3.
I keep getting the same error, it sends correctly Prueba, Prueba1, Prueba2 and Prueba3, but the it calls Wire.begin() everything gets messed up.

#include <LiquidCrystal.h>
#include <SdFat.h>
SdFat sd;
SdFile myFile;
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68  // This is the I2C address


// Global Variables
const int chipSelect = 4;
int command = 0;       // This is the command char, in ascii form, sent from the serial port     
int i;
int second, minute, hour, dayOfWeek, dayOfMonth, month, year;
byte test;
byte zero=0x00;
char nombrearchivo[13];
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(9, 8, 7, 6, 5, 3);

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{  return ( (val/10*16) + (val%10) );}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{  return ( (val/16*10) + (val%16) );}
 
// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers, Probably need to put in checks for valid numbers.
// setDateDs1307() solo se necesita una vez, se mantiene el el codigo, por si se debe cambiar la bateria del RTC o modificar la fecha u hora. 
/*void setDateDs1307()                
{
   second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48)); // Use of (byte) type casting and ascii math to achieve result.  
   minute = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   hour  = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   dayOfWeek = (byte) (Serial.read() - 48);
   dayOfMonth = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   month = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   year= (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.write(zero);
   Wire.write(decToBcd(second) & 0x7f);    // 0 to bit 7 starts the clock
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));      // If you want 12 hour am/pm you need to set
                                   // bit 6 (also need to change readDateDs1307)
   Wire.write(decToBcd(dayOfWeek));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   Wire.endTransmission();
}*/

// Gets the date and time from the ds1307 and prints result
void getDateDs1307()
{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
  // A few of these need masks because certain bits are control bits
  second     = bcdToDec(Wire.read() & 0x7f);
  minute     = bcdToDec(Wire.read());
  hour       = bcdToDec(Wire.read() & 0x3f);  // Need to change this if 12 hour am/pm
  dayOfWeek  = bcdToDec(Wire.read());
  dayOfMonth = bcdToDec(Wire.read());
  month      = bcdToDec(Wire.read());
  year       = bcdToDec(Wire.read());
  
  snprintf(nombrearchivo,13,"%02d%02d20%02d.txt", second, month, year); //merge together
}
 
 
void setup() {
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  lcd.begin(16, 2);
  lcd.print("Prueba");
  delay(500);
  lcd.clear();
  
  
  // Open serial communications and wait for port to open:
  
  // set up the LCD's number of columns and rows: 
  lcd.print("Prueba1");
  delay(500);
  lcd.clear();
  
  // Initialize SdFat or print a detailed error message and halt
  // Use half speed like the native library.
  // change to SPI_FULL_SPEED for more performance.
  
  lcd.print("Prueba2");
  delay(500);
  lcd.clear();
  
  if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt();
  lcd.print("Prueba3");
  delay(500);
  lcd.clear();
  
  Wire.begin();
  lcd.print("Prueba4");
  delay(500);
  
}
 
void loop() {
     /*if (Serial.available()) {      // Look for char in serial que and process if found
      command = Serial.read();
      if (command == 84 || command == 116) {      //If command = "Tt" Set Date
       //setDateDs1307();
       getDateDs1307();
       
       
       if (!myFile.open(nombrearchivo, O_RDWR | O_CREAT | O_AT_END)) {
        sd.errorHalt("opening test.txt for write failed");
      }
      // if the file is available, write to it:
      Serial.print("Writing to test.txt...");
      myFile.println("testing 1, 2, 3.");

      // close the file:
      myFile.close();
      Serial.println("done.");

      }
      else if (command == 82 || command == 114) {      //If command = "Rr" Read Date ... BBR
       getDateDs1307();
       Serial.println(" ");
      }
      
      Serial.print("Command: ");
      Serial.println(command);     // Echo command CHAR in ascii that was sent
      }
      command = 0;                 // reset command 
      delay(100);*/
      getDateDs1307();
      year+=2000;
      if (!myFile.open(nombrearchivo, O_RDWR | O_CREAT | O_AT_END)) {
        sd.errorHalt("opening test.txt for write failed");
      }
      // if the file is available, write to it:
      Serial.print("Writing");
      lcd.setCursor(0, 0);
      lcd.print("Writing:");
      delay(1000);
      lcd.setCursor(0, 1);
      lcd.print(nombrearchivo);
      myFile.println("testing 1, 2, 3.");
      if(!myFile.timestamp(T_WRITE,year,month,dayOfMonth,hour,minute,second)){
      Serial.println("Mod date failed");
      }
      // close the file:
      myFile.close();
      Serial.println("done.");
      lcd.clear();
      delay(250);
      
      
  }

I'll add some pictures so I can explain myself.