C LED Matrix 15x5 - Softwareverbesserung?

Jawaiica

Neues Mitglied
06. Nov. 2011
75
0
0
31
Hannover
Sprachen
Hallo Leute,

ich habe mir mal eine "tolle" LED Matrix zusammengebaut. Sie ist 5x15 "Pixel" groß und ich habe jetzt versucht ein wenig rum zu programmieren, was bisher auch super geklappt hat. Mir ist allerdings aufgefallen, dass mit meiner Methode zu viel Speicherplatz benötigt wird... Ich habe bisher jeden Buchstaben in eine Funktion geschrieben(z.B. void A() = A , void B() = B usw.) aber das ist 1. viel zu aufwendig und 2. wie ich schon sagte wohl zu verschwenderisch. Meine Frage ist jetzt, wie ihr euch wahrscheinlich schon vorstellen könnt, wie geht es anders?
Ich habe früher "ein wenig" mit C++ programmiert, aber ich weiß nicht, wie ich das mit der Port Programmierung machen soll, da ich hierfür PORTD und PORTC benutze.


MfG Jawaiica
 
Hi,

naja ich würde es angehen als waere es ein Zeichensatz für ein Dot Matrix LCD ...

also sprich, du machst dir für dein Display einfach eine große Tabelle und arbeitest aus dieser herraus :).


dann noch eine Tabelle (diese geht nun von 0x00 aus und nicht von Ascii '0' was 0x30 waere)... wenn du es von '0' haben willst musst du es entweder in deiner Ausgabe routine umbiegen (Achtung zwischen 9 und a kommen Sonderzeichen ...) aber nehmen wir mal das Beispiel von 0.

Code:
[FONT=Monospace][COLOR=#800000]const[/COLOR] [COLOR=#800000]unsigned[/COLOR] [COLOR=#800000]char[/COLOR] Font7x4[][[COLOR=#0000FF]4[/COLOR]]={
{[COLOR=#008080]0x1F[/COLOR],[COLOR=#008080]0x11[/COLOR],[COLOR=#008080]0x1F[/COLOR],[COLOR=#008080]0x00[/COLOR]},   [COLOR=#808080][I]//0[/I][/COLOR]
{[COLOR=#008080]0x09[/COLOR],[COLOR=#008080]0x1F[/COLOR],[COLOR=#008080]0x01[/COLOR],[COLOR=#008080]0x00[/COLOR]},
{[COLOR=#008080]0x17[/COLOR],[COLOR=#008080]0x15[/COLOR],[COLOR=#008080]0x1D[/COLOR],[COLOR=#008080]0x00[/COLOR]},
{[COLOR=#008080]0x11[/COLOR],[COLOR=#008080]0x15[/COLOR],[COLOR=#008080]0x1F[/COLOR],[COLOR=#008080]0x00[/COLOR]},
{[COLOR=#008080]0x1C[/COLOR],[COLOR=#008080]0x04[/COLOR],[COLOR=#008080]0x1F[/COLOR],[COLOR=#008080]0x00[/COLOR]},
{[COLOR=#008080]0x1D[/COLOR],[COLOR=#008080]0x15[/COLOR],[COLOR=#008080]0x17[/COLOR],[COLOR=#008080]0x00[/COLOR]},
{[COLOR=#008080]0x1F[/COLOR],[COLOR=#008080]0x15[/COLOR],[COLOR=#008080]0x17[/COLOR],[COLOR=#008080]0x00[/COLOR]},
{[COLOR=#008080]0x10[/COLOR],[COLOR=#008080]0x10[/COLOR],[COLOR=#008080]0x1F[/COLOR],[COLOR=#008080]0x00[/COLOR]},
{[COLOR=#008080]0x1F[/COLOR],[COLOR=#008080]0x15[/COLOR],[COLOR=#008080]0x1F[/COLOR],[COLOR=#008080]0x00[/COLOR]},
{[COLOR=#008080]0x1D[/COLOR],[COLOR=#008080]0x15[/COLOR],[COLOR=#008080]0x1F[/COLOR],[COLOR=#008080]0x00[/COLOR]},   [COLOR=#808080][I]//9
}
[/I][/COLOR][/FONT]

Code:
putcledmatrix(unsigned char deinZeichen)
{
// ne counter Variable
  unsigned char i;
// hier machst du eine for schleife (je nachdem wie du deine Tabelle aufbaust aber ein Beispiel waere wenn es Vertical aufgebaut ist z.b. ein 4x7 font ...  
  [COLOR=#b1b100]for[/COLOR] [COLOR=#009900]([/COLOR]i [COLOR=#339933]=[/COLOR] [COLOR=#cc66cc]0[/COLOR]; i < 4; i[COLOR=#339933]++[/COLOR][COLOR=#009900])[/COLOR]   [COLOR=#009900]
  {[/COLOR]    
     // hier werden nun bei jedem Durchlauf 8 Bits direkt geschrieben da der Font 7 hoch ist und 4 breit muss dass also 4 mal gemacht werden.
     // wichitg ist halt noch, dass du die Spalte deiner Matrix Enablest...

     // dann hier noch die komplette Spalte ausgeben und joar wenn das im Kreis laeuft solltest du dein Zeichen in dem Falle eine 0,
     // oder was du halt übergeben hast (0 - 9 sind nach der Tabelle oben möglich ..) auf deiner Matrix sehen 
     PORTSpaltex = Font7x4[deinZeichen][i];[COLOR=#009900]
  }[/COLOR]
}

So ich hoffe das ist nun verstaendlich ^^,
es ist eigentlich ganz einfach... wie gesagt das ist halt ein 7x4 Font ... könntest du natürlich auch erweitern auf größere Breiten .. oder eben Horizontal aufbauen ..


Aber ich denke die Idee kommt dabei rüber ^^(hoffe ich mal).


Gruß,
Manuel
 
Vielen Dank für die schnelle Antwort :)

Nachvollziehen kann ich das auf jeden Fall, allerdings hab ich es so mit dem Hexadezimalsystem :x kannst du oder wer anderes mir vielleicht kurz sagen, wieso "{0x1F,0x11,0x1F,0x00}" das Null ist? Ich habe grade mal gegooglet (nach Grundkenntnissen mit dem Hexadezimalsystem) aber wenn ich da rechne, sagt es mir nur noch weniger was^^


MfG Jawaiica
 
hmpf ^^


demnach kam das grund prinzip noch nicht an ^^

eine Null ist Ascii in hex 0x30 ... so das ist hierfür aber egal weil du willst ja "malen" ^^


Deswegen hatte ich erwaehnt das das ganze Printip was ich oben gepostet habe Vertical ist ^^ so die Null ergibt sich somit aus

0x1F, 0x11, 0x1F, 0x00 (in dem Beispiel halt .. das muss keine schöne Null sein :p) aber das kommt eben drauf an wie breit ein Pixel ist ...

so
Code:
0x1F ist in Bin = 0b00011111
0x11 ist in Bin = 0b00010001
0x1F ist in Bin = 0b00011111

also jetzt noch das ganze Vertical ... und somit ergibt sich (das ist ein 5x3 font)

Code:
0 0 0 0
0 0 0 0
0 0 0 0
[COLOR=#FF0000]1 1 1 [/COLOR]0
[COLOR=#ff0000]1[/COLOR] 0 [COLOR=#FF0000]1 [/COLOR]0
[COLOR=#ff0000]1[/COLOR] 0 [COLOR=#FF0000]1 [/COLOR]0
[COLOR=#ff0000]1 [/COLOR]0 [COLOR=#FF0000]1 [/COLOR]0
[COLOR=#FF0000]1 1 1 [/COLOR]0

so und deswegen ergibt das eine 0 ^^ wie gesagt ... schön oder nicht sei mal dahingestellt ... bei mir passte es gerade auf nem Display dass es ganz ok aussieht ^^
....

bei der 9 würde dass dan so aussehen ...

0x1D,0x15,0x1F,0x00

Code:
0x1D ist in Bin = 0b00011101
0x15 ist in Bin = 0b00010101
0x1F ist in Bin = 0b00011111

also ...
Code:
0 0 0 0
0 0 0 0
0 0 0 0
[COLOR=#FF0000]1 1 1 [/COLOR]0
[COLOR=#ff0000]1[/COLOR] 0 [COLOR=#FF0000]1 [/COLOR]0
[COLOR=#ff0000]1[/COLOR] [COLOR=#FF0000]1[/COLOR] [COLOR=#FF0000]1 [/COLOR]0
0 0 [COLOR=#FF0000]1 [/COLOR]0
[COLOR=#FF0000]1 1 1 [/COLOR]0

jetzt Verstanden ? :) dann bitte mal die 3 und die 7 Posten,

Gruß,
Manuel
 
0x11 => 0b00010001
0x15 => 0b00010101
0x1F => 0b00011111

und

0x10 => 0b00010000
0x10 => 0b00010000
0x1F => 0b00011111

:D Test bestanden? ^^ Ne aber das heißt ja, dass ich da auch ganz normal Binär schreiben kann oder(finde ich bisher einfacher zu lesen^^)

Jetzt muss ich nur noch Positionieren können, was mich wieder zu den Ports bringt :D Aber das werde ich wohl morgen erst machen^^

Vielen Dank für die Hilfe :)


MfG Jawaiica
 
Hi,

klar kannst du das binaer auch machen ... aber ich bin normal schreibfaul .. deswegen als hex :p

Wie gesagt das ist halt jetzt ein 5x3 font .. klar kann man das auch auf z.b. 8x5 oder so hochziehen (werden die Zeichen halt "schöner")..

Na Wenn du etwas Binaer hast .. ist es doch ein einfaches das umzudenken auf dein PORT.


Deine Ports beide als Ausgang schalten ...


DDRC = 0b11111111;
DDRD = 0b11111111;


PORTC = ...
PORTD = ...


je nachdem wie du die Matrix aufgebaut hast kannst du das bitmuster auch direkt anlegen ^^ wenn du die Spalten und Reihen z.b. direkt angebunden haettest (was ja mit deinen paar 2 Ports nicht geht ..) ...... joar

Gruß,
Manu
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)