Hallo, ich möchte hier mal meine erweiterte (verbesserte) Version meiner kleinen LCD-Uhr vorstellen. Dabei handelt es sich um ein Programm, mit dem Uhr-/Datumsausgabe auf dem LCD (über 4 Drähte angesteuert) erfolgt. Des weiteren lässt sich über ein an PC2 angeschlossenes Potentiometer ein Wert auf dem Display von 0-1024 darstellen, was später einmal beispielsweise für lineare Temperaturbauteile genutzt werden könnte. Demnächst folgt jedoch eine Temperaturausgabe auf dem Display, die über einen weiteren Baustein in Form eines binären Codes an den µC geschickt wird. Die Uhr lässt sich vor der Inbetriebnahme über zwei Taster abgleichen und bedarf dann im Betrieb in der Regel keinem weiteren Abgleich. Werde noch daran arbeiten, dass das Stellen auch während dem Betrieb (z.B. durch langes Drücken eines Tasters) ermöglicht wird. Ansonsten hoffe ich, dass sich jemand findet, dem das Projekt, das vor allem für Einsteiger gedacht ist, als brauchbar erscheint und dies dann als ganzes oder Teile davon nutzen kann. Falls jemand Anregungen oder Verbesserungsvorschläge bzgl. meines kleinen Projektes (das ja schließlich noch im Anfangsstadium ist) hat, dann zögert bitte nicht mir eine Antwort darauf zu geben ;) Mit dem besten Grüßen Manuel
Hallo Manuel, ich finde den Code super leserlich und auch sehr brauchbar. Jeder Anfänger und Fortgeschrittene kann sich so an deinem Programm weiterbilden. Was der Kommentar von Thomas soll, verstehe ich nicht ! Vielleicht mag er das selbe Problem in Prolog oder Forth beschreiben und sein Programm hier einstellen ?
Hallo, ich habe mir jetzt dein Programm angesehen und habe noch eine Anmerkung zum Prescale des ADC, dieser soll laut Datenblatt atMega48 so gewählt werden, dass der ADC zwischen 50kHz und 250kHz läuft. Das erreiche ich nur mit:
1 | void init_ADC(void) |
2 | : |
3 | ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (0<< ADPS0); //Frequenzvorteiler auf 64 |
Des weiteren würde ich mehr mit #defines arbeiten um den Code lesbarer zu machen. Z.B. die Positionen auf dem LCD-Display
1 | lcd_setcursor (8,2); |
Die Variable
1 | Timer_anhalten |
wird in der ISR verändert und hat kein 'volatile' in der Deklaration. Gibt das keine Probleme ? Für was der ADC Wert gebraucht wird, habe ich noch nicht verstanden. Mein avr-gcc läuft nun für den atMega48 durch. .
Super Programmcode, Danke fürs reinstellen. Mich würde auch noch der Schaltplan interessieren, oder habe ich ihn übersehen?
Hallo Martin, ich habe den Info.txt erweitert, dort kannst Du alle Ports nun finden.
Super, Danke. Ein echter Schaltplan wäre mir zwar lieber, aber so komme ich auch zurecht. Gruß Martin
Guten Abend, sorry, ich war in den letzten Wochen aufgrund mehrerer Projekte, Schule und Arbeit recht eingespannt. Wenn noch jemand Interesse an einem Schaltplan hat, werde ich naütrlich einen Erstellen. Dabei ist jedoch auch alles im Quellcode enthalten (LCD.H und .C gibt an, wie das LCD angeschlossen wird, was man natürlich auch beliebig verändern kann). Auch, wie Taster etc. angeschlossen sind, könnte man über PXxx leicht finden. Natürlich wäre es sinnvoller alles über DEFINES zu gestalten, da es die Lesbarkeit nochmals erhöht. Wenn ich Zeit finde, werde ich mal am Wochenende über einen Schaltplan gehen und die Schaltung nochmal ein wenig lesbarer machen. Bei Interesse an weiteren Infos oder den Schaltplan bitte "antworten" oder ne Mail an mb001@hotmail.de Mit freundlichen Grüßen Manuel B.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.