Marco78
07.11.2004, 11:43
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:
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.
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:
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.