Forum: Mikrocontroller und Digitale Elektronik Probleme mit Arduino Mega, TFT und DS1820


von Rene (Gast)


Lesenswert?

HI!

Ich habe Probleme meinen Arduino Mega mit 3,5" TFT-Shield (Kuman) mit 2 
DS1820 zum laufen zu bringen.

Wenn ich nur das Display am laufen habe geht alles problemlos, wenn nur 
die Sensoren laufen habe ich auch kein Problem.
Nur wenn ich beides zusammen in einen Sketch schiebe, erkennt er die 
Sensoren nicht mehr und gibt es auch nicht mehr auf das TFT aus.

Ich bin etwas ratlos!
Erstens lief es gestern schon einmal, zum anderen bin ich sehr neu in 
der Materie sodass mir bei manchem einfach noch die Nachvollziebarkeit 
fehlt.
Habe bis vor kurzem alles mit BASCOM geschrieben und nie eine fertige 
Umgebung genutzt...

Wem was auffällt was zur Problemlösung beiträgt, immer raus damit!!!

Schonmal Tausend-Dank!!!


Hier mal mein Sketch:

#include <Adafruit_GFX.h> 
//Core graphics library
#include <Adafruit_TFTLCD.h> 
//Hardware-specific library
#include <OneWire.h> 
//http://www.arduino.cc/playground/Learning/OneWire
#include <DallasTemperature.h> 
//http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library
#include <MCUFRIEND_kbv.h>

MCUFRIEND_kbv tft;

#define ONE_WIRE_BUS 39 
//1-Wire auf DigitalPin 10
#define TEMPERATURE_PRECISION 12 
//Präzision auf 12 Bit
#define LCD_CS A3 
//Chip Select goes to Analog 3
#define LCD_CD A2 
//Command/Data goes to Analog 2
#define LCD_WR A1 
//LCD Write goes to Analog 1
#define LCD_RD A0 
//LCD Read goes to Analog 0
#define LCD_RESET A4 
//Can alternately just connect to Arduino's reset pin
#define BLACK   0x0000 
//Für Hex-Werte der Farben, "freundlichere" Bezeichnungen gewählt
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF


OneWire oneWire(ONE_WIRE_BUS); 
//Einrichten des OneWire Bus um die Daten der Temperaturfühler abzurufen
DallasTemperature sensors(&oneWire);                                // 
Bindung der Sensoren an den OneWire Bus
DeviceAddress tempDeviceAddress; 
//Verzeichniss zum Speichern von Sensor Adressen
int numberOfDevices; 
//Anzahl der gefundenen Sensoren


void setup(void)
{
 Serial.begin(9600);
 Serial.println(F("TFT LCD test"));

 tft.reset();

 uint16_t identifier = tft.readID();

 if(identifier==0x9486)
 {
      Serial.println(F("Found 0x9486 LCD driver"));
 }

 tft.begin(identifier);
 Serial.print("TFT size is "); Serial.print(tft.width()); 
Serial.print("x"); Serial.println(tft.height());


  Serial.print("Abfrage der Temperatur... "); 
//Serielle Ausgabe
  sensors.requestTemperatures(); 
//Alle Sensorwerte abfragen
  Serial.println("DONE");


  for(int i=0 ;i<numberOfDevices; i++) 
//Ausgabe der Daten für jeden Sensor
  {
     float tempC = sensors.getTempCByIndex(i);
     Serial.print("Sensor ");
     Serial.print(i, DEC);
     Serial.print(" hat grad Celsius: ");
     Serial.println(tempC);
  }
  delay(1000);


 tft.setRotation(3); 
//Bildschirm auf Breitformat stellen

 tft.fillScreen(BLACK); 
//Hintergrundfarbe auf schwarz setzen

 unsigned long start = micros();

 tft.drawRect(1, 1, 479, 319, WHITE); 
//Rechteck zeichnen
 tft.drawLine(1, 40, 479, 40, WHITE); 
//Linien zeichnen
 tft.drawLine(240, 40, 240, 319, WHITE);

 tft.setCursor(70, 14); 
//Beschriftungen inkl. Position, Textfarbe und -größe
   tft.setTextColor(0x04FF);   tft.setTextSize(2);
   tft.println("Day & Climate Control System");

 tft.setCursor(40, 60);
   tft.setTextColor(0x04FF);    tft.setTextSize(2);
   tft.println("Temperaturen:");

 tft.setCursor(290, 60);
   tft.setTextColor(0x04FF);    tft.setTextSize(2);
   tft.println("Wasserwerte:");

 tft.setCursor(10, 120);
   tft.setTextColor(0x04FF);    tft.setTextSize(2);
   tft.println("Tag");

 tft.setCursor(250, 120);
   tft.setTextColor(0x04FF);    tft.setTextSize(2);
   tft.println("PH-Wert");

 tft.setCursor(10, 220);
   tft.setTextColor(0x04FF);    tft.setTextSize(2);
   tft.println("Nacht");

 tft.setCursor(250, 220);
   tft.setTextColor(0x04FF);    tft.setTextSize(2);
   tft.println("Leitwert");
}



void loop(void)
{
 // Aufruf der Funktion sensors.requestTemperatures()
  // Dadurch werden alle werte abgefragt.
  Serial.print("Abfrage der Temperatur... ");
  sensors.requestTemperatures();
  Serial.println("DONE");

  // Ausgabe der Daten für jeden Sensor
  for(int i=0 ;i<numberOfDevices; i++) {
     float tempC = sensors.getTempCByIndex(i);
     Serial.print("Sensor ");
     Serial.print(i, DEC);
     Serial.print(" hat grad Celsius: ");
     tft.setCursor(30, 140);
       tft.setTextColor(0x04FF);    tft.setTextSize(2);
       tft.print(i, DEC);
     tft.setCursor(50, 140);
       tft.setTextColor(0x04FF);    tft.setTextSize(2);
       tft.print(tempC);
     Serial.println(tempC);
  }
 delay(1000);delay(1000);delay(1000);delay(1000);delay(1000);
}

von Regeln Erklehrbehr (Gast)


Angehängte Dateien:

Lesenswert?

Rene schrieb:
> Schonmal Tausend-Dank!!!

Danke auch für die Einhaltung "gewisser" Regeln.

von Falk B. (falk)


Lesenswert?

@ Rene (Gast)

>Wenn ich nur das Display am laufen habe geht alles problemlos, wenn nur
>die Sensoren laufen habe ich auch kein Problem.

Hoffentlich überschneiden sich die Pins deines TFTs nicht mit deinem 
Onewire.

>Habe bis vor kurzem alles mit BASCOM geschrieben und nie eine fertige
>Umgebung genutzt...

Bitte? BASCOM IST eine fertige Umgebung!

#define ONE_WIRE_BUS 39
//1-Wire auf DigitalPin 10

Solche Kommentare lassen aufhorchen. Ja was denn nun?

von Rene (Gast)


Lesenswert?

War ja zu erwarten dass die ersten Kommentare immer die 
qualifiziertesten sind...

Der Anhang ist aber wunderbar vorbereitet - wie bei einem guten 
Pfadfinder zu erwarten ist!

von Rene (Gast)


Lesenswert?

@Falk:

Ich meinte damit vielmehr, ich habe bisher nie mit fertigen Platinen wie 
eben Arduino gearbeitet sondern immer alles individuell erstellt.
Nun dachte ich mir ich hole mir mal so ein Teil und lerne mal was neues 
- aber gegen Erfahrung ist eben nichts zu setzen. Diese fehlt mir aber 
dort noch gänzlich...

Du hast mich erwischt!!!
Bei dem herum probieren ist die Kommentierung auf der Strecke 
geblieben...
Pin 39 wird benutzt und ist auch frei.
Es funktioniert mit allen möglichen Pins - eben bis ich das TFT 
anstecke.

Habe ich in der Programmierung einen Fehler drin???

von Harry L. (mysth)


Lesenswert?

Vermutlich wird in den TFT-Routinen irgendwo und irgendwas blockiert und 
gewartet.
Das bringt das Timing für den DS18x20 durcheinander.....tja....Arduino 
eben...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.