mikrocontroller.net

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


Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 =)

Autor: Maik Fox (sabuty) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter Dannegger (peda)
Datum:

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


Peter

Autor: gfgffgfgf (Gast)
Datum:

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

Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
diese displays :
http://www.pollin.de/shop/dt/MTczOTc4OTk-/Baueleme...

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 ?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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-Tu...

Autor: Enabler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
^^ was muss an die Enable-leitung ran ?

Der "Enable"-Eingang des Displays.

Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Charly B. (charly)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rudi D. (rulixa)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ^^

Autor: Hans Mayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaltplan? Dein Code?

Autor: Patrick Lehners (Gast)
Datum:

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

Autor: Uwe N. (ex-aetzer)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Winfried (Gast)
Datum:

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

Autor: Chris M. (shortie)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe N. (ex-aetzer)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans-Georg Lehnard (h-g-l)
Datum:

Bewertung
0 lesenswert
nicht 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 ^^

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: david (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans-Georg Lehnard (h-g-l)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans-Georg Lehnard (h-g-l)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Charly B. (charly)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Charly B. (charly)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 = /

Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fehler im text ^^ zeile 3 erste wort sollte lcd heissen ^^

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick Lehners schrieb:
> Lcd´s

Patrick Lehners schrieb:
> LCD´s

bitte hör mit den Deppenapostrophen auf.

Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();
  }
 }
}

Autor: Düsendieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick Lehners (xpaddy)
Datum:

Bewertung
0 lesenswert
nicht 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 -.-

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: me (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CodeVisionAVR?
bei den alten Versionen (bis v2.04) erfolgte die Portdefinition per 
Assembler. Wie im Headerfile auch nachzulesen war.
BEFORE #include -ING THIS FILE YOU
  MUST DECLARE THE I/O ADDRESS OF THE
  DATA REGISTER OF THE PORT AT WHICH
  THE LCD IS CONNECTED!

  EXAMPLE FOR PORTB:

    #asm
        .equ __lcd_port=0x18
        .equ __lcd_cntr=0x18
    #endasm
    #include <lcd.h>
[...]
#pragma used-
#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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick Lehners (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 =)

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick Lehners (xpaddy)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 -.-

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: holger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Versuch das mal mit dem Anhang;)

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick Lehners (xpaddy)
Datum:

Bewertung
0 lesenswert
nicht 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 ^^

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.