Go Down

Topic: S65 Shield geht nicht (Read 2007 times) previous topic - next topic

Robdeflop

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®

uwefed

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

Megaionstorm

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

Also ohne den Akku zu benutzen ?
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

@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

Robdeflop

Hi

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

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®

Robdeflop

Hi

Sry 4 Doppelpost :/

Sooo, habs getestet, und siehe da, es geht  :D :D :D
Dankeeee :)

Nur leider geht wie gesagt die DrawText Funktion nicht :(
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®

Megaionstorm

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 !
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

#22
Feb 08, 2011, 04:11 pm Last Edit: Feb 08, 2011, 04:13 pm by Andreas Watterott Reason: 1
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


Robdeflop

Hi

Ok, danke :) 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®

Robdeflop

#24
Feb 08, 2011, 04:41 pm Last Edit: Feb 08, 2011, 05:17 pm by Robdeflop Reason: 1
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 :)

Robdeflop

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: [Select]
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: [Select]
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®

Robdeflop

Hi

Hmm, klingt komisch, aber ich habs immernoch nicht hinbekommen :( 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 :)

MFG, Robdeflop®

kid1212

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: [Select]

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: [Select]

#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

Go Up