-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Zähler

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

    Zähler

    Anzeige

    Hallo

    Ich will einen Zähler bauen ,der, wenn man auf einen Taster drückt, immer um eins nach oben zählt.Das ganze bis 99 also im zweistelligen Bereich.

    Code:
    $regfile = "m8def.dat"
     $crystal = 1000000                                         ' 1MHZ crystal
    
     Ddrc = &B000000
     Ddrd = &B0000000
     Config Pind.2 = Input
    
    
    
    
    
     Dim Vari1 As Byte
     Vari1 = 0
     Config Int0 = Rising
     Enable Interrupts
     Enable Int0
     On Int0 Unterprogramm
    
    
     Do
    
     Vari1
    
    
    
     Unterprogramm:
     Vari1 = Vari1 + 1
    
     Return
    
    
     0:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.4 = 1
        Portd.5 = 1
    
     1:
    
        Portd.1 = 1
        Portd.7 = 1
    
    
     2:
        Portd.0 = 1
        Portd.1 = 1
        Portd.6 = 1
        Portd.4 = 1
        Portd.3 = 1
    
     3:
        Portd.0 = 1
        Portd.1 = 1
        Portd.6 = 1
        Portd.7 = 1
        Portd.3 = 1
    
     4:
        Portd.5 = 1
        Portd.6 = 1
        Portd.1 = 1
        Portd.7 = 1
    
     5:
        Portd.0 = 1
        Portd.5 = 1
        Portd.6 = 1
        Portd.7 = 1
        Portd.3 = 1
    
     6:
        Portd.0 = 1
        Portd.5 = 1
        Portd.6 = 1
        Portd.4 = 1
        Portd.3 = 1
        Portd.7 = 1
    
     7:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
    
     8:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.4 = 1
        Portd.5 = 1
        Portd.6 = 1
    
     9:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.5 = 1
        Portd.6 = 1
    Ich weiß jetzt nicht wie das Hauptprogramm aussehen soll.
    Wie kann ich sagen das die Variable Vari1 angezeigt werden soll ?
    Das ganze soll auf 7 Segment Displays angezeigt werden.

    Mfg

    David Wagner

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Hallo David,

    in diesem Thread:
    http://www.roboternetz.de/phpBB2/viewtopic.php?t=33170
    ... gibt's einige schöne Programmschnipsel und Anschlußbeispiele.

    In Deinem eigenen Thread vom November:
    http://www.roboternetz.de/phpBB2/viewtopic.php?t=44085
    ... hattest du das ja schon viel weiter entwickelt! Mach doch da einfach weiter!?

    Gruß Dirk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    03.11.2008
    Alter
    25
    Beiträge
    56
    Hallo

    Hab mir den anderen Thread angeschaut, doch ich werde einfach nicht schlauer.

    Die Anzeige zeigt mir jetzt immer Null an , auch wenn ich den Taster drücke.
    Kann mir einer einfach einen konkreten Vorschlag geben, was ich anders machen muss
    Hier mein Programm:
    Code:
     $regfile = "m8def.dat"
     $crystal = 1000000                                         ' 1MHZ crystal
    
    
     Config Pind.0 = Output
     Config Pind.1 = Output
     Config Pind.7 = Output
     Config Pind.3 = Output
     Config Pind.4 = Output
     Config Pind.5 = Output
     Config Pind.6 = Output
    
    
     Config Int0 = Rising
     Enable Interrupts
     Enable Int0
     On Int0 Unterprogramm
    
    
    
     Dim I As Integer
     I = 0
    
     Do
    
    
     Select Case I
     Case 0 : Gosub Null
     Case 1 : Gosub Eins
     Case 2 : Gosub Zwei
     Case 3 : Gosub Drei
     Case 4 : Gosub Vier
     Case 5 : Gosub Fuenf
     Case 6 : Gosub Sechs
     Case 7 : Gosub Sieben
     Case 8 : Gosub Acht
     Case 9 : Gosub Neun
    
    
     End Select
    
    
    
    
    
     Loop
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
     Unterprogramm:
     I = I + 1
    
     Return
    
    
     Null:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.4 = 1
        Portd.5 = 1
        Portd.6 = 0
        Wait 9
        Return
    
     Eins:
    
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 0
        Portd.4 = 0
        Portd.5 = 0
        Portd.6 = 0
        Portd.0 = 0
        Wait 9
        Return
    
     Zwei:
        Portd.0 = 1
        Portd.1 = 1
        Portd.6 = 1
        Portd.4 = 1
        Portd.3 = 1
        Portd.5 = 0
        Portd.7 = 0
        Wait 9
        Return
     Drei:
        Portd.0 = 1
        Portd.1 = 1
        Portd.6 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.5 = 0
        Portd.4 = 0
        Wait 9
        Return
    
     Vier:
        Portd.5 = 1
        Portd.6 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.4 = 0
        Portd.3 = 0
        Portd.0 = 0
        Wait 9
        Return
    
     Fuenf:
        Portd.0 = 1
        Portd.5 = 1
        Portd.6 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.4 = 0
        Portd.1 = 1
        Wait 9
        Return
    
     Sechs:
        Portd.0 = 1
        Portd.5 = 1
        Portd.6 = 1
        Portd.4 = 1
        Portd.3 = 1
        Portd.7 = 1
        Portd.1 = 0
        Wait 9
        Return
    
    
     Sieben:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 0
        Portd.4 = 0
        Portd.5 = 0
        Portd.6 = 0
        Wait 9
        Return
    
     Acht:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.4 = 1
        Portd.5 = 1
        Portd.6 = 1
         Wait 9
         Return
    
     Neun:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.5 = 1
        Portd.6 = 1
        Portd.4 = 0
        Wait 9
        Return
    Mfg

    David

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Der Controller ist ja praktisch immer in einem der 10 Unterprogrammen, da er dort immer 9 Sekunden wartet, um dann für ein paar Mikrosekunden in die Hauptschleife zurückzukehren.
    Ich weiß nicht 100%, ob Interrupts "angenommen" werden können, wenn der Controller in einem Unterprogramm ist.
    (Würde mich aber auch interessieren, BtW...)

    Probier doch mal aus, die wait 9 - Befehle am Ende der 10 Gosubs rauszunehmen, und stattdessen ein einziges wait 9 nach dem Befehl End Select zu schreiben. Läuft auf´s selbe hinaus, aber das Programm ist dann nahezu immer in der Hauptschleife.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    03.11.2008
    Alter
    25
    Beiträge
    56
    Hallo
    Sauerbruch

    hab gerade deinen Vorschlag draufgeladen.
    Wie du schon gesagt hast läuft es auf das Selbe hinaus und jetzt zeigt die Anzeige wieder nur eine Null an und reagiert nicht auf den Input.

    mfg

    David

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von DaveWagner
    Die Anzeige zeigt mir jetzt immer Null an , auch wenn ich den Taster drücke.
    Wie ist denn dein Taster angeschlossen? Mit PullUp? In deinem Code ist keiner drin.

    Gruß

    Rolf

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    38
    Beiträge
    642
    Hallo hier ein Beispiel das dir sicherlich weiterhilft:

    '-------------------------------------------------------------------------------
    'Tasterzähler


    $regfile "m8def.dat"


    '-------------------------------------------------------------------------------
    'Eingänge

    Config Pinc.1 = Input 'um 1 runterzählen
    Config Pinc.0 = Input 'um eins hochzählen

    'Ausgänge

    Config Portd.0 = Output
    Config Portd.1 = Output
    Config Portd.2 = Output
    Config Portd.3 = Output
    Config Portd.4 = Output
    Config Portd.5 = Output
    Config Portd.6 = Output
    Config Portd.7 = Output


    'Alle Ports auf "1"

    Portd.0 = 1
    Portd.1 = 1
    Portd.2 = 1
    Portd.3 = 1
    Portd.4 = 1
    Portd.5 = 1
    Portd.6 = 1
    Portd.7 = 1
    Portc.0 = 1
    Portc.1 = 1
    '-------------------------------------------------------------------------------
    'Variable setzen

    Dim A As Byte
    A = 0 'Startwert

    '-------------------------------------------------------------------------------
    'Hauptprogramm

    Do

    If Pinc.0 = 0 Then 'Zähler hochzählen
    Incr A
    Waitms 50
    End If

    If Pinc.1 = 0 Then 'Zähler runterzählen
    Decr A
    Waitms 50
    End If

    If A > 10 Then '10 als Maximalwert
    A = 0
    Else
    End If

    If A = 1 Then
    Portd.0 = 0 'hier hätte man auch case verwenden können
    Else
    Portd.0 = 1
    End If

    If A = 2 Then
    Portd.1 = 0
    Else
    Portd.1 = 1
    End If

    If A = 3 Then
    Portd.2 = 0
    Else
    Portd.2 = 1
    End If

    If A = 4 Then
    Portd.3 = 0
    Else
    Portd.3 = 1
    End If

    If A = 5 Then
    Portd.4 = 0
    Else
    Portd.4 = 1
    End If

    If A = 6 Then
    Portd.5 = 0
    Else
    Portd.5 = 1
    End If

    If A = 7 Then
    Portd.6 = 0
    Else
    Portd.6 = 1
    End If

    If A = 8 Then
    Portd.7 = 0
    Else
    Portd.7 = 1
    End If

    If A = 9 Then 'beim Zählerstand von 9 zurücksetzen
    A = 0
    End If


    Loop

    MfG

    Neutro

    PS: wie funktioniert der Code Tag eigentlich?[/code]
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Du könntest den Fehler etws eingrenzen, indem Du mal

    Dim I as Integer
    I = 5

    schreibst (um zu sehen, ob dann ´ne 5 im Display erscheint). Ist dem so, ist tatsächlich was mit dem Interrupt nicht in Ordnung. Womit wir bei der Frage von for_ro wären, ob der Int0-Eingang ordentlich beschaltet ist, d.h. mit PullUp- bzw. PullDown-Widerstand.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    04.08.2007
    Ort
    Bregenz
    Alter
    41
    Beiträge
    72
    hi , bin selber neu in Bascom , ich versuch nur zu helfen , hab dein code geändert mit pinc.0 kannst raufzählen , mit pinc.1 runterzählen , ich hoffe dich geholfen zu haben , ist mein erster versuch
    Schöne grüsse aus Österreich

    Code:
          $regfile = "m8def.dat"
     $crystal = 1000000                                         ' 1MHZ crystal
    
    
     Config Pind.0 = Output
     Config Pind.1 = Output
     Config Pind.7 = Output
     Config Pind.3 = Output
     Config Pind.4 = Output
     Config Pind.5 = Output
     Config Pind.6 = Output
     Config Pinc.0 = Input
     Config Pinc.1 = Input
     Portc.0 = 1
     Portc.1 = 1
    
    
    
    
    
     Dim I As Byte
     I = 0
    
     Do
    
     If Pinc.0 = 1 Then
     Incr I
     End If
     If Pinc.1 = 1 Then
     Decr I
     End If
    
     If I >= 9 Then
     I = 0
     End If
    
     Portd = 0
     Select Case I
     Case 0 : Gosub Null
     Case 1 : Gosub Eins
     Case 2 : Gosub Zwei
     Case 3 : Gosub Drei
     Case 4 : Gosub Vier
     Case 5 : Gosub Fuenf
     Case 6 : Gosub Sechs
     Case 7 : Gosub Sieben
     Case 8 : Gosub Acht
     Case 9 : Gosub Neun
    
    
     End Select
    
     Waitms 500
    
    
     Loop
    
    
    
    
    
    
    
    
    
    
    
    
    
    
     Return
    
    
     Null:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.4 = 1
        Portd.5 = 1
        Portd.6 = 0
        Wait 9
        Return
    
     Eins:
    
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 0
        Portd.4 = 0
        Portd.5 = 0
        Portd.6 = 0
        Portd.0 = 0
        Wait 9
        Return
    
     Zwei:
        Portd.0 = 1
        Portd.1 = 1
        Portd.6 = 1
        Portd.4 = 1
        Portd.3 = 1
        Portd.5 = 0
        Portd.7 = 0
        Wait 9
        Return
     Drei:
        Portd.0 = 1
        Portd.1 = 1
        Portd.6 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.5 = 0
        Portd.4 = 0
        Wait 9
        Return
    
     Vier:
        Portd.5 = 1
        Portd.6 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.4 = 0
        Portd.3 = 0
        Portd.0 = 0
        Wait 9
        Return
    
     Fuenf:
        Portd.0 = 1
        Portd.5 = 1
        Portd.6 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.4 = 0
        Portd.1 = 1
        Wait 9
        Return
    
     Sechs:
        Portd.0 = 1
        Portd.5 = 1
        Portd.6 = 1
        Portd.4 = 1
        Portd.3 = 1
        Portd.7 = 1
        Portd.1 = 0
        Wait 9
        Return
    
    
     Sieben:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 0
        Portd.4 = 0
        Portd.5 = 0
        Portd.6 = 0
        Wait 9
        Return
    
     Acht:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.4 = 1
        Portd.5 = 1
        Portd.6 = 1
         Wait 9
         Return
    
     Neun:
        Portd.0 = 1
        Portd.1 = 1
        Portd.7 = 1
        Portd.3 = 1
        Portd.5 = 1
        Portd.6 = 1
        Portd.4 = 0
        Wait 9
        Return

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    04.08.2007
    Ort
    Bregenz
    Alter
    41
    Beiträge
    72
    ups hab es gerade gesehen
    config pind.x = output
    soll heissen
    config port.x = output
    komischerweise Bascom schluckt es trotzdem

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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