Stap 3: Hardware Hacking LCD stijl
Het duurt slechts zeven draden aan de interface van een LCD van de SPI aan de Discovery-bestuur. De signalen zijn macht, grond, SPI klok, SPI gegevens, chip selecteren, opdracht / gegevens, en reset. Als er slechts één apparaat op de bus SPI is dan het selecteren van chip zou hardwired voor altijd selecteren.
Klap bestaat uit een lijst de ontdekking pinnen die worden gebruikt in mijn broncode.
STM32F100RBT6B microcontroller
128-Kbyte Flash, 8-Kbyte RAM
P1 Naam functie
-------------------------------------------------
11 PC0 Analog In 1 (0 tot 3,0 volt)
12 PC1 Analog In 2
13 PC2 analoog In 3
14 PC3 Analog In 4
15 PA0 gebruiker knop op ontdekking
20 PA5 SPI1 SClk op LCD-
21 PA6 LCD Data = 1 / Cmd = 0
22 PA7 SPI1 MOSI aan LCD (SDA)
23 PC4 LCD Reset
24 PC5 LCD SCE (CS0)
25 PB0 BTN_UP
P2 Naam functie
-------------------------------------------------
1 PB10 USART3 Tx (Debug poort)
2 PB11 USART3 Rx (Debug poort)
3 PB12 BTN_LEFT
4 PB13 BTN_CENTER
5 PB14 BTN_RIGHT
6 PB15 BTN_DOWN
P3 Naam functie
-------------------------------------------------
4 PC8-Blue LED op ontdekking (100Hz TIM3_CH3)
5 PC9 groene LED op ontdekking
24 PB8 RC Servo Motor Out1 (50Hz TIM4_CH3)
25 PB9 RC Servo Motor Out2 (50Hz TIM4_CH4)
Ik heb twee verschillende types van de LCD verbinden met de ontdekking van bestuur tot nu toe. Één beeldscherm komt van Sparkfun en heet een Nokia 5110. De tweede display komt uit Mouser / elektronische assemblage. Verwijzigingen voor beide weergegeven volgen:
http://www.Mouser.com/productDetail/Electronic-assembly/EA-DOGS102B-6/?QS=XoD1gVtqLQulaqATGATNqA%3D%3D
http://www.Sparkfun.com/products/10168
Mijn doel was om een echt goedkoop grafisch LCD. De Sparkfun / Nokia LCD is 84 x 48 pixels en kost $10 dollar. De Mouser / EA display is 102 x 64 pixels en komt in drie smaken - het EA display kost $12.36.
De Sparkfun / Nokia lijkt oude overtollige spullen. Plus, er waren een heleboel negatieve opmerkingen over problemen met de LCD / board montage. Het display van de Nokia maakt gebruik van een zebra rubber ding aan de interface van het glas aan de PCB. De zebra-ding lijkt problemen worden veroorzaakt. De EA-display, aan de andere kant, is gloednieuw, meer pixels heeft (maar gebruikt een goofy geheugen layout), en duurder. Maar, voor mij, de doorschijnende blauwe LCD is gewoon zo sexy. Beide typen weergave zijn alleen-lezen. Er is geen feedback uit de weergave mogelijk. Lijkt sommige restrictie met behulp van een SPI interface voor het LCD-scherm. Mijn stem gaat met de vertoning van EA, hoewel het meer gewoon een beetje meer kosten.
De bijgevoegde broncode kan rijden beide type beeldscherm. Er is een #define in de buurt van de top in lcd.h waarin welke manier om te bouwen van de bron. Enkel de #define correct ingesteld en herbouwen / reflash om te schakelen tussen weergaven.
Rijden een beetje LCD echt toont een aantal van de mogelijkheden van de micro van de ARM.
- RAM-buffer in de micro houdt alle pixelgegevens. Denk aan het als een schaduw-RAM-buffer.
- De taak van de LCD in de OS behandelt het schaduw-RAM-buffer te sturen naar het LCD-scherm.
- De gehele LCD is herschreven in een tempo van 10Hz. Zou je echt ieder geval. De vernieuwingsfrequentie van de basisinstellingen voor de hardware LCD van de LCD-glas is ongeveer 50Hz.
- De LCD-taak stuurt één pagina (een pagina is één byte / 8 pixels hoog door X bytes / pixels lang waarbij X staat voor de pixelbreedte van het scherm) tegelijk. Dus, een 102 x 64 pixel display heeft acht pagina's waar elke pagina 102 bytes lang is.
- Het verzenden van één pagina tegelijk kunt het schaduw-RAM-geheugen worden "gemanipuleerd" alvorens wordt verzonden naar het LCD-scherm. Als voorbeeld kunnen het display omkeren 180 graden in de software indien nodig. Let op, sommige beeldschermen kunnen dit doen in hardware - maar elk beeldscherm schijnt om dit te doen anders. Kon ook flip zwart op wit op wit-op-zwart met behulp van software. Het is gewoon cool om het injecteren van veranderingen, zoals de pixels zijn klaar om te vliegen uit de SPI-poort te kunnen. Opmerking, alle LCD-foto's in deze instructible zijn met behulp van de functie voor het omkeren van software.
- De LCD-taak gebruikt de DMA om de gegevens naar het LCD-scherm. Terwijl de taak wacht de DMA om het te voltooien aanroepen "taskYIELD()" zo dat andere lagere prioriteitstaken kunnen werken. Dit is enorm, de micro is vrij om andere dingen doen terwijl het DMA-kanaal is spugen SPI data op volle snelheid. Opmerking, hogere prioriteitstaken zal automatisch de lcd taak voorrang.
- De bus SPI bedraagt 3MHz (Sparkfun weergave kan alleen handvat 4 MHz). Dus, een 102 byte pagina krijgt overgedragen in iets meer dan 300 microseconden! De EA-weergave kunnen veel hogere SPI-klok. Maar, er is geen reden tot haast - een hogere klok is meer gevoelig voor lawaai.
- Het gebruik van DMA-overdracht betekent dat alle 102 bytes (één pagina) worden overgebracht zonder een enkele onderbreking van de micro van de ARM. De DMA leest de RAM-buffer en houdt de SPI-poort 100% vastgelopen drukke tot gedaan verpakt - allemaal zonder de micro een beetje koehandel. De SPI-bytes worden verpakt zo perfect omdat dit alles op hardwareniveau gebeurt. Software zou nooit kunnen doen zo goed een baan zijn.
- Zodra een DMA pagina overdracht wordt gedaan, de LCD-taak de DMA-aanwijzer naar de volgende pagina past en het proces wordt herhaald totdat worden alle pagina's overgebracht.
- De EA LCD display heeft 8 pagina's en neemt amper 10ms over te dragen. Zie de onderstaande toepassingsgebied-plot.
- Gegeven de EA vertoning heeft 6528 pixels en we sturen hen 10 keer per seconde, de bandbreedte van de SPI naar het display bedraagt over 65kb/sec. Er is bijna geen belasting op de micro te houden het scherm bijgewerkt in dit tempo met de DMA het grootste deel van het werk doen! Blaast me weg. Dit soort xfer aan een LCD, zou een beetje Pic of Atmel chip stikken. Verdubbeling van de de refresh rate tot 20Hz wil alleen een lichte stijging in de CPU-belasting, als voorbeeld.