OK, lite mer erfarenhet från verkligheten:
Viktigaste rutin är såklart en som kan överföra "videominnet" till skärmen. Och här kommer det en grej: Det kan vara en del av skärmen - åt gången.
Näst viktigaste rutin är en som kan plotta en pixel i videominnet. När man har den klar kan man göra allt annat. Viktigt är att parameterna till den rutin kan gå utanför det befintliga videominnesområde. Detta görs med en if() sats som helt enkelt kolla om X & Y är inom ytan, är endera utanför sker det ingen plotning.
Om vi nu låtsas att det finns RAM för 1/4-del av det behövliga "videominne" ritar man hela bilden, överför den del som videominnet tillåter, ritar igen och överför nästa bit osv. många gångar nog till att en komplett uppdatering kan ske. I detta fall 4 gg.
Kod: Markera allt
void Pixel_Set(_SINT Pos_X, _SINT Pos_Y, _UBYTE Colour, _UWORD* Destination)
{
_UWORD Colour_Bit, Colour_Mask, Offset;
if((Pos_X >= 0) && (Pos_X < 80) && (Pos_Y >= 0) && (Pos_Y < 8))
{
// (Pos_X % 4) + (Pos_X / 4)*16 + (3-(Pos_Y % 4))*4
// Legal coordinates!
if(Pos_Y > 3) Colour_Bit = 0x0010; else Colour_Bit = 0x0080; // For this exakt project
Colour_Mask = ~Colour_Bit;
if(!Colour) Colour_Bit = 0x0000;
Offset = (Pos_X & 0x0003) + ((Pos_X >> 2) * 16) + ((3 - (Pos_Y & 0x0003)) * 4);
*(Destination + Offset) = (*(Destination + Offset) & Colour_Mask) | Colour_Bit;
}
}
Denna kodsnudd är "live" från den nya generation av DU KÖR FÖR FORT-skylten som i högsta grad är en verklig produkt. Det viktiga är inte hur man i detta fall styr minnespixlarna (i detta fall anpassat till LED-moduler) men att pixlar utanför det arbetsområde som finns kastas.
Med pixel-set rutinen kan man utveckla en "rita linje"-rutin för att rita boxar osv. Tecken gör jag vid att ha en total teckentabell i ROM som pixelgrafik. Är en bit '1' när den scannas X och Y kallas Pixel_Set() med rätt X & Y. Teckentabellens storlek är såklart beroende på storleken på tecken i pixlar, för de vanliga 5x7 räcker det med bytes men jag har gjort tabeller med unsigned long, alltså 18x31 storlek också.
Så det är inte speciellt besvärligt - men vill man ha "live" uppdatering av mätvärden är det en del saker man ska fundera på.
* Minne nog för hela displayen är önskvärd - men man kan ju trixa.
* En total uppdatering ska kunde ske med 3 Hz hastighet för att ögat ska "gilla det" som "live uppdatering".
* Om man ritar nya skärmen i fler delar
måste man använda samma värden fram till hela skärmen är uppdaterat komplett.
Så det kan - rent teknisk - lösas med en Arduino men om den kan hinna med att uppdatera snabbt nog och om det finns plats nog för teckentabeller osv är jag synnerligen tveksam till.
Ett mycket minimalt projekt av denna typ fyller i den 50MHz 32-bit µC jag använder runt 20,5kWord, alltså 82kB, då med en 16-bit teckentabell. I det projekt var det en tidtagningssystem med tecken som var 6x16 och teckentabellen hade enbart '0'-'9' (i 3 uppsättningar) med samt ':' och '-'. Så det var ett cut-to-the-bone projekt i minnesbehov.
Och dessa behov känns inte som att en Arduino är det rätta val - men Arduino är ju också tänkt som ett enkelt ingångssteg och till att lära sig att jobba med "riktiga" µC-system. Så det kanske är dags att ta steget uppåt? Vill man använda Atmel finns det ATmega med minne och pinnar nog för detta och man kan väl skrämma upp dom lite i hastighet också, då ska det nog fungera.