Attiny85 mit OLED Display und DS18B20 zeigt Temperatur nicht an

Hallo zusammen,

ich möchte mit einem Attiny85 auf einem OLED Display (128 x 64 Pixel, 0,96") die Temperatur von einen DS18B20 Sensor anzeigen. Die Anzeige auf dem OLED funktioniert allgemein, es wird nur die Temperatur nicht angezeigt. Die Schaltung und den Code habe ich als Anlage beigefügt.

Ich habe es auch mit einem seperaten Sensor versucht, ohne Erfolg. Es werden immer -127 °C angezeigt.
Da ich noch wenig Programmiererfahrung habe (den Code habe ich aus dem Netz und etwas angepaßt), gehe ich davon aus, dass ich im Abschnitt "temperatur messen" beim Auslesen des Sensors einen Fehler gemacht habe.

Schon mal danke für Eure Hilfe
Gruß
wAlter68

// Einfache Schaltung mit einem DS18B20 und einem 1306 Display als Raumthermometer
// angepaßt für Attiny85 und OLED Display
// Deklaration zur Bedinung eines 1306 OLED Displays
#include <SSD1306_minimal.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Abspeichern von Daten in Programmspeicher:
#include <avr/pgmspace.h> 

#define DEG "\xa7" "C"  // war vorher xa7

SSD1306_Mini oled; // ein 128x64 OLED Display 0.97"
// Einbinden eines Dallas DS18B20 Temperatursensors
#include <DallasTemperature.h>      // Library für Dallas Temperatursensoren
#define ONE_WIRE_BUS 3              // der Eindrahtbus für die DS18B20 liegen auf Digitalport 3
#define DS18B20_Aufloesung 11       // Die Sensoren sollen eine 11 Bit Auflösung liefern

OneWire oneWire(ONE_WIRE_BUS);         // Erstellen einer ONE_Wire Instanz
DallasTemperature myDS18B20(&oneWire); // Erstellen einer DS18B20 Instanz
float temperatur = 0; // Variable zur Übernahme des Temperaturmesswertes

// Bild eines kleinen Thermometers:
const unsigned char  ThermometerIcon[] PROGMEM = {
  0x00, 0xfe, 0x03, 0xfe, 0x50,
  0x00, 0xff, 0x00, 0xff, 0x55,
  0x60, 0x9f, 0x80, 0x9f, 0x65, 
};


///////////////////////////////////////////////////
// 
// zeigeStartAnzeige()
//    gibt initiale Info am Display aus
//
///////////////////////////////////////////////////

void zeigeStartAnzeige(){

  oled.startScreen(); // Anzeige einschalten
  oled.clear();       // Anzeige löschen
  
  oled.cursorTo(0,7); // Cursor positionieren
  oled.printString( "Heise Developer");
  
  delay(3000);
  
  oled.clear();
  oled.cursorTo(15,1);// Cursor positionieren
  oled.printString( "ATtiny85 Demo");  
}

///////////////////////////////////////////////////
// 
// zeigeBetriebsAnzeige()
//    gibt Betriebsinfo aus
//    ein Logo (Thermometer)
//    und einen Temperaturwert
//
///////////////////////////////////////////////////

void zeigeBetriebsAnzeige(){

  oled.clear();        // Anzeige löschen
  oled.startScreen();  // Anzeige einschalten
  
  
  oled.cursorTo(0,0);
  oled.printString( "Anschluss OLED");
  oled.cursorTo(10,2);
  oled.printString( "Temperatur");
  // und noch Grafik anzeigen:
  oled.drawImage( ThermometerIcon, 20,4, 5, 3 );
}
///////////////////////////////////////////////////
// 
// temperaturmessen
//
///////////////////////////////////////////////////
char temperaturmessen() {
      myDS18B20.requestTemperatures(); // DS18B20 anweisen eine Temperatur zu messen
      temperatur = myDS18B20.getTempCByIndex(0); // Messwert des ersten verfügbaren Sensors (Index 0) abrufen 
      return temperatur;
}

///////////////////////////////////////////////////
// 
// setup
//    OLED initialisieren
//    Startbildschirm einblenden
//    Betriebsanzeige einblenden
//
///////////////////////////////////////////////////

void setup(){
  pinMode(3, INPUT);   

  oled.init(0x3c); // OLED hängt an IIC-Id 0x3c
  oled.clear();    // Anzeige löschen

  delay(1000);
  zeigeStartAnzeige();    // Initialer Startbildschirm
  delay(2000);
  zeigeBetriebsAnzeige(); // Betriebsanzeige
}    



///////////////////////////////////////////////////
// 
// loop
//    die eigentliche Messschleife
//    laufend messen and auf Betriebsanzeige 
//    ausgeben
//
///////////////////////////////////////////////////

void loop(){
    char buf[15];
    // Temperatur ermitteln:
    char temp=temperaturmessen();

    // Formatierte Information erstellen:
    sprintf(buf, "%+0.2hd" DEG , temp);

    // Cursor positionieren:
    oled.cursorTo(30, 5);
    
    // Ausgabe des Temperaturwertes:
    oled.printString( buf ); 
    delay(1500); // Pause zwischen Messungen
}

Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter oder gehe in der IDE auf Bearbeiten - Für Forum kopieren und füge es hier ein.
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Danke für den Hinweis Tommy, hab ich gleich erledigt.

Gruß

wAlter68

wAlter67:
Die Schaltung und den Code habe ich als Anlage beigefügt.

Ich habe es auch mit einem seperaten Sensor versucht, ohne Erfolg. Es werden immer -127 °C angezeigt.

-127 ist mit "Sensor nicht gefunden" gleichzusetzen.

Hilfreich wäre ein Foto vom DS zum Attiny um mögliche Hardware-Probleme auszuschliessen.

Zu der lib gibt es Beispiele.
Unter anderem auch "OneWireSearch" unter DATEI - BEISPIELE - Beispiele aus eigenen Bibliotheken - DALLASTEMPERATURE - Bitte einmal aufrufen, PIN anpassen - geht?

Hallo my_xy_Projekt

Wenn ich wie vorgeschlagen "OneWireSearch" kompiliere bekomme ich eine lange Fehlermeldung, hier nur die letzten Zeilen:

Arduino: 1.8.13 (Windows 10), Board: "ATtiny25/45/85, ATtiny85, Internal 1 MHz"
Bibliothek OneWire in Version 2.3.5 im Ordner: C:\Users\xxx xxxx\Documents\Arduino\libraries\OneWire wird verwendet
exit status 1
'Serial' was not declared in this scope
Die Zeile "Serial.print("\nuint8_t pin");" ist dabei hervorgehoben.

Hallo,
hast du auch mal den ATTiny85 auf 8MHz geflasht.
Ich vermute, mit 1 Mhz geht OneWire nicht. Ich hatte das mal vor langer Zeit in einem Beitrag gelesen.

Und Serial geht ja auf dem ATtiny nicht, daher deine Fehlermeldungen.

wAlter67:
Hallo my_xy_Projekt
'Serial' was not declared in this scope

HotSystems hat es schon geschrieben.
Ich bin davon ausgegangen, das Du die Serial-Ausgaben auf das SS umleiten kannst, wenn Du einen Tiny programmieren kannst.

Hallo HotSystems,

Genial, läuft mit 8MHz !!!!!!!!
Hab es mal mit 16MHz probiert und es hatte nicht funktioniert, bin deshalb nicht auf die Idee gekommen es mit 8MHz auch zu testen.

Danke für den Hinweis!

Gruß

Wie sieht deine Speicherbelegung beim Kompilieren aus ?

wAlter67:
Hallo HotSystems,

Genial, läuft mit 8MHz !!!!!!!!
Hab es mal mit 16MHz probiert und es hatte nicht funktioniert, bin deshalb nicht auf die Idee gekommen es mit 8MHz auch zu testen.

Danke für den Hinweis!

Gruß

Alles klar, gerne und danke für die Rückmeldung.