Quantcast
Channel: Seeedstudio Forum
Viewing all articles
Browse latest Browse all 6612

TFT Touch Shield V1.0 with Leonardo?

$
0
0
Pick up a Touch Shield v1 at Radio Shack and got it to work with a Leonardo. It was a bit more involved than changing just the resistive pins (i.e. XM, XP, YM, YP). The pin mappings from D2 through D9 to the microcontroller pins is very different. Here are the pin mappings for Uno, Mega, and Leonardo:
Code: Pin   d9   d8   d7   d6   d5   d4   d3   d2
Uno   PB1  PB0  PD7  PD6  PD5  PD4  PD3  PD2
Mega  PH6  PH5  PH4  PH3  PE3  pg5  PE5  PE4
Leon  PB5  PB4  PE6  PD7  PC6  PD4  PD0  PD1


The code changes to TFT.cpp are shown below. The first set of changes are at the start of the file and the second at the end.

Change TFT::pushData and TFT::getData as follows:

Code: void TFT::pushData(unsigned char data)
{
    all_pin_low();
#ifdef ARDUINO_AVR_LEONARDO
    PORTD |= ((data<<1) & (0x02));
    PORTD |= ((data>>1) & (0x01));
    PORTD |= ((data<<2) & (0x10));   
    PORTC |= ((data<<3) & (0x40));   
    PORTD |= ((data<<3) & (0x80));   
    PORTE |= ((data<<1) & (0x40));
    PORTB |= ((data>>2) & (0x30));   
#else ifdef SEEEDUINO
    PORTD |= (data<<2);
    PORTB |= (data>>6);
#endif

#ifdef MEGA
    PORTE |= ((data<<4) & (0x30));
    PORTG |= ((data<<3) & (0x20));
    PORTE |= ((data & 0x08));
    PORTH |= ((data>>1) & (0x78));
#endif

#ifdef MAPLE
#endif
}

unsigned char TFT::getData(void)
{
    unsigned char data=0;
    delay(1);
#ifdef ARDUINO_AVR_LEONARDO
   data |= ((PIND&0x02)>>1);   //PD1
   data |= ((PIND&0x01)<<1);   //PD0
   data |= ((PIND&0x10)>>2);   //PD4
   data |= ((PINC&0x40)>>3);   //PC6
   data |= ((PIND&0x80)>>3);   //PD7
   data |= ((PINE&0x40)>>1);   //PE6
   data |= ((PINB&0x30)<<2);   //PB4,5
#else ifdef SEEEDUINO
    data |= ((PIND&0xfc)>>2);
    data |= ((PINB&0x03)<<6);
#endif

    return data;
}


And at the end, change the following
Code: void TFT::all_pin_input(void)
{

#ifdef ARDUINO_AVR_LEONARDO
   DDRD &=~ 0x93;
   DDRC &=~ 0x40;
   DDRE &=~ 0x40;
   DDRB &=~ 0x30;
#else ifdef SEEEDUINO
    DDRD &=~ 0xfc;
    DDRB &=~ 0x03;
#endif
#ifdef MEGA
    DDRE &=~ 0x38;
    DDRG &=~ 0x20;
    DDRH &=~ 0x78;
#endif

#ifdef MAPLE

#endif

}

void TFT::all_pin_output(void)
{
#ifdef ARDUINO_AVR_LEONARDO
   DDRD |= 0x93;
   DDRC |= 0x40;
   DDRE |= 0x40;
   DDRB |= 0x30;
#else ifdef SEEEDUINO
    DDRD |= 0xfc;
    DDRB |= 0x03;
#endif


#ifdef MEGA
    DDRE |= 0x38;
    DDRG |= 0x20;
    DDRH |= 0x78;
#endif

#ifdef MAPLE

#endif
}

void TFT::all_pin_low(void)
{

#ifdef ARDUINO_AVR_LEONARDO
   PORTD &=~ 0x93;
   PORTC &=~ 0x40;
   PORTE &=~ 0x40;
   PORTB &=~ 0x30;
#else ifdef SEEEDUINO
    PORTD &=~ 0xfc;
    PORTB &=~ 0x03;
#endif
#ifdef MEGA
    PORTE &=~ 0x38;
    PORTG &=~ 0x20;
    PORTH &=~ 0x78;
#endif

#ifdef MAPLE

#endif
}

TFT Tft=TFT();


And lastly, make changes in TFT.h file. Replace line that starts with #ifdef SEEEDUINO with
Code: #ifdef ARDUINO_AVR_LEONARDO

//======================================== PB6
#define DDR_CS      DDRB
#define PORT_CS     PORTB
#define CS_BIT      0x40
#define CS_OUTPUT   {DDR_CS|=CS_BIT;}
#define CS_HIGH     {PORT_CS|=CS_BIT;}
#define CS_LOW      {PORT_CS&=~CS_BIT;}

//----------------------------------------- PB7

#define DDR_RS      DDRB
#define PORT_RS     PORTB
#define RS_BIT      0x80
#define RS_OUTPUT   {DDR_RS|=RS_BIT;}
#define RS_HIGH     {PORT_RS|=RS_BIT;}
#define RS_LOW      {PORT_RS&=~RS_BIT;}

//-----------------------------------------  PD6

#define DDR_WR      DDRD
#define PORT_WR     PORTD
#define WR_BIT      0x40
#define WR_OUTPUT   {DDR_WR|=WR_BIT;}
#define WR_HIGH     {PORT_WR|=WR_BIT;}
#define WR_LOW      {PORT_WR&=~WR_BIT;}
#define WR_RISING   {PORT_WR|=WR_BIT;PORT_WR&=~WR_BIT;}

//----------------------------------------- PC7

#define DDR_RD      DDRC
#define PORT_RD     PORTC
#define RD_BIT      0x80
#define RD_OUTPUT   {DDR_RD|=RD_BIT;}
#define RD_HIGH     {PORT_RD|=RD_BIT;}
#define RD_LOW      {PORT_RD&=~RD_BIT;}
#define RD_RISING   {PORT_RD|=RD_BIT;PORT_RD&=~RD_BIT;}
//========================================

#else ifdef SEEEDUINO


If the code maintainer could incorporate these changes, that would be great.

Statistics : Posted by xxobsoletexx • on Wed Feb 11, 2015 11:12 am • Replies 2 • Views 86

Viewing all articles
Browse latest Browse all 6612

Trending Articles