ich mus ein par taster entprellen !
ich würde es am liebsten hardwaremäßig machen ! softwaremäßig verliere
ich, meiner meinung nach, zu viel zeit.
wenn ich mich richtig erinnern kann, kann man den taster mit einem
condensator entprellen ! jedoch weis ich nicht mehr wie ich den schalten
muss und in welcher größe ich ihn wählen muss !
kann mir wer ein paar tipps geben ?
Kondensatoren funktionieren eigentlich meistens ganz gut, für
professionelle Anwendungen würd ich aber eher zu etwas sichereren
Methoden greifen - Maxim hat Entprellchips (MAX6816 - MAX6818), meistens
wirds aber softwareseitig gelöst: mit Timern oder ähnlichem verlierst so
gut wie absolut keine Zeit - das sollte überall drin sein und kostet
absolut nix zusätzlich :)
Zum Entprellen brauchst Du je Taster 2 Widerstände, 1 Kondensator, 1
Schmitt-Trigger (1/6 des 74HC14), ist also sehr aufwendig.
Softwareentprellen kostet dagegen kaum Rechenzeit. Du darfst es aber
nicht so machen, wie fast immer hier beschrieben, indem man völlig
nutzlos in der Gegend rumwartet und Rechenzeit verschleudert.
Sondern, Du machst es einfach so ganz nebenbei in einem Timerinterrupt
etwa alle 5ms ... 200ms. Einen Timerinterrupt braucht man ja sowieso
immer, um alle zeitabhängigen Sachen zu machen. Und da drin dann noch
die Tastenentprellroutine aufzurufen kostet höchstens 0,1% der CPU-Zeit.
Ein Beispiel (Assembler und C) findest Du hier:
http://www.specs.de/users/danni/appl/soft/keyscan/index.htm
Peter
Dann ist es natürlich praktisch wenn man keinen ollen 8051 hat sondern
einen AVR - da haben die Eingänge den Schmitt-Trigger schon eingebaut
:-)
Ich verwende auch immer Software-Entprellung. Dabei muss es nicht
grundsätzlich falsch sein das mit Delays zu machen - kommt halt immer
auf die Anwendung an. Meistens habe ich aber sowieso eine globale
Zählervariable die alle x Millisekunden per Timer-Int inkrementiert
wird, so dass das Programm in der Hauptschleife immer weiß "wieviel Uhr
es ist" und die Entprellung danach ausrichten kann.
Bei mir hats gereicht, wenn ich einen 100nF Kondensator
parallelgeschaltet habe. Kommt aber auch sicherlich auf den Taster drauf
an. "probieren geht über studieren" - vor allem bei der Lösung mit
Schmitt-Trigger, die wäre mir nämlich auch zu aufwändig.
Gibt es eigentlich eine Methode softwaremässig bei einer Matrix-Tastatur
mehrere Taster gleichzeitig abzufragen? Wenn ich einfach nur die Reihen
nacheinander bestrome und dann alle Spalten gleichzeitig abfrage, kann
es ja zu sogennannten Geistertasten kommen. Beispiel:
5 6 7 8
| | | |
1- a b c d
2- e f g h
3- i j k l
4- m n o p
Wenn ich hier a, d und p drücke, bekomm ich folgende Ergebnisse:
Reihe 1 bestromt: 5 + 8 high -> a + d gedrückt -> i.O.
Reihe 2 bestromt: nichts high -> i.O.
Reihe 3 bestromt: nichts high -> i.O.
Reihe 4 bestromt: 5 + 8 high -> m + p gedrückt -> nicht i.O.
Das passiert durch die Verbindung über p auf Spalte 8, über d auf Reihe
1 und dann über a auf Spalte 5.
Wie kann ich das softwaremässig umgehen? Und nein, ich kann keine Dioden
einbauen.....
Gruss
Andre
@Andre,
in einer Matrix können ohne Dioden nur max 2 Tasten immer eindeutig
erkannt werden.
Deshalb werden z.B. in einer PC-Tastatur die Sondertasten "Strg", "Alt"
usw. separat abgefragt.
Peter
Andreas:
"... ollen 8051 ..."
Meine Gratulation zu diesem rein subjektivem, aber völlig unbegründetem
Statement !
Ich sag Dir jetzt mal auf den Kopf zu, das Du mindestens 20 davon zu
Hause rumwerkeln hast. Egal ob Waschmaschine, Fernseher, Videorekorder,
HiFi-Turm, PC usw., da werkeln oft 8051-er und meistens nicht nur einer
davon.
In jeder PC-Tastatur steckt z.B. einer, den SMB-Bus überwacht auch
einer. Wenn also Windows wieder mal abgeschmiert ist und damit Dein
Pentium nicht den Hitzetot stirbt, regelt der 8051 dann den Takt runter
bzw. den Lüfter hoch.
Ich hab jetzt über die Feiertage meinem Nootebook ein 40GB-Platte
eingeschraubt. Dann habe ich mir die alte 6GB-Platte genauer angesehen
und da steckt doch tatsächlich ein 87C154 drauf, also nichts mit alt !
Da habe ich auch meine ersten 8051 her, in alten SCSI-Platten steckten
sogar 2 Stück (DIL-Gehäuse + externer EPROM).
Wenn Du dann noch ein modernes Auto mit CAN-Bus fährst kommen mindestens
nochmal 20 dazu. Es gibt da z.B. kleine 8051-Derivate, die die
Scheinwerfer steuern, davon hast Du schon mal 4, dann natürlich die
Motorsteuerung, die Airbags, ... also die 20 reichen wohl garnicht.
Gibs also zu, Du bist von 8051-ern umzingelt. Und daß nur, weil sehr
viele andere Leute, diese überhaupt nicht "oll" finden.
Und Du kaufst ja letztendlich von diesen Leuten die "ollen" Geräte mit
den 8051 drin.
Die 8051-er haben schon ne Menge Vorteile, z.B. gegenüber den
Bitbefehlen des 8051 kann sich der AVR nur verstecken.
Außerdem gibt es sehr wohl auch 8051 mit Schmitt-Trigger-Eingängen, z.B.
die Philips LPC-Serie.
Auch habe ich bisher keinen anderen µC gesehen, den man so extrem
effizient in C programmieren kann. Im Mittel nur etwa 10% mehr
Programmspeicher gegenüber Assembler, das schafft bei weitem nicht mal
der AVR.
Der Herr Keil ist sich natürlich bewußt, daß er einen sehr
leistungsfähigen C-Compiler gebaut hat und verkauft ihn auch
dementsprechend teuer.
Aber über Schulversionen sollte man trotzdem damit seinem Hobby
nachgehen können und die 2kB Testversion reicht schon für ne Menge, wie
gesagt er optimiert ja extrem Speichersparend.
Hier mal ein 2kB Beispiel:
http://www.specs.de/users/danni/appl/soft/c51/thclock/index.htm
Also wer sich mit dem 8051 beschäftigt, der setzt in keinster Weise aufs
falsche Pferd.
Und Cygnal würde ja wohl nicht seine "ollen" 8051 jetzt auf 100MIPS
hochdrehen, wenn sie sich nicht absolut sicher sind, diese auch reißend
verkaufen zu können.
Peter
LoL @ Peter... Gut gesagt...
Noch hinzuzufügen: nicht umsonst kommen immer mehr 8051 mit USB 1.1/2.0
raus, mit 10/100MBit Ethernet usw... Da kann kaum ein anderer uC (den
ARM mal ausgenommen) mithalten!
Rainer.
Ganz umsonst gibt es aber auch nicht zig andere Controllerfamilien...
Das jeder seinen Liebling hat ist klar, trotzdem sollte man es etwas
objektiver angehen. Bzw. schonmal nen Pferd mit nem Huhn verglichen?
Ach Peter, nimm doch nicht immer alles so persönlich. Hast du wirklich
nicht den Smiley gesehen? Ich weiß dass der 8051 der mit Abstand am
weitesten verbreitete und wahrscheinlich angesichts der vielen Derivate
auch einer der vielseitigsten Controller ist, und ich weiß auch dass er
den AVRs gegenüber einige Vorteile (aber auch Nachteile) hat. Tatsache
ist jedoch dass die Hardwareentprellung beim AVR trivial ist, dass es
irgendwo in der riesigen Auswahl der 8051er auch einen mit
Schmitt-Triggern gibt will ich dabei ja gar nicht bestreiten.
Hardwareentprellung ist alles andere als trivial !
Wichtig sind auch die 2 Widerstände, ein Pull-Up (z.B. 10k) und einer in
Reihe (z.B. 1k), um den Entladestromstoß des Kondensators abzufangen.
Ansonsten können auch bei nur 100nF schon mal 1000A fließen, wenn auch
nur sehr kurzzeitig !
Und je nachdem, welchen Pfad dieser Entladestrom nimmt, können die
seltsamsten Effekte auftreten.
Bei den Kontakten kann es außerdem zum Schweißeffekt kommen (höherer
Verschleiß).
Besonders abzuraten ist von Tantalkondensatoren direkt parallel zum
Kontakt, die vertragen Kurzschlüsse überhaupt nicht.
Also immer schön den Reihenwiderstand vorsehen. Als Pull-Up reicht bei
kurzen Leitungen auch der im Mikrokontroller.
Peter
Also zum simplen Entprellen von Tastern brauch ich doch keine
Schmitt-Trigger. Sind doch soweit ich mich richtig entsinne rein digital
arbeitende Bauteile. Dieser ganze "Firlefanz" mit diversen C bzw. R/C
sind doch sowieso nur unnötige Krücken die zusätzliche Bauteile
erfordern. Wir leben ja nicht mehr in dem Zeitalter wo 256 Byte
Programmspeicher schon recht teuer sind. Also wirklich sinnvoll ist nur
eine Software-Entprellung.
Hallo,
um noch mal auf die 8051 ziger zu kommen, ich habe bei der externen
E-Prom Variante mit Latch aufgehört. Jetzt gibts die ja mit Flash. Gibt
es da auch so eine Art ISP? Was ist den für ein 8051 empfehlenswert z.
B. ohne AD Wandler und wie programmiere ich den?
Danke Mike
Wenn der Taster ein wechsler ist, dann lassen die sich auch ganz einfach
mit einem RS-Flip-Flop entprellen. Nicht unbedingt die billigste methode
aber technisch sehr sauber.
@Peter
nicht das ich jetzt über deine 51er lästern will aber ich denke mal das
in meinem Haushalt und meinem Auto wesentlich mehr Motorolas verbaut
sind.
Eckhard
@Mike:
Deshalb habe ich ja auch so viel mit den 8051 gemacht, die Atmel 89C51
waren ja lange Jahre die einzigen Kontroller mit Flash gewesen.
EPROMs habe ich schon ewig keine angefaßt.
Wenn Du was mit den 8051 machen willst, nimm nur ISP (z.B. AT89C8252)
bzw. IAP (z.B. T89C51RD2).
Aber auch andere Hersteller außer Atmel haben solche, z.B. Cygnal,
Maxim, Analog Devices usw.
Auf der Keil-Webseite findest Du etwa 32 Hersteller von 8051 angegeben,
such dann einfach auf deren Webseiten nach Flashtypen mit ISP / IAP.
Zum Thema:
Meistens sinds ja mehrere Tasten, die man als Matrix schaltet und dann
ist Hardwareentprellung eh nicht mehr möglich.
Und wenn ich einmal ne Entprellroutine geschrieben habe, nehme ich sie
auch dann, wenns mal nur 2 Tasten sind.
Meine Devise ist, wenn ich durch Software auch nur einen Widerstand
einsparen kann, dann tue ich das auch.
Peter
Zur Tasterentprellung per Software habe ich etwas in die Codesammlung
gelegt: für den AT90S8515.
Mir ist bekannt, daß diese Routinen auf einem 8051 viel eleganter,
schneller und überhaupt besser ablaufen.
Michael
@Michael,
wenn man etwas in C schreibt ist es genau so elegant, egal ob es auf nem
8051 oder AVR laufen soll.
Wenn dann vielleicht für den AVR etwa mehr Code erzeugt wird,
interessiert das kaum, dann nimmt man eben den Typ mit mehr Speicher.
Dafür gibts ja die AVRs mit 128kB.
Pech höchstens, wenn man schon eine Platine für nen 20-Pinner fertig hat
und dem der Flash ausgeht.
Und besser laufen kann nur eine Routine, die weniger logische Fehler
enthält. Z.B. lassen manche unberücksichtigt, daß eine Taste auch beim
Loslassen prellen kann.
Peter
Hallo Chris,
das Entprellen von Schaltern und Tastaturen hängt von deren
Einsatzumgebung ab. Wenn Du einen Schalter/taster mit einem
Pullupwiderstand sotfwaremäßig abfragst, dann ist der sinnvollerweise
relativ hochohmig (>1K). Störsignale können nun leicht diesen Eingang
beeinflussen und zu Fehlerkennung führen. Lange Kabelverbindungen
erleichtern es Störern zusätzlich bei hohen Quellwiderständen. Also
immer nach Bedarf eine lösung wählen.
MfG Manfred Glahe