Pages: 1 [2]   Go Down
Author Topic: S65 Shield geht nicht  (Read 1695 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 282
Einfach ein Flop :P
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

Habs nun so gemacht. Nur geht es leider immernoch nicht smiley-kiss(

Jo hab ich gesehen @funkheld.

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

MFG, Robdeflop®
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 249
Posts: 21184
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Akku dran -> grad bissl gewartet -> 3 Sekunden lang Reset taste gehalten -> Losgelassen -> Nix passiert :/
Welchen Akku hast Du und wie steckst Du ihn an?
Grüße Uwe
Logged

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 1980
Wo ein Wille ist, da ist auch ein Weg !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Also ohne den Akku zu benutzen ?
Logged

Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Germany
Offline Offline
Full Member
***
Karma: 8
Posts: 117
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@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
Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 282
Einfach ein Flop :P
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

Ok, danke schonmal Andreas, werds gleich testen.
Das ist aber doof wenn diese funktionen nicht gehen smiley-sad

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®
Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 282
Einfach ein Flop :P
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

Sry 4 Doppelpost :/

Sooo, habs getestet, und siehe da, es geht  smiley-grin smiley-grin smiley-grin
Dankeeee smiley

Nur leider geht wie gesagt die DrawText Funktion nicht smiley-sad
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®
Logged

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 1980
Wo ein Wille ist, da ist auch ein Weg !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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 !
Logged

Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

Germany
Offline Offline
Full Member
***
Karma: 8
Posts: 117
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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

« Last Edit: February 08, 2011, 10:13:23 am by Andreas Watterott » Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 282
Einfach ein Flop :P
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

Ok, danke smiley 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®
Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 282
Einfach ein Flop :P
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
« Last Edit: February 08, 2011, 11:17:13 am by Robdeflop » Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 282
Einfach ein Flop :P
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

Code:
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:

Code:
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®
Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 282
Einfach ein Flop :P
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

Hmm, klingt komisch, aber ich habs immernoch nicht hinbekommen smiley-sad 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 smiley

MFG, Robdeflop®
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
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:

Code:
#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
Logged

Pages: 1 [2]   Go Up
Jump to: