Go Down

Topic: Uno r3 mit nano verbinden  (Read 235 times) previous topic - next topic

Luppi

Hallo

Habe einen arduino nano mit lcd usw. Mein Projekt läuft auch darauf wunderbar bis jetzt.

Jetzt habe ich noch einen uno r3 mit einem 3,5 touch tft bekommen worauf ich mein Projekt gerne umschreiben würde.
Problem ist das alle Ports des uno durch das tft belegt sind ist nen shield.

Gibt es eine Möglichkeit den nano mit dem uno zu verbinden.
So das der uno das Display steuert und an den nano meine sensoren kommen?

Wie muss ich dann meinen Sketch aufteilen?

Für Hilfe wäre ich dankbar.
Mfg

sschultewolter

Welches 3.5" Touch-TFT? Link

Welche Pins sind überhaupt noch auf dem Arduino Uno nutzbar?
Arduino Yun und Due abzugeben, bei Interesse PN.

uwefed

Rate Dir zu einem Arduino MEGA 2560. Ist einfacher als Datenaustausch zwischen 2 Arduinos.
Grüße Uwe

Luppi

Hallo
Also es handelt sich um folgendes Display

https://www.ex-store.de/LCD-TFT/3-5-TFT-LCD-Touch-Display-fuer-Arduino-Uno-Mega::189.html

Einen mega 2560 habe ich auch noch hier.
Aber da bekomme ich das Display absolut nicht zum laufen. Ich habe denke ich ganz Google ausprobiert und zich Stunden damit verbracht.

Luppi

Hab noch was rum gestöbert und in einem anderen forum das hier gefunden.

Code: [Select]

//   ic:ili9327  
#define LCD_RD   A0
#define LCD_WR   A1    
#define LCD_RS   A2        
#define LCD_CS   A3      
#define LCD_REST A4

void Lcd_Writ_Bus(char VH)
{
 unsigned char i,temp,data;
 data=VH;
 for(i=8;i<=9;i++)
 {
   temp=(data&0x01);
   if(temp)
     digitalWrite(i,HIGH);
   else
     digitalWrite(i,LOW);
   data=data>>1;
 }
 for(i=2;i<=7;i++)
 {
   temp=(data&0x01);
   if(temp)
     digitalWrite(i,HIGH);
   else
     digitalWrite(i,LOW);
   data=data>>1;
 }

 digitalWrite(LCD_WR,LOW);
 digitalWrite(LCD_WR,HIGH);
}


void Lcd_Write_Com(char VH)  
{  
 digitalWrite(LCD_RS,LOW);
 Lcd_Writ_Bus(VH);
}

void Lcd_Write_Data(char VH)
{
 digitalWrite(LCD_RS,HIGH);
 Lcd_Writ_Bus(VH);
}

void Lcd_Write_Com_Data(int com,int dat)
{
 Lcd_Write_Com(com);
 Lcd_Write_Data(dat);
}

void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
 Lcd_Write_Com(0x2a); // Set_column_address 4 parameters
 Lcd_Write_Data(x1>>8);
 Lcd_Write_Data(x1);
 Lcd_Write_Data(x2>>8);
 Lcd_Write_Data(x2);

 Lcd_Write_Com(0x2b); // Set_page_address 4 parameters
 Lcd_Write_Data(y1>>8);
 Lcd_Write_Data(y1);
 Lcd_Write_Data(y2>>8);
 Lcd_Write_Data(y2);

 Lcd_Write_Com(0x2c); // Write_memory_start
}

void Lcd_Init(void)
{
 digitalWrite(LCD_REST,HIGH);
 delay(5);
 digitalWrite(LCD_REST,LOW);
 delay(15);
 digitalWrite(LCD_REST,HIGH);
 delay(15);

 digitalWrite(LCD_CS,HIGH);
 digitalWrite(LCD_WR,HIGH);
 digitalWrite(LCD_CS,LOW);  //CS

 Lcd_Write_Com(0xE9);
 Lcd_Write_Data(0x20);

 Lcd_Write_Com(0x11); //Exit Sleep
 delay(100);

 Lcd_Write_Com(0xD1);
 Lcd_Write_Data(0x00);
 Lcd_Write_Data(0x71);
 Lcd_Write_Data(0x19);

 Lcd_Write_Com(0xD0);
 Lcd_Write_Data(0x07);
 Lcd_Write_Data(0x01);
 Lcd_Write_Data(0x08);

 Lcd_Write_Com(0x36);
 Lcd_Write_Data(0x48);

 Lcd_Write_Com(0x3A);
 Lcd_Write_Data(0x05);

 Lcd_Write_Com(0xC1);
 Lcd_Write_Data(0x10);
 Lcd_Write_Data(0x10);
 Lcd_Write_Data(0x02);
 Lcd_Write_Data(0x02);

 Lcd_Write_Com(0xC0); //Set Default Gamma
 Lcd_Write_Data(0x00);
 Lcd_Write_Data(0x35);
 Lcd_Write_Data(0x00);
 Lcd_Write_Data(0x00);
 Lcd_Write_Data(0x01);
 Lcd_Write_Data(0x02);

 Lcd_Write_Com(0xC5); //Set frame rate
 Lcd_Write_Data(0x04);

 Lcd_Write_Com(0xD2); //power setting
 Lcd_Write_Data(0x01);
 Lcd_Write_Data(0x44);

 Lcd_Write_Com(0xC8); //Set Gamma
 Lcd_Write_Data(0x04);
 Lcd_Write_Data(0x67);
 Lcd_Write_Data(0x35);
 Lcd_Write_Data(0x04);
 Lcd_Write_Data(0x08);
 Lcd_Write_Data(0x06);
 Lcd_Write_Data(0x24);
 Lcd_Write_Data(0x01);
 Lcd_Write_Data(0x37);
 Lcd_Write_Data(0x40);
 Lcd_Write_Data(0x03);
 Lcd_Write_Data(0x10);
 Lcd_Write_Data(0x08);
 Lcd_Write_Data(0x80);
 Lcd_Write_Data(0x00);

 Lcd_Write_Com(0x2A);
 Lcd_Write_Data(0x00);
 Lcd_Write_Data(0x00);
 Lcd_Write_Data(0x00);
 Lcd_Write_Data(0xeF);

 Lcd_Write_Com(0x2B);
 Lcd_Write_Data(0x00);
 Lcd_Write_Data(0x00);
 Lcd_Write_Data(0x01);
 //  Lcd_Write_Data(0x3F);
 Lcd_Write_Data(0x8F); // on internet

 Lcd_Write_Com(0x29); //display on      

 Lcd_Write_Com(0x2C); //display on

 digitalWrite(LCD_CS,HIGH);
}

void H_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)                  
{
 unsigned int i,j;
 Lcd_Write_Com(0x02c); //write_memory_start
 digitalWrite(LCD_RS,HIGH);
 digitalWrite(LCD_CS,LOW);
 l=l+x;
 Address_set(x,y,l,y);
 j=l*2;
 for(i=1;i<=j;i++)
 {
   Lcd_Write_Data(c);
 }
 digitalWrite(LCD_CS,HIGH);  
}

void V_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)                  
{
 unsigned int i,j;
 Lcd_Write_Com(0x02c); //write_memory_start
 digitalWrite(LCD_RS,HIGH);
 digitalWrite(LCD_CS,LOW);
 l=l+y;
 Address_set(x,y,x,l);
 j=l*2;
 for(i=1;i<=j;i++)
 {
   Lcd_Write_Data(c);
 }
 digitalWrite(LCD_CS,HIGH);  
}

void Rect(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)
{
 H_line(x  , y  , w, c);
 H_line(x  , y+h, w, c);
 V_line(x  , y  , h, c);
 V_line(x+w, y  , h, c);
}

void Rectf(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)
{
 unsigned int i;
 for(i=0;i<h;i++)
 {
   H_line(x  , y  , w, c);
   H_line(x  , y+i, w, c);
 }
}

void LCD_Clear(unsigned int j)                  
{
 unsigned int i,m;
 Lcd_Write_Com(0x02c); //write_memory_start
 digitalWrite(LCD_RS,HIGH);
 digitalWrite(LCD_CS,LOW);
 Address_set(0,0,479,399);

 for(i=0;i<480;i++)
   for(m=0;m<400;m++)
   {
     Lcd_Write_Data(j);
   }
 digitalWrite(LCD_CS,HIGH);  
}

void setup()
{
 for(int p=2;p<10;p++)
 {
   pinMode(p,OUTPUT);
 }
 pinMode(A0,OUTPUT);
 pinMode(A1,OUTPUT);
 pinMode(A2,OUTPUT);
 pinMode(A3,OUTPUT);
 pinMode(A4,OUTPUT);
 digitalWrite(A0, HIGH);
 digitalWrite(A1, HIGH);
 digitalWrite(A2, HIGH);
 digitalWrite(A3, HIGH);
 digitalWrite(A4, HIGH);
 Lcd_Init();
 LCD_Clear(0x00);
}

void loop()
{  

 for(int i=0;i<1000;i++)
 {
   Rect(random(300),random(300),random(300),random(300),random(65535)); // rectangle at x, y, with, hight, color
 }
 LCD_Clear(0x00);
}


Das funktioniert soweit.
Es dieses Demo mit den rechteck kästchen ausgegeben.
Nur irgend etwas anderes anzeigen kann ich damit nicht.
Und so weit bin ich mit der Arduino Programierug noch nicht das ich das verstehe.

Serenifly

#5
Jan 02, 2015, 11:23 pm Last Edit: Jan 02, 2015, 11:33 pm by Serenifly
Dann sind nicht die ganzen Pins belegt. Sondern nur 5 Stück für das Display. Und ein paar mehr noch für Touchscreen und die SD Karte. Und die SD Karte läuft über SPI. Da kann man noch anderen SPI Devices anschließen.

Hier sieht man was eigentlich belegt ist:
https://www.ex-store.de/images/product_images/popup_images/189_0.png

Der Rest ist frei. Um an die zu kommen kannst du das Shield abgesetzt betreiben und mit Kabeln verbinden.


Das sollte aber auch auf dem Mega funktionieren. Wobei auf dem Mega die SPI Pins für die SD Karte woanders liegen.


Das Display wird übrigens von UTFT unterstützt:
http://henningkarlsen.com/electronics/library.php?id=52
Das steht doch sogar auf der Seite die du verlinkt hast! Und man sieht es auf dem Video.

Diese Library hat fertige Routinen um Text zu schreiben oder andere geometrische Formen. Die Lib ist perfekt dokumentiert.

Lade dir aber die Version herunter:
https://www.ex-store.de/media/UTFT_V2.77b.zip
Da sind Beispiele speziell für deinen Display Controller dabei!

Luppi

Auf dem uno r3 funktioniert es ja auch tadellos. nur auf dem mega bekomme ich es nicht zum laufen

Serenifly

Mhh, theoretisch sollte das auch für den Mega gehen. In ...UTFT\hardware\avr\HW_AVR_defines.h ist auch schon das entsprechende #define auskommentiert:
Code: [Select]

#define USE_UNO_SHIELD_ON_MEGA 1



Wende dich vielleicht mal an den Verkäufer. Die UTFT Version die da verlinkt haben scheint mir nämlich sowieso leicht für dieses Display modifiziert zu sein. Es kann sein, dass die da mehr wissen.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy