- Labornetzteil AliExpress         
Ergebnis 1 bis 7 von 7

Thema: Brauche Starthilfe bei 128x64 ansteuerung mit KS108

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    35
    Beiträge
    235

    Brauche Starthilfe bei 128x64 ansteuerung mit KS108

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen,

    Bin grad dabei mich von Bascom zu entfernen und endlich mal in C zu programmieren. Die ersten Versuche und Grundsachen klappen auch schon ganz gut . Jetzt geht es aber dran ein 128x64 Display mit einem KS108 Contoller anzusteuern. Hardware ist schon komplett fertig aber an der Software haperts noch ein wenig. Unter Bascom war das ja alles einfach.
    Nun zu C: Soweit ich das verstanden hab hab ich ja mein "main.c" von wo aus ich meinetwegen meine Displayausgabe ansteuer; also ks0108Puts ("Test"), wobei der Befehl ks0108Puts je nach ks108.c abhängig ist oder? In meiner ks108.h sind meine ganzen Ports definiert die ich zum Ansteuern des Display verwende, s. hier
    Code:
    // Ports
    
    #define LCD_CMD_PORT		PORTB		// Command Output Register
    
    #define LCD_CMD_DIR			DDRB		// Data Direction Register for Command Port
    
    
    
    #define LCD_DATA_IN			PIND		// Data Input Register
    
    #define LCD_DATA_OUT		PORTD		// Data Output Register
    
    #define LCD_DATA_DIR		DDRD		// Data Direction Register for Data Port
    
    
    
    // Command Port Bits
    
    #define D_I					0x05		// D/I Bit Number
    
    #define R_W					0x04		// R/W Bit Number
    
    #define EN					0x00		// EN Bit Number
    
    #define CSEL1				0x07		// CS1 Bit Number
    
    #define CSEL2				0x06		// CS2 Bit Number
    Was ich noch nicht ganz blicke ist welcher Port jetzt für die Daten und welcher für die Steuerung zuständig ist. Ich hab jetzt PORTB für die Steuerung genommen und PORTD für die Daten. Was ich aber noch vermisse ein #define RESET o.ä. für die Reset-Leitung oder braucht man das nicht zwingend? Ich hoffe meine Fragen sind nicht allzu unverständlich und ihr könnt mir ein wenig weiterhelfen .
    Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    CMD ist Steuerung, DATA die Daten.
    Den Reset-Pin hab ich bei meinem KS0108 zwar noch "dazudefiniert", aber er wird nicht verwendet.
    Auch hab ich bei mir die Pins für die Steuerleitungen "zerlegt", so dass es z.B. nicht nur
    Code:
    #define LCD_CMD_PORT      PORTB
    heisst, sondern
    Code:
    #define LCD_CMD_DI_PORT      PORTB  
    #define LCD_CMD_RW_PORT      PORTB  
    #define LCD_CMD_EN_PORT      PORTB  
    ...
    Machts später etwas einfacher, das Display an anderen Controllern zu betreiben, wo nicht unbedingt alle freien Pins an 1 Port sind.
    #ifndef MfG
    #define MfG

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    35
    Beiträge
    235
    Ah alles klar schon mal gut zu wissen. Und die Befehle für die Ausgabe kann ich mir selber schreiben und dann z.B. in einer KS108.c speichern, wenn ich z.B. eine eigene Routine für ein anderes Display schreiben möchte richtig?
    Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Wo du die Befehle speicherst, ist von der Funktion her eigentlich egal.
    Nur macht es Sinn, alles was zum Display gehört, auch in die ks108.c reinzuwerfen, z.B. Basisfunktionen wie einzelne Punkte setzen.

    Ob diese Routinen dann für andere Displays auch gehen, kommt auf die Ansteuerung an.
    #ifndef MfG
    #define MfG

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    35
    Beiträge
    235
    Ah gut ok. Die Sachen hab ich soweit auch geändert, aber mein jetziges Problem ist dass ich nicht genau weiß wie ich was kompilieren muss :/.
    Ich hab ja meine main.c, wo mein eigentlicher Ablauf drinsteht. Dort sind auch noch die Dateien festgelegt welche mit verwendet werden:

    #include "ks0108.h"

    #include "font12x16.h"

    Wenn ich jetzt make(avr-gcc) ausführe bekomm ich immer folgende Fehlermeldung:

    /home/malte/Documents/Programmierung/AVR in C/Test/main.c:29: undefined reference to `ks0108Init'
    /home/malte/Documents/Programmierung/AVR in C/Test/main.c:32: undefined reference to `ks0108ReadFontData'
    /home/malte/Documents/Programmierung/AVR in C/Test/main.c:32: undefined reference to `ks0108ReadFontData'
    /home/malte/Documents/Programmierung/AVR in C/Test/main.c:32: undefined reference to `ks0108SelectFont'
    /home/malte/Documents/Programmierung/AVR in C/Test/main.c:34: undefined reference to `ks0108GotoXY'
    /home/malte/Documents/Programmierung/AVR in C/Test/main.c:36: undefined reference to `ks0108Puts_P'
    /home/malte/Documents/Programmierung/AVR in C/Test/main.c:49: undefined reference to `ks0108FillRect

    Ich bin mir aber nicht sicher ob ich alles richtig angegeben habe, sprich ob ich irgendwie im makefile noch Dateien include muss oder ähnliches. Compilieren mache ich wie gesagt mit make oder avr-gcc unter Linux. Oder gibts ne gute Seite wo man sich mal einlesen kann in das Thema wie man "externe" Dateien einfügt und mit compiliert oder was auch immer man mit denen machen muss?
    Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    in der ks0108.h müssen dann auch die Prototypen der Funktionen in der ks0108.c stehen. Sonst weiss die main.c ja nix von den anderen Funktionen.

    Z.B. so:

    ks0108.c:
    Code:
    #include "ks0108.h"
    
    void ks0108Init(void)
    {
     // irgendwas
    }
    ks0108.h
    Code:
    #ifndef _KS0108_H_
    #define _KS0108_H_
    
    #includes was man halt so braucht etc.
    
    void ks0108Init(void);
    
    #endif
    #ifndef MfG
    #define MfG

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    35
    Beiträge
    235
    Ah ok jetzt hats (glaub ich) geklappt, das kompilieren und übertragen funktioniert auf jeden fall schon mal. Nur das Display zeigt nix an, kann aber auch sein dass es kaputt ist, flog noch bei mir in der Schublade rum. Neues ist schon unterwegs. Schon mal vielen Dank für die Hilfe, wenn ich Fragen hab melde ich mich in ein paar Tagen wieder=)
    Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests