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
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
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
>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.
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
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.
> 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.
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
>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!
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
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 :)
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
>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
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 :=-._
> 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.
> 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 ;-)
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
> 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...
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?
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
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 :(
> Das gibts doch nicht :(
Bist du sicher, dass die Masse Masse ist?
Mach doch mal ein Bild vom Steckbrett und poste das...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.