PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Pins für andere Ausgaben mitbenutzen?



Pöler
15.10.2005, 22:01
Hallo zusammen,

während der Realisierung meines Projekts sind mir leider die I/O Pins meines Sisy Atmel Mege 8 ausgegangen. So ein Projekt wächst halt...

Daher die Frage: Kann ich die Daten- und Steuerleitungen desLCD Displays für Ausgabezwecke (Relays und LEDs) mitbenutzen?

Hardwareerweiterungen wie ein Latch e.t.c. möchte ich nicht einsetzen.

Meine Idee ist die Zustände der Ports zu speichern und nach jedem LCD Befehl wieder herzustellen. Bei den Relays sollte sich Aufgrund der Geschwindigkeit der Schaltzustand nicht ändern und bei den LEDs ist ein kurzes Zucken akzeptabel.

Sind meine Überlegungen richtig oder habe ich etwas übersehen?

Danke und Gruß

Horst

x-ryder
15.10.2005, 23:08
sollte stimmen, testes doch einfach ^^

Pöler
15.10.2005, 23:11
Danke x-ryder,

werde es mal probieren und kurze Rückmeldung geben.

Gruß

Horst

Marco78
16.10.2005, 02:10
Sind meine Überlegungen richtig oder habe ich etwas übersehen?
Zum einen hast du übersehen, das es u.U. nicht ganz einfach ist die Portzustände abzuspeichern.

Aber viel wichtiger: Wie soll das umschalten gehen? Woher weiss die LED oder das Relais, das es jetzt gemeint ist und nicht das LCD?

x-ryder
16.10.2005, 09:25
aus trägheit, die relais werden in der schnellen zeit wohl nicht umschalten, und die leds flackern nur einmal ganz kurz, ausserdem, warum solls schwer sein portzustände zu speichern?

Marco78
16.10.2005, 09:34
warum solls schwer sein portzustände zu speichern?
Wenn es so leicht ist, dann bitte ich dich, mal einen kurzen Code dafür zu posten.
Aber dabei nicht vergessen, wird reden hier über die LCD-Pins.
Achja, und bitte noch den Code um die Zustände wiederherzustellen.

Und es ist immer noch nicht geklärt, woher das LCD weiss ob es jetzt gemeint ist oder das Relais bzw. die LED.

x-ryder
16.10.2005, 10:07
meine güte, das lcd muss nicht mehr angesprochen werden, wenn es einmal bedient wurde, lediglich ein oder zwei pins müssen gehalten werden glaub ich, kannste bestimmt wo nachlesen, und das lcd weiß das es gemeint ist, wenn man ne clock und nen reset anlegt, aber wenn man nur die datenleitungen benutzt merkt das lcd davon nichts

Marco78
16.10.2005, 10:17
Gut, dann stell ich dir Frage mal anders.
Woher weiss das Relais, das parallel am Datenpin des LCDs ist, das es gemeint ist? Es hat ja schliesslich keinen NICHT-CLK Eingang. Es würde ja immer klackern.

Ich als LCD würde etwas verwirrt sein, wenn ich immer während meiner Datenübertragung ein paar andere Signale bekommen würde.

x-ryder
16.10.2005, 10:56
ARGHHHHHHH MANN VERSUCHS MAL ZU VERSTEHEN
...
ok, also:
1. das relais ist immer gemeint, da es aber sehr träge ist, schaltet es während der kurzen datendurchlaufzeiten nicht um, sondern bleibt im ausgangszustand
2. während der datenübertragung kann das relais ja nicht umschalten, weil ja schon ein befehl den controller beansprucht, dies kann jeweils nur vor oder nach der übertragung schalten, AUSSER: ein interrupt wird benutzt, dann kann es probleme geben, allerdings glaube ich das weniger

jetzt verstanden?

Marco78
16.10.2005, 11:05
Du sprachst von Zustände speichern. Oder besser gesagt, hast nichts dagegen gesagt.

Ich möchte mal sehen, wie Punkt 1 erfolgreich realisiert wird.

Aber der letzte Stand ist ja, das die Leitungen als Eingänge für Taster genutzt werden sollten.

16.10.2005, 11:31
Sorry Leute,

ich wollte keinen Streit vom Zaun brechen.

Ich versuche es mal mit meinen Worten:

Mit Portzustände merken meine ich, das der Zustand der LEDs und Relais aufgrund des vorher eingestellten oder erreichten Betriebsmodus bekannt und in einer Variablen abgelegt ist.
Z.B. Led1 ein, Relais1 aus....... entspricht Betriebszustand 1 u.s.w.

Der Ablauf könnte so aussehen:

-Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 ; Pins für LCD konfigurieren
-Lcd "Hello world." ; Text auf LCD ausgeben
-Port d.4 - d.7 als Ausgang definieren
-Pins entsprechend Vorgabe auf L / H schalten

Damit kriegen die Ausgabeelemente nur beim Schreiben der Daten in die Anzeige kurze Pegeländerungen mit. Insbesondere die trägen Relais können diesen nicht folgen. Bei den LEDs wäre ein kurzes Flackern akzeptabel (falls es denn überhaupt sichtbar wäre).

Die Pins d.3 und d.2 sind natürlich exclusiv für die LCD Anzeige reserviert.

Die Frage die bleibt:

Muss ich die Pins vor jeder LCD Ausgabe mit "Config Lcdpin..." und danach wieder für Ausgabe vorbereiten?

Danke und Gruß

Horst
.

16.10.2005, 11:35
Hallo nochmal,

etwas habe ich noch vergessen:

Die gleiche Situation ergibt sich natürlich, falls die LCD Pins als Eingabepins für Taster mitbenutzt werden sollen. Wird wahrscheinlich darauf hinauslaufen, weil ich LCD und Taster aus Platzgründen von Controller und Relaisplatine trennen möchte.

Gruß

Horst

Marco78
16.10.2005, 12:11
Besonders wenn die Pins noch als Eingang gebraucht werden sehe ich große Probleme. Du brauchst dann ja noch eine LED um zu wissen, in welcher Milisekunde du einen Taster drücken darfst. Aber dann nicht zu spät drücken. Ansonsten wird der Ausgang des Pins der grade Daten zum LCD schickt kurzgeschlossen!

Warum kein anderer AVR? Warum keine Porterweiterung?
Wie sind denn die anderen Pins beschaltet? Gibt es nicht die Möglchkeit das was einzusparen oder doppelt zu belegen?

16.10.2005, 12:32
Hallo Marco78,

uups, da habe ich tatsächlich auf meiner eigenen Leitung gestanden.
Klar, als Eingabeports kann ich die LCD Leitungen nicht benutzen.

Warum so und nicht anders?
Erstmal habe ich das Board mit dem Mega 8 und wenn ich die LCD Pins für Relais und LEDs mitbenutzen kann, reichen mir auch die Ports.
Ein gewisser Ehrgeiz ist natürlich auch dabei.

Kannst Du mir sagen, ob ich mit meiner Überlegung zur Ansteuerung (Beitrag von 11:31) richtig liege?

Danke und Gruß

Horst

x-ryder
16.10.2005, 12:51
ne, du musst nur jeweils die ports speichern, eine lcd-ausgabe machen, und dann die ports wieder passend setzen, keine weitere config

PicNick
16.10.2005, 12:53
Als Ausgang kannst du ausser der E -Leitung alles nehmen. Das LCD übernimmt ja nur daten, wenn E runter geht. Solange E also ober bleibt, gehört alles dir.
Deine LCD-Befehle mußt du also einpacken
1 Restore LCD- In/Out Pin state (vlt. garnicht notwendig)
2 LCD-Command
3 Restore Relais/LED Output & Data-refresh

Den LCD-In/Out state kannst ihn dir eh' denken. Ich weiss garnicht, ob BasCom jemals was vom LCD liest

Wenn du Input braucht, wirst du aber um einen Tri-State Buffer nicht rumkommen, das weisst du aber ohnehin.

PS Es gibt da schon einige Wait-States beim LCD-Schreiben. Es wird wohl schon ziemlich Flackern, wenn du Text ausgibst.

Rage_Empire
16.10.2005, 12:53
Soweit ich weiß, haben LCDs den E-Pin, was ein Enable für das Display ist. Damit wäre doch eine Umschaltung kein Problem. Wenn die Pins des Ports als Eingänge dienen sollten, wirds komplexer, da das am Controller jedesmal umgeschalten werden muß.

16.10.2005, 13:06
Hallo zusammen,

also von der Idee, die LCD Pins für Eingabe zu nutzen habe ich mich verabschiedet.
Bei der Ausgabe bin ich davon ausgegangen, das Config LCDpin überschrieben wird, wenn ich diese Pins auf Ausgang schalte. Das scheint ja nicht so zu sein. Ich werde das mal testen und dann berichten.

Jetzt geht es aber erstmal ans Gehäusebasteln.

Danke an alle Helfer

Gruß

Horst

Vitis
16.10.2005, 14:45
richtig, der E ist Enable,

nur auf seinen Befehl hin übernimmt das LCD die Daten, dazwischen kannste
mit den Ports machen wasde für nötig hältst.
Man kann auch aus dem LCD lesen, aber ich hab noch keine Anwendung gesehen wo das gemacht wird, für gewöhnlich wird der benötigte Steuerpin R/W layoutmäßig auf low gelegt und feddich.
Beim Relais aber die Freilaufdiode nicht vergessen, Spannungsspitzen auf den Datenleitungen des LCD können teuer werden!
Du kannst den E aber auch invertieren und als CS-invers für die nachfolgende Beschaltung nutzen (1 Transistor und 2 Widerstände)

PS: hab für die KS0080 LCD-Controller ne maximale uC-Taktfrequenz von 14 MHz ermittelt, dann zeigen die nur noch Müll an

PicNick
16.10.2005, 15:12
..Relais ..Freilaufdiode..Spannungsspitzen..teuer

Du hast recht, hab ich zuwenich bedacht. Das kann ins Auge gehen oder Müll am LCD produzieren. Die LED sin' egal, aber induktives Zeugs ?

x-ryder
16.10.2005, 17:04
naja, warum denn das, die relais einfach mit transistoren ansteuern, und schon iss geregelt

17.10.2005, 07:21
@x-ryder

auch dann erzeugen induktive Lasten negative Spanungsspitzen je nach Induktivität und Ausschaltflanke (Zündspule).
Bau die dinger für x und paar Pfennige ein und geh auf sicher.
reichen schon 1N4001 oder für schweres 1N4007

ersparen echt Ärger

Marco78
23.10.2005, 11:36
http://www.avrprojects.net/LCD%20Switch%20board.htm

Pöler
09.07.2006, 14:39
Hallo zusammen,

nach einer längeren Zwangspause habe ich mein kleines Steuerungsprojekt wieder aufgenommen. Da ich mit den Portpins tatsächlich nicht ausgekommen bin, habe ich auf Eure Empfehlung gehört und ein 2* 4 Bit Latch (CD4508B) benutzt. Leider klappt es nicht so wie erwartet. Die angeschlossenen LEDs lassen sich nicht gezielt schalten.

Die Schaltung sieht so aus:
Die Ports d.4 bis d.7 liegen parallel an der LCD Anzeige und den Eingängen der beiden 4 Bit Latches. Also d.4 an D1A und D2A e.t.c.
Die beiden Output Disable- und Resetpins der Latches liegen auf Masse.
Die beiden Strobe Eingänge habe ich auf Pin d.0 und d.1 gelegt.
So wie ich die Chip Dokumentation verstehe sollte also das Bitmuster, das ich an die Pins d.4 bis d.7 anlege durch einen positiven Puls an der Strobeleitung dazu führen, das das an den Eingängen angelegte Bitmuster "gelatched" wird und die an die Ausgänge angeschlossenen LEDs entsprechend dem Bitmuster leuchten.

Tatsächlich leuchten die (4* 2 Farben LEDs) willkürlich, die LCD Anzeige funktioniert aber tadellos. Schaltungsfehler wie Kurzschluss, Verwechselung und Unterbrechung kann ich weitestgehend ausschließen, da mindestend 20 mal "durchgehupt" mittels Multimeter. Einen Oskar habe ich leider nicht.
Gesagt sei noch, das die Leitungslänge zwischen Mega8 und LCD /Latch etwa 40 cm beträgt.
Das auf das wesentliche reduzierte Programm hänge ich an.

Ich würde mich über eine Idee sehr freuen.

Gruß

Pöler

felack
20.07.2006, 17:54
Mehrere Taster parallel zur LCD zu schalten ist ganz einfach. Die Leitungen D4-D7 der LCD-Anzeige werden mit einem Widerstand von 1 KiloOhm an den Taster und die Taster dann an Ground angeschlossen. Die LCD wird nicht beeinflusst. Der Strom an den Ports erhöht sich auf 5 mA solange eine Taste gedrückt ist, wenn der Ausgang 1 ist. Es gibt weder einen Kurzschluß noch eine falsche Anzeige. Die Tasten werden einfach mit Debounce abgefragt:

'Taster abfragen

Config Portd.4 = Input 'Portd.4 als Eingang definieren
Config Portd.5 = Input 'Portd.5 als Eingang definieren
Config Portd.6 = Input 'Portd.6 als Eingang definieren
Config Portd.7 = Input 'Portd.7 als Eingang definieren

Portd.4 = 1 'Pullup-Widerstand einschalten
Portd.5 = 1 'Pullup-Widerstand einschalten
Portd.6 = 1 'Pullup-Widerstand einschalten
Portd.7 = 1 'Pullup-Widerstand einschalten

Debounce Pind.4 , 0 , Label_1 'wenn Taste gedrückt nach Label_1 springen
Debounce Pind.5 , 0 , Label_2 'wenn Taste gedrückt nach Label_2 springen
Debounce Pind.6 , 0 , Sub_1 'wenn Taste gedrückt zur Subroutine Sub_1 springen
Debounce Pind.7 , 0 , Sub_2 'wenn Taste gedrückt zur Subroutine Sub_2 springen

Config Portd.4 = Output 'Portd.4 als Ausgang definieren
Config Portd.5 = Output 'Portd.5 als Ausgang definieren
Config Portd.6 = Output 'Portd.6 als Ausgang definieren
Config Portd.7 = Output 'Portd.7 als Ausgang definieren

Mit den Datenleitungen D4-D7 funktioniert das auf jeden Fall, ob es auch mit der RS-Leitung geht, habe ich noch nicht getestet.

felack

zum Schluss noch das Schaltbild:

Pöler
27.07.2006, 17:32
Hallo Felack,

danke für Deinen Tipp. Leider habe ich schon das Tasterproblem mittels Analogtaster gelöst (Tipp kam aus dem Forum).
Das klappt hervorragend mit 4 Tastern.
Zwischenzeitlich habe ich wie oben beschrieben parallel zu den LCD Datenleitungen ein 2*4 Bit Latch (CD4508B) angeschlossen,
mit dem ich 4 Zweifarben LEDs ansteuere.
Leider leuchten die LEDs zufällig nach dem Reset rot grün oder gelb.
Ich kann mir das nicht erklären. Kann es eventuell ein Pegelproblem (CMOS) sein?
Die relevanten Programmabschnitte habe ich oben zum Download abgelegt.

Die Pins "Disable" und "Reset" des Latches sind auf Ground gelegt, die Pins "Strobe" jeweils auf einen Port,
der zur Datenübernahme kurz auf "H" gelegt wird und die Datenleitungen liegen natürlich an den LCD Datenleitungen.

Wenn jemand eine Idee zu dem Problem hat; Ich bin für alles dankbar.

Gruß

Pöler

Gento
27.07.2006, 19:24
Anderer Gedankengang:

Es fehlen Ports :-$ und Mega 32 kostet keine 300 euro , keine 30 Euro , ich bekomme die für ca 3 Euro.
Erspart dazubasteln diverser CD's

Gento

PICture
27.07.2006, 19:24
Hallo Pöler!

Ich bin ein PIC Benutzer. Das einzige, was mir einfällt ist, dass das Strobe Impuls zu kurz seien könnte. Laut Datenblatt muss es min. 140 ns lang sein.

MfG :)

Pöler
27.07.2006, 20:19
Hallo Gento,
der Preis ist nicht das Problem. Das Projekt ist halt stetig gewachsen und jetzt den M32 einzusetzen würde ein neues Gehäuse, neue Platine e.t.c. erfordern.

Hallo PICture,

ich habe mit waitms 1 und waitms 10 beim Toggeln des Strobes experimentiert. War leider nichts.

Habt Ihr mal meine Programmschnipsel angeschaut. Vielleicht liegt ja da der für mich unsichtbare Fehler?

Danke und Gruß

PICture
28.07.2006, 06:13
Hallo Pöler!

Mit Deinem Program kann ich Dir leider nicht helfen, da ich PICs in ASM programmiere. Von Basic kenne ich nur QBasic. Ich habe mir zwar Dein Programm angeschaut, aber verstehe ich nicht alles. Ich habe nirgendwo gesehen, dass Du von Dir ärwähntes Bitmuster an die Pins vom Latch schickst. Aber wie gesagt, nicht alles ist mir klar.

MfG :)