PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfacher Sketch zum OLED Display testendoh ich



xxrider
20.02.2018, 21:56
Wollte folgenden sketch ausprobieren (aus: http://cyaninfinite.com/tutorials/interfacing-a-i2c-0-96-oled-display-with-attiny85/ ):
doch ich erhalte die Fehlermeldung: ssd1306_char_f8x16' was not declared in this scope
Vielleicht blickt jemand durch, warum es nicht klappt.

#define F_CPU 8000000UL //ATtiny85 CPU Clock speed (8MHz optimal[8000000], 1MHz Default[1000000])

#include <stdlib.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>

// ----------------------------------------------------------------------------

// --------------------- // Vcc, Pin 1 on SSD1306 Board
// --------------------- // GND, Pin 2 on SSD1306 Board
#define SSD1306_SCL PB0 // SCL, Pin 3 on SSD1306 Board
#define SSD1306_SDA PB1 // SDA, Pin 4 on SSD1306 Board

#define SSD1306_SA 0x78 // Slave address

// ----------------------------------------------------------------------------

#include "ssd1306xled.h"

void setup(){
// Small delay is necessary if ssd1306_initis the first operation in the application.
_delay_ms(40);
ssd1306_init();

ssd1306_fillscreen(0x00);
ssd1306_char_f8x16(1, 2, "Photon OS");
ssd1306_char_f6x8(1, 5, "Loading test...");
_delay_ms(4000);


uint8_t p = 0xff;

for (uint8_t i = 0; i < 4; i++)
{
p = (p >> i);
ssd1306_fillscreen(~p);
_delay_ms(1);
}
}

void loop()
{
ssd1306_fillscreen(0x00);
ssd1306_char_f6x8(1, 0, "I'm a ATtiny85"); //Cannot start at 0 for x. Gives problem

ssd1306_char_f6x8(1, 0, "I'm a small and mighty.");
_delay_ms(5000);

ssd1306_char_f6x8(1, 0, "Who says I can't run this LED screen?");
_delay_ms(5000);


ssd1306_char_f6x8(1, 0, "There am I running it now.");
_delay_ms(5000);

}

oberallgeier
22.02.2018, 10:22
.. Fehlermeldung: ssd1306_char_f8x16' was not declared in this scope .. #define SSD1306_SA 0x78 // Slave address ..Wenn ich mich richtig erinnere, hatte ich anfangs ebenfalls Schwierigkeiten mit dem SSD1306. Es war die falsche Adresse, da gibt es möglicherweise Unterschiede in Lieferchargen ?? Mein OLED arbeitet jedenfalls auf 0x3C. Vielleicht bemühst Du den (verbreiteten?) Trick mal die unterschiedlichen Adressen abzuklopfen? So ne Routine lohnt(e) sich bei mir doch öfters.

HaWe
22.02.2018, 11:17
Wenn ich mich richtig erinnere, hatte ich anfangs ebenfalls Schwierigkeiten mit dem SSD1306. Es war die falsche Adresse, da gibt es möglicherweise Unterschiede in Lieferchargen ?? Mein OLED arbeitet jedenfalls auf 0x3C. Vielleicht bemühst Du den (verbreiteten?) Trick mal die unterschiedlichen Adressen abzuklopfen? So ne Routine lohnt(e) sich bei mir doch öfters.

wäre es wie du sagst, und nur die i2c dev addr wäre falsch, dann würde es immerhin fehlerfrei kompilieren und es würde danach nur nichts anzeigen.

ssd1306_char_f8x16' was not declared in this scope
sagt aber nichts anderes aus, als dass diese Funktion (d.h. ihre Deklaration) überhaupt nicht gefunden wird, weder lokal im Sketch noch in einer eingebundenen Lib.

Siro
22.02.2018, 12:53
fehlt da evtl. ein include:
#include <ssd1306xled8x16.h>

weil ich dieses hier gefunden habe:

#include <font6x8.h>
#include <font8x16.h>
#include <ssd1306xled.h>
#include <ssd1306xled8x16.h>

Siro

xxrider
22.02.2018, 21:03
die Adresse ist 0x3C, da habe ich schon herausgefunden.
Mit einem Arduino Nano kann ich das das Display ansprechen.
Aber der Attiny85 (China) macht große Schwierigkeiten, ich dachte ich kann da einfach so die library und den Sketch übernehmen und dann geht es.
Wie gesagt, ich kann den Sketch nicht kompilieren, dann kommt die genannte Fehlermeldung (auch wenn ich noch #include <ssd1306xled8x16.h> dazunehme).
Habe schon mehrere verschiedene Ansätze ausprobiert, welche ich im Netz so Herumschwirren, aber leider immer Fehlanzeige (dazu noch verbunden mit meinem „Viertelwissen“, Halbwissen wäre deutlich zu beschönigend:) .
Es scheint hier nicht einen sicheren Weg zu geben, das OLED Display mit Attiny85 Board zum Laufen zu bringen.
Falls doch, bitte ich um einen Tipp!

Habe noch folgenden Sketch ausprobiert, leider auch bis jetzt ohne Erfolg (keine Anziehge am Display). Aber die Kompilierung und das Laden auf den Attiny geht hier wenigstens (aus: http://www.instructables.com/id/Display-Images-on-OLED-Screen-With-Arduino-ATtiny8/) :


#include "SSD1306_minimal.h"
#include <avr/pgmspace.h>
#include "FileForOLED.h"

SSD1306_Mini oled;

void setup(){
oled.init(0x3c);
oled.clear();
oled.startScreen();

}

void loop() {
oled.drawImage(FileForOLED, 0,0, 128, 8);
}



.....Nachtrag: mit diem letzten Code geht es nun doch!!!! ich hatte auch noch ein Kabelproblem auf dem Steckboard (:(), wenn mehrere Fehler zusammenkommen tut man sich einfach auch mit der Fehlersuche schwer... aber jetzt kann ich weitermachen, ich danke euch für eure Hilfe, sonst hätte ich vielleicht gar aufgegeben.

Siro
22.02.2018, 21:44
sonst hätte ich vielleicht gar aufgegeben

33292
Das hab ich auf meinem Arbeitstisch stehen ;) jeder Fehler ist zu finden...

xxrider
23.02.2018, 15:35
:) stimmt, gutes Motto!

Mich hätte noch die Schriftgröße interessiert, ob ich die ändern kann (sie ist etwas zuuu tiny...).
Ich denke sie ist in der Bibliothek "SSD1306_minimal.h" festgelegt:


#include "SSD1306_minimal.h"

// a 5x7 font table
const unsigned char BasicFont[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x5B, 0x4F, 0x5B, 0x3E,
0x3E, 0x6B, 0x4F, 0x6B, 0x3E,
0x1C, 0x3E, 0x7C, 0x3E, 0x1C,
0x18, 0x3C, 0x7E, 0x3C, 0x18,
0x1C, 0x57, 0x7D, 0x57, 0x1C,
0x1C, 0x5E, 0x7F, 0x5E, 0x1C,
0x00, 0x18, 0x3C, 0x18, 0x00,
usw, usw....