S65 Shield geht nicht

Hast Du schonmal dies versucht: http://www.watterott.net/s65-shield/s65-shield_v020.zip

Hi

Jop, hab die neuste version :slight_smile:

MFG, Robdeflop®

Eben, da steht das die 0.21 Version eine Beta-Version ist. Deshalb frage ich nach der 0.20 Version !

Hi

Aso^^ Nja, hab jetzt die 0.20er vers drauf.

Hab eben mal bissl die cpp´s vom Display durchgestöbert, un hab das gefunden:

//Display settings
#define S65_LS020
//#define S65_LPH88
//#define S65_L2F50

Hab dann natürlich das LS020 ausgeklammert, und das L2F50 genommen. Nur dann bekomme ich beim compilen folgende errors:

C:\Dokumente und Einstellungen\Robdeflop\Desktop\arduino-0021\libraries\S65Display\l2f50.cpp: In function 'void s65_init()':
C:\Dokumente und Einstellungen\Robdeflop\Desktop\arduino-0021\libraries\S65Display\l2f50.cpp:101: error: 'delay_ms' was not declared in this scope

MFG, Robdeflop®

Ok, in der Datei l2f50.cpp steht in der Function void s65_init(void) zweimal delay_ms(5);
Ersetzte beide Zeilen durch folgende: _delay_ms(5);

Dann funktioniert es !

...das vielleicht anders als die anderen die bei watterott angeboten werden? Nur dieses war lieferbar....

ist jetz aus dem bestand raus.

Hi

Habs nun so gemacht. Nur geht es leider immernoch nicht :*(

Jo hab ich gesehen @funkheld.

Heißt das das display geht mit dem shield und den includes nicht?

MFG, Robdeflop®

Akku dran -> grad bissl gewartet -> 3 Sekunden lang Reset taste gehalten -> Losgelassen -> Nix passiert :confused:

Welchen Akku hast Du und wie steckst Du ihn an?
Grüße Uwe

Meldet sich das Display auch dann nicht wenn der Arduino über USB mit dem PC verbunden ist ?

Also ohne den Akku zu benutzen ?

@Robdeflop
Probiere mal die v0.22. (in /libraries/S65Display/S65Display.h wieder den Displaytyp ändern)

Die L2F50 Unterstützung der S65-Lib ist mehr oder weniger quick and dirty und die drawText() Funktionen gehen nicht mit diesem Displaytyp.

Gruß
Andreas

Hi

Ok, danke schonmal Andreas, werds gleich testen.
Das ist aber doof wenn diese funktionen nicht gehen :frowning:

Ich hab ne 9V Block, schließe ich über den normalen Stromanschluss an^^

Mit USB Gehts genauso wenig.

Werd das mit der 0.22er version aber ma probieren

MFG, Robdeflop®

Hi

Sry 4 Doppelpost :confused:

Sooo, habs getestet, und siehe da, es geht :smiley: :smiley: :smiley:
Dankeeee :slight_smile:

Nur leider geht wie gesagt die DrawText Funktion nicht :frowning:
Geht die in früheren versionen?
Wird die evtl erneuert oder gefixxt? Weil das ist wirklich unlesbar, und ohne diese funktion kann ich nix anfangen. Außer natürlich sie selber zu proggen, nur das ist im moment noch zu hoch für mich.

MFG, Robdeflop®

Außer natürlich sie selber zu proggen, nur das ist im moment noch zu hoch für mich.

Das bekommst Du auch noch gemeistert, den Übung macht den Meister !

Nur leider geht wie gesagt die DrawText Funktion nicht smiley-sad
Geht die in früheren versionen?
Wird die evtl erneuert oder gefixxt?

Leider nicht, da die Pixelzuteilung beim L2F50 anders ist. Offiziell unterstützt wird nur das LS020 und LPH88 Display.
In der nächsten Zeit komme ich nicht dazu die Lib anzupassen. Aber schau dir mal den Code vom ARM-WebRadio an. Dort werden alle S65-Displaytypen unterstützt.

Gruß
Andreas

Hi

Ok, danke :slight_smile: Werd das mal versuchen^^
Find´s aber doof dass gerade das display, wo ich stolz war dass ich ein lieferbares gefunden habe, nicht richtig unterstützt wird, so ein pesch aber auch xD

MFG, Robdeflop®

Hi

Malwieder sry 4 Doppelpost xD

Öhm, welche ist die "schreibfunktion"?

lcd_putc oder lcd_puts? Oder ne andere?

MFG, Robdeflop®

EDIT:

Habs schon^^ is natürlich lcd_putc, wenn man sich die beiden func´s mal anschaut >.<
Mal schaun ob ich´s hinbekomme :slight_smile:

Hi

Nach stundenlangem Probieren, überlegen... kam ich dennoch nicht zum Ziel.
Die Unterschiede sind zwar nur klein, aber ich bekomm immer error´s, oder die Schriftzeichen sind anders verwirrt als vorher, oder ich habe nur Balken wo die Schrift ist.

Ich komme einfach nicht zurecht. Hier die Funktionen um Char´s darzustellen

Von der S65-Shield-Lib:

uint8_t S65Display::drawChar(uint8_t x, uint8_t y, char c, uint8_t size, uint16_t color, uint16_t bg_color)
{
  uint8_t ret;
#if FONT_WIDTH <= 8
  uint8_t data, mask;
#elif FONT_WIDTH <= 16
  uint16_t data, mask;
#elif FONT_WIDTH <= 32
  uint32_t data, mask;
#endif
  uint8_t i, j, width, height;
  const prog_uint8_t *ptr;

  i      = (uint8_t)c;
#if FONT_WIDTH <= 8
  ptr    = &font_PGM[(i-FONT_START)*(8*FONT_HEIGHT/8)];
#elif FONT_WIDTH <= 16
  ptr    = &font_PGM[(i-FONT_START)*(16*FONT_HEIGHT/8)];
#elif FONT_WIDTH <= 32
  ptr    = &font_PGM[(i-FONT_START)*(32*FONT_HEIGHT/8)];
#endif
  width  = FONT_WIDTH;
  height = FONT_HEIGHT;

  if(size <= 1)
  {
    ret = x+width;
    if(ret > S65_WIDTH)
    {
      return S65_WIDTH+1;
    }

    setArea(x, y, (x+width-1), (y+height-1));

    s65_drawStart();
    for(; height!=0; height--)
    {
#if FONT_WIDTH <= 8
      data = pgm_read_byte(ptr); ptr+=1;
#elif FONT_WIDTH <= 16
      data = pgm_read_word(ptr); ptr+=2;
#elif FONT_WIDTH <= 32
      data = pgm_read_dword(ptr); ptr+=4;
#endif
      for(mask=(1<<(width-1)); mask!=0; mask>>=1)
      {
        if(data & mask)
        {
          s65_draw(color);
        }
        else
        {
          s65_draw(bg_color);
        }
      }
    }
    s65_drawStop();
  }
  else
  {
    ret = x+(width*size);
    if(ret > S65_WIDTH)
    {
      return S65_WIDTH+1;
    }

    s65_setArea(x, y, (x+(width*size)-1), (y+(height*size)-1));

    s65_drawStart();
    for(; height!=0; height--)
    {
#if FONT_WIDTH <= 8
      data = pgm_read_byte(ptr); ptr+=1;
#elif FONT_WIDTH <= 16
      data = pgm_read_word(ptr); ptr+=2;
#elif FONT_WIDTH <= 32
      data = pgm_read_dword(ptr); ptr+=4;
#endif
      for(i=size; i!=0; i--)
      {
        for(mask=(1<<(width-1)); mask!=0; mask>>=1)
        {
          if(data & mask)
          {
            for(j=size; j!=0; j--)
            {
              s65_draw(color);
            }
          }
          else
          {
            for(j=size; j!=0; j--)
            {
              s65_draw(bg_color);
            }
          }
        }
      }
    }
    s65_drawStop();
  }

  return ret;
}

Hier die vom ARM Inet-radio:

unsigned int lcd_putc(unsigned int x, unsigned int y, unsigned int c, unsigned int font, unsigned int size, unsigned int color, unsigned int bgcolor)
{
  unsigned int ret, i, j, width, height, w, h, wh;
  unsigned long *ptr;

  switch(font)
  {
    case SMALLFONT:
      c     -= SMALLFONT_START;
      ptr    = (unsigned long*)&SMALLFONT_NAME[c*(SMALLFONT_WIDTH*SMALLFONT_HEIGHT/8)];
      width  = SMALLFONT_WIDTH;
      height = SMALLFONT_HEIGHT;
      break;
#ifndef LOADER
    case NORMALFONT:
      c     -= NORMALFONT_START;
      ptr    = (unsigned long*)&NORMALFONT_NAME[c*(NORMALFONT_WIDTH*NORMALFONT_HEIGHT/8)];
      width  = NORMALFONT_WIDTH;
      height = NORMALFONT_HEIGHT;
      break;
    case TIMEFONT:
      c     -= TIMEFONT_START;
      ptr    = (unsigned long*)&TIMEFONT_NAME[c*(TIMEFONT_WIDTH*TIMEFONT_HEIGHT/8)];
      width  = TIMEFONT_WIDTH;
      height = TIMEFONT_HEIGHT;
      break;
#endif
  }

  ret = x+(width*size);
  if(ret >= LCD_WIDTH)
  {
    return LCD_WIDTH;
  }

  if(size <= 1)
  {
    lcd_setarea(x, y, x+(+width-1), y+(height-1));
    lcd_drawstart();

#ifdef LCD_L2F50
    wh = (width*height);
    for(w=0; w<width; w++)
    {
# ifdef LCD_MIRROR
      for(h=w+(wh-width); h<wh; h-=width)
# else
      for(h=w; h<wh; h+=width)
# endif
      {
        if(lcd_checkbit(ptr, h))
        {
          lcd_draw(color);
        }
        else
        {
          lcd_draw(bgcolor);
        }
      }
    }
#else
    unsigned long data, mask;
    for(wh=(width*height)/32; wh!=0; wh--)
    {
      data = *ptr++;
      //data = ((data&0xFF000000UL)>>24)|((data&0x00FF0000UL)>>8)|((data&0x0000FF00UL)<<8)|((data&0x000000FFUL)<<24); //swap32
      for(mask=0x80000000UL; mask!=0UL; mask>>=1)
      {
        if(data & mask)
        {
          lcd_draw(color);
        }
        else
        {
          lcd_draw(bgcolor);
        }
      }
    }
#endif

    lcd_drawstop();
  }
  else
  {
    lcd_setarea(x, y, x+(width*size)-1, y+(height*size)-1);
    lcd_drawstart();

#ifdef LCD_L2F50
    wh = (width*height);
    for(w=0; w<width; w++)
    {
      for(i=size; i!=0; i--)
      {
# ifdef LCD_MIRROR
        for(h=w+(wh-width); h<wh; h-=width)
# else
        for(h=w; h<wh; h+=width)
# endif
        {
          if(lcd_checkbit(ptr, h))
          {
            for(j=size; j!=0; j--)
            {
              lcd_draw(color);
            }
          }
          else
          {
            for(j=size; j!=0; j--)
            {
              lcd_draw(bgcolor);
            }
          }
        }
      }
    }
#else
    unsigned int bit;
    wh = (width*height);
    for(h=0; h<wh; h+=width)
    {
      for(i=size; i!=0; i--)
      {
        bit = h;
        for(w=0; w<width; w++)
        {
          if(lcd_checkbit(ptr, bit++))
          {
            for(j=size; j!=0; j--)
            {
              lcd_draw(color);
            }
          }
          else
          {
            for(j=size; j!=0; j--)
            {
              lcd_draw(bgcolor);
            }
          }
        }
      }
    }
#endif

    lcd_drawstop();
  }

  return ret;
}

Die Funktionen sind ja eig ziemlich gleich aufgebaut, aber es endet bei jedem versuch immer mit Verwirrung und Verzweiflung.

Kann evtl einer helfen?

In "normalen" sachen wie schleifen, abfragen, anderen funktionen usw komme ich super zurecht, nur da habe ich 0 durchblick

MFG, Robdeflop®

Hi

Hmm, klingt komisch, aber ich habs immernoch nicht hinbekommen :frowning: Versteh nicht so recht was es dort ausmacht, dass die Buchstaben richtig angezeigt werden, und bei der anderen S65 Shield lib nicht.
Kann mir evtl einer helfen? Wäre seehr erfreut :slight_smile:

MFG, Robdeflop®

Die Beiträge hier sind ja schon etwas älter. Aber da ich einen Tag mit dem s65- Shield (l2F50) zugebracht habe,
möchte ich hier meine Lösung für das Problem kurz zeigen.

Meine S65Display.cpp sieht jetzt so aus:

uint8_t S65Display::drawChar(uint8_t x, uint8_t y, char c, uint8_t size, uint16_t color, uint16_t bg_color)
{
  uint8_t ret, h, w; // h,w sind Laufvariablen für Höhe und Weite
#if FONT_WIDTH <= 8
  uint8_t data;
#elif FONT_WIDTH <= 16
  uint16_t data;
#elif FONT_WIDTH <= 32
  uint32_t data;
#endif
  uint8_t i, j, width, height;
  const prog_uint8_t *ptr, *ptr_tmp;

  i      = (uint8_t)c;
#if FONT_WIDTH <= 8
  ptr    = &font_PGM[(i-FONT_START)*(8*FONT_HEIGHT/8)];
#elif FONT_WIDTH <= 16
  ptr    = &font_PGM[(i-FONT_START)*(16*FONT_HEIGHT/8)];
#elif FONT_WIDTH <= 32
  ptr    = &font_PGM[(i-FONT_START)*(32*FONT_HEIGHT/8)];
#endif
  width  = FONT_WIDTH;
  height = FONT_HEIGHT;

  if(size <= 1)
  {
    ret = x+width;
    if(ret > S65_WIDTH)
    {
      return S65_WIDTH+1;
    }

    setArea(x, y, (x+width-1), (y+height-1));

    s65_drawStart();
    ptr_tmp = ptr;
	for(w=width; w!=0; w--) // 
	{
	ptr    = ptr_tmp;
	//Serial.print("w="); Serial.println(w); delay(50);
	for(h= height; h!=0; h--) 
    {
	#if FONT_WIDTH <= 8
		data = pgm_read_byte(ptr); ptr+=1;
	#elif FONT_WIDTH <= 16
		data = pgm_read_word(ptr); ptr+=2;
	#elif FONT_WIDTH <= 32
		data = pgm_read_dword(ptr); ptr+=4;
	#endif
    
	    if(CHECK_BIT(data,w)) // hier Sprung in die Funktion CHECK_BIT(var,pos) 
							  // die ist in S6%Dislay.h angelegt
							  // und sieht so aus:
							  // #define CHECK_BIT(var,pos) ((var & (1 << pos)) == (1 << pos))

			{
			s65_draw(color);
			}
			else
			{
			s65_draw(bg_color);
			}
	    }
	}
    s65_drawStop();
  }
  else
  {
    ret = x+(width*size);
    if(ret > S65_WIDTH)
    {
      return S65_WIDTH+1;
    }

    s65_setArea(x, y, (x+(width*size)-1), (y+(height*size)-1));

    s65_drawStart();
      ptr_tmp = ptr;
	for(w=width; w!=0; w--) // 
	{
	ptr    = ptr_tmp;
	//Serial.print("w="); Serial.println(w); delay(50);
	for(h= height; h!=0; h--)
    {
	#if FONT_WIDTH <= 8
      data = pgm_read_byte(ptr); ptr+=1;
	#elif FONT_WIDTH <= 16
      data = pgm_read_word(ptr); ptr+=2;
	#elif FONT_WIDTH <= 32
      data = pgm_read_dword(ptr); ptr+=4;
	#endif
     
        
          if(CHECK_BIT(data,w))
          {
            for(j=size; j!=0; j--)
            {
              s65_draw(color);
            }
          }
          else
          {
            for(j=size; j!=0; j--)
            {
              s65_draw(bg_color);
            }
			}
			}
         
    }
    s65_drawStop();
  }

  return ret;
}

Bitte auch in der S65Display.h die Definition:

#define CHECK_BIT(var,pos) ((var & (1 << pos)) == (1 << pos))

nicht vergessen einzufügen.

Leider funktionieren derzeit nur Fonts mit 8 Zeichen Breite, Da aber im Funktionsaufruf die Größe über "size" geändert werden kann, ist das verschmerzen.

kid