Forum: Mikrocontroller und Digitale Elektronik Wie viel LCD´s kann man gleichzeitig mit dem Atmega32 ansteuern ?


von Patrick Lehners (Gast)


Lesenswert?

Hallo,
ich hab mal ne doofe Frage ^^
bin gerade an einem Projekt und wollte mal wissen ob es möglich ist 3 
Lcd´s gleichzeitig mit dem Atmega32 anzusteuern, d.h. auf jedem Display 
etwas anderes anzeigen zu lassen. Programmiere mit CodeVision.

Danke schon mal im Vorraus für die Antworten =)

von Maik F. (sabuty) Benutzerseite


Lesenswert?

So ein paar hundert Displays sind problemlos möglich, der Aufwand liegt 
nur in der Adressdekodierung für die einzelnen Displays.

3 Displays sind also problemlos möglich. Der Trick ist, die Datenbusse 
parallel zu schalten und die Enable-Leitungen getrennt anzusteuern.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Patrick Lehners schrieb:
> ob es möglich ist 3 Lcd´s gleichzeitig mit dem Atmega32 anzusteuern
Was für LCDs?
So "normale" DOT-Matrix-Anzeigen oder passive/aktive STN/TFT...

von Peter D. (peda)


Lesenswert?

Ohne zusätzliche ICs:
32 IO - 4 * Daten - 1 * RS = 27


Peter

von gfgffgfgf (Gast)


Lesenswert?

wenn man für die enable leitugen noch schieberegister einsetzt ...
werden es nochmal mehr

von Patrick Lehners (Gast)


Lesenswert?

diese displays :
http://www.pollin.de/shop/dt/MTczOTc4OTk-/Bauelemente/Aktive_Bauelemente/Displays/LCD_Modul_TC1604A_01.html

Und danke schon mal für die ganzen Antworten. Ich bin ziemlicher Laie, 
gerade meine Ausbildung abgeschlossen und muss nochmal ne dumme Frage 
stellen ^^ was muss an die Enable-leitung ran ?

von Falk B. (falk)


Lesenswert?

@  Patrick Lehners (Gast)

>http://www.pollin.de/shop/dt/MTczOTc4OTk-/Baueleme...

Ein Klassiker.

>stellen ^^ was muss an die Enable-leitung ran ?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung

von Enabler (Gast)


Lesenswert?

^^ was muss an die Enable-leitung ran ?

Der "Enable"-Eingang des Displays.

von Patrick Lehners (Gast)


Lesenswert?

Gut soweit alles gecheckt, aber reicht es nicht wenn ich jetzt mit dem 
Wizard arbeite und halt für zum beispiel port b/c/d jedesmal ein lcd 
initialisiere ? sollte das dann nicht funktionieren ?

von Peter D. (peda)


Lesenswert?

Da mußt Du mal in die Doku Deines Wizzard nachschauen.

Ein Wizzard hat ein großes Problem, dessen Entwickler muß immer schlauer 
als der Benutzer sein. Er muß alle möglichen Funktionen vorhersehen und 
verfügbar machen.

Aber keiner ist Supermann und daher wird in der Regel auf Wizzards 
verzichtet, sobald Programme über Anfängerniveau hinaus wachsen.

Ein Wizzardentwickler sollte deshalb alle Funktionen auch als Sourcetext 
verfügbar machen, damit der Anwender sie modifizieren kann, wenn er 
nicht vorhergesehene Funktionen benötigt.

Oftmals erzeugt ein Wizzard aber völlig unlesbaren Assembler, sodaß man 
dann doch die ganze Funktion selber schreiben muß.

Für LCDs gibt es aber reichlich Beispielcode, den man modifizieren kann, 
z.B.:

http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip


Peter

von Charly B. (charly)


Lesenswert?

wenn du auf den Wizzard angewisen bist lass es bleiben, das wird nix

der richtige weg ist: nimm dir ein LCD und schreib ein
Programm das es initialisiert und Daten darauf ausgibt

dann hast du das ganze verstanden und kannst auch mehrere
LCD's ansteuern

vlG
Charly

von Rudi D. (rulixa)


Lesenswert?

Patrick Lehners schrieb:
> gerade meine Ausbildung abgeschlossen und muss nochmal ne dumme Frage
> stellen ^^ was muss an die Enable-leitung ran ?

Beitrag "DDS 24 Bit in C?"

Da hast du u.a. ein realisiertes reichlich kommentiertes Beispiel zur 
Displayansteuerung.

LG Rudi

von Patrick Lehners (Gast)


Lesenswert?

Hardwaremässig hab ich alles hinbekommen, aber ich weiss echt nicht 
weiter wie ich die lcds unterscheiden kann also unabhängig von einander 
was auf den ausgeben kann ... ich mein wenn ich jetzt lcd_gotoxy oder so 
benutze weiss der atmega doch gar nicht welches lcd gemeint ist ...
bitte helft mir ^^

von Hans Mayer (Gast)


Lesenswert?

Schaltplan? Dein Code?

von Patrick Lehners (Gast)


Lesenswert?

hab ich noch nicht digital, sobald ich es digital habe, werde ich das 
hier hochladen...dauert noch 1-2 tage

von Uwe N. (ex-aetzer)


Lesenswert?

Patrick Lehners schrieb:
> Hardwaremässig hab ich alles hinbekommen, aber ich weiss echt nicht
> weiter wie ich die lcds unterscheiden kann also unabhängig von einander
> was auf den ausgeben kann ... ich mein wenn ich jetzt lcd_gotoxy oder so
> benutze weiss der atmega doch gar nicht welches lcd gemeint ist ...

Das wurde bereits im ersten Posting erwähnt: die ENABLE-Leitung - das 
ist bei deinem Display Pin 6. Die sind i.d.R. Low-active, d.h. du musst 
dieses Pin auf GND ziehen (mit deinem µC), dann kannst du mit dem 
LC-Display reden. Wenn du mehrere ansteuern willst, brauchst du eben 
mehr ENABLE-Pins am µC.

Achja, verabschiede dich von dem Gedanken mehrere Displays gleichzeitig 
anzusteuern. Du kannst jeweils nur eines bedienen, die anderen müssen 
warten. Da das ein µC recht schnell kann, sieht es so aus, als würden 
alle gleichzeitig angesprochen.

Gruss Uwe

von Patrick Lehners (Gast)


Lesenswert?

also mir ist klar dass ich sie nicht genau zur selben Zeit ansteuern 
kann das ist mir eigentlich auch egal ^^ reicht wenns 100 mikrosekunden 
später kommt.

Ich sitze an einem Projekt für die FOS welches das Thema Verkehrkonzepte 
hat, wir wollen den LKW-Verkehr vom Individualverkehr trennen.

Auf den LCD´s soll dann PKW oder LKW angezeigt werden

Mein Plan war :

LCD 1 :
RS  =PA0
R/W =PA2
E   =PA1
DB4 =PA4
DB5 =PA5
DB6 =PA6
DB7 =PA7

LCD 2 :
RS  =PB0
R/W =PB2
E   =PB1
DB4 =PB4
DB5 =PB5
DB6 =PB6
DB7 =PB7

LCD 3 :
RS  =PC0
R/W =PC2
E   =PC1
DB4 =PC4
DB5 =PC5
DB6 =PC6
DB7 =PC7


Alle offenen Eingänge über Pull-Down-Widerstände(10k)auf Masse

von Karl H. (kbuchegg)


Lesenswert?

Patrick Lehners schrieb:

> LCD 1 :
> ...
> LCD 2 :
> ...
> LCD 3 :
> ...

Du verschwendest viel zu viele Pins.
Du kannst alle Pins aller LCD parallel schalten. Nur jeweils die E 
Leitung jedes LCD muss ihren eigenen Pin haben.

Es reagiert immer nur jenes LCD, über dessen E Pin der Übernahme-Puls 
kommt.

von Winfried (Gast)


Lesenswert?

10K Pullup ist gängig, aber 10K Pull-Down? Warum legst du die nicht 
direkt auf Masse?

von Chris M. (shortie)


Lesenswert?

Anderer Plan:

LCD 1 :
E  =PA0

LCD 2 :
E   =PA1

LCD 2 :
E   =PA2

LCD 1-3 :

R/W =PC2
RS  =PC3
DB4 =PC4
DB5 =PC5
DB6 =PC6
DB7 =PC7

von Uwe N. (ex-aetzer)


Lesenswert?

Dein Plan ist suboptimal ;-)

Du kannst alle Datenleitungen (DB4-DB7) mit einem Port bedienen 
(parallel schalten), sowie RS und R/W - dann benötigst du insgesamt nur 
einen Port.
Dazu einen anderen Port für die "ENABLE" Leitungen und fertig.

von Hans-Georg L. (h-g-l)


Lesenswert?

Patrick Lehners schrieb:
> Hardwaremässig hab ich alles hinbekommen, aber ich weiss echt nicht
> weiter wie ich die lcds unterscheiden kann also unabhängig von einander
> was auf den ausgeben kann ...

> ich mein wenn ich jetzt lcd_gotoxy oder so

Du musst deinen Displays eine Adresse geben und deine LCD Funktionen 
erweitern.

Aus  lcd_gotoxy(intx, int y) wird dann lcd_n_gotoxy(intx, int y, int 
LCD_num)


> benutze weiss der atmega doch gar nicht welches lcd gemeint ist ...
> bitte helft mir ^^

von Karl H. (kbuchegg)


Lesenswert?

Und bitte Codemässig nicht so vorgehen, wie man es in solchen Fällen 
häufig sieht: Einfach alle Funktionen duplizieren (bei dir dann 
triplizieren) und dann gibt es ein

  lcd_init1
  lcd_init2
  lcd_init3

ein
  lcd_putchar1
  lcd_putchar2
  lcd_putchar2

ein
  lcd_gotoxy1
  lcd_gotoxy2
  lcd_gotoxy3

etc. etc.

Man kann ruhig die Funktionen so aufbohren, dass man ihnen zusätzlich zu 
den normalen Parametern auch noch die LCD Nummer mitgibt. Eine lcd_init 
kann ruhig alle 3 LCD hintereinander initialisieren, etc. etc.

Ein bischen mit Verstand an die Sache rangehen und nicht mit der 
Brechstange

von david (Gast)


Lesenswert?

du willst ja nur daten anzeigen und nicht lesen, also kannst du r/w auf 
0V und nur E muss auf ver. Leitungen sein, alle unproblematisch so lange 
die Displays passiv sind.

LCD 1 :
RS  =PA0
R/W =0V
E   =PB0
DB4 =PA4
DB5 =PA5
DB6 =PA6
DB7 =PA7

LCD 2 :
RS  =PA0
R/W =0V
E   =PB1
DB4 =PA4
DB5 =PA5
DB6 =PA6
DB7 =PA7

LCD 3 :
RS  =PA0
R/W =0V
E   =PB2
DB4 =PA4
DB5 =PA5
DB6 =PA6
DB7 =PA7

von Hans-Georg L. (h-g-l)


Lesenswert?

Uwe N. schrieb:
> Dein Plan ist suboptimal ;-)
>
> Du kannst alle Datenleitungen (DB4-DB7) mit einem Port bedienen
> (parallel schalten), sowie RS und R/W - dann benötigst du insgesamt nur
> einen Port.
> Dazu einen anderen Port für die "ENABLE" Leitungen und fertig.

Beim parallelschalten der Datenleitungen beachten, das immer nur 1 
Display enabled ist, sonst gibts beim Lesen Mist und Kurzschluss.

von Hans-Georg L. (h-g-l)


Lesenswert?

david schrieb:
> du willst ja nur daten anzeigen und nicht lesen, ....

Vorsicht bei kopierten Quellcodes ... es gibt genügend 
Initialisierungsroutinen für LCD, welche die Statusbits zurücklesen.

von Patrick Lehners (Gast)


Lesenswert?

Das klingt ja schonmal besser = ) Dankeschön ^^
Jetzt hoffe ich mal dass ich das mit der LCD initialisierung ohne CV 
Wizard hinbekomme ^^ Wenn nicht meld ich mich nochmal = P

von Charly B. (charly)


Lesenswert?

Winfried schrieb:
> 10K Pullup ist gängig, aber 10K Pull-Down? Warum legst du die nicht
> direkt auf Masse?

BRING DEM JUNGEN DOCH KEIN SO QUATSCH BEI !!!!

dann schaltet er so ein pin als ausgang und gibt H Pegel
aus, wass dann ????

( immer zuerst Hirn einschalten ( falls vorhanden :P ) )

vlG
Charly

von Karl H. (kbuchegg)


Lesenswert?

Charly B. schrieb:

> dann schaltet er so ein pin als ausgang und gibt H Pegel
> aus, wass dann ????

Es war von den 'offenen Eingängen' des LCD die Rede

von Michael U. (amiga)


Lesenswert?

Hallo,

er redet doch vermutlich von den Displays bei seinen PullUps.
Normalerweise haben die interne PullUp oder PullDown und D0...D3 bleiben 
im 4Bit-Mode einfach offen.

Gruß aus Berlin
Michael

von spess53 (Gast)


Lesenswert?

Hi

Das ist trotzdem Blödsinn, da die LCD-Controller interne Pull-Ups haben.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

spess53 schrieb:

> Das ist trotzdem Blödsinn,

das allerdings.

Denn wenn man die falsche Variante wählt, könnte es schwer werden, das 
LCD erst mal in den 4-Bit Mode zu bekommen.

von Charly B. (charly)


Lesenswert?

es war von offenen Eingaengen die rede, es wurde nicht spezifiziert
das es nur die vom LCD sind; genaugenommen hat er doch keine offene
Eingaenge mit der beschaltung, sind alles I/O pins und sowas gehoert
definitiv nicht auf Masse noch auf VCC oder sonst wohin wo der
Strom unkontrollierbar ist (und jetzt nicht sagen er ist ja ueber
das Ri der Netzteils begrenzt ;) )

vlG
Charly

von Patrick Lehners (Gast)


Lesenswert?

Ehhhm...^^
kann mir einer sagen wo dem atmega gesagt wird auf welchem port der 
atmega ist und welcher pin wofür zuständig ?
Hab im Wizard ein Port angeklickt und dann kamen nur die beiden 
Textzeilen dabei raus die für das Display zuständig waren :

#include <alcd.h>
(...)
lcd_init(16);

dann dachte ich mir natürlich das wird irgendwo in der header festgelegt 
aber da hab ich nix brauchbares gefunden = /

von Patrick Lehners (Gast)


Lesenswert?

fehler im text ^^ zeile 3 erste wort sollte lcd heissen ^^

von Vlad T. (vlad_tepesch)


Lesenswert?

Patrick Lehners schrieb:
> Lcd´s

Patrick Lehners schrieb:
> LCD´s

bitte hör mit den Deppenapostrophen auf.

von Patrick Lehners (Gast)


Lesenswert?

Ich bastel jetzt seit 5 Stunden am Quellcode rum und komm einfach nicht 
dahinter wie ich lcd_init verändern kann bzw auf die enable-leitung 
zugreifen kann =/ hier mal mein quellcode den ich bis jetzt geschrieben 
habe:

#include <mega32.h>
#include <alcd.h>
#include <delay.h>

void lcd1(void)         //Funktion für erstes Display
{
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 0
// RD - PORTB Bit 1
// EN - PORTA Bit 0
// D4 - PORTB Bit 4
// D5 - PORTB Bit 5
// D6 - PORTB Bit 6
// D7 - PORTB Bit 7
// Characters/line: 16
lcd_init(16);
}
void lcd2(void)  //Funktion für zweites Display
{
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 0
// RD - PORTB Bit 1
// EN - PORTA Bit 1
// D4 - PORTB Bit 4
// D5 - PORTB Bit 5
// D6 - PORTB Bit 6
// D7 - PORTB Bit 7
// Characters/line: 16
lcd_init(16);
}

void main(void)
{
 PORTA=0x00;  //Definition der Ausgänge
 DDRA=0x00;
 PORTB=0x00;
 DDRB=0x00;
 PORTC=0x00;
 DDRC=0x00;
 PORTD=0x00;
 DDRD=0x00;

 while(1)
 {
  if(PIND.7==1)       //PORT-Abfrage
  {
  lcd1();             //Aufruf der Funktion(LCD-INIT) Display 1
  lcd_gotoxy(0,0);
  lcd_putsf("lcd");

  }
  if(PIND.7==0)       //PORT-Abfrage
  {
  lcd1();
  delay_ms(50);
  lcd_clear();
  }
  if(PIND.6==1)
  {
  lcd2();             //Aufruf der Funktion(LCD-INIT) Display 2
  lcd_gotoxy(0,0);
  lcd_putsf("lcd");
  }
  if(PIND.6==0)
  {
  lcd2();
  delay_ms(50);
  lcd_clear();
  }
 }
}

von Düsendieb (Gast)


Lesenswert?

so einfach geht das nicht.

Schreib erst mal ein Programm in dem nur ein LCD vorkommt und bring das 
ans Laufen.

Da such in dem Programm wo überall auf die E Leitung zugegriffen wird 
und schalte dann Displayabhängig auf die verschiedenen Ausgänge um.

von Karl H. (kbuchegg)


Lesenswert?

Patrick Lehners schrieb:
> zugreifen kann =/ hier mal mein quellcode den ich bis jetzt geschrieben
> habe:

Das Problem ist, dass du die in deinem Fall wirklich wichtigen Teile, 
nämlich die LCD-Funktionen eben NICHT selber geschrieben hast, sondern 
dass du das einem Wizard überlassen hast.
Und der ist nicht darauf ausgelegt, dass man mit ihm 2 LCD ansteuert. 
Der kann das einfach nicht. Das musst du selber händisch machen, wobei 
du dich natürlich an dem was der Wizard generiert hat orientieren 
kannst. Aber du kannst das NICHT einfach 1:1 übernehmen.

von Patrick Lehners (Gast)


Lesenswert?

Ja, aber für mich ist die Frage wie ^^ ich hab das in der Ausbildung nie 
gelernt ein Display selbst zu initialisieren, ich hab mir schon das Tut 
hier angeguckt aber werde da auch nicht richtig schlau draus was ich 
jetzt von den ganzen funktionen da brauche und wie ich festlege wo die 
enableleitungen angesteuert werden -.- mein kopf qualmt hier schon wie 
bekloppt = D
Wenn ich den quellcode oben benutze ohne die funktion lcd2 dann 
funktioniert alles auch einwandfrei -.- aber sobald ein zweites dazu 
kommt, geht gar nix mehr xD

von Karl H. (kbuchegg)


Lesenswert?

Patrick Lehners schrieb:
> Ja, aber für mich ist die Frage wie ^^ ich hab das in der Ausbildung nie
> gelernt ein Display selbst zu initialisieren, ich hab mir schon das Tut
> hier angeguckt aber werde da auch nicht richtig schlau draus was ich
> jetzt von den ganzen funktionen da brauche und wie ich festlege wo die
> enableleitungen angesteuert werden -.- mein kopf qualmt hier schon wie
> bekloppt = D

Willkommen im Club.
Dann wirst du dir die Init-Funktionen, die der Wizard generiert hat, mal 
zu Gemüte führen müssen und analysieren müssen.

Aus dem Tut weißt du ja, was zu passieren hat. Jetzt musst du es nur 
noch im vom Wizard generierten Code wiederfinden.

Sorry.
Aber da musst du durch.
Fremden Code analysieren zu können, ist eine der Grundfähigkeiten, die 
man als Programmierer lernen muss. Wobei du es sogar insofern leicht 
hast, weil du
a) weißt, dass die Funktion funktioniert. und du
b) sogar relativ detailierte Beschreibungen hast, was da konzeptionell
   passieren muss.

Aber aus einem Code rauslesen, welcher Pin an welchem Port wo im Code 
angesteuert wird, das musst du alleine schaffen. Denn sonst brauchst du 
dich da gar nicht weiter in die Programmierung vertiefen sondern lieber 
jemanden anheuern, der seine Hausaufgaben gemacht hat und nicht von 
einem Wizard abhängig ist.

> aber sobald ein zweites dazu
> kommt, geht gar nix mehr xD

Wie schon gesagt:
du KANNST nicht einfach die vom Wizard generierten Funktionen benutzen. 
Du musst in diese Funktionen hinein und die abändern!
Du kannst jetzt lcd_init aufrufen wie du lustig bist. Solange du die 
lcd_init selber nicht an deine spezifische Situation anpasst, wird das 
nie was.

Ja! Da muss man sich die Hände schmutzig machen.

von Patrick L. (xpaddy)


Lesenswert?

Ja das hab ich ja versucht, aber wo steht denn geschrieben was lcd_init 
beinhaltet ? ich hab die header-datei alcd.h geöffnet aber da war nur 
eine kurze deklaration von lcd_init -.-

von Karl H. (kbuchegg)


Lesenswert?

Tja.
Dann musst du suchen.
Irgendwo muss die Funktion sein.

In einer fertigen Lib kann sie nicht sein, denn dann würde man die 
Pinbelegung nicht mehr reinbringen. D.h. man könnte schon, aber dann 
würden deine Aufrufe nicht beide male

   lcd_init(16)

bei abweichender Pinbelegung lauten.

von Vlad T. (vlad_tepesch)


Lesenswert?

junge, wie wärs mit nachdenken!
du kannst dich noch so dumm stellen, dir wird hier niemand dein Zeug 
programmieren, nur helfen.

Niemand hier hat gelernt, wie man ein ldc initialisiert.
Das verrät einem das Datenblatt oder Referenzimplementierungen.
Du hast das Glück, dass du beides hast.

1) du solltest wissen, dass es zu einer h-Datei meist auch eine c-Datei 
gibt.
2) du solltest wissen, dass dem Compiler auch die Implementierung (oder 
dem Linker ein entsprechendes Objekt) bekannt sein muss, damit eine 
ausführbare Datei erzeugen werden kann.

wenn du das nicht weißt, solltest du die Mikrokontroller erst mal zu 
Seite legen und dich mit C und einer zugehörigen Toolchain auf dem PC 
beschäftigen, sonst hat das alles nämlich keinen Sinn.

wenn du das weißt, dann sollte es kein Problem sein, das zugehörige 
Codefile zu finden. (vorausgesetzt, es wird nicht als fertig compilierte 
Bibliothek mitgeliefert)

von Patrick Lehners (Gast)


Lesenswert?

@Vlad Tepesch : Danke für diese netten Kommentare von dir ; )
Tut mir leid dass ich mich mit C-Programmierung nicht allzu gut auskenne 
und den MC für ein Schulprojekt programmieren soll...

von Karl H. (kbuchegg)


Lesenswert?

Vlad Tepesch schrieb:

> wenn du das weißt, dann sollte es kein Problem sein, das zugehörige
> Codefile zu finden. (vorausgesetzt, es wird nicht als fertig compilierte
> Bibliothek mitgeliefert)

Fertige Bib, denke wirds nicht sein. Hier hat er das Glück, dass man in 
sowas die Pinbelegung nur sehr umständlich reinbringt.

Allerdings: Wenn ich nach einer gewissen Zeit die Funktionen nicht finde 
(was mit einem Debugger nicht allzuschwer sein sollte. Einfach im 
Single-Step hineinsteppen und der Debugger sucht mir das File), dann geh 
ich über zu Plan B:
Scheiss auf den Wizard mit seinen LCD-Funktionen. Nehm ich halt frei 
verfügbare und bring die erst mal mit 1 LCD zum laufen. Dann hab ich die 
Funktionen und kann sie entsprechend ändern.


Aber die Attitüde "Da hab ich einen Wizard und ansonsten will ich mir 
die Hände nicht schmutzig machen", die bringt einen nicht weiter.

von me (Gast)


Lesenswert?

CodeVisionAVR?
bei den alten Versionen (bis v2.04) erfolgte die Portdefinition per 
Assembler. Wie im Headerfile auch nachzulesen war.
1
BEFORE #include -ING THIS FILE YOU
2
  MUST DECLARE THE I/O ADDRESS OF THE
3
  DATA REGISTER OF THE PORT AT WHICH
4
  THE LCD IS CONNECTED!
5
6
  EXAMPLE FOR PORTB:
7
8
    #asm
9
        .equ __lcd_port=0x18
10
        .equ __lcd_cntr=0x18
11
    #endasm
12
    #include <lcd.h>
13
[...]
14
#pragma used-
15
#pragma library lcd.lib

Den Rest findet man wie zu erwarten in der lcd.lib. Ist schöner ASM-Code 
und einfach zu erweitern oder anzupassen.
Bei der v2.05 dürfte der fragliche Inhalt vermutlich in alcd.lib zu 
finden sein. Diese Version kenne ich zwar nicht, aber so große Schritte 
hat HPInfoTech zwischen den Versionen eigentlich nie gemacht.

von Karl H. (kbuchegg)


Lesenswert?

Patrick Lehners schrieb:
> @Vlad Tepesch : Danke für diese netten Kommentare von dir ; )
> Tut mir leid dass ich mich mit C-Programmierung nicht allzu gut auskenne
> und den MC für ein Schulprojekt programmieren soll...

Und warum nimmst du dir dann ein Schulprojekt, von dem du im Vorfeld 
nicht schon weißt, dass du es stemmen kannst?

Ehe ich einem Projekt zusage, klär ich doch erst mal ab (zb durch 
Vorversuche) ob ich das überhaupt hinkriegen werde und was es da alles 
zu tun gibt! Was denkst du, wie wir Auftragsangebote machen? Sicher 
nicht, indem wir dem Kunden in die hohle Hand hinein irgendwelche Dinge 
zusagen.

von Patrick Lehners (Gast)


Lesenswert?

Haben wir zugeteilt bekommen .... ist ja jetzt auch egal, ich versuch 
das jetzt irgendwie hinzubekommen und dann ist gut, danke für die ganzen 
hilfreichen tipps =)

von Vlad T. (vlad_tepesch)


Lesenswert?

Patrick Lehners schrieb:
> @Vlad Tepesch : Danke für diese netten Kommentare von dir ; )
man tut was man kann ;-P
> Tut mir leid dass ich mich mit C-Programmierung nicht allzu gut auskenne
> und den MC für ein Schulprojekt programmieren soll...

wenn du mit Ski einen Rodelhügel im Park (der PC) noch nicht mal sicher 
runterfahren kannst, würdest du dann zum Skifahren in die Alpen (µC) 
fahren?

Woher willst du denn im Fehlerfall wissen, ob der Fehler in der 
Programmlogik, der Ansteuerung der Peripherie oder in der Schaltung 
liegt.

von Peter D. (peda)


Lesenswert?

Im Prinzip kann man sich mal Code für ein 4*40 LCD anschauen, das 
besteht nämlich aus 2 Stück 2*40 LCDs, d.h. es hat 2 E-Pins.

Beitrag "LCD Treiber Routine 4*40"

Eine Erweiterung auf 3 LCDs sollte dann einfach sein.


Peter

von Patrick L. (xpaddy)


Angehängte Dateien:

Lesenswert?

Hey, ich bins nochmal, ich saß jetzt zwei Tage an dem Quellcode der 
angehängt ist, könnte sich den vllt mal jemand anschauen ?
Und mir sagen ob ich auf dem richtigen Weg bin ? Weil iwie zeigt mir 
kein LCD was an -.- ausser die schwarzen Balken -.-

von Karl H. (kbuchegg)


Lesenswert?

IMHO bist du schon viel zu weit gegangen.


Ehe du dich auf 2 LCD stürzt, sieh zu, dass du mit dem Code (wo immer du 
den auch her hast) erst mal 1 LCD ansteuern kannst. Eines ganz alleine.
Solange das nicht klappt, brauchst du gar nicht erst versuchen ein 2tes 
dazuzuhängen. Ein 2.tes LCD verkompliziert die Sache höchstens, macht 
sie aber nicht einfacher. Wenn es daher mit 1 LCD schon nicht klappt, 
wird es auch mit 2en nicht klappen.

Und wenn du dann Code hast, der mit 1 LCD klar kommt, dann machst du 
kleine Änderungen am Code! zb erst mal nur die Initialisierung der 
beiden LCD. Keine Rundumschlagaktionen ala "Ich schreib jetzt erst mal 
alles um". Denn das kann nur ins Auge gehen!

von holger (Gast)


Angehängte Dateien:

Lesenswert?

Versuch das mal mit dem Anhang;)

von Spess53 (Gast)


Lesenswert?

Hi

>Und mir sagen ob ich auf dem richtigen Weg bin ?

Nicht so richtig. Was hast du an dem nicht verstanden:

Beitrag "Re: Wie viel LCD´s kann man gleichzeitig mit dem Atmega32 ansteuern ?"

>Weil iwie zeigt mir kein LCD was an -.- ausser die schwarzen Balken -.-

Hast du überhaupt schon ein Display erfolgreich angesteuert?

MfG Spess

von Patrick L. (xpaddy)


Lesenswert?

Also, ein Display anzusteuern ist überhaupt kein Problem...
Mein Problem ist dass ich auf 3 Displays verschiedene Sachen anzeigen 
will und dann kommt der Enable 2 und 3 mit ins Spiel und ich check gar 
nix mehr xD ich hab den Quellcode hier aus dem TuT und hab den dann 4 
Stunden lang versucht umzuschreiben, ich glaub das ist auch gar nicht so 
falsch wasi hc gemacht hab ^^

von Spess53 (Gast)


Lesenswert?

Hi

>ich glaub das ist auch gar nicht so
>falsch wasi hc gemacht hab ^^

Z.B.

>// Cursor in die 1. Zeile, 0-te Spalte
>void lcd_home_1( void );
>void lcd_home_2( void );
>void lcd_home_3( void );

Drei Routinen! Mach eine draus:

void lcd_home(... disp_nr ); (fehlt noch was. Kann kein C)

Und das machst allen anderen Routinen auch. Wie willst du denn deine 
Routinen sonst vernünftig anwenden. Riesen case-Orgie?

MfG Spess

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.