- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: LED Matrix 8 x 8 AVR C

  1. #11
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    Anzeige

    Praxistest und DIY Projekte
    Kann man das so machen ?

    for (uint8_t i = 0 ; i < 50 ; i++)
    {


    for (uint16_t d = 0 ; d < 8 ; d++)
    {
    VRAM[d] = VRAM[d] + pgm_read_byte(&charMap[i][d]) * 0xFF; // ins Highbyte schreiben
    VRAM[d] = VRAM[d] + pgm_read_byte(&charMap[i][d]); // ins Lowbyte schreiben
    }


    ShiftVRAM();
    }
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  2. #12
    Erfahrener Benutzer Roboter-Spezialist Avatar von Thegon
    Registriert seit
    21.01.2011
    Beiträge
    562
    Die Frage ist: was genau machst du da?
    In welchem Zusammenhang wird das Codefragment verwendet, was soll es bewirken? Auch wäre gut, wenn man sieht, wie die Variablen deklariert sind.

    Und dieser Ausdruck
    Code:
    &charMap[i][d]
    ist, soweit ich mich jetzt auskenne, der Zugriff auf einen RAM-Speicherplatz, dessen Adresse in einem zweidimensionalen Array bestehend aus Pointern gespeichert ist. Ich glaube zwar, dass das prinzipiell funktioniert, ein Array aus Pointern zu machen, aber wozu?
    Es kann aber auch sein, dass ich das jetzt nicht richtig lese, aber dann wird mich jemand anders aus dem Forum hoffentlich korrigieren

    Grüße
    Thegon

  3. #13
    Benutzer Stammmitglied Avatar von Janiiix3
    Registriert seit
    29.11.2010
    Ort
    Hannover
    Alter
    33
    Beiträge
    48
    -.-* Sorry...

    Also ich habe jetzt vor meine Laufschrift so zu gestalten wie es "Mic" (zweiter Post) gemacht hat, sprich ich deklariere eine Variable als "uint16_t" und knalle dort meine Zeichen rein ("Low Byte | High Byte") Das hat mit zwei Zeichen (fest programmiert) auch schon funktioniert.

    Nun möchte ich es so machen, dass ich die Zeichen aus meinem "8 Byte" Zeichensatz in den "uint16_t" Speichere (erstes Zeichen "Low Byte [0-7], zweites Zeichen "High Byte [8-15])

    So sehen meine zwei "fest programmierten" Zeichen aus

    uint16_t VRAM[16] = {0xE7FF,0xE7FF,0xE7C3,0xE799,0xE781,0xE79F,0xE7C3} ;...

    Mit einer Funktion wollte ich das "automatisieren" so das ich halt einen String ausgeben kann, sprich...

    DisplayString("Test")...
    ShiftVram();

    Ich hoffe das war jetzt verständlich ?
    __________________________________________________ _________________
    /*Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.*/
    ( <-- Das ist Glubschie, er ist nett )

  4. #14
    Erfahrener Benutzer Roboter-Spezialist Avatar von Thegon
    Registriert seit
    21.01.2011
    Beiträge
    562
    Ich denke Mic wird besser Auskunft geben können über seinen Vorschlag als ich, aber ich versuche es mal:

    Als erstes wird man sich einmal auf eine Scroll-Richtung festlegen müssen, weil bei dieser Methode (16bit VRAM) ist das fest im Code verankert.
    Und dann:
    Code:
    VRAM[d] = VRAM[d] + pgm_read_byte(&charMap[i][d]) * 0xFF; // ins Highbyte schreiben
                VRAM[d] = VRAM[d] + pgm_read_byte(&charMap[i][d]); // ins Lowbyte schreiben
    sowohl ins High-Byte als auch ins Low-Byte zu schreiben ist ja nicht erwünscht. Je nach dem ob man nach links oder rechts scrollt muss man eben rechts (Low-Byte) oder links (high-Byte) "nachfüllen" mit Information, sprich neuen Zeichen.

    Und dann muss das Programm irgendwie zeitgesteuert werden, weil wenn man alles in eine Schleife schreibt, dann wird ja alles in einem Rutsch durchgespielt und man sieht nix.

    Prinziell wird der Ablauf des Programms so ausschauen: (unter der Annahme, dass nach links geshiftet wird, was Sinn macht, weil wir von links nach rechts lesen)
    Als erstes schreiben wir ein Zeichen in das Lowbyte des VRAM (also jeweils ein Byte in jede Zeile) und legen das Highbyte (aller 8 Zeilen, nacheinander -> Multiplexing) auf die Anzeige.

    Ein Timer shiftet jetzt den VRAM um 1 nach links, und es wird erneut das Highbyte angezeigt. Jetzt ist ja bereits ein Bit, das wir am Anfang in das Lowbyte geschrieben haben, zum Highbyte gewandert, d.h. man sieht die erste Spalte des kommenden buchstaben. Das macht er 8 mal, bis der Buchstabe vollständig angezeigt wird. Beim Achten mal wird eine zusätzliche Funktion aufgerufen (heißt, soweit ich das verstanden habe, check_usb, vielleicht aber auch nicht?) Jetzt ist ja das Lowbyte komplett leer (weil beim shiften wird immer an den frei gewordenen Platz 0 gesetzt). Wenn man jetzt also das neue Low-Byte einfach dazuaddiert, dann nehmen die neuen Bytes genau die frei gewordenen 8 bit ein. Und jetzt kann wieder geshiftet und angezeigt werden, 8 mal, bis das Lowbyte wieder leer ist. Dann muss wieder nachgefüllt werden usw.

    Soweit das Prinzip. Wie man das jetzt in den Programmcode hineinbastelt, den du verwenden möchtst, hab ich mir jetzt nicht angeschaut.

    Ich meine es ist aber im Beitrag #6 dieses Threads von Mic recht gut beschrieben.

    Mehr weiß ich jetzt auch nicht dazu zu sagen...

    Grüße
    Thegon

  5. #15
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Das hat mit zwei Zeichen (fest programmiert) auch schon funktioniert.
    ... und das ist das Ergebniss von gefühlt endloser privater Beratung, die ich total hasse, weil das fürs RN-Forum und die Allgemeinheit überhaupt keinen Nutzen hat. (Wollte ich nochmals betonen!)


    Mehr weiß ich jetzt auch nicht dazu zu sagen...
    Weil's das im Wesenlichen auch ist, was man dazu sagen kann. Schön, wie du meinen Ansatz aufgreifst und zu Ende denkst:)


    Was genau macht diese Deklaration ? (prog_uint8_t * fnt = (prog_uint8_t *) font; )
    Das ist aus dem Laufschrift-Code von ELO und wurde von mir ungeprüft übernommen:
    prog_uint8_t * fnt = (prog_uint8_t *) font; /* Zeiger auf den Zeichensatz im Flash */

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. LED Matrix
    Von Zwerwelfliescher im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 02.09.2011, 19:54
  2. LED Matrix
    Von Tanne123 im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 3
    Letzter Beitrag: 13.10.2010, 22:20
  3. LED MATRIX
    Von Beta im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 01.06.2009, 21:47
  4. LED Matrix Baustein
    Von karlmonster im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 07.04.2008, 19:57
  5. LED Matrix
    Von .Johannes. im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 30.08.2006, 21:29

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress