Autor Thema: >PURE C: Eiffel LCD Programmierung  (Gelesen 33159 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline Ektus

  • Benutzer
  • Beiträge: 919
>PURE C: Eiffel LCD Programmierung
« am: So 14.08.2011, 16:30:43 »
Hallo werte Experten,

ich habe hier ein Eiffel Tastaturinterface mit LCD. Das funktioniert im Prinzip auch, nur nicht mit dem hintergrundbeleuchteten LCD, das ich daran betreiben will  >:(

Das Teil benötigt dummerweise eine abweichende Initialisierung.

Aus http://www.picbasic.co.uk/forum/archive/index.php/t-3087.html

Pseudocode:

KS0070b Initialization

2x16 LCD (KS0070b)
4 bit mode
2 lines
Display=on
Cursor=off
Blink=off
Increment mode
Entire shif=off

(Pseude-code, same as the table below).

==============================================
Power on
(PIC and LCD module).
==============================================
Wait 40 ms
==============================================

(Function Set)

------------------
Set the LCD pins:
DB7,DB6,DB5,DB4 = 0010

Toggle the Enable line:
PULSOUT Enable_Pin,100 (min.100 µs)
------------------
Set the LCD pins:
DB7,DB6,DB5,DB4 = 0010

Toggle the Enable line:
PULSOUT Enable_Pin,100 (min.100 µs)
------------------
Set the LCD pins:
DB7,DB6,DB5,DB4 = 1000 (2 lines, 5x7 dots)

Toggle the Enable line:
PULSOUT Enable_Pin,100 (min.100 µs)
------------------
==============================================
Wait 100 µs
==============================================

(Display On/Off Control)

Set the LCD pins:
DB7,DB6,DB5,DB4 = 0000

Toggle the Enable line:
PULSOUT Enable_Pin,100 (min.100 µs)

Set the LCD pins:
DB7,DB6,DB5,DB4 = 1100 (Display on, cursor off, blink off).

Toggle the Enable line:
PULSOUT Enable_Pin,100 (min.100 µs)

==============================================
Wait 100 µs
==============================================

(Clear display)

Set the LCD pins:
DB7,DB6,DB5,DB4 = 0000

Toggle the Enable line:
PULSOUT Enable_Pin,100 (min.100 µs)

Set the LCD pins:
DB7,DB6,DB5,DB4 = 0001

Toggle the Enable line:
PULSOUT Enable_Pin,100 (min.100 µs)

==============================================
Wait 2 ms
==============================================

(Entry Mode Set)

Set the LCD pins:
DB7,DB6,DB5,DB4 = 0000

Toggle the Enable line:
PULSOUT Enable_Pin,100 (min.100 µs)

Set the LCD pins:
DB7,DB6,DB5,DB4 = 0110 (Incremet mode, entire shif off).

Toggle the Enable line:
PULSOUT Enable_Pin,100 (min.100 µs)

==============================================
Wait 2 ms
==============================================


End of the KS0070b Initialization.


Wie muß ich diese Signale in IKBD Kommandos verpacken, um das LCD zu initialisieren?

Es sind zwar bei der Eiffel Dokumentation einige Beispielprogrämmchen dabei, aber ich kriege es nicht zum Laufen :-(

Mein Versuch sieht wie folgt aus. Das ist eines der beiden Beispielprogramme, ergänzt um die Definition von init und dessen Ausgabe. Aber ich weiß nicht wirklich, was ich da tue  :(

#include <tos.h>
main()
{
    char load[4] = {0x20,0x01,0x20,8};
    char init[9] = {0x20,0x20,0x80,0x00,0xC0,0x00,0x10,0x00,0x60};
    char message[8] = " FALCON ";
    char spaces[8] = "        ";

    Ikbdws(0,init);
    Ikbdws(3,load);
    Ikbwds(7,message);
    Cconin();
    Ikbdws(3,load);
    Ikbdws(7,spaces);
    return(0);
}

Ziemlich ratlos
Ektus.



Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #1 am: So 14.08.2011, 21:22:23 »
Du musst die Firmware des PIC ändern, mit dem TOS Programm kannst du keine änderung der Initialisierung erwirken. Du kannst die Eiffel Source von der Homepage holen, die Änderungen nach Datenblatt des LCDs vornehmen und dann den PIC neu Brennen.

Gruß Matthias
Have you played Atari today ?!

Offline Ektus

  • Benutzer
  • Beiträge: 919
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #2 am: Mo 15.08.2011, 07:17:32 »
Du musst die Firmware des PIC ändern, mit dem TOS Programm kannst du keine änderung der Initialisierung erwirken. Du kannst die Eiffel Source von der Homepage holen, die Änderungen nach Datenblatt des LCDs vornehmen und dann den PIC neu Brennen.

Gruß Matthias
Da bin ich auch schon dran, aber eigentlich müßte das doch auch per IKBD gehen. Immerhin kann man damit ja auch Kommandos schicken und nicht nur Daten, siehe Eiffel.hyp.

Zum Debugging wäre es wesentlich angenehmer, wenn ich nicht jedesmal den PIC neu Flashen müßte  8)

Die Eiffel.hex habe ich sogar schon compiliert bekommen, allerdings ist die Datei nicht genauso groß wie die "offizielle" 1.10. Muß man da noch irgendwelche Compileroptionen setzen? Ich glaub', ich muß doch mal Didier fragen  :(


Ektus.

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #3 am: Mo 15.08.2011, 10:53:21 »
Also die grundsätzlichen Ini Kommandos kannst du nicht vom Atari aus senden, würde mich zumindest wundern.

Link mal das Datenblatt vom LCD, dann popel ich dir die Ini-Kommandoliste raus. Dann weist du was du schicken must, und mit welchen timings

Gruß
Matthias
Have you played Atari today ?!

Offline Ektus

  • Benutzer
  • Beiträge: 919
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #4 am: Mo 15.08.2011, 15:14:01 »
Also die grundsätzlichen Ini Kommandos kannst du nicht vom Atari aus senden, würde mich zumindest wundern.

Link mal das Datenblatt vom LCD, dann popel ich dir die Ini-Kommandoliste raus. Dann weist du was du schicken must, und mit welchen timings

Gruß
Matthias
In der richtigen Syntax für den PIC auf dem Eiffel Interface?  ;D


Es ist eine Anzeige von Displaytech, Typ 162A.

http://www.displaytech.com.hk/product.php?id=11

http://www.mikrocontroller.net/topic/202332

http://www.ee.oulu.fi/research/tklab/courses/521426A/2003/LCD-driver-3316.pdf


Vielen Dank im Voraus!

Ektus.


Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #5 am: Di 16.08.2011, 21:22:08 »
Die 4-Bit Umschaltung muss dreimal nacheinander gesendet werden, das Delay hab ich von 160 auf 60 gekürzt, im Datenblatt steht zwar 43,  dürfte aber egal sein

probier mal
http://hexgames.de/eiffel_testektus2.txt
Have you played Atari today ?!

Offline Ektus

  • Benutzer
  • Beiträge: 919
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #6 am: Mi 17.08.2011, 06:44:00 »
Die 4-Bit Umschaltung muss dreimal nacheinander gesendet werden, das Delay hab ich von 160 auf 60 gekürzt, im Datenblatt steht zwar 43,  dürfte aber egal sein

probier mal
http://hexgames.de/eiffel_testektus2.txt
Danke, mache ich gleich am Wochenende, wenn ich wieder nach Ahornberg komme.


Ektus.

Offline Ektus

  • Benutzer
  • Beiträge: 919
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #7 am: Fr 19.08.2011, 16:47:36 »
Die 4-Bit Umschaltung muss dreimal nacheinander gesendet werden, das Delay hab ich von 160 auf 60 gekürzt, im Datenblatt steht zwar 43,  dürfte aber egal sein

probier mal
http://hexgames.de/eiffel_testektus2.txt
Danke, mache ich gleich am Wochenende, wenn ich wieder nach Ahornberg komme.
Ich kriege den Code nicht assembliert :(

h:\eiffel\pic_dev\sdcc> .\GPASM.TTP EIFFEL.ASM
EIFFEL.ASM:4626:Message [302] Register in operand not in bank 0. Ensure bank bit
s are correct.                                                                 
EIFFEL.ASM:4887:Message [302] Register in operand not in bank 0. Ensure bank bit
s are correct.                                                                 
EIFFEL.ASM:5149:Message [305] Using default destination of 1 (file).           
EIFFEL.ASM:5154:Message [305] Using default destination of 1 (file).           
EIFFEL.ASM:5165:Message [305] Using default destination of 1 (file).           
EIFFEL.ASM:5170:Message [305] Using default destination of 1 (file).           
EIFFEL.ASM:5171:Message [306] Crossing page boundary -- ensure page bits are set.                                                                               
EIFFEL.ASM:5181:Error [118] Overwriting previous address contents.             
EIFFEL.ASM:5298:Message [306] Crossing page boundary -- ensure page bits are set.

Die angemeckerte Stelle wurde aber gar nicht geaendert.


Ektus.


Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #8 am: Fr 19.08.2011, 21:29:11 »
dat weis ich jetzt auch nicht wier und wieso, der richtige PIC-Typ wird wohl gewählt sein?
Have you played Atari today ?!

Offline Ektus

  • Benutzer
  • Beiträge: 919
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #9 am: Fr 19.08.2011, 22:01:55 »
dat weis ich jetzt auch nicht wier und wieso, der richtige PIC-Typ wird wohl gewählt sein?
Der wird ja am Anfang im Quelltext angegeben (PROCESSOR p16f876). Leider habe ich nirgendwo in den Unterlagen eine Information dazu gefunden, wie man das Zeug übersetzen soll (Kommandozeilenparameter, Linkeraufruf nötig?, etc.)

Mit freundlichen Grüßen
Ektus.

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #10 am: Sa 20.08.2011, 21:49:57 »
aber die utils hast du ?
http://didierm.pagesperso-orange.fr/files/pic_dev.zip

den Assembler von Mircochip schon versucht?
Have you played Atari today ?!

Offline Ektus

  • Benutzer
  • Beiträge: 919
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #11 am: Sa 20.08.2011, 22:59:08 »
aber die utils hast du ?
http://didierm.pagesperso-orange.fr/files/pic_dev.zip
Ja klar, damit habe ich es ja assemblert.
den Assembler von Mircochip schon versucht?
Nein.

http://dhs.nu/bbs-ct60/index.php?request=12453

Demnach scheint es ein Platzproblem zu geben. Die Init-Sequenz wird zwar nur um wenige Instruktionen länger, aber das scheint schon zu viel zu sein :(

Ich suche noch nach Möglichkeiten, wo ich Code weglassen kann, den ich nicht brauche (Lüftersteuerung, Joystick 2, was weiß ich), aber das muß dann auch noch in der gleichen Codepage liegen. Dieser PIC scheint sehr komplex zu programmieren zu sein, wenn man mehr als "hello world" und ein paar 100 Instruktionen braucht :(

Ektus.

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #12 am: So 21.08.2011, 22:07:02 »
also eigentlich ist der PIC easy zu programmieren, beim eiffel ist nur ewig viel in den kleinen PIC gequetscht.
Have you played Atari today ?!

Offline Ektus

  • Benutzer
  • Beiträge: 919
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #13 am: Sa 27.08.2011, 20:45:39 »
Ich habe einen neuen Versuch gestartet und konnte das Programm jetzt erfolgreich assemblieren. Dazu mußte ich etwas Platz schaffen.

Zeilen 5025 bis 5030 auskommentieren (Ausgabe des "+" und "-" für den Lüfter auf das LCD):
; call SendCHAR
; movlw ' '
; call SendCHAR
; movlw '-'
; btfsc PORTC,MOTORON
; movlw '+'

Neues Unterprogramm vor Init_LCD:

Mode_4bit
bcf STATUS,C             
movlw 0x02; mode 4 bits
call NybbleOut             
Delay 60
returm

Die vier Befehle standen bisher dreimal hintereinander in Init_LCD. Das habe ich durch drei Aufrufe des Unterprogramms ersetzt und hoffe, daß es keinen Stacküberlauf gibt.

;neu ektus
; bcf STATUS,C             
; movlw 0x02; mode 4 bits
; call NybbleOut             
; Delay 60
; bcf STATUS,C             
; movlw 0x02; mode 4 bits
; call NybbleOut             
; Delay 60
; bcf STATUS,C             
; movlw 0x02; mode 4 bits
; call NybbleOut             
; Delay 60
call Mode_4bit
call Mode_4bit
call Mode_4bit
;neu ende


Das Eiffel Interface läuft nach dem Programmieren mit der so geänderten Firmware noch, nur das beleuchtete LCD hustet mir was. Nach dem Anstecken im laufenden Betrieb zeigt es ein paar wirre Zeichen an, also stimmt der Kontrast. Nach einem Reset des Interface oder Power-Cycle zeigt es nichts mehr an.  ???

Ziemlich ratlos
Ektus.

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #14 am: So 11.09.2011, 16:54:18 »
setz den delay auf 43 und mach es nicht als Unterprogramm, das Display erwartet die genaue Sequenz und laut Datenblatt das entsprechende Delay. Kann sein das es auf Verzögerung des Signals nicht fertig initialisiert.

Ich würd mir aber an deiner Stelle einfach ein anderes LCD besorgen.
Have you played Atari today ?!

Offline Ektus

  • Benutzer
  • Beiträge: 919
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #15 am: So 11.09.2011, 18:51:41 »
setz den delay auf 43 und mach es nicht als Unterprogramm,
Dann muß ich aber irgendwo noch ein paar mehr Bytes freischaufeln, sonst paßt das nicht :(
Außerdem sollte der Unterprogrammaufruf ja nicht sooo viel Zeit kosten und ggf. durch ein entsprechend kürzeres Delay auszugleichen sein. Hmmm.... hat wer einen Logikanalysator und ein Eiffel Interface mit Display und könnte das mal testen?  8)

das Display erwartet die genaue Sequenz und laut Datenblatt das entsprechende Delay. Kann sein das es auf Verzögerung des Signals nicht fertig initialisiert.

Mal schauen, ab kommendem Wochenende habe ich Urlaub, da könnte ich mal wieder etwas rumprobieren. Ansonsten ist ja auch bald OFAM :)


Ich würd mir aber an deiner Stelle einfach ein anderes LCD besorgen.

Das Problem ist, genau eines mit dem richtigen Controller und Hintergrundbeleuchtung zu finden. Und das zu einem konkurrenzfähigen Preis. Ich bin für Vorschläge offen  :D


Mit freundlichen Grüßen
Ektus.

Offline Latz

  • Benutzer
  • Beiträge: 574
  • Falcon forever!
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #16 am: Mo 12.09.2011, 10:14:18 »
Hi,
bei meinen beiden Displays sind pin1 und 2 für die Hintergrundbeleuchtung,die muß man extra anschließen. Schau mal hier.
Gruß,
Latz
Falcon/CT60 80 MHz, CTPCI+Radeon 9250 + RTL8139 Netzwerkkarte + USB- Karte, Carte Eiffel+LCD, 80 GB HD, DVD-RW
Falcon/CT63 95 MHz, CTPCI+Radeon 9250 + RTL8139 Netzwerkkarte, Carte Eiffel+LCD, 16 GB CF, CD-RW

Offline Ektus

  • Benutzer
  • Beiträge: 919
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #17 am: Mo 12.09.2011, 19:37:16 »
Hi,
bei meinen beiden Displays sind pin1 und 2 für die Hintergrundbeleuchtung,die muß man extra anschließen. Schau mal hier.
Gruß,
Latz
Die Hintergrundbeleuchtung habe ich ja laufen, aber das Display zeigt nichts an!

Du hast ein Displaytech 162B-CC-BC-3LP verlinkt, das laut Datenblatt einen KS0070B Controller verwendet. Ich habe ein Displaytech 162A mit demselben Controller. Warum läuft der bei Dir, und bei mir nicht?

mfG
Ektus.

Offline matashen

  • Benutzer
  • Beiträge: 1.779
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #18 am: Mo 12.09.2011, 21:42:29 »
da läuft bei mir nix, ich versuch nur aufgrund von den Datenblätter lösungsansätze zu erarbeiten. Prüfen kann ich das nicht weil ich kein Eifel und kein Display habe.

Gruß Matthias
Have you played Atari today ?!

Offline Latz

  • Benutzer
  • Beiträge: 574
  • Falcon forever!
Re: >PURE C: Eiffel LCD Programmierung
« Antwort #19 am: Di 13.09.2011, 14:00:02 »
Hmmm,
weiß der Teufel warum es bei Dir nicht funzt. Was für einen
PIC hast Du? Ich hatte mal irrtümlich einen PIC16F876-AS erwischt
(nicht -04), der lief zwar mit der "Grundprogrammierung" via PIC-Brenner
aber nach dem Aufspielen eigener Keyboard-Tables tat sich gar nix mehr.
Was für eine Eiffel ist das? Habe meine selbstgemacht.
Hast Du das Display auch wirklich richtig angeschlossen? Der Bus
liegt auf DATA5-8, nicht auf DATA1-4. Ansonsten fällt mir nix mehr
dazu ein.
Latz
Falcon/CT60 80 MHz, CTPCI+Radeon 9250 + RTL8139 Netzwerkkarte + USB- Karte, Carte Eiffel+LCD, 80 GB HD, DVD-RW
Falcon/CT63 95 MHz, CTPCI+Radeon 9250 + RTL8139 Netzwerkkarte, Carte Eiffel+LCD, 16 GB CF, CD-RW