-         

Ergebnis 1 bis 8 von 8

Thema: Countdown mit 7 Segment Anzeige

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.11.2008
    Alter
    24
    Beiträge
    56

    Countdown mit 7 Segment Anzeige

    Anzeige

    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
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2006
    Ort
    Karlsruhe/München
    Alter
    27
    Beiträge
    587
    das richt kräftig nach nicht entprellten tastern. Sind die Entprellt?

    Schau mal hier:
    http://www.mikrocontroller.net/articles/Entprellung

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    03.11.2008
    Alter
    24
    Beiträge
    56
    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

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Hallo DaveWagner,

    Als die Taster muss ich noch entprellen,
    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.

    dass erklärt nicht warum der Countdown ohne Einwirkung des Tasters von alleine losgeht
    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.

    Gruß, Michael

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    03.11.2008
    Alter
    24
    Beiträge
    56
    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

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    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

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    NRW
    Alter
    45
    Beiträge
    169
    Hmm ... also ich finde Dein Programm sehr unübersichtlich ...
    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
    Ich denke Dein Problem kommt direkt vom ISP Anschluss Deines Proggers.

    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:

    Code:
    7seg0 alias PORTC
    7seg0 = &B01111111 ' alle Segmente an bei Common Cathode
    7seg0 = &B00111111 ' nur "0" anzeigen
    Nur mal so als idee ...

    Gruß
    Jens

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    03.11.2008
    Alter
    24
    Beiträge
    56
    Hallo

    Ja wär besser so
    Jedoch funktioniert es jetzt und ich möchte nichts mehr ändern.

    Mfg

    David

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •