Hallo, ich hab mir mal auf die schnelle so ne Schaltung von nem S65
Display zurechtgebaut. Leider hab ich Moment recht wenig Zeit, deshalb
hab ich direkt nach dem ersten gescheiterten Programmversuch aufgegeben.
Könnte mir vielleicht mal jemand ein ganz einfach Programm überlassen,
bei dem z.B. nur ein rechteck oder sowas angezeigt wird? Am besten
sollte das Programm so sein, dass ich schnell die PinBelegung ändern
kann. Z.B. Mit #define oder so. Achja, ich verwende einen Atmega8.
MFG
Ganz ohne eigenen Hirnschmalz wirst du das wohl nicht so einfach
geliefert bekommen.
http://www.superkranz.de/christian/S65_Display/DisplaySoftware.html
Hier findest du eigentlich alles, was du brauchst. Voraussetzung ist
allerdings etwas technisches Verständnis und etwas Erfahrung mit WinAVR.
Ohne das gehts nicht....
Doch, nach dieser Seite hab ich das Aufgebaut. Ich meinte die Beiträge.
Ok, kann mir dann bitte wenigstens jemand sagen, was MOSI, MISO und SCK
sind?
#define LCD_CS PC2
#define LCD_RESET PC1
#define LCD_RS PC0
#define LCD_MOSI PC4
#define LCD_MISO PB3
#define LCD_SCK PC3
CS, RESET und RS sind ja klar, ist SCK = gleich CLK und MOSI gleich DAT?
Was ist dann MISO?
Hab mal das glcd-Testprogramm versucht, aber beim kompilieren kommt
immer diese Meldung:
> "make.exe" all
-------- begin --------
avr-gcc (GCC) 4.2.2 (WinAVR 20071221)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
Linking: test.elf
avr-gcc -mmcu=atmega8 -I. -D GCC_MEGA_AVR -I. -g -O0 -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wextra -Wshadow
-Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare
-Waggregate-return -Wstrict-prototypes -Wmissing-prototypes
-Wmissing-declarations -Wunused -std=gnu99 test.o --output test.elf
-Wl,-Map=test.map,--cref -lm -L../glcd/. -lglcd
c:/winavr-20071221/bin/../lib/gcc/avr/4.2.2/../../../../avr/bin/ld.exe:
region text is full (test.elf section .text)
c:/winavr-20071221/bin/../lib/gcc/avr/4.2.2/../../../../avr/bin/ld.exe:
region text is full (test.elf section .text)
make.exe: *** [test.elf] Error 1
> Process Exit Code: 2> Time Taken: 00:01
Was heißt das?
Es ist doch eigentlich egal an welche Ports ich das Display anschließe,
Hauptsache ich ändere es in der glcd.inc ,oder?
Eine Section ist zu gross für die Zielplattform. Vermutlich ist ein
Array zu gross dimensioniert, zuviel Programmcode oder einfach nur das
Makefile falsch.
Ich kenne deine Quellen nicht. Es ist aber durchaus möglich, daß sie so
veraltet sind, daß sie aus irgendeinem Grund sich mit einem neueren
AVR-GCC nicht kompilieren lassen.
Das Problem war, das der Code zu groß war für nen Atmega8. Aber nachdem
ich den Code gekürzt hab, funzt es auch nicht auf dem Display.
Ist es denn nun egal, an welchen Pins das Display hängt, oder muss es
unbedingt MOSI und SCK sein?
Vorallem das Timing ist wichtig. Das sollte unbedingt stimmen. (XTAL und
die daraus errechneten Werte gegenprüfen)
Im Prinzip ist es egal an welchen Pins das Display hängt. Wichtig ist,
das diese nicht durch eine andere Funktionalität belegt sind. Wenn du
das Display an die MISO/MOSI/SCK betreibst, ist es natürlich
vorteilhaft, keinen ISP angeschlossen zu haben.
Welches errechneten Werte? Ich hab nen 16MHz Oszi dran gehangen und der
funzt denke ich auch soweit und am Quelltext hab ich nur die PinBelegung
geändert.
Die ist bei mir so an Port C:
PC0 = RS
PC1 = RESET
PC2 = CS
PC3 = CLK
PC4 = DAT
Und im Code sieht das dann so aus.
#define LCD_CS PC2
#define LCD_RESET PC1
#define LCD_RS PC0
#define LCD_MOSI PC4
#define LCD_MISO PC5
#define LCD_SCK PC3
oder ist da schonwieder was falsch?
Hat sich nichts verändert? Hab auch schonmal das Atmega Bilderrahmen
Projekt draufgespielt und auch das hat nicht funktioniert. Hatte
natürlich die SD-Karte nicht angeschlossen und die Ports auch wieder
richtig abgeändert. Aber auch da wurde nichts angezeigt.
War das denn richt von oben??
Die ist bei mir so an Port C:
PC0 = RS
PC1 = RESET
PC2 = CS
PC3 = CLK
PC4 = DAT
Und im Code sieht das dann so aus.
#define LCD_CS PC2
#define LCD_RESET PC1
#define LCD_RS PC0
#define LCD_MOSI PC4
#define LCD_MISO PC5
#define LCD_SCK PC3
Oder ist da was falsch?
Hi Dake,
a) Der Code den du benutzt muss zum Display passen.
b) Bei zwei der drei Display Demo-Versionen wird der Zeichensatz ins RAM
geladen, dass geht nicht beim ATMega8 weil zu wenig RAM. Also am besten
die ganze ASCII Tabelle rauswerfen oder auf ein paar Zeichen
beschränken. Alle Versionen verändern nach dem Start die
Hintergrundfarbe. Das reicht für einen ersten Test. Wenn sich die Farbe
ändert, funktioniert die HW.
c) Ich habe gerade kein ATM8 Datenblatt, ist denn das Hardware SPI
Interface beim ATM8 auf Port C gelegt? Kann sein, kommt mir nur komisch
vor. Der Code funktioniert jedenfalls nur mit HW-SPI.
Grüße
SU
SU wrote:
> c) Ich habe gerade kein ATM8 Datenblatt, ist denn das Hardware SPI> Interface beim ATM8 auf Port C gelegt? Kann sein, kommt mir nur komisch> vor. Der Code funktioniert jedenfalls nur mit HW-SPI.
Diese Information hat mir gefehlt. Wenn das so ist, ist die Verdrahtung
falsch. Ich dachte, es handelt sich um ein Software SPI.
Naja, ich kann recht gut Programmieren und ne neue programmiersprache
lern ich auch recht schnell, aber von Hardware hab ich nicht viel
Ahnung, deshalb sagt mir bitte einfach was ich falsch gemacht hab: hier
ist das Datenblatt.
http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf
Mir fehlt gerade die nötige Bandbreite um das Dokument runterladen zu
können.
Der HardwareSPI besteht beim mega8 aus Pins Mosi, Miso und SCK. Diese
sind auch so am Mega8 beschriftet. Du musst den so verbinden:
mega8 display
MOSI DAT
MISO ---
SCK CLK
RS,CS und Reset kannst du belegen wie du lustig bist. Wichtig ist
ebenfalls eine gemeinsames GND.
Hab mir gerade nochmal das Projekt mit dem Atmega8 Bilderrahmen
angeschaut und dort hat er das Display an Port D gehangen. Ist ja auch
nicht SPI. Aber ich werde es mal versuchen.
Hmm, also erstmal einen riesen dank. Es funktioniert schonmal. Ich hab
jetzt das Simple_Display programm drauf, also dieses
HelloWorld-Programm. Es wird zwar etwas an der richtigen Stelle
angezeigt, aber es sieht recht komisch aus. Es sind nur sehr komische
zeichen zu sehen.
Ich musste leider die Anschlüsse für RS und RESET an einen anderen Port
hängen als DAT, CS und CLK. Kann man denn sowas in der glcd auch
einstellen oder muss man dann den kompletten Quelltext bearbeiten?
>>Es wird zwar etwas an der richtigen Stelle>>angezeigt, aber es sieht recht komisch aus. Es sind nur sehr komische>>zeichen zu sehen.
Du hast ja wahrscheinlich auch die ASCII Tabelle rausgeworfen, da sie
nicht in den Speicher vom ATM8 passt. Also wird da wohl irgend welche
undefinierten Daten angezeigt.
Die glcd benutzt standardmässig den PORTB für ATM8:
1
#if defined (__AVR_ATmega8__)
2
#define LCD_PORT _SFR_IO_ADDR(PORTB)
3
#define LCD_PIN _SFR_IO_ADDR(PINB)
4
#define LCD_DDR _SFR_IO_ADDR(DDRB)
5
#define LCD_CS PB0
6
#define LCD_RESET PB6
7
#define LCD_RS PB7
8
#define LCD_MOSI PB2
9
#define LCD_MISO PB3
10
#define LCD_SCK PB1
Demnach sieht es so aus, als ob alle Display-Steuer Signale zumindest
vom gleichen Port kommen sollten.
Schade, naja. Intwischen komm ich halbwegs zurecht. Aber im Moment
scheiter ich gerade an der Darstellung einer Linie. Gefüllte Rechtecke
und und ungefüllte Rechtecke sind kein Ding. Punkte und Kreise auch
nicht wirklich. Aber ne Linie :) habt ihr dafür irgendeine brauchbare
Routine, meine eigene funktioniert nicht wirklich.