Realtime OS / LCD på $12 Discovery ombord (3 / 6 steg)
Steg 3: Hårdvara hacka LCD-stil
Det tar bara sju trådar gränssnittet en SPI LCD till Discovery styrelsen. Signalerna är makt, marken, SPI klocka, SPI data, chip Välj, kommandot / data och Återställ. Om bara en enhet är på SPI-bussen då chip Välj kan vara hårdkodade för alltid Markera.
Slag är en listor Discovery stiften som används i min källa koden.
STM32F100RBT6B mikrokontroller
128-Kbyte Flash, 8-Kbyte RAM
P1 Namn funktion
-------------------------------------------------
11 PC0 Analog i 1 (0 till 3,0 volt)
12 PC1 Analog i 2
13 PC2 Analog i 3
14 PC3 Analog 4
15 PA0 användare knappen på Discovery
20 PA5 SPI1 SClk till LCD
21 PA6 LCD Data = 1 / Cmd = 0
22 PA7 SPI1 MOSI till LCD (SDA)
23 PC4 LCD-Reset
24 PC5 LCD SCE-FÖRENINGEN (CS0)
25 PB0 BTN_UP
P2 Namn funktion
-------------------------------------------------
1 PB10 USART3 Tx (Debug Port)
2 PB11 USART3 Rx (Debug Port)
3 PB12 BTN_LEFT
4 PB13 BTN_CENTER
5 PB14 BTN_RIGHT
6 PB15 BTN_DOWN
P3 Namn funktion
-------------------------------------------------
4 PC8 blå LED på Discovery (100Hz TIM3_CH3)
5 PC9 grön lysdiod på Discovery
24 PB8 RC Servo Motor Out1 (50Hz TIM4_CH3)
25 PB9 RC Servo Motor Out2 (50Hz TIM4_CH4)
Jag har haft två olika LCD typer ansluta till Discovery styrelsen hittills. En bildskärm kommer från Sparkfun och kallas en Nokia 5110. Andra visningen kommer från råttfångare / elektronik. Länkar för båda visar följande:
http://www.Mouser.com/productDetail/Electronic-Assembly/EA-DOGS102B-6/?QS=XoD1gVtqLQulaqATGATNqA%3D%3D
http://www.Sparkfun.com/products/10168
Mitt mål var att hitta en riktigt billig grafisk LCD. Sparkfun / Nokia LCD är 84 x 48 bildpunkter och kostar $10 dollar. Råttfångare / EA display är 102 x 64 pixlar och finns i tre smaker - EA visningen kostar $12.36.
Sparkfun / Nokia verkar som gamla överskott grejer. Plus, det fanns en hel del negativa kommentarer om problem med LCD / styrelse montering. Displayen i Nokia använder en zebra gummi sak gränssnittet glas att PCB. Zebra sak verkar orsaka problem. EA displayen, å andra sidan, är helt ny, har fler pixlar (men använder en fånig minne layout), och kostar mer. Men för mig är genomskinlig blå LCD-skärmen är bara så sexig. Både display typer är skrivskyddade. Det går ingen feedback från displayen. Verkar vissa begränsningar med hjälp av ett SPI gränssnitt till LCD-skärmen. Min röst går EA-displayen även om det kostar mer bara lite mer.
Bifogade källkoden kan köra antingen typ av display. Det finns en #define högt upp i lcd.h som anger vilken väg att bygga källan. Bara #define korrekt inställda och återuppbygga / reflektera för att växla mellan skärmar.
Kör en liten LCD verkligen visar några av ARM mikro förmåga.
- RAM-buffert i mikro innehar alla pixeldata. Se det som en shadow RAM-buffert.
- LCD uppgiften i OS hanterar skickar shadow RAM-buffert till LCD-skärmen.
- Hela LCD är omskrivet i takt 10Hz. Kunde vara något som verkligen. LCD grundläggande maskinvara uppdateringsfrekvensen för LCD glaset är runt 50Hz.
- LCD uppgiften skickar en sida (en sida är en byte / 8 pixlar hög av X byte / pixlar lång där X är displayen pixelbredd) på en gång. Så har en 102 x 64 pixlar åtta sidor där varje sida är 102 byte lång.
- Skicka en sida i taget kan shadow ram att "manipulera" innan de skickas till LCD-skärmen. Som ett exempel, kan den vara Invertera 180 grader i programvaran om det behövs. Observera att vissa skärmar kan göra detta i hårdvara - men varje display verkar göra detta annorlunda. Kunde också flip svart på vitt till vitt på svart med programvara. Det är bara cool för att kunna injicera förändringar eftersom pixlarna är redo att flyga ut ur hamnen SPI. Obs, alla LCD bilder i denna instructible är med hjälp av programvara Invertera funktionen.
- LCD-uppgiften använder DMA för att överföra data till LCD-skärmen. Medan uppgiften väntar DMA att slutföra det fungerar samtal "taskYIELD()" så att andra lägre prioriterade uppgifter kan. Detta är enormt, mikro är fri att göra andra saker medan DMA-kanalen är spotta ut SPI data i full fart. Observera att högre prioriterade uppgifter kommer att föregripa LCD-aktiviteten automatiskt.
- SPI bussen kör på 3MHz (Sparkfun display kan bara hantera 4 MHz). Så, en 102 byte sida får överföras i drygt 300 mikrosekunder! EA displayen klarar mycket högre SPI klocka. Men, det är ingen brådska - en högre klocka är mer känsliga för buller.
- Använda DMA överföring betyder alla 102 byte (en sida) överförs utan ett enda avbrott i ARM mikro. Den DMA läser RAM-buffert och håller SPI port 100% fastnat packad upptagen tills gjort - allt utan hassling micro ett skvatt. SPI-byte är packade så perfekt eftersom detta sker på maskinvarunivå. Programvaran skulle aldrig kunna göra så bra ett jobb.
- När en DMA sidan överföring är gjort, LCD uppgift justerar DMA pekaren till nästa sida och processen upprepas tills överförs alla sidor.
- EA LCD-displayen har 8 sidor och tar knappt 10 MS att överföra. Se omfattningen handlingen nedan.
- Med tanke på EA display har 6528 pixlar och vi skickar dem 10 gånger per sekund, SPI bandbredden till displayen kör på över 65kb/sek. Med DMA gör huvuddelen av arbetet finns det nästan ingen belastning i mikro att hålla visningen uppdateras i denna takt! Blåser mig bort. Detta slags xfer till en LCD skulle kvävas lite Pic eller Atmel chip. Fördubbling av uppdateringsfrekvensen till 20Hz skulle lägga till endast en liten ökning i CPU belastning, som ett exempel.