Ich hab mir nach manch einem Problem mit dem GLCD gedacht, es wär ganz nützlich, eine allgemeine Sammelstelle für Tips zur ersten Aufgabe zu haben, also mache ich diesen Thread auf.
Wer selbst Tipps hat, möge ebenfalls zu diesem Thread beitragen.
HAL-GLCD und GLCD
- Es ist verdammt einfach, RST (PE7) unabsichtlich auf low (0) zu setzen. Falls sich das Display nicht einmal ansatzweise korrekt verhält, könnte das die Ursache sein.
- Wenn Daten ("welche Pixel sind gesetzt?") vom GLCD ausgelesen werden, muss der Befehl zweimal geschickt werden, da Sinnvolles erst beim zweiten Mal kommt. (Das Auslesen des Status ist hiervon nicht betroffen.)
- Die Zeichen der Schriftart für den GLCD sind im Flash gespeichert. Darauf muss man über einen Umweg zugreifen, da die Adresse 1234 im data space etwas anderes bedeutet als die Adresse 1234 im program space. (Mögen Harvard-Architekturen baldigst aussterben.)
SPI
- Wegen der Shift-Register-Natur von SPI ist es notwendig, beim Lesen den Wert 0xFF in den Register hineinzuschreiben, damit "auch etwas kommt".
ADC
- Zum Triggern des ADC mit Hilfe eines Timers (z.B. Timer 1) sollte dieser in den CTC-Mode gesetzt werden. Dann muss man sowohl OCR1A ("wann soll der Counter wieder bei 0 anfangen") und OCR1B ("wann soll der ADC getriggert werden") auf denselben Wert einstellen. Im ADC-Interrupt-Handler müssen dann die Flags OCF1B und ADIF auf 1 gesetzt werden.
Kompilieren/Linken
- Um eine weitläufige Dead-Code-Eliminierung durchführen zu lassen, kann man dem Compiler die Flags -ffunction-sections -fdata-sections und dem Linker --gc-sections übergeben. Falls man den Linker nicht direkt mit avr-ld sondern mit avr-gcc aufruft, lautet die Syntax -Wl,--gc-sections.
(weitere Kategorien folgen)



Reply With Quote






Bookmarks