Étape 3: Hardware Hacking Style LCD
Il faut seulement sept fils d’interfacer un LCD de SPI à la Commission de la découverte. Les signaux sont données SPI, horloge SPI, au sol, puissance, puce, sélectionnez, commande / données et reset. Si seulement un seul appareil est sur le bus SPI alors la puce, sélectionnez pourrait toujours être câblé pour le sélectionner.
Blow est un listes les broches de découverte qui sont utilisés dans mon code source.
Microcontrôleur STM32F100RBT6B
Flash de 128 Ko, 8 Ko de RAM
P1 Fonction nom
-------------------------------------------------
Analog PC0 11 à 1 (0 à 3,0 Volts)
PC1 12 analogique à 2
Analog PC2 13 à 3
14 PC3 analogique à 4
PA0 15 bouton utilisateur découverte
20 PA5 SPI1 SClk pour LCD
PA6 21 LCD données = 1 / Cmd = 0
22 PA7 SPI1 MOSI pour LCD (SDA)
PC4 23 LCD Reset
PC5 24 LCD SCE (CS0)
PB0 25 BTN_UP
P2 Fonction nom
-------------------------------------------------
1 PB10 USART3 Tx (Port de débogage)
PB11 2 USART3 Rx (Port de débogage)
PB12 3 BTN_LEFT
PB13 4 BTN_CENTER
5 PB14 BTN_RIGHT
PB15 6 BTN_DOWN
P3 Fonction nom
-------------------------------------------------
4 LED PC8 bleu sur Discovery (TIM3_CH3 100Hz)
5 PC9 vert allumée découverte
24 PB8 RC Servo moteur Out1 (TIM4_CH3 50Hz)
25 PB9 RC Servo moteur Out2 (TIM4_CH4 50Hz)
J’ai eu deux types différents de LCD branchez sur la carte de découverte jusqu'à présent. Un seul affichage provient de Sparkfun et est appelé un Nokia 5110. Le deuxième écran vient de Mouser / assemblage électronique. Liens pour les deux affiche suivre :
http://www.Mouser.com/ProductDetail/Electronic-assembly/EA-DOGS102B-6/?QS=XoD1gVtqLQulaqATGATNqA%3D%3D
http://www.Sparkfun.com/Products/10168
Mon but était de trouver un LCD graphique vraiment peu coûteux. Le Sparkfun / LCD Nokia est de 84 x 48 pixels et coûte 10 millions de dollars. Le Mouser / affichage EA est de 102 x 64 pixels et est disponible en trois saveurs - l’affichage EA coût 12,36 $.
Le Sparkfun / Nokia semble vieux trucs excédentaires. De plus, il y avait beaucoup de commentaires négatifs au sujet des problèmes avec l’écran LCD / montage de la société. L’écran du Nokia utilise une chose de caoutchouc de zèbre à la vitre au CCP. La chose de zèbre semble poser des problèmes. L’affichage EA, d’autre part, est tout neuf, a plus de pixels (mais utilise une mise en page mémoire goofy), et coûte plus cher. Mais, pour moi, le LCD bleu translucide est tellement sexy. Les deux types d’affichage sont en lecture seule. Il n’y a aucun retour d’information de l’affichage possible. Semble une restriction en utilisant l’interface SPI à l’écran LCD. Mon vote va avec l’affichage de l’ÉE, même si ça coûte un peu plus.
Le code source attaché peut conduire soit le type d’affichage. Il y a un #define près du sommet en lcd.h qui définit de quelle manière de construire la source. Il suffit de correctement réglé le #define et reconstruire / reflasher pour basculer entre les affichages.
Conduire un petit écran LCD montre vraiment certains de la capacité de la micro de bras.
- Tampon de RAM dans le micro contient toutes les données de pixel. Pensez-y comme un tampon de shadow RAM.
- La tâche de l’écran LCD du système d’exploitation gère l’envoi du tampon de RAM d’ombre à l’écran LCD.
- L’écran entier est réécrite à une fréquence de 10Hz. Peut être n’importe quel taux vraiment. La fréquence de rafraîchissement écran LCD matériel de base du verre LCD est autour de 50Hz.
- La tâche de LCD envoie une page (une page correspond à un octet / 8 pixels de haut par X octets / pixels long où X est la largeur en pixels de l’écran) à la fois. Ainsi, un écran de 102 x 64 pixels a huit pages où chaque page est 102 octets de long.
- Envoi d’une page à la fois permet à la ram de l’ombre à « manipuler » avant d’être envoyé à l’écran LCD. À titre d’exemple, l’affichage peut être interverti 180 degrés dans le logiciel si nécessaire. Noter que certains écrans peuvent faire dans matériel - mais, chaque affichage semble le faire différemment. Pourrait aussi flip noir sur blanc à blanc sur noir à l’aide de logiciels. C’est juste cool d’être en mesure d’injecter des changements comme les pixels s’apprêtent à voler hors de la port SPI. Note, toutes les images de LCD dans ce sont instructible en utilisant la fonction invert de logiciel.
- La tâche de LCD utilise le DMA pour transférer les données sur l’écran LCD. Alors que la tâche est en attente pour le DMA de l’achever appels « taskYIELD() », alors que d’autres tâches de priorité inférieur peuvent ne fonctionnent. C’est énorme, le micro est libre de faire d’autres choses alors que le canal DMA est crachant des données SPI à pleine vitesse. Notez que les tâches prioritaires plus vont préempter la tâche lcd automatiquement.
- Le bus SPI est cadencé à 3MHz (affichage Sparkfun ne peut gérer 4 MHz). Ainsi, une page 102 octets soit transférée en un peu plus de 300 microsecondes ! L’affichage de l’EA peut traiter beaucoup plu horloge SPI. Mais, il n’y a pas d’urgence - une horloge plus élevée est plus sensible au bruit.
- En utilisant le transfert DMA désigne que tous les 102 octets (une page) sont transférées sans une seule interruption du micro bras. Les DMA lectures du tampon de RAM et maintient le SPI port 100 % coincé emballé occupé jusqu’au fait - tout cela sans harceler le micro un peu. Les octets SPI sont emballés ainsi parfaitement parce que tout cela est fait au niveau du matériel. Logiciel ne serait jamais capable de faire aussi bien un travail.
- Une fois le transfert DMA page est fait, la tâche de LCD ajuste le pointeur DMA sur la page suivante et le processus se répète jusqu'à ce que toutes les pages sont transférés.
- L’écran LCD de EA a 8 pages et prend un peu moins de 10ms à transférer. Voir l’intrigue portée ci-dessous.
- Compte tenu de l’évaluation environnementale affichage a 6528 pixels et nous leur envoyons 10 fois par seconde, la largeur de bande SPI à l’écran tourne à plus de 65 Ko/s. Avec le DMA faisant le gros du travail il n’y a pratiquement aucune charge sur le micro pour garder l’affichage mis à jour à ce rythme ! Me surprend. Ce genre de xfer pour un LCD serait étouffer un petit Pic ou Atmel puce. Doubler le la fréquence de rafraîchissement de 20Hz ajouterait qu’une légère augmentation dans la charge CPU, à titre d’exemple.