Forum: Mikrocontroller und Digitale Elektronik Einfache Rechenfunktion mit Atmega8


von O. A. (sokrates1989)


Angehängte Dateien:

Lesenswert?

hallo,

Ich habe ein einfaches Programm geschrieben, bei dem ich mit Taster1 
addiere und bei Taster2 subtrahiere. Jeweils um den Wert "1".

Ich fange bei "1" an zu zählen.

wenn ich im Debugger das Programm durchspiele macht es alles Korrekt. Es 
zählt im Register wie es soll und subtrahiert. Auch macht er die Ausgabe 
Korrekt.

Das Problem wenn ich das Programm auf mein Board aufspiele ist, dass die 
Leds willkürliche Zustände annehmen, wenn ich den Taster 
drücke..zumindest sieht es so aus, manchmal zählt er korrekt, manchmal 
nicht.

Ich vermute aber, es liegt daran dass es davon abhängt wie lange ich 
drücke..d.h er zählt mehrmals obwohl ich nur kurz drücke.

Wie kann ich es nun so machen, das "ein" tastendruck eben nur "einer" 
Addition oder Subtraktion entprechen soll.

von Michael B. (laberkopp)


Lesenswert?

Ostap A. schrieb:
> Ich vermute aber, es liegt daran dass es davon abhängt wie lange ich
> drücke..

Ja, und wenn du das geschafft hast zu ergänzen merkst du daß Taster 
prellen.

Du wirst noch ein wenig programmieren üben müssen.

https://www.mikrocontroller.net/articles/Entprellung

von Peter D. (peda)


Lesenswert?

Da fehlt:
- Flanke erkennen
- entprellen

von O. A. (sokrates1989)


Lesenswert?

und ich muss also entprellen. wo kann ich ein einfaches Beispiel finden? 
Unter dem Link wird auch C verwendet.
Kann ich nur mithilfe von Assembler entprellen?

von Stefan F. (Gast)


Lesenswert?

Jetzt stellen wir und mal ganz dumm und geben bei Google (nicht in der 
Facebook App!) "c taster entprellen" ein. Und voilla - das erste 
Ergebnis verweist auf einen Artikel bei Mikrocontroller.net!

Lies diesen Artikel.

Falls Dir der Artikel noch zu kompliziert ist, gehe den einfacheren Weg: 
Schalte paralle zu deinen Tastern jeweils einen 47nF Kondensator. Dann 
bist du schonmal das Prellen los.

Danach überlegst du Dir, wie du dafür sorgst, dass nur einmal pro 
Tastendruck gerechnet wird, anstatt solange die Taste gedrückt ist. Im 
Prinzip so:

Wenn Taste A gedrückt wurde,
  dann addiere.
Wenn Taste B gedrückt wurde,
  dann subtrahiere.
Warte, bis beide Tasten losgelassen werden.
Fange wieder von Vorne an.

Das wäre die Anfängerfreundliche Version. Nun steige zu Level 2 auf, 
indem du per Software entprellst, statt mit Kondensatoren. Erster Tipp: 
Dafür wirst du einen Timer brauchen.

von O. A. (sokrates1989)


Lesenswert?

Stefan U. schrieb:
>  (nicht in der Facebook App!)
>  "c taster entprellen" ein. Und voilla - das erste

ich habe kein Facebook..und ich wollte wissen ob das "ohne C" machen 
kann.

Beitrag #4996065 wurde von einem Moderator gelöscht.
von Einer K. (Gast)


Lesenswert?

Ostap A. schrieb:
> und ich wollte wissen ob das "ohne C" machen
> kann.

Das kannst du auch ohne C machen.

von Arduinoquäler (Gast)


Lesenswert?

Stefan U. schrieb:
> Schalte paralle zu deinen Tastern jeweils einen 47nF Kondensator.

Sorry lieber Stefan das ist absoluter Murks.

Elektrisch Entprellen wird man mit einem RC-Glied und einem
"Entladewiderstand" am Taster um den Strom zu begrenzen.

von Toni Tester (Gast)


Lesenswert?

Ostap A. schrieb:
> Kann ich nur mithilfe von Assembler entprellen?

Logisch.

Ein Beispiel ist im Link enthalten (Timerbasiertes Entprellen nach PeDa) 
- zudem finden sich auch einige gute Links, z. B. zu 
https://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten

von Stefan F. (Gast)


Lesenswert?

> Sorry lieber Stefan das ist absoluter Murks.

Ich denke, dem TO ist mit einem Kart momentan eher gedient, als mit 
einem Formel-1 Wagen.

Der Taster wird die Entladeströme dieses kleinen Kondensators schon 
lange genug aushalten, davon bin ich überzeugt.

> Unter dem Link wird auch C verwendet.
> Kann ich nur mithilfe von Assembler entprellen?
> ich wollte wissen ob das "ohne C" machen kann.

Nur um Missverständnisse zu vermeiden, ich meinte diesen Link: 
https://www.mikrocontroller.net/articles/Entprellung

Unter dem Link wird ausführlich erklärt, wie man entprellt. Und zwar in 
C UND IN ASSEMBLER. Wichtiger als die Code-Beispiele sind allerdings die 
Erklärungen dazu. Wenn du die verstanden hast, aknnst du das in jeder 
beliebigen Programmiersprache implementieren.

In Assembler hast du die volle Kontrolle über den Mikrocontroller. Mit 
Assembler kann man prinzipiell alles programmieren, was programmierbar 
ist. Was C kann, kann Assembler erst Recht. Die Frage ist, ob Du es 
kannst.

Wenn Dir das zu schwierig ist, solltest du erwägen, Assembler links 
liegen zu lassen und in C zu programmieren. Das ist nämlich wesentlich 
einfacher. Wenn du mit C gut zurecht kommt, kannst du es ja nochmal mit 
Assembler versuchen. Ab und zu ist diese Sprache zumindest für 
performance-kritische Teile durchaus hilfreich.

von Toxic (Gast)


Angehängte Dateien:

Lesenswert?

Stefan U. schrieb:
> voilla

Du meintest sicher "et voilà"

Immerhin kann ich nun etwas finnisch..... ;-)

von Michael B. (laberkopp)


Lesenswert?

Ostap A. schrieb:
> Unter dem Link wird auch C verwendet.
> Kann ich nur mithilfe von Assembler entprellen?
> und ich wollte wissen ob das "ohne C" machen kann.

Wenn du es schaffen würdest, auf der verlinkten Seite noch 20cm weiter 
zu lesen, bevor das Aufmerksamkeitsdefizitsyndrom zuschlägt...

von O. A. (sokrates1989)


Angehängte Dateien:

Lesenswert?

Hallo, nochmal.

der Link mit der Tasterentprellung enthält einen Code der für mich nur 
schwer nachvollziehbar ist.


Wie kann ich den als Anfänger einen Taster entprellen ohne diesen 
"langen" Code zu verwenden?

Die Entprellung soll ja nicht perfekt sein. Ich würde es halt nur gerne 
selber machen.

Dummie like eben.

Ich würde es gerne in Assembler machen, weil wir im Modul bisher nur mit 
Assembler gearbeitet haben.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ostap A. schrieb:
> Wie kann ich den als Anfänger einen Taster entprellen ohne diesen
> "langen" Code zu verwenden?
Verplempere Zeit.
Lies die Taster ein und dann verplemterst du in einer Warteschleife z.B. 
100ms. Und dann liest du wieder ein. Wenn die Pegel noch gleich sind, 
dann hat sich nichts getan. Wenn die Pegel unterschiedlich sind, dann 
musst du was tun. Das reicht fürs Erste...


Und kurz danach wirst du merken, dass dir die verplemperte Rechenzeit 
woanders fehlt, weil du ja sonst auch noch was machen willst. Dann musst 
du dir eben Gedanken machen, wie du das löst. Den Prozess nennt man 
Lernen. Der Weg dahin ist Nachdenken und Mitdenken.

von Der Andere (Gast)


Lesenswert?

Ostap A. schrieb:
> Wie kann ich den als Anfänger einen Taster entprellen ohne diesen
> "langen" Code zu verwenden?

Du solltest wirklich die Artikel lesen die man dir empfiehlt:

Stefan U. schrieb:
> Nur um Missverständnisse zu vermeiden, ich meinte diesen Link:
> https://www.mikrocontroller.net/articles/Entprellung
>
> Unter dem Link wird ausführlich erklärt, wie man entprellt.

Du musst halt die Erklärung lesen und verstehen, dann kannst du das 
Vorgehen ja in Assembler umsetzen.

von Tutordepp (Gast)


Lesenswert?

Ostap A. schrieb:
> Wie kann ich den als Anfänger einen Taster entprellen ohne diesen
> "langen" Code zu verwenden?

Sag deinem Aufgabensteller er soll gefälligst für euch als
Anfänger dafür sorgen dass die Tasten-Prellerei euch nicht
bei der Lösung der eigentlichen Aufgabe stört.

von Stefan F. (Gast)


Lesenswert?

Oder bleibe in Level 1: Mit Kondensator entprellen.

von O. A. (sokrates1989)


Lesenswert?

Lothar M. schrieb:
> Ostap A. schrieb:
>> Wie kann ich den als Anfänger einen Taster entprellen ohne diesen
>> "langen" Code zu verwenden?
> Verplempere Zeit.
> Lies die Taster ein und dann verplemterst du in einer Warteschleife z.B.
> 100ms. Und dann liest du wieder ein. Wenn die Pegel noch gleich sind,
> dann hat sich nichts getan. Wenn die Pegel unterschiedlich sind, dann
> musst du was tun. Das reicht fürs Erste...

Genau sowas meinte ich! Vielen Dank! Fehlen wird mir die zeit sicher 
nicht. Denn schließlich möchte ich kein Programmierer werden, sondern 
lediglich das Modul bestehen.

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Modul habe ich Letztens erst beim Führerschein gehört (ging um 
Kraftfahrer und Gefahrgut, nur nebenbei).

Mit dem 'Zeit verplempern' ist Das gar nicht so einfach.
https://www.mikrocontroller.net/articles/AVR_Assembler_Makros#Verz.C3.B6gerung_um_X_Nanosekunden

MfG

von Dieter F. (Gast)


Lesenswert?

Patrick J. schrieb:
> Mit dem 'Zeit verplempern' ist Das gar nicht so einfach.

Kein Thema - einfach mal ein Praktikum bei einer Straßenmeisterei machen 
:-)

von Vollblutkomiker (Gast)


Lesenswert?

Dieter F. schrieb:
> Kein Thema - einfach mal ein Praktikum bei einer Straßenmeisterei machen
> :-)

Das ist DER Schenkelklopfer schlechthin. Den erzähle ich doch glatt auf 
der nächsten Trauerfeier.

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.