Forum: Mikrocontroller und Digitale Elektronik ATMEGA


von Andreas Bode (Gast)


Lesenswert?

Hallo Leute,

ich versuche gerade über einen Taster eine LED anzusteuern.
Das ganze soll nach folgendem Schema funktionieren:
Begin LED aus
Taste gedrückt LED an
Taste los LED bleibt an
Taste gedrückt LED aus
Taste los LED bleibt aus

und jetzt mein Problem:
Es funktioniert nicht....

Hier mal der Code:
ldi r16, 0b11111111  ;0b11111111
out DDRA, r16    ;PortA als Ausgang 0b11111111
ldi r16, 0b00000000  ;0b00000000
out PORTA, r16    ;interne Pull-up's -> AUS
ldi r16, 0b00000000  ;0b00000000
out DDRE, r16    ;PortE als Eingang 0x00
ldi r16, 0b11111111  ;0b11111111
out PORTE, r16    ;interne Pull-up's --> EIN
ldi r17, 0b11111111

main:
in r16, PINE
jmp taster

taster:
sbrs r16, 3 jmp led_check_1
jmp led_check_2

led_check_1:
sbrs r17, 0 jmp register_17_clear
jmp register_17_check

register_17_clear:
cbr r18, 1
jmp loop

register_17_check:
sbrs r18, 0 sbr r18, 1
jmp loop

led_check_2:
sbrs r17, 0 jmp register_18_check
jmp led_on

register_18_check:
sbrs r18, 0 jmp led_on
jmp led_off

led_on:
cbr r17, 1
jmp loop

led_off:
sbr r17, 1
jmp loop

loop:
mov r16, r17
out PORTA, r16
jmp main

von coderX (Gast)


Lesenswert?

nur zu leute, hier immer kräftig code reinstellen, die gemeinde findet
schon die fehler !!! oder noch besser- idee formulieren und passend
programmierten code abwarten...

hey andreas, streng deinen eigenen grips an !!!

coderX

von Jens R. (dij)


Lesenswert?

Seit wann ist "funktioniert nicht" 'ne Fehlerbeschreibung?

von Marko (Gast)


Lesenswert?

schau mal nach den interrupts ... falling rising etc.

flankensteuerung ?¿

von Marko (Gast)


Lesenswert?

ach so, wenn du schon dabei bist ... schau auch mal
nacht tastenentprellung

von Hannes L. (hannes)


Angehängte Dateien:

Lesenswert?

Ehe ich jetzt deinen Code analysiere (ist eh zwecklos, da keine
Tastenentprellung erfolgt), solltest du vielleicht mal meinen alten
Code analysieren. Da gibt es einen Taster, mit dem man den Laser
einschalten/ausschalten kann, der tut genau das, was du anstrebst.

Nur geht das nicht ohne Tastenentprellung mit Flankenerkennung.
Und Tastenentprellung mit Flankenerkennung braucht nunmal (wenn es
einfach und ressourcensparend bleiben soll) einen Timer-Interrupt.
Und der Timer-Interrupt braucht nunmal zumindest den Interruptvektor
(besser die ganze Interrupt-Vektortabelle). Davon ist aber in deinem
Programmcode nix zu sehen...

...

von Rahul (Gast)


Lesenswert?

Hannes, du bist viel zu nett.

von Andreas Bode (Gast)


Lesenswert?

Danke Marko und Hannes,

ich habe da natürlich den falschen Ansatz gehabt.
Die Flankensteuerung über Interrupts werde ich mir mal zu Gemüte
ziehen.
Den Code werde ich dann natürlich einstellen.

Gruß Andreas

PS(Für die zwei anderen Kandidaten):
Ich beschäftige mich erst seit ca. 4 Wochen mit der
Mikrocontrollerprogrammierung. Wenn Ihr entsprechende Ahnung hättet,
könntet Ihr ja mal versuchen sinnvolle Informationen zu posten und
nicht solch einen Schrott!

von Hannes L. (hannes)


Lesenswert?

> Den Code werde ich dann natürlich einstellen.

Wenn der so ist, wie im deinem ersten Post, dann lass' es lieber.

> PS(Für die zwei anderen Kandidaten):
> Ich beschäftige mich erst seit ca. 4 Wochen mit der
> Mikrocontrollerprogrammierung. Wenn Ihr entsprechende Ahnung hättet,
> könntet Ihr ja mal versuchen sinnvolle Informationen zu posten und
> nicht solch einen Schrott!

Das ist jetzt aber ungerecht!
Wenn du dich erst seit Kurzem mit AVRs beschäftigst, dann fange doch
etwas kleiner an. "Du kannst den Berg nicht mit einem Schritt
besteigen." (Zitat von PeDa).

Ohne Interrupt-Programmierung sind Tastenabfragen nicht ordentlich
realisierbar. Die "zwei anderen Kandidaten" (und ich auch!!!) sind es
leid, alle 3 Tage solche Fragen von sich selbst überschätzenden
Programmiereinsteigern zu lesen oder zu beantworten.

Und im Übrigen: Wenn hier jemand "Schrott" gepostet hat, dann bist du
das (dein Programmcode). Deine Arroganz (sich über diese Antworten
aufzuregen) solltest du also ruhig stecken lassen, denn du willst etwas
von uns und nicht wir von dir.

@Rahul:
Meinst du wirklich? Nett und hilfsbereit ist Zweierlei... ;-)
Grüß die Sprotten...

...

von Andreas Bode (Gast)


Lesenswert?

Danke für die klaren Worte!

Habe soeben das Board gewechselt!!!
Dort werden Anfänger genauso behandelt wie Fortgeschrittene, egal ob
und wie oft solche Probleme auftreten, dann wird auf den entsprechenden
Link verwiesen.

Außerdem wollte ich keinen vorgefertigten Code haben, da ich verstehen
will, wie der Mikrocontroller arbeitet.
Da ich denke, mit einer Taste und einer LED nicht zu den sich selbst
überschätzenden Programmieranfängern zu zählen und mir auch selbst
Gedanken zum Problem gemacht habe (siehe oben - auch wenn es
Anfängerschrott ist), finde ich es sehr arrogant, wenn jemand denkt, er
wäre etwas Besonderes.

Dir aber noch einmal vielen Dank.

PS: Ich beantworte übrigens auch Fragen oder wirke an Problemstellungen
mit (siehe Spotlight.de). Nur gebe ich dann sinnvolle Beiträge ab...

von Rahul (Gast)


Lesenswert?

Übrigens kann man Taster auch per Warteschleife entprellen...
Aber bei spotlight.de bist du schon gut aufgehoben...

von Dirk Doerr (Gast)


Lesenswert?

Hallo Andreas!

Ich denke HanneS wollte auf ein generelles Problem hinweisen, daß nicht
nur Dich betrifft.

Es geht auch um die Art des Postings:

* Dein Betreff: ATMEGA
  Was soll das. Etwas mehr Infos bitte!
  Z.B. AVR: LED mit Tasten schalten oder etwas in der Art. Ist bei
  manchen Problemen nicht ganz leicht, aber sollte man schon
  versuchen.

* Deine Fehlerbeschreibung: funktioniert nicht.
  Toll. Damit kann man viel anfangen.

* Dein Problem: LEDs über Tasten schalten
  Ich glaube mit ein paar Minuten Suche im Forum oder Google findest
  Du den Hinweis, daß Du Dir etwas zum Thema Tastenentprellen
  ansehen solltest. Dazu findest Du hier im Forum und in den Artikel
  viele Hinweise und Codebeispiele

Das Du Code postest finde ich eigentlich ganz in Ordnung. Meistens muß
man mehrmals nachfragen bis jemand Code postet.

von Hannes L. (hannes)


Lesenswert?

@Rahul:

> Übrigens kann man Taster auch per Warteschleife entprellen...

Sicher kann man die Mainloop auch mit einer (Rechenzeit
verschlingenden) Warteschleife 'bremsen', ich meine aber, dass man
das mit einem Timer-Interrupt einfacher, präziser und berechenbarer tun
kann. Das ist der Grund, dass ich Warteschleifen für solche Zwecke
prinzipiell nicht vorschlage.

> Aber bei spotlight.de bist du schon gut aufgehoben...

gg Das mag sein... Wer Hilfe sucht, sollte seine Arroganz etwas
zurück nehmen. Ich habe zu helfen versucht, indem ich ein älteres
Programm gepostet habe, in dem nicht nur die Frage des T-Flipflop (LED
ein/aus) realisiert ist, sondern auch die Grundlagen der
Interruptprogrammierung sowie eine der besten Tastenentprellungen (die
beste?), die ich je gesehen habe. Es war kein speziell für Andreas
programmierter Code, es sollte ihm nur die Möglichkeit geben, durch
Analysieren die Dinge herauszupicken, die ihn interessieren. Aufgrund
der recht übersichtlichen Struktur des Quelltextes sollte das kein
Problem sein. Dann wollte ich damit auch zeigen, dass man ASM-Quelltext
auch etwas übersichtlicher und lesbarer gestalten kann als in seinem
ersten Posting.

Nunja, wieder ein Argument mehr, meine Hilfsbereitschaft zu überdenken
und evtl. zu reduzieren...

Gruß von der Elbe...
...

von Adolf (Gast)


Lesenswert?

@ all

keiner ist mit Mikrokontrollern im Hintern geboren worden.
Deshalb ist es nur fair wenn diejenigen, die diese Technik beherrschen,
den Anfängern unter uns helfen. Die anderen Pfeifen und Schandmäuler,
die nur dumme abfällige Bemerkungen parat haben, sollte man auf der
Stelle liquidieren.

von Hannes L. (hannes)


Lesenswert?

@Dirk:
Was du ansprichst, ist zwar richtig, hat mich aber eigentlich nicht
gestört. Was mich aber gestört hat, ist die Tatsache, dass Andreas die
Leute, die ihm das vorgehalten haben, beschimpft hat. Und das nenne ich
Arroganz. Aber das ist ja nun kein Thema mehr, er hat ja nun "sein
Board" gefunden. Soll mir aber Wurscht sein...

Gruß...
...HanneS...

von Rahul (Gast)


Lesenswert?

@Hannes: Wenn das Programm sowieso nichts anderes machen soll, kann es
sich auch damit beschäftigen Schleifen / Schafe zu zählen...
Simpler geht es kaum/nicht, und sollte schon
anfänger-kompatibel/verständlich sein.
[OT]
Kann es sein, dass ich mich heute nicht entscheiden kann?
[/OT]

von Marian (Gast)


Lesenswert?

@Hannes:

Bitte überdenke _nicht_ deine Hilfsbereitschaft! Ich finde das du ein
sehr kompetenter Anpsrechpartner bist und wenn du merkst, dass der
Problemsteller sich mit seinem Problem beschäftigt, dann hilfst du doch
eigentlich auch gerne oder?
Bitte laufe mir nicht weg :)...ich brauche deine hochqualifizierte
Hilfe bestimmt auch noch einmal ;)

Gruß

Marian

von peter dannegger (Gast)


Lesenswert?

Huch, hier wird ja kräftig ans Bein gepinkelt.


Ich sach mal, wer nicht gerade das erste mal überhaupt auf einem Board
ist, der sollte eigentlich wissen, daß auch Boardprofis keine Götter
sind und auch mal nen schlechten Tag haben können.

Am einfachsten ist es, berechtigte Kritiken zu beherzigen und
übertriebene Kritiken zu ignorieren. Es ist auch hilfreich, gleich zu
Beginn seine Vorkenntnisse (Anfänger) offen zu legen, damit der andere
einen besser einschätzen kann.

Und an die Profis: Einmal zuschlagen reicht, nochmal zurückschlagen
nur, wenn auch gut überlegt (hat trotzdem keinen Zweck).
Und Mitmachen muß auch nicht sein, wenn auch die Versuchung groß ist.


Peter

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.