För lite ström borde det ju inte vara eftersom du fick LCD:n att lysa.
En atmega8 med lcd vet jag drar ungefär 115mA, så har du nåt som klarar att leverera det borde det ju vara lugnt.
Strömmen mäter du genom att bryta kretsen, ta utgången från din strömförsörjning, koppla den in i din multimeter, sedan från multimetern tillbaka till kretsen igen.
> I och med att du bara kör med 4 bitars kommunikation istället för 8 bitar så bör du binda de anda fyra till GND som du inte använder.
Säker på det ? Jag har för mig att de 4 oanvända data linjerna bör/ska vara "floating". LCD controllern håller dom "uppe" med interna pull-ups. Och när man switchar om RW för att läsa så kan en "hård" pull-up/down av signalerna komma i konflikt med det data som controllern (försöker) lägger ut.
Du kan prova den här gamla koden som jag skrev när jag höll på och lära mig AVR. Koppla precis som define-raderna antyder och ändra ingenting. För det tror jag nämnligen inte att koden klarar av i sitt nuvarande skick.
Det var faktiskt just en OLED-display jag använde då.
-------- begin --------
avr-gcc (GCC) 3.4.3
Copyright (C) 2004 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.
Compiling: display.c
avr-gcc -c -mmcu=atmega32 -I. -gstabs -DF_CPU=8000000UL -O0 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=display.lst -std=gnu99 -MD -MP -MF .dep/display.o.d display.c -o display.o
display.c: In function `lcd_cmd':
display.c:35: warning: implicit declaration of function `delay'
display.c: At top level:
display.c:66: warning: function declaration isn't a prototype
display.c:82: warning: function declaration isn't a prototype
display.c:87:3: warning: no newline at end of file
Linking: display.elf
avr-gcc -mmcu=atmega32 -I. -gstabs -DF_CPU=8000000UL -O0 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=display.o -std=gnu99 -MD -MP -MF .dep/display.elf.d display.o --output display.elf -Wl,-Map=display.map,--cref -lm
display.o(.text+0x3a): In function `lcd_cmd':
display.c:35: undefined reference to `delay'
display.o(.text+0x4e):display.c:38: undefined reference to `delay'
display.o(.text+0x88): In function `lcd_byte':
display.c:44: undefined reference to `delay'
display.o(.text+0xbc):display.c:50: undefined reference to `delay'
display.o(.text+0x1d8): In function `lcd_init':
display.c:75: undefined reference to `delay'
make.exe: *** [display.elf] Error 1
det blir fel, den antyder att de itne finns någon delay funktion....
Edit: ändrade till _delay_loop_2 då kompilerade den... men, fortfarande kolsvart på displayen
Enligt output:en så kör du AVR:en i 12 MHz. Stämmer det? Om du kör med den interna oscillatorn och inte har ändrat på något bör den gå i 1 MHz, om jag inte minns fel. Nu spelar det ingen roll i det här fallet men du bör ändå sätta F_CPU till rätt värde i Makefile:en.
Men du! När jag vänder på min LCD som ser identisk ut som den du har där på baksidan, så är stiften numrerade från höger till vänster. Det ser ut som du spegelvänt det hela...