Forum: Mikrocontroller und Digitale Elektronik Pollin-LCD über I2C ansteuern


von astroscout (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe das LCD WD-C2704M-1HNN (4 Zeilen x 27 Zeichen, 8 Taster) von 
Pollin.
Ich möchte dieses LCD nun für ein Projekt von mir nutzen und es über TWI 
ansteuern um am Haupt-Mikrokontroller einige Pins zu sparen. Dazu habe 
ich mir jetzt eine kleine Schaltung mit einem Atmega8 erstellt, der die 
Verbindung zwischen dem TWI-Bus und dem LCD herstellen soll.

Könnt ihr mal drüber schauen??
Villeicht habt ihr ja noch Verbesserungsvorschläge oder findet Fehler in 
der Schaltung.
Danke!!

von jack (Gast)


Lesenswert?

Na ja, das LCD läßt sich genauso gut über ein Schieberegister
(74HC595) ansteuern, ein eigener µC dafür erscheint mir ein bißchen
zu aufwendig.

von astroscout (Gast)


Lesenswert?

Danke für deine Antwort.
An ein Schieberegister habe ich auch bereits gedacht. Das halte ich hier 
allerding für weniger gegeignet, da ich ja im prizip 2 LCD-Controller 
und die Taster ansteuern möchte.
Des Weiteren will ich das ganze von der Ansteuerung so einfach wie 
möglich halten und den LCD-Mikrokontroller mit verschiedenen Modien 
versehen, sodass sich der Hauptkontroller nicht mehr um so Dinge wie 
LCD-Scrollen oder ähnliches kümmern muss.

von Chris S. (schris)


Lesenswert?

Interrupt-Leitung für I2C. Solltest du für Projekte nicht dauern pollen 
wollen, ob eine Taste gedrückt ist, dann sollte so ein Pin vorhanden 
sein. Es stehen noch Pins zur Verfügung. Osc könnte weggelassen werden 
und mit
dem internen Takt gearbeitet werden. Weiters, pull-downs an den D0-D7, 
wo du willst über Jumper, würde 2 Vorschlagen, auch nur eines, damit du 
ev. die Addresse des LCD Jumpern kannst. Musst es ja nicht bestücken.
Weiters würde ich die Tasten vom PortB wegnehmen, und D0-D7 mitbenutzen,
was noch übrig ist, und die freiwerdenden Tasten ev. für Led(matrix) 
nehmen. Es passiert oft, daß zusätzlich zu den Tasten usw noch ein paar 
Leds gebraucht werden. Kontrasteinstellung, auch da kann das Poti durch
ein PWM (ohne Kondensator sowie Low-pass, sollte aber bestückbar sein)
ersetzt werden. Weiters, Buzzer sowie LED ansteuerung (backlight) sowie
Helligkeitsmessung, auch das könnte man bei anderem Display gebrauchen.
Es fragt sich, wie Universell du das brauchst, und ob es sich lohnt,
da Arbeit reinzustecken.

von astroscout (Gast)


Lesenswert?

Erstmal Danke für deine Ausführliche Antwort!!
1
Interrupt-Leitung für I2C. Solltest du für Projekte nicht dauern pollen
2
wollen, ob eine Taste gedrückt ist, dann sollte so ein Pin vorhanden
3
sein. Es stehen noch Pins zur Verfügung.
Ich kann doch, wenn ein Taster gedrückt wurde, den Mikrokontroller 
anweisen, dies über den I2C an den Hauptprozessor zu senden. Wofür wird 
dann die interruptleitung benötigt (ich bin was I2C angeht noch totaler 
Anfänger!!!9

1
Osc könnte weggelassen werden und mit dem internen Takt gearbeitet werden.
ich war mir nicht sicher, ob der interne Takt genau genug ist um mit der 
TWi-Schnittstelle zu arbeiten, aber wenn du das sagst, werde ich diesen 
weg lassen.

1
Weiters, pull-downs an den D0-D7, wo du willst über Jumper, würde 2 Vorschlagen, auch nur eines, damit du ev. die Addresse des LCD Jumpern kannst. Musst es ja nicht bestücken.
Gute Idee, da hab ich noch garnicht drüber nachgedacht.
1
Weiters würde ich die Tasten vom PortB wegnehmen, und D0-D7 mitbenutzen,
2
was noch übrig ist, und die freiwerdenden Tasten ev. für Led(matrix)
3
nehmen. Es passiert oft, daß zusätzlich zu den Tasten usw noch ein paar
4
Leds gebraucht werden.
Ich versteh nicht ganz, wie das gehen soll. Da würde doch jeder Pin 
mehrer Funktionen übernehmen uund zugleich Eingang und Ausgang sein. 
Woher sollen die Tasten den wissen, ob die Tasten angesprochen wurden 
oder das LCD.

1
Kontrasteinstellung, auch da kann das Poti durch
2
ein PWM (ohne Kondensator sowie Low-pass, sollte aber bestückbar sein)
3
ersetzt werden. Weiters, Buzzer sowie LED ansteuerung (backlight) sowie
4
Helligkeitsmessung, auch das könnte man bei anderem Display gebrauchen.
5
Es fragt sich, wie Universell du das brauchst, und ob es sich lohnt,
6
da Arbeit reinzustecken.
Die Idee hierfür finde ich ganz gut, nur für das aktuelle projekt werde 
das warschienlich nicht benötigen.

von Chris S. (Gast)


Lesenswert?

>Ich kann doch, wenn ein Taster gedrückt wurde, den Mikrokontroller
>anweisen, dies über den I2C an den Hauptprozessor zu senden. Wofür wird
>dann die interruptleitung benötigt (ich bin was I2C angeht noch totaler
>Anfänger!!!9

Das gibt es, weiß jetzt nicht auswendig SMB oder I2C, wird generell
gemacht, um aus dem sleep-modus zu kommen, ist aber eine 
Spezialanwendung.
Generell dürfen Slaves, diese Platine ist ein Slave, nicht eigenständig
senden. Deshalb gibt es generell eine Interruptleitung, welche in der
Regel Open-Collector ist, damit man mehrere solche Signale 
zusammenschalten kann, um dem Master ein Event zu Signalisieren.
Der Master muß daraufhin seine Slaves abfragen, und dadurch auch den
Interrupt quittieren.

>Osc könnte weggelassen werden und mit dem internen Takt gearbeitet werden.
>ich war mir nicht sicher, ob der interne Takt genau genug ist um mit der
>TWi-Schnittstelle zu arbeiten, aber wenn du das sagst, werde ich diesen
>weg lassen.
Das hängt von der Geschwindigkeit des I2C Busses ab. Würde warscheinlich
ca 20 oder 40Kbit laufen lassen, und somit genügt der interne Takt.
Der interne Takt sollte als Slave 16x höher sein, als der I2C Takt. 
Sprich, mit 1Mhz internem Takt kann man den I2C Bus mit 62.5khz 
bedienen.

>Weiters würde ich die Tasten vom PortB wegnehmen, und D0-D7 mitbenutzen,
>was noch übrig ist, und die freiwerdenden Tasten ev. für Led(matrix)
>nehmen. Es passiert oft, daß zusätzlich zu den Tasten usw noch ein paar
>Leds gebraucht werden.
>Ich versteh nicht ganz, wie das gehen soll. Da würde doch jeder Pin
>mehrer Funktionen übernehmen uund zugleich Eingang und Ausgang sein.
>Woher sollen die Tasten den wissen, ob die Tasten angesprochen wurden
>oder das LCD.

Das weiß der Kontroller, ob er das LCD anspricht, oder die Tasten 
ausliest.
Die Tasten müssen das nicht wissen. Zwischen den Tasten und den Pins 
sowie
dem LCD kommen in diesem Falle noch Wiederstände rein.

von astroscout (Gast)


Lesenswert?

Danke, dass Hikft mir schonmal weiter.
Ein kleine frage habe ich aber noch.
Was spricht den dagegen, aus dieser Platine auch einen Master zu 
machen???

von Peter D. (peda)


Lesenswert?

Chris S. wrote:

> Generell dürfen Slaves, diese Platine ist ein Slave, nicht eigenständig
> senden.

Du hast Dir wohl nicht den Schaltplan im 1. Post angesehen.

Wo steht das, daß ein ATmega8 nur als Slave betrieben werden darf?

Das Senden geht sogar sehr gut, als Multimaster. Niemand muß pollen, wer 
was zu sagen hat, sagt es einfach.
Im schlimmsten Fall verliert er die Arbitration und fängt eben nochmal 
an, nach dem Stop des anderen Masters.


Peter

von Chris S. (Gast)


Lesenswert?

>Du hast Dir wohl nicht den Schaltplan im 1. Post angesehen.
Ja, und habe mir auch den Text durchgelesen.

>Wo steht das, daß ein ATmega8 nur als Slave betrieben werden darf?

>Das Senden geht sogar sehr gut, als Multimaster. Niemand muß pollen, wer
>was zu sagen hat, sagt es einfach.
>Im schlimmsten Fall verliert er die Arbitration und fängt eben nochmal
>an, nach dem Stop des anderen Masters.

Nirgends. Die Platine soll ja warscheinlich nicht nur für dieses Projekt
herhalten, sondern auch für nächste. Da kommt es sehr wohl vor, daß man
im Master keinen Slave haben will, aus Zeitgründen oder sonstiges.

von Peter D. (peda)


Lesenswert?

Chris S. wrote:

> Nirgends. Die Platine soll ja warscheinlich nicht nur für dieses Projekt
> herhalten, sondern auch für nächste.

Ja und?

Deshalb muß man dem Poster ja noch lange nicht vorschreiben, wie er den 
Mega8 zu programmieren hat.


> Da kommt es sehr wohl vor, daß man
> im Master keinen Slave haben will, aus Zeitgründen.

Aus Zeitgründen ist Multimaster sogar günstiger, es entfällt ja das 
Pollen.
Der Slave-Receiver kostet keinerlei zusätzliche Zeit, es ist nur ein 
anderer Zweig in der I2C-Interruptroutine.


Multimaster kann man nur dann nicht verwenden, wenn der andere MC kein 
HW-I2C hat oder die Pins schon belegt sind und man I2C in SW machen muß.
SW-I2C geht nur als Single-Master ohne großen Ressourcenverbrauch.


Man kann das LCD aber auch über die UART anschließen:

Beitrag "LCD über nur einen IO-Pin ansteuern"



Peter

von Chris S. (Gast)


Lesenswert?

Was ich vergessen hatte, ev. externe Pull-Up´s, muß auch nicht bestückt 
werden, es sollte halt die Möglichkeit da sein.

Weiters, es kann dir unterkommen, daß du ein Display hast, wo du eine
negative Spannung als Bias brauchst, sogenannte wide temperature typen,
die auch Grade unter 0 vertragen. Da brauchst du ein Pin sowie die 
entsprechende Schaltung (diode/cap) um einen Inverter aufzubauen.

Wie gesagt, es ist fraglich, wie universal du das Board haben willst,
und ob es sich auszahlt, das zu Implementieren.

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.