Forum: Mikrocontroller und Digitale Elektronik hoch- UND runterzählen


von Dambe D. (dambe3612)


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

: Verschoben durch Moderator
von Matthias L. (Gast)


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?

von Dambe D. (dambe3612)


Lesenswert?

Ich könnte eine Variable einsparen und es wäre eine einfache und 
elegante Alternative.

Schade, dass es nicht möglich ist ...

Danke trotzdem

von Magnus M. (magnetus) Benutzerseite


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.

von Peter D. (peda)


Lesenswert?

Jan Huber schrieb:
> mit dem Timer wäre es
> mir aber lieber.

Warum?
Reichen Dir 4096 Variablen nicht aus?


Peter

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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."

von Dambe D. (dambe3612)


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

von Karl H. (kbuchegg)


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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von troll (Gast)


Lesenswert?

Theoretisch kann man auch das LCD zerlegen und die Polarisationsfolie 
umdrehen - so sie denn quadratisch wäre...

von Dambe D. (dambe3612)


Lesenswert?

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!

von Karl H. (kbuchegg)


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.

von Werner (Gast)


Lesenswert?

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

von Dambe D. (dambe3612)


Lesenswert?

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

von dfgh (Gast)


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 ;-)

von Erich (Gast)


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

von Dambe D. (dambe3612)


Lesenswert?

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 :)

von Matthias L. (Gast)


Lesenswert?

>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
Noch kein Account? Hier anmelden.