Bei Tasterabfrage blinkt LED

OP (Firma: hab keine) #1411771
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
Gast #1411801
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.
OP (Firma: hab keine) #1412522
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
Gast #1412530
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.
Moderator (Firma: Titel) Persönliche Seite #1412541
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.
OP (Firma: hab keine) #1412831
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
Gast #1412848
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!
OP (Firma: hab keine) #1412921
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
Gast #1412979
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.
Moderator (Firma: Titel) Persönliche Seite #1413140
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 
;-)
OP (Firma: hab keine) #1413665
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
Moderator (Firma: Titel) Persönliche Seite #1413696
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...
OP (Firma: hab keine) #1414138
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 :(

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren