Guten Abend, für mein derzeitiges Projekt verwende ich den ATmega644, den ich in C programmiere. Über den Normal Mode des Timer0 lässt sich ein Aufwärtszähler leicht realisieren. Über einen Tastendruck gebe ich einen Impuls an den entsprechenden Portpin und der Zählerstand wird erhöht. Kann ich auf die gleiche Weise auch den Zählerstand verringern? Ich möchte mit 2 Tastern arbeiten, der eine Taster erhöht den Zählerstand, der andere Taster verringert den Zählerstand. Ist dies möglich und wenn ja, wie? Habe bisher nur Lösungen gefunden, bei denen ich über die 2 Taster eine Variable verändere. Prinzipiell auch eine Lösung, mit dem Timer wäre es mir aber lieber. Danke schonmal im Voraus. Jan
:
Verschoben durch Moderator
>Ist dies möglich und wenn ja, wie? Nein. Die TImer zählen nur hoch. >Habe bisher nur Lösungen gefunden, bei denen ich über die 2 Taster eine >Variable verändere. Das ist auch die vernünftigste und sicherste Lösung. Stichwort Entprellen. >Prinzipiell auch eine Lösung, mit dem Timer wäre es >mir aber lieber. Warum?
Ich könnte eine Variable einsparen und es wäre eine einfache und elegante Alternative. Schade, dass es nicht möglich ist ... Danke trotzdem
Matthias Lipinsky schrieb: >>Ist dies möglich und wenn ja, wie? > > Nein. Die TImer zählen nur hoch. Da muss ich widersprechen. Man kann den TIMER0 auch abwärts zählen lassen. >>Habe bisher nur Lösungen gefunden, bei denen ich über die 2 Taster eine >>Variable verändere. > > Das ist auch die vernünftigste und sicherste Lösung. Stichwort > Entprellen. Zustimmung. Jan Huber schrieb: > Ich könnte eine Variable einsparen und es wäre eine einfache und > elegante Alternative. Du kannst den TIMER0 ja auch inaktiv lassen und die Register TCNT0, OCR0A und OCR0B als 8 Bit Variablen missbrauchen. Das kostet kein einziges Bit von deinem kostbaren RAM.
Jan Huber schrieb: > mit dem Timer wäre es > mir aber lieber. Warum? Reichen Dir 4096 Variablen nicht aus? Peter
Jan Huber schrieb: > Ich könnte eine Variable einsparen Eine Variable ist in einem Controller jedoch viel billiger als ein Timer. > und es wäre eine einfache und > elegante Alternative. Einfach: ja, villeicht. (Nur, solange du noch nicht an die Entprellung gedacht hast.) Elegant: nein. Elegant ist was anderes ... Das ist eher die Methode: "Wenn alles, was ich habe, ein Hammer ist, dann sieht jedes Werkstück plötzlich wie ein Nagel aus."
Danke für die Hilfe. Ich habe es jetzt mit der Variablen realisiert. Klar habt ihr recht, dass ein Timer wertvoller ist als eine Variable. An das Entprellen habe ich nicht wirklich gedacht. Mittlerweile habe ich ein neues Problem. Vermutlich wünsche ich mir wieder zu viel :D Ich habe ein 4zeiliges LCD (Standard LCD wie in dem Tutorial bloß eben mit 4 Zeilen statt 2). Nun ist ja mein Hintergrund gelb-grün und meine Schrift schwarz. Gibt es eine Möglichkeit eine Zeile "negativ" zu schalten? Also dass das Feld quasi schwarz ist und nur der Buchstabe ausgespart ist. Ich hoffe ihr könnt euch vorstellen, was ich meine. Jan
Jan Huber schrieb: > Schrift schwarz. Gibt es eine Möglichkeit eine Zeile "negativ" zu > schalten? Jain Nein, es gibt keine Möglichkeit. Du hast aber 8 frei definierbare Zeichen. Solange dein Text also aus nicht mehr als 7 verschiedenen Buchstaben besteht, ist es möglich, indem man sich die inversen Zeichen selber macht. Aber es ist mühsam und nicht sehr allgemein.
Das sieht der HD44780 leider nicht vor. Cursorblinken ist da das höchste. Du kannst aber im RAM die Zeichen 0-7 selbst definieren und damit rumspielen.
Theoretisch kann man auch das LCD zerlegen und die Polarisationsfolie umdrehen - so sie denn quadratisch wäre...
Mist. Ich wollte ein Menü realisieren und den "ausgewählten" Eintrag durch diese Möglichkeit hervorheben. Jedoch brauche ich das ganze Alphabet. Schade :-( Danke trotzdem!
Jan Huber schrieb: > Mist. > > Ich wollte ein Menü realisieren und den "ausgewählten" Eintrag durch > diese Möglichkeit hervorheben. Jedoch brauche ich das ganze Alphabet. Ja. ABer du kannst die Zeichen 0 bis 7 ja jederzeit ändern. D.h. man kann sich situationsbedingt die Zeichen definieren, die man braucht. Ist aber zugegeben eine akademische Lösung. In der Praxis nicht wirklich brauchbar. Ich machs bei meinen Menüs so, dass die erste Spalte und letzte Spalte frei bleibt und die Anzeige des Menüpunkts wird über 2 derartige Sonderzeichen symbolisiert, die wie ausgefüllte Dreiecke aussehen
1 | * * |
2 | ** ** |
3 | *** *** |
4 | ** ** |
5 | * * |
Ist zwar auch nur eine Krücke, aber es geht so einigermassen.
Jan Huber schrieb: > Jedoch brauche ich das ganze Alphabet. Nein, du brauchst nur so viele Zeichen, wie dein invers darzustellender Eintrag lang ist, ergo - fasse dich kurz
Werner schrieb: > Nein, du brauchst nur so viele Zeichen, wie dein invers darzustellender > Eintrag lang ist, ergo - fasse dich kurz Leider brauche ich auf jeden Fall mehr als 8 Zeichen. Ich denke ich werde der Idee von Karl Heinz folgen. Danke euch
>Theoretisch kann man auch das LCD zerlegen und die Polarisationsfolie >umdrehen - so sie denn quadratisch wäre... Muss gar nicht unbedingt quadratisch sein, einmal Ober- und Unterseite tauschen reicht bei manchen LCD völlig. Das hab ich früher gerne beim Taschenrechner gemacht ;-)
Richtige Inversdarstellung am LCD, da solltest du ein Vollgrafikdisplay kaufen. Hier mal ein Link auf Liste mit möglichen Typen http://www.actron.de/de/displays/graphprod.php Grafikdisplay sind aber schon deutlich "komplizierter" zu programmieren, und man braucht nach Möglichkeit einen uC der genug Ram hat, um das volle Speicherarray des LCD in seinem Ram abzubilden, besser sogar 2x. Für ein 64x128 Display ist also 1 kByte Ram erforderlich, nur für diese Pixeldaten (ein s/w Bild). Somit sollte hier dann ein uC mit >= 2, besser 4 kByte Ram eingesetzt werden; mehr schadet nicht. Gruss
Hast du schon einmal mit einem Grafikdisplay gearbeitet? Wenn du ein gutes Tutorial hast oder eine Interseite mit guten Tipps und Tricks, wie man so ein Teil zum Laufen bringt, wäre es nett wenn du die Links kurz hier reinstellen könntest :)
>um das volle Speicherarray des LCD in seinem Ram abzubilde
Wozu? Das ist doch im DIsplaycontroller schon drin.
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.