-         
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: LCD mit AVR am PC

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693

    LCD mit AVR am PC

    Ich möchte mit einem 4X16 HD44780 LCD die Datum und die Uhrzeit (auf 3 Zeilen vergrößert) anzeigen lassen. Zusätzlich soll dieses LCD aber am PC angeschlossen werden mit dort mit gäniger Software was darstellen wenn der PC an ist. Wenn er ausgeschaltet ist soll der AVR die Uhrzeit anzeigen.

    Erstmal vorweg, ich bin absoluer Anfänger, was µC angeht. Ich kenn mich gut mit Elektronik aus und habe früher viel in BASIC programmiert. Ich denke das wird mir ein wenig helfen. Bascom hab ich mir auch schon näher angeschaut und ich denke damit werde ich auch klar kommen. Jeder mußte ja mal bei Null anfangen.

    Ich habe mir hier schon viele Beiträge durchgelesen und zuvor schon im Internet einiges angelesen. Ich wollte mir hier ein paar Tipps abholen bevor ich wie wild anfange zu rogrammieren und nachher alles nochmal umschreiben muß. Und ich brauch ein paar Meinungen um die Gedanken die ich mir bis jetzt gemacht habe am besten bestätgen zu lassen oder ggf mich auf den richtigen Weg führen zu lassen.

    Fang ich mal mit der Hardware an.
    Die Spannungsversorgung soll von den 5V Standby des ATX-Netzteils kommen. Die Zeit von einem DCF77-Modul. Das Display wie schon beschrieben HD44780 im 8 Bit-Modus am AVR. Die Daten vom PC von der parallelen Schnittstelle auch mit 8 Bit. Von dort aus soll auch die ISP erfolgen. Erkennung ob der PC an oder aus ist mit 5V vom Netzteil.

    Hier die ersten Fragen:
    - Das DCF77-Modul hat 2 Ausgänge, einer davon inventiert. Brauch ich beide Ausgänge am AVR. Ich habe Schaltungen gesehen wo beide verwendet werdn und welche wo nur der nicht inventierte benutzt wird. Ich denke letzters reicht, oder? Ich bin auch schn so weit, das ich weiss, das der Pull-Up-Widerstand dann am Eingang aktiviert werden muß.
    - Die Software soll auf ein 4X16 LCD eingestellt werden, es soll aber auch möglich sein ein 4X20 anzuschliessen, ohne die Software zu ändern. Mein Gedanke war, das ich alles auf ein 4X16 auslege und bei einem 4X20 einfach die letzten 4 Zeichen pro Zeile frei bleiben. Geht das?
    - Ich habe Ansteuerungen eines LCD bis jetzt nur im 4 Bit-Modus gesehen. 8 Bit werden aber für den Betrieb am PC benötigt. Was mache ich jetzt mit den ersten 4 Dateinleitungen an LCD wenn die Uhrzeit angezeigt wird? Üer externe Pull-Down-Widerstände auf Masse legen? Sind die Ausgänge am AVR automatisch auf Masse? Oder lassen sie sich als Pull-Down aktivieren?
    - Geht das mit der ISP am parallelen Port so wie ch es mir gedacht habe? Ich wollte auf der Platine 2 Jumper vorsehen, um die Brücken beim programmieren zu setzten die ich in vielen Schaltungen für die ISP gesehen habe.
    - Ein Eingang soll für die Erkennung sein, ob der PC an der aus ist. Wie scon gesagt, sollen die +5V des ATX-NT dazu dienen. Weil es nicht zu 100% sicher ist, das es auch wirklich immer nur 5V sind will ich diese über ein 1:1 Spannungsteiler auf ein Eingang legen. Der Eingang soll dann ein Interrupt auslösen der auf eine steigende Flanke reagiert und die Uhrzeit ausgabe stoppen und zum "PC-Programm" springen. Aber was passiert, wenn die 5V weg sind? Wie wird die Uhrzeit wieder angezeigt?

    Zur Software:
    - Wenn ich es richtig verstanden habe, kann ich mir der Demoversion von Bascom max. 2kb Code Kompilieren. Wie weit komm ich mit 2kb? Werden die für meine Anwendung reichen? Ich weiss, ist abhänig vom Programmierstill. Aber wenn jetzt hier schon einer sagt, das es vom Programmierstill abhänig ist, bedeutet das ja, das ich mich schon im Grenzbereich der 2kb bewegen muß mit meinem Vorhaben.

    Der Programmablauf soll wie folgt sein.
    - Das Netzteil wird eingeschaltet, der AVR bekommt Spannung und das Programm läuft ab.
    - Erstmal wird (hoffentlich) ein Zeitsignal empfangen und entschlüsselt.
    - Die benötigten Daten des Signals werden in Variablen abgelegt.
    - Irgendwie wird im AVR intern eine Uhr syncronisiert die mitläuft. Falls mal kein Signal oder ein gestörtes Signal kommt immer noch die Uhr weiter läuft.
    - Datum und Uhrzeit werden auf dem LCD angezeigt. Das Datum in der ersten Zeile und die restlichen 3 Zeilen für die Zeit. Dazu werden Custom Chars defeniert.
    Hier benötige ich noch ein Tipp, wie ich die große Uhr am besten auf Display bekomme ohne viele Programmzeilen zu benötigen
    - Der Rechner wird eingeschaltet, ein Eingang erkennt die 5V (bzw etwa 2,5 wegen Spannungsteiler) und das Uhrprogramm wird unterbrochen.
    - Der PC teil läuft jetzt ab. Den stell ich mir eigentlich noch am einfachsten vor. Etwa so halt nur mit BASCOM-Befehlen:
    Code:
    DO
    O1=I1 'RS
    O2=I2 'E
    O3=I3 'D1
    O4=I4 'D2
    ...
    WHILE
    Wie gesagt, das ist nur Sinngemäß! Das es mit I und O nicht geht weiss ich!
    Damit sollen dann halt die Daten vom PC direkt zum LCD geleitet werden. Geht das im Prinzip?
    Eigentlich wollte ich auch den Watchdog aktivieren. Aber auf was reagiert der? Auf Endlosschleifen? Ist das denn schon eine Endlosschleife? Die ersten paar Sekunden werden keine Daten kommen. Auch während des Betriebs werden sich evtl mehrere Sekunden die Daten nicht ändern.
    - Dann geht der PC irgendwann aus. Die 2,5V die den Interrupt ausgelöst haben fehlen. Wie kommt jetzt wieder die Uhrzeit?

    Das war's auch schon

    Wenn ich mich nicht verzählt habe, brauche ich 22 I/O-Ports.
    8 Dateinletungen, E und RS zum LCD sind 10, das gleiche kommt nochmal vom PC sind 20. Und dann jeweils ein für DCF77 und die 2,5V PC an/aus.

    Und nun die Frage aller Fragen, was für ein AVR dafür nehmen?
    Ich hab mal im Reichelt-Katalog geschaut, was es so gibt. Meine erste Überlegung war entweder ein ATClassic oder ein ATMega. Da der Mega etwas günstiger ist wollte ich den nehmen. Dann hab ich umgeblättert und C51 gesehen, die um einiges günstiger sind.
    Welche Typen ich genau in engere Auswahl habe, hab ich jetzt nicht im Kopf, müsste ich nochmal nachschauen. Aber was unterscheidet die Classic von Mega und C51? C51 haben kein EPROM. Aber wenn ich es richtig sehe, brauch ich ja auch kein, oder?


    Ich weiss, das sind viele Fragen. Aber zu meiner Verteidigung möchte ich nochmal sagen, das ich mir vieles auch vorher schon selbst beantworten konnte. Ich hab ja z.B. nicht gefragt, wie erstelle ich ein Programm und bekomme das dann auf den AVR. Ich denke das spricht für mich, das nicht ihr die ganze Arbeit machen sollt und ich mich ausruhen will, sondern das ich mir schon Gedanken gemacht habe.

    Ich bedanke mich auch schonmal ganz herzlich bei allen, die sich die Mühe machen diesen langen Beitrag überhaupt zu lesen und dann auch noch die Mühe machen mir zu helfen.

    PS: Den DCF77-Code wollte ich mir aus dem Internet suchen und einfach einfügen. Zum einen wäre es mir für ein ersten Versuch zu viel (um nicht zu sagen, da bin ich ehrlich gesagt zu Faul mich mit den Zusammensetzung des Signals auseinander zu setzen) und außerdem muß ja das Rad nicht jeden Tag neu erfunden werden.
    Die Weiterleitung der Daten vom PC ans LCD hab ich ja schon im Prinzip, sofern das überhaupt möglich ist.
    Die Darstellung der großen Zahlen macht mir noch sorgen. Ist eigentlich verstanden wie ich mir das vorstelle? Ich kann sonst ein Bild einstellen.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    noch ein PS: Sorry, aber durch andere Forum bin ich etwas geprägt, was ich jetzt sage soll man bitte nicht falsch verstehen!
    Auf Antworten wie "Programmier erstmal ein 'Hello World' mit Tastern und ein paar LEDs bevor du sowas hier machst" oder so kann ich verzichten.
    Das hilft mir bei der Lösung meines/meiner eigentlichen Probleme nicht.
    Ich bezeichne mich selbst nicht als blöd und als Lernfähig. Auch wenn ich geschrieben habe, das ich noch nie was mit µC zu tun hatte, bedeutet das ja nicht, das ich nicht in der Lage bin es schnell zu lernen und nur ein paar Dendanstöße von erfahrenen Programmieren brauche.
    Keiner der mir den "Hello World"-Tipp geben würde kann von sich behaupten, das er das Programmieren nicht erlernen musste.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    18.10.2004
    Ort
    Cottbus
    Beiträge
    38
    Hallo
    schaue doch auch mal hier vorbei , vielleicht haben die in dem Forum auch ein paar Hilfen parat.

    http://www.jalcdsforum.de/main.php?s...e05b0722442e81

    und wenn ich mich nicht irre kann ein Display auch vom PC im 4bit Modus betrieben werden.
    Ansonsten würde ich sage um das Display von beiden Geräten her anzuwenden, wäre das eher eine Geschichte die man über einen Datenbus angehen sollte .
    Sonst wäre ja nur noch die Variante die daten vom PC über die Seriele Schnittstelle in den AVR zu bringen , der diese dann aufbereitet und ans Display schickt.
    Und das erkennen wann der Pc eingeschaltet ist , kann man doch auch über ein relais oder Transistor lösen. Im Groben gedacht eine andere Stromleitung vom Netzteil nehmen die im Ausgeschalteten zustand keinen Strom führt sondern erst wenn PC(z. Bsp -5V) an ist, dann zieht das Relais an und gibt an einen Interruptpin ein High, der rest ist dann Programmierung.

    gruß Andreas

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Das jaLCDsForum kenne ich, da hab ich selbst schon einige Sätze hinterlassen Aber ie Probleme/Lösungen dort drehen sich ja nicht um µC.
    4 Bit am PC geht auch. Aber das ganze soll eine universelle Lösung werden, so das im Prizip jeder diese Schaltung einsetzen kann, ohne vorher seine LCD-Software umzuprogrammieren. Von daher wollte ich die 8 Bit behalten. Schon alleine weil es weniger Programmieraufwand im AVR ist und es nicht unnötig zu Verzögerungen kommt bei der Ausgabe durch das umrechnen oder so.
    Das gleiche bei der seriellen Ausgabe am PC. Diese wird noch nicht einmal viel allen Programme unterstützt.
    Das erkennen ob der PC an ist hab ich ja auch in etwa so beschrieben wie du es vorgeschlagen hast. Mit den 5V vom Netzteil. Aber warum extra noch eine Relais oder Transistor nehmen?

    Nachtrag zu welchen AVR soll ich nehmen: 90S8515, Mega8 und 89S51 oder 98S52 sind die, die ich mir mal ausgesucht habe bis jetzt.

  5. #5
    Gast
    ... Du willst es Dir zum Anfang aber nicht unbedingt leicht machen! Allerdings solltest Du Dich umfassend vorher informieren, damit der Start sich nicht als Sackgasse erweisst!
    Die Software soll auf ein 4X16 LCD eingestellt werden, es soll aber auch möglich sein ein 4X20 anzuschliessen, ohne die Software zu ändern. Mein Gedanke war, das ich alles auf ein 4X16 auslege und bei einem 4X20 einfach die letzten 4 Zeichen pro Zeile frei bleiben. Geht das?
    ... die Startadresse der 2.Zeile liegt beim HD44780/Kompatible immer auf $40. Für die 3. und 4. Zeile wird meistens ein zweiter Display-Controller verwendet oder es werden alle 40 Stellen im DD Ram ausgenutzt und auf jede 2. Zeile aufgeteilt (kannst nur austesten!)
    ... und die restlichen 3 Zeilen für die Zeit. Dazu werden Custom Chars defeniert...
    ... mehr wie 8 zusätzliche Zeichen wirst Du im CG Ram eines HD44780 nicht definieren können.
    Eigentlich wollte ich auch den Watchdog aktivieren. Aber auf was reagiert der? Auf Endlosschleifen?
    ... grob ausgedrückt: wird aktiv, wenn Dein Programm sich aufhängt. Dazu zählen keine Endlosschleifen!
    ... welchen AVR soll ich nehmen: 90S8515, Mega8 und 89S51 oder 98S52 sind die, die ich mir mal ausgesucht habe bis jetzt.
    ... die Megas sind gegenüber den Classics meistens "besser ausgestattet". Du solltest Dir aber schon im Klaren darüber sein, daß die AVRs nichts mit Deinen anderen µC-Vorstellungen zu tun haben!
    Aber das ganze soll eine universelle Lösung werden, so das im Prizip jeder diese Schaltung einsetzen kann, ohne vorher seine LCD-Software umzuprogrammieren. Von daher wollte ich die 8 Bit behalten. Schon alleine weil es weniger Programmieraufwand im AVR ist und es nicht unnötig zu Verzögerungen kommt bei der Ausgabe durch das umrechnen oder so.
    ... der HD44780 und Kompatible unterstützen alle den 4bit-Modus, einzig die Displayanschlüsse und evtl. die Kontrastansteuerung unterscheiden sich ein wenig. Und diese Verzögerungen im 4bit-Modus bekommst Du i.d.R. nicht mit.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Zitat Zitat von Anonymous
    ... Du willst es Dir zum Anfang aber nicht unbedingt leicht machen! Allerdings solltest Du Dich umfassend vorher informieren, damit der Start sich nicht als Sackgasse erweisst!
    Informieren will ich mich hier ja garde Leicht ist relativ. Ich habe früher mit anderen Basic-Versionen anspruchsvollere Programme geschrieben. Und da musste ich mich auch erstmal einarbeiten. Ich denke nicht, das Bascom grundlegend anders ist. Sieht zumindest bis jetzt nicht so aus.

    die Startadresse der 2.Zeile liegt beim HD44780/Kompatible immer auf $40. Für die 3. und 4. Zeile wird meistens ein zweiter Display-Controller verwendet oder es werden alle 40 Stellen im DD Ram ausgenutzt und auf jede 2. Zeile aufgeteilt (kannst nur austesten!)
    4X20-LCDs mit 2 Displaycontrollern hab ich noch nie gesehen. Nur bei 4X27, 4X40 oder so. Dann wird das Programm halt pauschal für 4X20-LCDs mit nur einem Controller ausgelegt MEin Problem dabei ist ja nicht das ansprechen der Zeilen. Das werde ich (zumindest bis jetzt) mit Locate (X,Y) machen. Dann steht der Cursor da wo ich ihn haben will.
    Meine Überlegung war nur, wenn ich das LCD in Bascom als 4X16 deklariere, aber ein 4X20 anschliesse (was ja das gleiche Pinout hat) ob es dann einfach möglich ist die letzen 4 Zeichen des 4X20 zu ignorieren.
    Wie du ja schon gesagt hast, begint die zweite Zeile bei $40 bei HD44780 kompatiblen Displays. Also müsste es ja gehen.
    Wären die Zeichen fortlaufend nummeriert, würde es wahrscheinlich nicht gehen. Weil dann die Adresse vom ersten Zeichen in der zweiten Zeile abhänig davon ist, ob eine Zeile 8, 16, 20 oder sonstige Zeichen hat.
    Da ich ja nicht direkt in den Speicher schreiben will, sondern mit Locate positionieren will denke ich ist es egal wieviel Zeichen pro Zeile das LCD hat. Zumindest solange, wie ich 4X16 eingestellt habe und dann nicht auf einmal Zeichen 17 ansprechen will.

    ... mehr wie 8 zusätzliche Zeichen wirst Du im CG Ram eines HD44780 nicht definieren können.
    Die reichen mir ja auch.

    Du solltest Dir aber schon im Klaren darüber sein, daß die AVRs nichts mit Deinen anderen µC-Vorstellungen zu tun haben!
    Sorry, ich versteh jetzt nicht, wie du das meinst.

    ... der HD44780 und Kompatible unterstützen alle den 4bit-Modus, einzig die Displayanschlüsse und evtl. die Kontrastansteuerung unterscheiden sich ein wenig. Und diese Verzögerungen im 4bit-Modus bekommst Du i.d.R. nicht mit.
    Aber nicht jeder LCD-Software für den PC spricht das LCD im 4Bit-Modus an. Also muß ich das LCD im 8Bit-Modus betreiben, sofern ich keine Routine schreiben will, die 8Bit in 4Bit umwandelt. Ich seh auch kein praktischen nutzen dafür. Weil die 4 Pins die ich dadurch einspare nicht reichen um ein nächst kleineren AVR zu verwenden.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    18.10.2004
    Ort
    Cottbus
    Beiträge
    38
    Das das mit der Zeichenanzahl so klappt, glaube ich fast nicht.
    Denn ich habe ein 4X27, und bei Bascom kann man dann nur ein 4x40 einstellen.
    Wenn ich jetzt locate 2,1 mache, beginnen die zeichen erst Später.
    Ich muß bei meinem Programm z.B. angeben locate 2,-23 damit er in der zweiten Zeile wirklich am Anfang beginnt.
    Und dasselbe gilt auch für die unteren 2 Zeilen.

    MfG Andreas

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Das 4X27 (ich denke mal das Wintek von Pollin ) Hat ja 2 Controller. Da wäre ich mir auch nicht sooo sicher gewesen, ob es geht. Und du hast ja mehr Zeichen eingestellt, als vorhanden sind. Ich stelle weniger ein als vorhanden sind.
    Natürlich kann es mir passieren, das ich mit Locate 2,1 auf nem 4X20 auf einmal in Zeile 1 Spalte 17 lande.
    Kommt auf ein Versuch drauf an.
    Am Mega8 hätte ich noch ein Pin frei. Da könnte ja mit nem Jumper eingestellt werden, ob ein 16 oder 20 Zeichen LCD angeschlossen ist. Das wirkt sich ja nur auf eine Programmzeile aus, in der das LCD eingestellt wird. Und der Rest könnte dann weiterhin nur mit 16 Zeichen arbeiten und die letzten 4 frei lassen. Oder wenn man sich schon die Mühe macht zu unterscheiden ob es 16 oder 20 Zeichen hat, könnte man die Ausgabe zentrieren. Z.B. so: Wenn 16 Zeichen, dann VarX=0 sonst VarX=2. Locate 1,1+VarX. Oder?

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Danke schonmal bis hierhin. Falls noch jemand Antworten auf die vielen restlichen offenen Fragen kennt, immer her damit.

  10. #10
    Gast
    4-bit 8-bit ... muß ja nicht unbedingt softwaremäßig aufgelöst werden ... denke da an ne hardwarelösung. D0-D8 vom Compi einfach über dioden an LCD, pulldown-widerstände dahinter und D5-D8 auf dem gleichen Bus vom uC anbinden ... das ganze quasi parallel schalten. D0-D3 vom Compi können dann auch gleich zur Umschaltung des uC von passiv auf aktiv vornehmen ... wie z.b. der watchdog, nur eben mit timer .... wenn 2 sekunden (einfach mal so) kein signal an D0, dann kompi aus, folglich ATMega loslegen ... zusätzlich könnte man per transistorschaltung die datenleitungen vom rechner aus abkoppeln um störungen zu vermeiden .... weiterdenk ... der lpt hat doch auch +5V ... das könnt man für ne einfache umschaltung heranziehen ;o)

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •