Lichtkrant Surtronic FDS-132

Hardware die niet past in bovenstaande onderwerpen
Berichten: 5
Geregistreerd: 26 Jun 2013, 22:12

Re: Lichtkrant Surtronic FDS-132

Berichtdoor ocguru » 02 Jul 2013, 23:25

Ik ga eerst proberen de tijd weer te geven dmv een ds1337 en temperatuur. Maar ik heb nog geen tijd gehad om me in de software te verdiepen.

Een rss feed weergeven dmv van een ethernetshield van bv het laatste nieuws lijkt me ook wel leuk.

Ideeén genoeg. Nu nog de uitvoering.. :P Ik check iig regelmatig jou blog voor de nieuwste updates.

Advertisement

Gebruikers-avatar
Berichten: 270
Geregistreerd: 30 Dec 2012, 11:42

Re: Lichtkrant Surtronic FDS-132

Berichtdoor Rudi » 09 Jul 2013, 21:53

Heb er ondertussen een eenvoudige klok van gemaakt.
Tekst en uitleg op mijn Arduino blogje http://arduinows.blogspot.be/2013/07/fd ... w=flipcard

Temperatuursensor heb ik hier ergens liggen, mag nu niet zo moeilijk zijn.
Arduinows!
Why do computer programmers confuse Halloween with Christmas? Because Oct 31 = Dec 25
I got 01100011 problems but a bit ain't 00000001

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Lichtkrant Surtronic FDS-132

Berichtdoor pjh » 10 Jul 2013, 11:03

volgens mij heb ik nog een paar van deze LED-Matrices liggen. Mocht iemand interesse hebben...

Berichten: 77
Geregistreerd: 06 Okt 2012, 10:57

Re: Lichtkrant Surtronic FDS-132

Berichtdoor Beamer » 14 Aug 2013, 23:01

Ben inmiddels lekker aan het klooien geweest met het bordje, met dank aan Arduinows.
Ben nu aan het kijken hoe ik het handigst een 5 x 7 font kan packen. Standaard blijven bij gebruik van dit font 3 rijen leds ongebruikt. Ik ben aan het vogelen om naar 7 bits en 6 bits om te zetten en dat dan in bytes te gaan pakken.
Bij het gebruik van 6 bits voor een karakter heb je 1 rij spatie. Er kunnen dan precies 15 karakters op een regel.
In excel heb ik een en ander al helder, nu moet ik het nog omzetten naar een werkbare code.
Ik zit te denken aan het werken met een dubbele buffer.

Nuttige tips zijn altijd welkom, als ik vordering heb kom ik er op terug.

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Lichtkrant Surtronic FDS-132

Berichtdoor pjh » 15 Aug 2013, 21:08

Dit is een beetje een late reactie, maar ik heb mogelijk nog wel een tip.
Wanneer ik een Character-Set nodig heb voor een matrix-display, pak ik vaak de gratis "8x8 Pixel ROM Font Editor".
Na installatie vind je onder ../program files/pixelfont... veel voorbeelden. Eigenlijk alles wat je nodig hebt.

Het fijne van deze editor (overigens nooit een ander geprobeerd) is dat het kan exporteren naar C. Dan ben je met een "copy-pase" naar de Arduino-IDE klaar. Dus geen komma's zetten, punten weghalen.Het format is al goed. Zie plaatje hieronder.

Wat ook fijn is, is dat je de bitmap van 8x8 kunt draaien.
Er is een character/set met kleine letters, die zeker in een 5x7 past. Zie hieronder.
Hoop dat (iemand) wat aan deze tip heeft.

Hier de link naar de download-pagina: http://www.min.at/prinz/o/software/pixelfont/#download

Afbeelding

Berichten: 77
Geregistreerd: 06 Okt 2012, 10:57

Re: Lichtkrant Surtronic FDS-132

Berichtdoor Beamer » 15 Aug 2013, 21:25

Ja, die heb ik meer gezien, maar ik ben Mac gebruiker. Een font heb ik al van internet. Moest het alleen kantelen maar dat wil prima met wat handigheidjes in Excel. Nu wil ik alleen de 6 bits die ik nodig heb in zo min mogelijk bytes pakken.
Wordt vervolgd

Gebruikers-avatar
Berichten: 270
Geregistreerd: 30 Dec 2012, 11:42

l

Berichtdoor Rudi » 15 Aug 2013, 22:07

Beamer schreef:Ben inmiddels lekker aan het klooien geweest met het bordje, met dank aan Arduinows.
Ben nu aan het kijken hoe ik het handigst een 5 x 7 font kan packen. Standaard blijven bij gebruik van dit font 3 rijen leds ongebruikt. Ik ben aan het vogelen om naar 7 bits en 6 bits om te zetten en dat dan in bytes te gaan pakken.
Bij het gebruik van 6 bits voor een karakter heb je 1 rij spatie. Er kunnen dan precies 15 karakters op een regel.
In excel heb ik een en ander al helder, nu moet ik het nog omzetten naar een werkbare code.
Ik zit te denken aan het werken met een dubbele buffer.



Hoi, leuk dat je ook met de FDS132 aan de slag bent. Er is zeker nog heel veel experimenteer ruimte wat programmeren betreft al heb ik momenteel niet voldoende ervaring om al mijn ideeën naar code te vertalen. Veel vallen en opstaan. Maar dat maakt het ook leuk.
Ik hoop ooit een project als Parola naar dit bord om te kunnen zetten maar aan mijn huidig leertempo zal het een 10 jaren project worden vrees ik :(

Heb ondertussen ook een FDS185 kunnen aansturen, heeft nog iets meer leds, 3840 om precies te zijn 8-)

Beamer schreef: Nuttige tips zijn altijd welkom, als ik vordering heb kom ik er op terug.

Ik kijk er al naar uit. Sukses.
Arduinows!
Why do computer programmers confuse Halloween with Christmas? Because Oct 31 = Dec 25
I got 01100011 problems but a bit ain't 00000001

Berichten: 77
Geregistreerd: 06 Okt 2012, 10:57

Re: Lichtkrant Surtronic FDS-132

Berichtdoor Beamer » 04 Sep 2013, 19:30

Ik heb een programma van Arduinows misbruikt om met twee buffers verschillende teksten te plaatsen,
maar met en nu nog handmatige (Excell) byte packing begint het ergens op te lijken.
Zo af en toe heb ik wat tijd om dit door te ontwikkelen, maar alle goede dingen komen langzaam.


/*   
 Toont afwisselend de inhoud van twee buffers, waarbij  
 het eerste buffer steeds met willekeurige getallen wordt  
 gevuld en inhoud van het tweede buffer onveranderd blijft.   
 */

#include <SPI.h>

const int strobe = 10; // Arduino pinnen.
const int resred = 9;
const int row_c = 7;
const int row_b = 6;
const int row_a = 5;

#define FRAMEBUFFER_WIDTH 35  
#define FRAMEBUFFER_DEPTH 7  

unsigned char character_map[16*FRAMEBUFFER_DEPTH] = // de getal karakters.
{  
  0x0E,0x11,0x11,0x1F,0x11,0x11,0x11,                    // geef me een A
  0x0F,0x11,0x11,0x0F,0x05,0x09,0x11,                    // en een R , enzovoort
  0x07,0x09,0x11,0x11,0x11,0x11,0x0F,                    // D
  0x11,0x11,0x11,0x11,0x11,0x11,0x0E,                    // U
  0x1F,0x04,0x04,0x04,0x04,0x04,0x1F,                    // I
  0x11,0x13,0x15,0x19,0x11,0x11,0x11,                    // N
  0x0E,0x11,0x11,0x11,0x11,0x11,0x0E,                    // O
  0x04,0x04,0x04,0x04,0x04,0x00,0x04,                    // !
  0x0E,0x11,0x51,0xD1,0x5f,0x51,0x51,                    //Ar
  0x00,0x00,0x63,0x94,0x10,0x10,0xE0,                    //rd
  0x01,0x01,0x45,0x45,0x45,0x65,0x59,                    //du
  0x04,0x00,0x46,0xC4,0x44,0x44,0x4E,                    //in
  0x00,0x00,0xE3,0x14,0x14,0x14,0xE4,                    //no
  0x10,0x10,0x10,0x11,0x11,0x01,0x10,                    //o!
  0,0,0,0,0,0,0,
  0,0,0,0,0,0,0
};  
unsigned char framebuffer1[FRAMEBUFFER_WIDTH * FRAMEBUFFER_DEPTH] = {
  0}; // inhoud van een framebuffer = wat er naar de FDS132 wordt gestuurd.
unsigned char framebuffer2[FRAMEBUFFER_WIDTH * FRAMEBUFFER_DEPTH] = {
  0}; // 2 framebuffers. Ieder framebuffer is 245 bytes groot (35*7).
unsigned long startTijd = millis(); // huidige tijd sinds programma loopt.
unsigned long verstrekenTijd; // verstreken tijd.
int bufferSelect = 1; // beginnen met eerste framebuffer.
int beginPositie=12; // 0 = linksboven, 12 = 2e lijn, 23 = 3e lijn.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////                                      
void setup()
{  
  int i;
  unsigned char *p1=framebuffer1; // de waarde van framebuffer1 wordt gekopieerd naar het adres waar p1 naar wijst.
  unsigned char *p2=framebuffer2; // de waarde van framebuffer2 wordt gekopieerd naar het adres waar p2 naar wijst.
  randomSeed(analogRead(0)); // voedt de randomgenerator met uitgelezen waarde niet aangesloten analoge poort.
  pinMode (strobe, OUTPUT);
  pinMode (resred, OUTPUT);
  pinMode (row_c, OUTPUT);
  pinMode (row_b, OUTPUT);
  pinMode (row_a, OUTPUT);
  digitalWrite (strobe, HIGH);
  digitalWrite (resred, HIGH);
  SPI.setBitOrder(MSBFIRST);
  SPI.begin();

  for (i=0; i<FRAMEBUFFER_DEPTH; i++) // laadt de framebuffers.
  {                                    
    for (int getal = 0; getal <8; getal++) // getallen 0 t/m 9
    {  
      int positie = getal; //
      *(p1 + i*FRAMEBUFFER_WIDTH+beginPositie+positie) = character_map[FRAMEBUFFER_DEPTH*(getal)+i]; // eerste framebuffer laden met ARDUINO!'
      *(p2 + i*FRAMEBUFFER_WIDTH+beginPositie+positie) = character_map[FRAMEBUFFER_DEPTH*(getal+8)+i];   // tweede framebuffer laden met Arduino!
    }  
  }  
}   
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
void loop()
{  
  while (1)
  {  
    for (int row=0; row<7; row++)
    {  
      digitalWrite (resred, LOW);
      digitalWrite (strobe, LOW);
      setRow(row);                                           // selekteer de rij
      setDisp(row);                                          // toon de rij
      digitalWrite (resred, HIGH);
      digitalWrite (strobe, HIGH);
      delayMicroseconds (2000);
    }  
  }  
}  
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
void setRow (int row) // activeer rij <x>
{  
  digitalWrite (row_a, row & 1);
  digitalWrite (row_b, row & 2);
  digitalWrite (row_c, row & 4);
}  
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
void setDisp(int row) // lees rij per rij uit de framebuffers en stuur deze naar de FDS132.
{  
  int i;
  unsigned char *p1=framebuffer1; // wijst naar eerste framebuffer.
  unsigned char *p2=framebuffer2; // wijst naar tweede framebuffer.
  // wisselen van framebuffer zonder delay() functie te gebruiken
  verstrekenTijd = millis() - startTijd; // door de verstreken tijd te meten vanaf vastgelegde starttijd
  if (verstrekenTijd > 2000) // meer dan 2000 milliseconden later?
  {                                                      // indien ja, dan...
    verstrekenTijd = 0;                                   // zetten we de verstreken tijd terug op nul;
    startTijd = millis(); // beginnen met een nieuwe starttijd,
    if (bufferSelect == 1){
      bufferSelect = 2;
    }             // en wisselen niet alleen van framebuffer,
    else bufferSelect = 1;
    // willekeurig(); // maar laden het eerste buffer met willekeurige getallen.
  }  

  if (bufferSelect==1) // inhoud van het eerste framebuffer naar de FDS132
  {  
    for (i=FRAMEBUFFER_WIDTH-1; i>=0; i--) // tel af van 34 naar 0,
    {  
      SPI.transfer( *(p1 + row*FRAMEBUFFER_WIDTH + i) ); // en stuur inhoud naar de shiftregisters.
    }      
  }  
  else // tweede framebuffer naar het display
  {   
    for (i=FRAMEBUFFER_WIDTH-1; i>=0; i--) // tel af van 34 naar 0,
    {  
      SPI.transfer( *(p2 + row*FRAMEBUFFER_WIDTH + i) ); // en stuur inhoud naar de shiftregisters.
    }  
  }  
}  

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////     

void willekeurig() // zet willekeurige getallen in het eerste framebuffer.
{  
  int i;
  int willekeurigGetal;
  unsigned char *p1=framebuffer1; // het eerste framebuffer.
  for (int positie = 0; positie <10; positie++) // tien posities.
  {    
    willekeurigGetal = random(0,10); // genereer een willekeurig getal tussen 0 en 9.
    for (i=0; i<FRAMEBUFFER_DEPTH; i++)
    {                                                     // zet het getal op de juiste beginpositie in het framebuffer.
      *(p1 + i*FRAMEBUFFER_WIDTH+beginPositie+positie) = character_map[FRAMEBUFFER_DEPTH*willekeurigGetal+i];  
    }  
  }      
}  




Wordt vervolgd

Gebruikers-avatar
Berichten: 270
Geregistreerd: 30 Dec 2012, 11:42

Re: Lichtkrant Surtronic FDS-132

Berichtdoor Rudi » 05 Sep 2013, 19:56

Eigenlijk heb je een eigen font gemaakt met enkele karakters.

Heb zonet een gelijkaardige oefening gedaan. Eerst de karakters (het alfabet in hoofdletters) in Excel gevormd (heb ze mooi in 16 bytes kunnen krijgen) en daarna in een font editor aangemaakt. Vervolgens de karaktermap in de sketch geplaatst.
Ook nog FRAMEBUFFER_DEPTH van 7 naar 8 gewijzigd. Zo krijgen we nu afwisselend de eerste 13 en de laatste 13 karakters te zien.

Dit is het aangepaste stukje code in de sketch:

Code: Alles selecteren
#define FRAMEBUFFER_WIDTH 35 
#define FRAMEBUFFER_DEPTH 8 

unsigned char character_map[16*FRAMEBUFFER_DEPTH] = // letters A t/m Z, smal font.

0xE6,0x29,0xE9,0x2F,0x29,0xE9,0x0,0x0,              // A ...
0x98,0xA5,0x84,0x85,0xA5,0x98,0x0,0x0,              // :
0xF3,0x14,0x74,0x14,0x14,0xF3,0x0,0x0,              // :
0x9E,0x42,0x4E,0x42,0x42,0x82,0x0,0x0,              // :
0x49,0x4A,0x78,0x4B,0x4A,0x49,0x0,0x0,              // :
0x87,0x82,0x82,0x82,0x92,0x67,0x0,0x0,              // :
0x4A,0x4A,0x46,0x4A,0x52,0xD2,0x0,0x0,              // :
0x88,0xD8,0xA8,0x88,0x88,0x8B,0x0,0x0,              // ... M
0xC9,0x2B,0x2B,0x2D,0x2D,0xC9,0x0,0x0,              // N ...
0x1C,0xA5,0xA5,0x9D,0x85,0x04,0x0,0x0,              // :
0x73,0x94,0x94,0x74,0x92,0x95,0x0,0x0,              // :
0xDC,0x82,0x8C,0x90,0x90,0x8E,0x0,0x0,              // :
0xA5,0xA4,0xA4,0xA4,0x24,0x3C,0x0,0x0,              // :
0x14,0x14,0x14,0x54,0xB5,0x16,0x0,0x0,              // :
0xA5,0xA5,0x09,0x11,0x25,0x25,0x0,0x0,              // :
0xF4,0x84,0x43,0x22,0x12,0xF2,0x0,0x0               // ... Z

};



Afbeelding Afbeelding

Sinds de laatste update (een dynamisch tekst effect) op mijn Arduinows blog heb ik niet meer verder gewerkt aan code voor de led matrixdisplay.
Arduinows!
Why do computer programmers confuse Halloween with Christmas? Because Oct 31 = Dec 25
I got 01100011 problems but a bit ain't 00000001

Berichten: 77
Geregistreerd: 06 Okt 2012, 10:57

Re: Lichtkrant Surtronic FDS-132

Berichtdoor Beamer » 05 Sep 2013, 22:23

Ben een beetje aan het uitwerken wat het moet worden.

Ik probeer de structuur van binnen naar buiten op te zetten. De basis heb ik vanavond uitgewerkt. Ik wil eerst het plaatje compleet hebben voordat ik naar C ga. Stapje voor stapje en niet te veel in 1 keer, dan zie ik door de bomen even het bos niet meer. Dit is het idee :

int temp a,b // 2 tijdelijke bytes


a = eerste_karakter // eerste byte karakter 1
b = tweede_karakter // eerste byte karakter 2
b = b & 0b00000011 // filter twee laagste bits
b = b << 6 // schuif 6 bits naar links
a = a | b // voeg bits samen met een OR
packed_een = a // bewaar resultaat

a = tweede_karakter // eerste byte karakter 2
b = derde_karakter // eerste byte karakter 3
b = b & 0b00001111 // filter 4 laagste bits
b = b << 4 // schuif 4 bits naar links
a = a >> 2 // schuif 2 bits naar recht, die hadden we al
a = a | b // voeg bits samen met een OR
packed_twee = a // bewaar resultaat

a = derde_karakter // eerste byte karakter 3
b = vierde_karakter // eerste byte karakter 4
b = b & 0b00111111 // filter 6 laagste bits
b = b << 2 // schuif 2 bits naar links
a = a >> 4 // schuif 4 bits naar recht, die hadden we al
a = a | B // voeg bits samen met een OR
packed_drie = a // bewaar resultaat

teller_1 = teller_1 + 4 // verhoog index unpacked_buffer met 4
teller_2 = teller_2 + 3 // verhoog index packed_buffer met 3

dit 7 keer voor 7 bytes per karakter

deze cyclus wordt 11 keer doorlopen voor 44 letters

Er zijn dan 44 letters in 33 bytes gepackt.
Er blijft 1 karakter over voor de laatse byte, waarvan maar 6 bits zichtbaar zijn.

Nu stukje voor beetje naar een loop structuur. Weet niet of ik eerst alle bytes per karakter doe of per rij.

VorigeVolgende

Terug naar Overige hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 13 gasten