4x40 Display initialisieren

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 25 11 2024  20:51:29      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
4x40 Display initialisieren
Suche nach: display (12227)

    







BID = 955543

Marlight

Gerade angekommen


Beiträge: 13
 

  


Hallo,

ich habe für ein Projekt in meiner Ausbildung ein 4x40 Zeichen LC-Display bekommen.
Als Compiler nutze ich den mikroC PRO for PIC von MikroElektronika.
Leider gibt es keine Libary für ein solches Display, da dieses aus zwei Bausteinen besteht.
Hat also statt einen, zwei Enable Pins.

Hier mal ein Link zum Display (RS-Online):
LCD,4x40, neg mode STN, white b/l 190x54

Datenblatt:
Datenblatt vom 4x40 LCD

Ich habe nun also selbst versucht, nach dem Datenblatt die Initialisierung zu schreiben.
Leider funktioniert dieses nicht, hier mal der Code:


Code :

     // LCD Init

delay_ms(15);
LCD8_RS = 0;
delay_us(10);
LCD8_RS = 0;
LCD8_EN = 1;
LCD8_EN2 = 1;
PORTD = 0x3F; // Function set (8 bit / 2 line / 5x8 Dots)
delay_us(38);
LCD8_EN = 0;
LCD8_EN2 = 0;
delay_ms(5);
LCD8_EN = 1;
LCD8_EN2 = 1;
PORTD = 0x3F; // Function set (8 bit / 2 line / 5x8 Dots)
delay_us(38);
LCD8_EN = 0;
LCD8_EN2 = 0;
delay_us(105);
LCD8_EN = 1;
LCD8_EN2 = 1;
PORTD = 0x3F; // Function set (8 bit / 2 line / 5x8 Dots)
delay_us(38);
LCD8_EN = 0;
LCD8_EN2 = 0;
delay_ms(2);
LCD8_EN = 1;
LCD8_EN2 = 1;
PORTD = 0x3F; // Function set (8 bit / 2 line / 5x8 Dots)
delay_us(38);
LCD8_EN = 0;
LCD8_EN2 = 0;
delay_us(38);
LCD8_EN = 1;
LCD8_EN2 = 1;
PORTD = 0x0A; // Display off / Cursor on / Cursor blinking off
delay_us(38);
LCD8_EN = 0;
LCD8_EN2 = 0;
delay_us(38);
LCD8_EN = 1;
LCD8_EN2 = 1;
PORTD = 0x01; // Clear Display
delay_ms(2);
LCD8_EN = 0;
LCD8_EN2 = 0;
delay_ms(2);
LCD8_EN = 1;
LCD8_EN2 = 1;
PORTD = 0x06; // Display off / Cursor on / Cursor blinking off
delay_us(38);
LCD8_EN = 0;
LCD8_EN2 = 0;
delay_ms(2);



habe ich da irgendwo was falsch verstanden?
Und gibt es vllt. sogar eine Libary für ein solches Display, welche ich noch nicht gefunden habe?

Danke schon mal

[ Diese Nachricht wurde geändert von: Marlight am  7 Mär 2015  2:21 ]

BID = 956071

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

 

  

Schnelle Antwort ohne das Display oder das Datenblatt angesehen zu haben:
Beide Teile des Display nacheinander vollständig initialisieren und auch (virtuell) als 2 Displays behandeln, die untereinander (vermutlich) geschaltet sind.

_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!

BID = 956235

sub205

Schriftsteller



Beiträge: 916
Wohnort: Gründau

Jup, das Ding hat 2 getrennte Controller.
Einfach HD44700-Library nehmen, die versteht so ziemliches Text-Display.
Um den Init zu beschleunigen kannst du einfach beide Enable-Pins gleich ansteuern, dann mußt du nicht jeden Treiber getrennt initialisieren.

_________________
gruß, Stephan

sudo make me a sandwich

BID = 956251

Marlight

Gerade angekommen


Beiträge: 13

Hallo,

schon mal vielen Dank für die Hilfe.
Ich benutze für den MikroC Compiler eine Libary mit 8 Bit Ansteuerung.
Da die von MikroC selbst nur 4 Bit unterstützt.

Ich muss also am Anfang der Datei die Pins vom Display definieren.
Bei einem einfachen Display (z.B. 4x20) sieht das so aus:


Code :

// Lcd8 module connections

sbit LCD8_RS at RG3_bit;
sbit LCD8_RW at RA4_bit;
sbit LCD8_EN at RG1_bit;
sbit LCD8_D7 at RB7_bit;
sbit LCD8_D6 at RB6_bit;
sbit LCD8_D5 at RB5_bit;
sbit LCD8_D4 at RB4_bit;
sbit LCD8_D3 at RG0_bit;
sbit LCD8_D2 at RB2_bit;
sbit LCD8_D1 at RB1_bit;
sbit LCD8_D0 at RB0_bit;

sbit LCD8_RS_Direction at TRISG3_bit;
sbit LCD8_RW_Direction at TRISA4_bit;
sbit LCD8_EN_Direction at TRISG1_bit;
sbit LCD8_D7_Direction at TRISB7_bit;
sbit LCD8_D6_Direction at TRISB6_bit;
sbit LCD8_D5_Direction at TRISB5_bit;
sbit LCD8_D4_Direction at TRISB4_bit;
sbit LCD8_D3_Direction at TRISG0_bit;
sbit LCD8_D2_Direction at TRISB2_bit;
sbit LCD8_D1_Direction at TRISB1_bit;
sbit LCD8_D0_Direction at TRISB0_bit;
// End Lcd8 module connections

// bla bla bla, PIC Init [...]
Lcd8_Init(); // Initialize Lcd8
Lcd8_Cmd(_LCD_CLEAR); // Clear display
Lcd8_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd8_Out(1, 2, "Test"); // Ausgabe eines Textes in Zeile 1 ab Spalte 2
// bla bla bla, weiterer Code[...]



Wie muss ich das jetzt machen, damit ich "beide" Displays mit dieser Libary ansteuern kann?

BID = 956254

sub205

Schriftsteller



Beiträge: 916
Wohnort: Gründau

Warum nutzt du nicht den 4bit-Mode?
Du mußt im Grunde nur die Stelle, an der das Enable-Pin gesetzt wird, so erweitern, das du wahlweise Treiber 1, 2 oder beide ansteuern kannst.
Dann kannst du Zeile 1/3, 2/4 oder beide ansprechen.

Schau dich hier mal um:
http://sprut.de/electronic/lcd/index.htm


_________________
gruß, Stephan

sudo make me a sandwich

BID = 956283

Marlight

Gerade angekommen


Beiträge: 13

Weil ich schon eine fertige Platine habe und der 8 Bit Modus ein klein wenig schneller ist (meinen Information nach).

Um zwischen den beiden Displays mit der Libary zu switschen, müsste ich ja immer das sbit LCD8_EN neu definieren oder nicht?


BID = 956295

sub205

Schriftsteller



Beiträge: 916
Wohnort: Gründau


Zitat :
Marlight hat am 13 Mär 2015 19:05 geschrieben :

Weil ich schon eine fertige Platine habe und der 8 Bit Modus ein klein wenig schneller ist (meinen Information nach).

Um zwischen den beiden Displays mit der Libary zu switschen, müsste ich ja immer das sbit LCD8_EN neu definieren oder nicht?




Ja, du baust deine Library einfach entsprechend um.

if (line % 2) {
pin_en = 1;
} else {
pin_en = 2;
}

oder so ...

praktisch merkst du keinen unterschied zwischen 4- und 8bit. Nur in der Anzahl der belegten Ports.

Bei Textdisplays spielt die performance keine Rolle.

_________________
gruß, Stephan

sudo make me a sandwich

BID = 956297

Marlight

Gerade angekommen


Beiträge: 13

wie kann ich denn eine Libary bearbeiten?

BID = 956304

sub205

Schriftsteller



Beiträge: 916
Wohnort: Gründau

Im Normalfall sollte es sich darum um eine normale C-Datei handeln.

_________________
gruß, Stephan

sudo make me a sandwich

BID = 956307

Marlight

Gerade angekommen


Beiträge: 13

das ist eine mcl Datei.

ich habe das komplette ding mal angehangen

BID = 956324

sub205

Schriftsteller



Beiträge: 916
Wohnort: Gründau

Was für eine MCU und was für eine Entwicklungsumgebung benutzt du denn da?
Falls PIC: Nehm das original-Zeug von Microchip. LCD-Libraries gibts da wie Sand am Meer.
Schau dir die Sprut-Seite mal an!

Solltest von allem das du benutzt auch die Quellen da haben.

Notfalls kannst du dir auch eine der unzähligen HD44780-Libs im Netz raussuchen und anpassen.

_________________
gruß, Stephan

sudo make me a sandwich

BID = 956331

Marlight

Gerade angekommen


Beiträge: 13

Ich benutze den MikroC for PIC Compiler von MikroElektronika.
Ich bin so auch sehr zufrieden mit und habe auch die Voll-Version. Mit den Compilern von Microship komme ich nicht klar.

BID = 956340

sub205

Schriftsteller



Beiträge: 916
Wohnort: Gründau

Dann schreib dir die Library neu oder organisiere dir den Quellcode davon.

http://www.circuitvalley.com/2011/0......html

Unten hängt er ein Archiv an mit der lcd16.c - diese kannst du für deine Zwecke adaptieren.

Die HD44780-Displays lernt jeder Student im ersten Semster MCL zu programmieren, so schwer ist das nicht.

Aber mit ner Blackbox-Library ranzugehen bringt nichts! Ich spreche aus Erfahrung.

Ich erspare mir meist, irgendwelchen fertigen Code zu nehmen sondern schreib mir schnell was selbst, dann weiß man auch was da wirklich vorsich geht.

_________________
gruß, Stephan

sudo make me a sandwich

BID = 956342

Marlight

Gerade angekommen


Beiträge: 13

Danke

Ja da gebe ich dir recht, was man selbst schreibt, hat man immer im Blick ^^
Ich selbst programmiere Hobbymäßig PHP. Da schreibe ich mir auch lieber so viel es geht selbst, damit ich dann auch weiß wie alles funktioniert und zu funktionieren hat. PIC C brauche ich jetzt nur in meiner Ausbildung zum Elektroniker für Geräte und Systeme.

Aber noch eine kleine Sache.
Ich habe für ein kleines Menü einen Inkrementalgeber mit Taster.
Da ich leider bei dem entwerfen des Schaltplans nicht so darauf geachtet hatte wo ich ich den anschließe (warum auch immer), ist dieser nicht an einem Interrupt.
Ich möchte den aber richtig auswerten, ich habe noch das Problem das er manchmal in die falsche Richtung zählt. (Links => runter zählen / Rechts => hoch zählen)



Code :

      if(PORTF.RF5 == 1 || PORTF.RF4 == 1){

if(PORTF.RF4 == 1){
encoder = 1;
m++;
}
if(PORTF.RF5 == 1 && encoder == 0){
m--;
}
if(m < 1) m = 5;
if(m > 5) m = 1;
LCD8_CHR(1, 1, (m + 48));
encoder = 0;
delay_ms(500);
}



hast du da vllt noch eine Idee, wie man zumindest die Häufigkeit von diesen Bug verringern oder auch ganz beheben kann?

BID = 956349

sub205

Schriftsteller



Beiträge: 916
Wohnort: Gründau

Ein Delay von ner halben Sekunde ist für einen Inkrementialgeber zu hoch.
Ohne Interrupt solltest du den viel öfter abfragen.
Ich würde hier mit 20-50mS rechnen, ansonsten geht dir zu viel Auflösung verloren und die Schritte werden falschherum interpretiert.

_________________
gruß, Stephan

sudo make me a sandwich


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 12 Beiträge verfasst
© x sparkkelsputz        Besucher : 182399389   Heute : 6587    Gestern : 7548    Online : 607        25.11.2024    20:51
11 Besucher in den letzten 60 Sekunden        alle 5.45 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0527019500732