Forum: Analoge Elektronik und Schaltungstechnik Bei Tasterabfrage blinkt LED


von Marvin K. (Firma: hab keine) (multi_bouncer)


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

von Matthias L. (Gast)


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

von Marvin K. (Firma: hab keine) (multi_bouncer)


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

von Gast (Gast)


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.

von Marvin K. (Firma: hab keine) (multi_bouncer)


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

von Peter (Gast)


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.

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


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.

von Marvin K. (Firma: hab keine) (multi_bouncer)


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

von Matthias L. (Gast)


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!

von Marvin K. (Firma: hab keine) (multi_bouncer)


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

von Marvin K. (Firma: hab keine) (multi_bouncer)


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

von Matthias L. (Gast)


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

von Marvin K. (Firma: hab keine) (multi_bouncer)


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

von Markus -. (mrmccrash)


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 :=-._

von Spezi (Gast)


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.

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


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

von Marvin K. (Firma: hab keine) (multi_bouncer)


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

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


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

von Marvin K. (Firma: hab keine) (multi_bouncer)


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?

von Markus -. (mrmccrash)


Lesenswert?

Sollte reichen.

_.-=: MFG :=-._

von Marvin K. (Firma: hab keine) (multi_bouncer)


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

von Marvin K. (Firma: hab keine) (multi_bouncer)


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

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


Lesenswert?

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

von Marvin K. (Firma: hab keine) (multi_bouncer)


Angehängte Dateien:

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

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.