Voor een LED display heb ik een matrix gedeclareerd met 62 characters. Een character bestaat uit 8 rijen, en 5 kolommen.


const unsigned short alphabet[62][5] = {
       {0xFF,  0xFF,   0xFF,   0xFF,   0xFF},           // SPC
       {0xFF,  0xFF,   0x05,   0xFF,   0xFF},           // !
       {0x39,  0xD7,   0xEF,   0xD7,   0x39},           // " << NOT IMPLEMENTED >>
       {0xD7,  0x01,   0xD7,   0x01,   0xD7},           // #
       {0xDF,  0xAB,   0x01,   0xAB,   0xF7},           // $
       {0x3B,  0x37,   0xEF,   0xD9,   0xB9},           // %
       {0x93,  0x6D,   0x6D,   0x93,   0xED},           // &
       {0xFF,  0x3F,   0xFF,   0xFF,   0xFF},           // '
       {0xC7,  0xBB,   0x7D,   0x7D,   0xFF},           // (
       {0xFF,  0x7D,   0x7D,   0xBB,   0xC7},           // )
       {0xAB,  0xC7,   0x01,   0xC7,   0xAB},           // *
       {0xEF,  0xEF,   0x83,   0xEF,   0xEF},           // +
       {0xFF,  0xF5,   0xF3,   0xFF,   0xFF},           // ,
       {0xEF,  0xEF,   0xEF,   0xEF,   0xEF},           // -
       {0xFF,  0xF9,   0xF9,   0xFF,   0xFF},           // .
       {0xFB,  0xF7,   0xEF,   0xDF,   0xBF},           // /
       {0x83,  0x7D,   0x7D,   0x7D,   0x83},           // 0
       {0xDD,  0xBD,   0x01,   0xFD,   0xFD},           // 1
       {0xBD,  0x79,   0x75,   0x6D,   0x9D},           // 2
       {0x7B,  0x7D,   0x5D,   0x4D,   0x33},           // 3
       {0xCF,  0xAF,   0x6F,   0xEF,   0x01},           // 4
       {0x0B,  0x5D,   0x5D,   0x5D,   0x63},           // 5
       {0x83,  0x6D,   0x6D,   0x6D,   0xB3},           // 6
       {0x79,  0x77,   0x6F,   0x5F,   0x3F},           // 7
       {0x93,  0x6D,   0x6D,   0x6D,   0x93},           // 8
       {0x9B,  0x6D,   0x6D,   0x6D,   0x83},           // 9
       {0xFF,  0x93,   0x93,   0xFF,   0xFF},           // :
       {0xFF,  0x95,   0x93,   0xFF,   0xFF},           // ;
       {0xEF,  0xD7,   0xBB,   0x7D,   0xFF},           // <
       {0xD7,  0xD7,   0xD7,   0xD7,   0xD7},           // =
       {0xFF,  0x7D,   0xBB,   0xD7,   0xEF},           // >
       {0xBF,  0x7F,   0x65,   0x5F,   0x9F},           // ?
       {0x83,  0x6D,   0x55,   0x6D,   0x8B},           // @
       {0xC1,  0xB7,   0x77,   0xB7,   0xC1},           // A
       {0x01,  0x6D,   0x6D,   0x6D,   0x93},           // B
       {0x83,  0x7D,   0x7D,   0x7D,   0xBB},           // C
       {0x01,  0x7D,   0x7D,   0xBB,   0xC7},           // D
       {0x01,  0x6D,   0x6D,   0x6D,   0x7D},           // E
       {0x01,  0x6F,   0x6F,   0x6F,   0x7F},           // F
       {0x83,  0x7D,   0x65,   0x6D,   0xA3},           // G
       {0x01,  0xEF,   0xEF,   0xEF,   0x01},           // H
       {0x7D,  0x7D,   0x01,   0x7D,   0x7D},           // I
       {0xF3,  0x7D,   0x7D,   0x03,   0x7F},           // J
       {0x01,  0xEF,   0xD7,   0xBB,   0x7D},           // K
       {0x01,  0xFD,   0xFD,   0xFD,   0xFD},           // L
       {0x01,  0xBF,   0xDF,   0xBF,   0x01},           // M
       {0x01,  0xBF,   0xDF,   0xEF,   0x01},           // N
       {0x83,  0x7D,   0x7D,   0x7D,   0x83},           // O
       {0x01,  0x6F,   0x6F,   0x6F,   0x9F},           // P
       {0x83,  0x7D,   0x75,   0x79,   0x81},           // Q
       {0x01,  0x6F,   0x6F,   0x6F,   0x91},           // R
       {0x9B,  0x6D,   0x6D,   0x6D,   0xB3},           // S
       {0x7F,  0x7F,   0x01,   0x7F,   0x7F},           // T
       {0x03,  0xFD,   0xFD,   0xFD,   0x03},           // U
       {0x07,  0xFB,   0xFD,   0xFB,   0x07},           // V
       {0x01,  0xFB,   0xF7,   0xFB,   0x01},           // W
       {0x39,  0xD7,   0xEF,   0xD7,   0x39},           // X
       {0x3F,  0xDF,   0xE1,   0xDF,   0x3F},           // Y
       {0x79,  0x75,   0x6D,   0x5D,   0x3D},           // Z
       {0xFF,  0x01,   0x7D,   0x7D,   0xFF},           // [
       {0xBF,  0xDF,   0xEF,   0xF7,   0xFB},           // \
       {0xFF,  0x7D,   0x7D,   0x01,   0xFF}            // ]
       };

Nu leest de waarde alphabet[61][n] echter altijd 0x00! Ook kan ik gewoon de declaratie veranderen in alphabet[61][5] en dan krijg ik geen compile error. Blijkbaar kan een array niet groter zijn dan 61 rijen? (ik heb wel 3x nageteld/gerekend/beredeneerd: het zijn echt 62 entries)

Komt iemand dat bekend voor?

Ik zie ook dat de C parser van dit forum de laatste regel van de tabel niet meer als table-entry ziet. :O

hahaha, mede dankzij de parser van CO al opgelost! Blijkbaar betekent het character "\" zoiets als "ignore newline", dus de regel eronder (horender bij character "]" werd dus als comment gezien!

Prachtig! :)

[Bericht gewijzigd door Henry S. op (90%)]

Je zal wat meer informatie moeten geven over de PIC die je gebruikt. De maximale hoeveelheid datageheugen die je kan gebruiken is immers afhankelijk van de PIC.

Daarnaast moet je meestal het linker script aanpassen indien je variabelen wil gebruiken die groter zijn dan 256 bytes. Op http://www.dwengo.org/nl/tips-tricks/large-variables staat een voorbeeldje van hoe dit moet voor een PIC18F4550 in C-code.

Als de rij niet variabel moet zijn, zoals in jouw geval dan kan je het in het programmageheugen opslaan en kan je nog grotere tabellen maken zoals je zelf reeds constateerde.

edit: maar het bleek dus een probleem bij het parsen.

Daar zat ik ook aan te denken pikachuf, maar het lag dus aan iets heel doms. :) Toch bedankt.

Ik ben er puur achter gekomen door de C parser van dit forum. In mijn programmeeromgeving had de regel niet de kleur van een comment, dus heb het daar niet gemerkt.

[Bericht gewijzigd door m00 op (47%)]

Tip: Je kunt het geheugen gebruik door twee delen door unsigned char's te gebruiken.... Als dat niet in 1x werkt, moet je even melden waarom je denkt dat het niet werkt....

Een short is gelijk aan een char bij MikroC rew, beide 8 bits.

Je kunt die hele array, als je hem tenminste niet via de code aan hoeft te passen (lijkt me niet), ook in flash zetten. Geheugen is schaars, flash heb je meestal meer dan genoeg. Wat je er precies voor moet zetten voor jouw compiler weet ik niet, ik gebruik altijd AVR's.

\ betekent niet ignore new line, het is de standaard escape sequence, je kan er diverse control characters mee genereren zoals bells, tabs, newlines. Als het teken na de \ niets betekent wordt het genegeerd. Om een \ te krijgen moet je \\ neerzetten.

[Bericht gewijzigd door maartenbakker op (21%)]