LCD geht in Bascom, in C aber nicht
Hallo Leute!
Bräucht da wieder mal eure Hilfe.
Also, ich hab das LCD-Modul:
http://www.display-elektronik.de/DEM16217SYH-LY.PDF
welches den KS0070B als Controller verwendet.
Dieses würde ich gerne mit meinem Atmega8 ansteuern.
Hab mir dazu die lib von Peter Fleury geholt und alles streng nach vorschrift (lol) aufgebaut, ala :
https://www.roboternetz.de/wissen/in...D-Modul_am_AVR
4-Bit Ansteuerung
, und die lcd.h angepasst.
Code ist :
---
#include <stdlib.h>
#include <avr/io.h>
#include "lcd.h"
int main(void)
{
/* Initialisiere Display, Cursor aus */
lcd_init(LCD_DISP_ON);
/* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */
lcd_clrscr();
/* String auf Display anzeigen */
lcd_puts("Hello world.");
}
---
Compiliert hab ich das, indem ich den code in test_lcd.c eingefügt hab und make ausgeführt habe.
JO, nur tut sich leider nicht viel. Also, ich erhalte nur nen blinkenden Cursor....
Hab das selbe in Bascom probiert
Code:
---
$regfile = "m8def.dat"
$crystal = 1000000
Config Lcd = 20 * 4 'wir verwenden ein 4 x 20 Zeichen Display
' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Hello world." 'String auf Display anzeigen
End
---
Und da funktionierts - also was hardwaretechnisches scheint somit ausgeschlossen, IMHO.
Könnts womöglich daran liegen, daß dich die R/W Leitung auf Ground gelegt hab und die Lib von Fleury die irgendwie zu Auswertung benötigt?
Ich stelle wirklich keine Ansprüche an die Schnelligkeit des LCD's, deshalb würd ich mir den Pin lieber für wichtigere Sachen reservieren...
Wie macht ihr das mit dem Lib-file vom Fleury (nirgends n Howto oder sowas dazu gefunden...) ...? Ich würde es gern relativ "nahtlos" in AVR-Studio einbinden..
Ich hab das zip in winavr/avr/include entpackt, meine header datei angepasst und make ausgefürt.
Dann AVRStudio gestartet, eben per include die lcd.h eingebunden und als "Source file" die lcd.c eingebunden.... auf build geklickt...
Ergebnis:
---
make: *** No rule to make target `..//D/WindowsPlatzXtention/WinAVR/avr/include/lcd.c', needed by `lcd.o'. Stop.
---
Gibts vielleicht noch ne andere Lib? Oder hat jemand nen Beispielcode in C ohne LCD-lib (und ohne inline-assembler...der is mir irgendwie zu umständlich...:)), ala "Hello World"?
Tschüß,
R2D3212
Liste der Anhänge anzeigen (Anzahl: 1)
Dank deiner ausführlichen Erklärung hab ich jetzt den Code so weit am laufen. Ich hab ne Funktion geschrieben, wo ich an beliebigen Stellen des Displays strings schreiben lassen kann - das reicht mir eigentlich schon.
Jedoch hab ich noch ein kleines Problem. Momentan verwende ich die auch von dir benutzte _delay_loop2 Funktion...(und da immer maximalen delay ... ist halt noch in der Entwicklung)... jedoch fände ich die _delay_ms bzw. _delay_us Funktion hübscher, da ich mit anderer Taktgeschwindigkeit nix am Code ändern müsste.
Wenn ich allerdings diese Funktionen verwende wird das Hexfile ~14kb gross - das gibts doch nicht, oder?? Ist das ein Bug?
Auch das alleinige Verwenden der _delay_ms in deiner Funktion statt _delay_loop2 lässt die Grösse explodieren...
Verwende die Winavr-20060421.exe
Anbei hab ich das .c File angehängt...
Btw, deine lcd_data funktion hab ich ein bisschen abgeändert, weils sonst Probleme gibt, wenn RS auf dem gleichen Port wie Dataport angeschlossen ist (wie im schlatplan vom Wiki...alles auf portc).
Deine restlichen funktionen hab ich eigentlich ala copy&paste übernommen..funktionieren prächtig - danke nochmal!
Tschüß,
R2D3212