hoch- UND runterzählen

OP #2847788
Lesenswert?

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
Gast #2847818
Lesenswert?

>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?
Persönliche Seite #2847850
Lesenswert?

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.
Moderator Persönliche Seite #2848703
Lesenswert?

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."
OP #2850549
Lesenswert?

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
#2850555
Lesenswert?

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.
#2850570
Lesenswert?

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.
Gast #2850597
Lesenswert?

>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 ;-)
Gast #2850706
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren