das richt kräftig nach nicht entprellten tastern. Sind die Entprellt?
Schau mal hier:
http://www.mikrocontroller.net/articles/Entprellung
Hallo
Ich möchte ein Programm für eine Countdown haben, der von 10 bis 0 runterzählt.
Der Countdown soll durch einen Taster gestartet werden können.
Ein anderer Taster soll den Countdown unterbrechen und gleichzeitig zwei Striche als Zeichen für Pause anzeigen ( also so ungefähr I I ).Wenn man den Taster loslässt läuft das Hauptprogramm also der Countdown weiter.
Ich hab selbst ein paar mal versucht so ein Programm hinzubekommen , aber bei mir ist das Problem , dass der Countdown ohne , dass ich den Taster drücke los geht.Die Unterbrechung durch den anderen Taster geht auch nicht.
Die Anzeige der Zahlen funktioniert schon.
Wäre sehr dankbar , wenn sich jemand mal das Programm ansieht.
Den ersten Taster habe ich mit einer IF-Funktion ermöglicht den anderen mit dem Timer und einem Unterprogramm.
Mfg
David
das richt kräftig nach nicht entprellten tastern. Sind die Entprellt?
Schau mal hier:
http://www.mikrocontroller.net/articles/Entprellung
Hallo
Danke für die schnelle Antwort.
Als die Taster muss ich noch entprellen, da hast du recht.
Nur, dass erklärt nicht warum der Countdown ohne Einwirkung des Tasters von alleine losgeht.
Ich glaube es ist irgendein Fehler im Programm , ich komm nur nicht drauf.
Mfg
David Wagner
Hallo DaveWagner,
das brauchst du in dem Fall nicht, nach einem Tastendruck kommt ja außer ein paar Portänderungen und Pausen nichts bis zum Ende. Mehrfaches Drücken zeigt somit keinen Effekt und muß also nicht abgefangen werden.Als die Taster muss ich noch entprellen,
Der Tasterpin ist auf Input geschaltet und vermutlich ohne Pull-Down Widerstand. Das elektromagnetische Wechselfeld deiner Umgebung streut (meist über die Finger in der Nähe) in den Eingang ein. Da dieser recht empfindlich ist, reicht es zum Schalten.dass erklärt nicht warum der Countdown ohne Einwirkung des Tasters von alleine losgeht
Gruß, Michael
Hallo
Hab die Pull-Down Widerstände eingebaut es ging wunderbar.
Nochmal Danke Michael
Leider ist noch ein Problem dazugekommen und zwar sind jetzt an den Ausgänge die bei der Zahl 0 , 5V ausgeben sollten , schon während des Countdowns 1,9 V .
Da ich an den Ausgängen FETs anhängen möchte darf keine Spannung schon während des Countdowns anliegen.
Was könnten mögliche Ursachen für das Problem sein ?
MfG
David
Hallo DaveWagner,
leider ist dein Quelltext unkommentiert, ich kann nicht wissen, wo die Zahl 0 ausgegeben wird. Vielleicht kannst du mehr zu dem Projekt erzählen oder zumindest die problematischen Ports benennen.
Bedenke, daß an PortB das Programmierinterface hängt. Es kann dadurch schon zu Beeinträchtigungen kommen, wenn es während des Betriebs dran bleibt.
Gruß, Michael
Hmm ... also ich finde Dein Programm sehr unübersichtlich ...
Ich denke Dein Problem kommt direkt vom ISP Anschluss Deines Proggers.Code:$regfile = "m8def.dat" $crystal = 1000000 Config Pind.0 = Output Config Pind.1 = Output Config Pinc.1 = Output Config Pind.3 = Output Config Pind.4 = Output Config Pind.5 = Output Config Pinc.2 = Output Config Pind.7 = Output Config Pinc.3 = Output Config Pinb.1 = Input Config Pinb.4 = Input Config Pinb.2 = Output Config Pinb.5 = Output Config Int0 = Rising Enable Interrupts 'einschalten der Interrupts Enable Int0 On Int0 Unterprogramm If Pinb.4 = 1 Then Portb.5 = 0 Portb.3 = 0 Portc.3 = 0 Portd.0 = 1 Portd.1 = 1 Portc.1 = 1 Portd.3 = 1 Portd.4 = 1 Portd.5 = 1 Portc.2 = 1 Portd.7 = 1 Portb.2 = 1 Waitms 250 Portb.2 = 0 Waitms 750 Portd.0 = 0 Portd.1 = 0 Portb.3 = 0 Portc.1 = 1 Portd.3 = 1 Portd.4 = 1 Portd.5 = 1 Portc.2 = 0 Portb.2 = 1 Portd.7 = 1 Portc.3 = 1 Waitms 250 Portb.2 = 0 Waitms 750 Portb.3 = 0 Portc.1 = 1 Portd.3 = 1 Portd.4 = 1 Portd.5 = 1 Portc.2 = 1 Portd.7 = 1 Portc.3 = 1 Portb.2 = 1 Waitms 250 Portb.2 = 0 Waitms 750 Portb.3 = 0 Portc.1 = 1 Portd.3 = 1 Portd.4 = 1 Portc.3 = 0 Portb.2 = 1 Portc.2 = 0 Portd.7 = 0 Portd.5 = 0 Waitms 250 Portb.2 = 0 Waitms 750 Portc.1 = 1 Portd.4 = 1 Portd.5 = 1 Portc.2 = 1 Portd.7 = 1 Portc.3 = 1 Portb.2 = 1 Portd.3 = 0 Waitms 250 Portb.2 = 0 Waitms 750 Portb.3 = 0 Portc.1 = 1 Portd.4 = 1 Portd.5 = 1 Portd.7 = 1 Portc.3 = 1 Portb.2 = 1 Portc.2 = 0 Waitms 250 Portb.2 = 0 Waitms 750 Portd.3 = 1 Portc.2 = 0 Portd.4 = 1 Portd.7 = 1 Portc.3 = 1 Portb.2 = 1 Portc.1 = 0 Portd.5 = 0 Waitms 250 Portb.2 = 0 Waitms 750 Portc.2 = 0 Portc.1 = 1 Portd.3 = 1 Portd.4 = 1 Portd.5 = 1 Portc.3 = 1 Portb.2 = 1 Portd.7 = 0 Waitms 250 Portb.2 = 0 Waitms 750 Portc.1 = 1 Portd.3 = 1 Portc.3 = 1 Portc.2 = 1 Portd.5 = 1 Portb.2 = 1 Portd.4 = 0 Waitms 250 Portb.2 = 0 Waitms 750 Portd.3 = 1 Portd.4 = 1 Portc.1 = 0 Portd.5 = 0 Portc.2 = 0 Portd.7 = 0 Portc.3 = 0 Portb.2 = 1 Waitms 250 Portb.2 = 0 Waitms 750 Portc.3 = 0 Portc.1 = 1 Portd.3 = 1 Portd.4 = 1 Portd.5 = 1 Portc.2 = 1 Portd.7 = 1 Portb.2 = 1 Waitms 250 Portb.2 = 0 Portb.3 = 1 Portb.5 = 1 End If ' Unterprogramm: Portd.3 = 1 Portd.4 = 1 Portd.7 = 1 Portd.6 = 1 Return
Edit: Naja, ich muss schneller werden, Michael hat es schon geschrieben
P.s.: Konntest Du Deine Segment Anzeigen nicht auf einen kompletten Port legen ? Du könntest diese dann mit:
Nur mal so als idee ...Code:7seg0 alias PORTC 7seg0 = &B01111111 ' alle Segmente an bei Common Cathode 7seg0 = &B00111111 ' nur "0" anzeigen
Gruß
Jens
Hallo
Ja wär besser so
Jedoch funktioniert es jetzt und ich möchte nichts mehr ändern.
Mfg
David
Lesezeichen