www.mikrocontroller.net

Forum: Analoge Elektronik und Schaltungstechnik Bei Tasterabfrage blinkt LED


Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend liebes Forum,
ich hab mal wieder en alters Experiment neu benutzt, um sicher zu gehen 
das meine Ports noch funktionieren. Bei einer Tasterabfrage blinkt die 
LED dauernd ganz schwach. Kann cih das unterbinden?

Hier mein Code:

$regfile = "m32def.dat"
$crystal = 1000000


Config Porta.7 = Input
Pina.7 = 1
Config Portd.5 = Output



Do
 If Pina.7 = 1 Then
 Portd.5 = 1
 Waitms 100
 Portd.5 = 0
 Else
 PortD.5 = 0
 End If
Loop

Ich hoffe ihr könnt mir helfen...

Gruß Marvin

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann überleg mal, warum:

Was passiert, wenn du den Taster betätigst?

>Do
>  If Pina.7 = 1 Then
>    Portd.5 = 1
>    Waitms 100
>    Portd.5 = 0
>  Else
>    PortD.5 = 0
>  End If
>Loop

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mein taster betätige geht meine LED an und leuchtet 100ms. 
Danach geht sie aus. Und da in der Schleife immer nach dem Taster 
abgefragt wird, auch wenn der Taster nicht gedrückt ist, sollte die LED 
auch aus bleiben und nciht immer ganz schwach blinken.

Das meitest du, oder?

oder nicht?

Gruß marvin

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann cih das unterbinden?

Ja, auf jeden Fall. Dazu ist es erforderlich, dass Du Dein Programm 
peinlich sorgfältig analysierst, solange, bis Du von jeder Zeile 
haargenau weißt, was sie bewirkt. Wenn Du das geschafft hast, verstehst 
Du, warum die LED sich so verhält, und kannst die nötigen Modifikationen 
an Deinem Programm vornehmen, um das Blinken abzustellen.

So einfach ist das.

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich komm einfahc nicht drauf! Jetzt bin ich schon seid 2 Stunden daran, 
den Fehler zu beheben. Könnte das sein das ich den Taster noch 
"entprellen" muss?
UND kann sein das mein µC schon auf 1 schält wenn ich z.B. 10µA input 
habe?

Ich hoffe Du/ihr könnt mir helfen.


Gruß Marvin

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schreib doch mal der reihe nach auf welchen Befehl der µC der reihe nach 
abarbeitet.

Wichtig: die schleifen dabei auflösen und die IF sache gleich auswerten, 
dann wirst du sehen warum die so merkwürdig blinkt.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn ich mein taster betätige geht meine LED an und leuchtet 100ms.
> Danach geht sie aus.
Und was wird wohl gleich danach wieder passieren, wenn der Taster noch 
gedrückt ist?

Leuchtet deine LED, wenn der Ausgang high oder wenn er low ist?
Ist der Eingang high oder low, wenn der Taster betätig ist?

> UND kann sein das mein µC schon auf 1 schält wenn ich z.B. 10µA input
> habe?
Ja. Der schaltet über die Spannung am Eingangspin, nicht über den Strom.

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also der Ausgang leuchtet, wenn er auf High ist. Er leuchtet ebenso, 
wenn cih GND auf den Eingangspin zieh.

Wie könnte ich es dann programmieren, dass wenn ich einen Taster drücke, 
ein Programmablauf startet, und wenn ich den Taster halte, das die LED 
dauernd leuchtet (solange der Taster gedrückt ist) und dann zum Ende des 
Programmablaufes springt?
Mit Labeln und Goto?Oder besser mit Subs?

Bin leider noch ziemlich frisch ;) aber mein Opa sagte immer; Ein 
Lehrling ist kein wissender Mann, doch er trägt Garben :).

Gruß Marvin

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also der Ausgang leuchtet, wenn er auf High ist.
Ok.

>Er leuchtet ebenso, wenn cih GND auf den Eingangspin zieh.
Ist das bei deinem Programm wirklich so?

>Mit Labeln und Goto?Oder besser mit Subs?
Weder noch hier...


>aber mein Opa sagte immer; Ein Lehrling ist kein wissender Mann, doch er >trägt 
Garben :).
Frei nach dem Motto: Du siehst heute aber wieder verschlafen aus! Das 
ist das Talent, das in mir schlummert. Das Luder wird bloß ne wach!

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist bei meinem Programm wirklich so :).
Wie kann ich das den sonst machen das da gesprungen wird?
Man, das nervt^.^ ich bekomms einfahc nicht auf die Reihe, mein 
Nachttisch sit fertig jetzt häng ich nur noch mit der Software für die 
Beleuchtung hitnerher..

Gruß Marvin

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und selbst wenn ich ganz normal auf dem Boden steh (Barfuss) und den 
Eingangspin anfass reicht das schon aus, ihn auf Low zu ziehen!
Abnormal :)

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also nochmal:


>Do
Wann wird diese Bedingung erfüllt?
>  If Pina.7 = 1 Then
Was passiert dann?
>    Portd.5 = 1
>    Waitms 100
>    Portd.5 = 0

Was passiert sonst?
>  Else
>    PortD.5 = 0
>  End If


>Loop

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Do
Wann wird diese Bedingung erfüllt?
>  If Pina.7 = 1 Then ->Wenn ich GND auf Pina.7 ziehe
Was passiert dann?    ->Bei Erfüllung Wird Portd.5 Low geschaltet->
>    Portd.5 = 1      ->Die LED leuchtet dann 100ms
>    Waitms 100
>    Portd.5 = 0      ->Nach den 100ms wird die LED wieder auf High gezogen.

Was passiert sonst?   ->Falls Pina.7 nicht Low ist, bleibt Portd.5 Low
>  Else
>    PortD.5 = 0
>  End If             ->Ende der Clause


>Loop                 ->Wiederholen..


Ich finde einfach nicht den Fehler!!!
Ich danke euch trotzdem für eure Hilfe!

Gruß Marvin

Autor: Markus ---- (mrmccrash)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann überleg mal weiter, wie lange drückst du den Taster, und wie lange 
braucht dein Prozessor für das Programm?

Und was passiert, wenn die Schleife durchlaufen ist und wieder oben 
angefangen wird?

_.-=: MFG :=-._

Autor: Spezi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  If Pina.7 = 1 Then ->Wenn ich GND auf Pina.7 ziehe

Falsch; der Pin wird auf 1, also High, abgefragt.

>Was passiert dann?    ->Bei Erfüllung Wird Portd.5 Low geschaltet->
>    Portd.5 = 1      ->Die LED leuchtet dann 100ms
>    Waitms 100
>    Portd.5 = 0      ->Nach den 100ms wird die LED wieder auf High gezogen.

Wieder falsch; 1 ist High und 0 ist Low.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und selbst wenn ich ganz normal auf dem Boden steh (Barfuss) und den
> Eingangspin anfass reicht das schon aus, ihn auf Low zu ziehen!
> Abnormal :)
Eher einfach hochohmig. Ein Eingang muß auf ein definiertes Potential 
gelegt werden, er darf nie einfach "offen" sein. Entweder macht du das 
mit eingebauten Pullups, dann muß der Schalter gegen Masse schalten (und 
damit low aktiv ausgewertet werden). Oder der Schalter schaltet gegen 
Vcc, dann solltest du einen externen Widerstand gegen GND schalten.

BTW:
> Also der Ausgang leuchtet, wenn er auf High ist.
Formal richtig wäre wohl: Die LED leuchtet, wenn der Ausgang high ist 
;-)

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt blick ichs garnichtmehr :(.

Ich hab ja den Internen Pullup angemacht ;), wenn ich dann den Pina.7 
mit gnd verbinde, ist der Port High? Ja oder?

Und wenn ich nen externen Widerstand benutze kann taster auch an VCC 
anschliesen?.. Wusste ich nicht.. Was für nen Wiederstand breuchte ich 
denn da?

Ich denke mein Prozessor braucht für ddie Loop so ca 20 cycles (Wenn 
jeder Befehl 2 cycles lang ist) das wären bei 1mHz Takt 1/50000 sec. 
Also ziemlich kurz ;).  Aber dann müsste ich das blinken ja garnicht 
mehr sehen, oder?

Was passt da jetzt nicht?


Gruß Marvin

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> wenn ich dann den Pina.7 mit gnd verbinde, ist der Port High? Ja oder?
Nein. Üblich (bei positiver Logik) ist Vcc = high, GND = low

> Und wenn ich nen externen Widerstand benutze kann taster auch an VCC
> anschliesen?..
Ja, und du hast damit Pina.7 = 1 wenn der Taster gedrückt wird.

> Was für nen Wiederstand breuchte ich denn da?
10k sind ok.
Aber dann schaltest du besser den Pullup aus.

> Aber dann müsste ich das blinken ja garnicht mehr sehen, oder?
Du verwendest  waitms 100, das sollten etwa 0,1 sec sein...

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm ich werds gleich umbauen (habs aufm Steckbrett :)) und 
umprogrammieren.

Danke! Ich lass wieder was hören wenn ich Erfolg hatte :)

Gruß Marvin


Edit: Geht da auchn 12K widerling?

Autor: Markus ---- (mrmccrash)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollte reichen.

_.-=: MFG :=-._

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, danke!
Funktioniert aber immer noch nicht so wie ich will :(.
Sobald ich nur mit der Hand den Taster berühre, leuchtet die LED..
Da ist doch was faul -.-

Gruß Marvin

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So jetzt nochmal nen neuen Probiercode ohne die 100ms.

$regfile = "m32def.dat"
$crystal = 1000000


Config Porta.7 = Input
Config Portd.5 = Output



Do
 If Pina.7 = 0 Then
 Portd.5 = 1
 Else
 Portd.5 = 0
 End If
Loop


Jetzt ist der Input genauso sensibel (Berühren).
Das gibts doch nicht :(

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das gibts doch nicht :(
Bist du sicher, dass die Masse Masse ist?
Mach doch mal ein Bild vom Steckbrett und poste das...

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So jetzt bin ich wieder da. Hier das Bild. Ich hab den Schalter jetzt 
so, dass er über nen 12K wiederstand den Pin auf High schält.Der 
Wiederstand vor der LED istn bisschen überdimensioniert, hatte in dem 
Moment keinen kleineren zur Hand :D.
Ich hoffe das hilft euch!

Gruß Marvin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.