Go Down

Topic: [SOLVED]LCD 16x2 showing garbage (Read 8 times) previous topic - next topic

liudr

I have been looking at this wrong! This is fellow is using the new leonardo board. Pins 2 and 3 are I2C bus that you use for wire library, avoid these pins instead. All the UNO talk about SPI bus 11,12,13 are irrelavent, except for pin 4 and 10 is still to be avoided. Oh my. Maybe I should get myself a leonardo board now.

mrescude

That did it, I was using pin 2 for the last bit of the LCD. Thank you very much!

Where can I look at all the pin usage? Maybe this will save me a lot of trouble in the future.


liudr


That did it, I was using pin 2 for the last bit of the LCD. Thank you very much!

Where can I look at all the pin usage? Maybe this will save me a lot of trouble in the future.




http://arduino.cc/en/Main/ArduinoBoardLeonardo

Look at the middle of the page "input and output". For shields, you should be able to find pin usage where you buy them.

What happened today is a good thing for me. As a shield designer I should have looked at Leonardo. Now that I have, I'll spend some time thinking what to do with my shield update, especially with pins 2 and 3 now.

mrescude

#18
Oct 12, 2012, 10:00 pm Last Edit: Oct 12, 2012, 10:03 pm by mrescude Reason: 1
Well, just in case anyone wants to see the working code... I just changed the pin usage in the LCD to LiquidCrystal lcd(13,12,11,9,8,7),

Code: [Select]

#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(13,12, 11, 9, 8, 7);

// 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
 }
 // set up the LCD's number of columns and rows:  
 lcd.begin(16, 2);
 
 lcd.print("Inicializando...");
 delay(1000);
 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.
 
   if (!sd.begin(chipSelect, SPI_HALF_SPEED)){
     sd.initErrorHalt();
     lcd.print("SD Error!!!     ");
 
 }
 else{lcd.print("SD Lista!!!     "); }
 delay(500);
 lcd.clear();
 Wire.begin();
 lcd.print("Sist Preparado!!");
 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("Escribiendo:    ");
     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.");
     
     delay(500);
     
     
 }


Thank you! I couldn't have done it without your help.

floresta

Quote
For shields, you should be able to find pin usage where you buy them.

How about here: --> http://shieldlist.org/

Don

Go Up