- Labornetzteil AliExpress         
Ergebnis 1 bis 4 von 4

Thema: Problem mit Zähler

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.07.2004
    Ort
    Osnabrück
    Beiträge
    30

    Problem mit Zähler

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    Mein Programm soll später mal ein Frequenzzähler werden.
    Mit Timer0 wird ein Zeitfenster vorgegeben in dem die Impulse gezält werden.
    Wenn ich TTL-Impulse von einem Tongenerator einspeise (ATMEGA8 PD5 T1) erhalte ich keine Reaktion.
    Wo liegt mein Fehler?
    Code:
    'Dieses Programm soll mal ein Frequenzzähler werden, wenn es groß ist    ;-)
    'Mit Timer0 wird später ein Zählfenster von einer Sek eingestellt.
    
    'Mein Problem ist, dass ich imPulse die ich an T1 (PD5) anlege
    'nicht zählen kann. Ich erhalte immer 0  ??????
    'Wo ist mein Fehler?
    
    
    
    
    $regfile = "m8def.dat"
    $crystal = 16000000
    $baud = 38400
    
    Dim Var1 As Byte
    Dim Freq As Long
    Dim W As Long
    
    Print "hallo"                           'zum Überprüfen der Verbindung
    
    Config Portb = Output
    Config Portd = Input
    
    Config Timer1 = Counter , Edge = Rising , Prescale = 1
    Enable Timer1                            'Counter1 Einstellungen
    On Timer1 Pulses
    Enable Interrupts
    Timer1 = 0
    
    
    Config Timer0 = Timer , Prescale = 1024 'Konfiguriere Timer0
    Enable Timer0                           'Torzeit für Messung
    On Timer0 Sek
    Enable Interrupts
    Timer0 = 9
    
    
    
    Do
     '....Hauptprogramm
    Loop
    End
    
    
     'Interruptroutinen Von Timer0 Und Counter1
    
    Sek:
    Incr Var1
    If Var1 = 2 Then
      Freq = W + Timer1
        Var1 = 0
      Timer0 = 0
      Toggle Portb.1
    
      Print Freq
      Print W
    
      End If
    Return
    
    
    Pulses:
    W = W + 65536
    Print "W"
    Print W
    Return

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    01.07.2004
    Ort
    Osnabrück
    Beiträge
    30
    Ich habe nun einen meiner Fehler gefunden, auch wenn das Programm noch nicht richtig funktioniert:
    Der Fehler war bei der Counter-Initialisierung der Zusatz "Prescaler".
    Jetzt habe ich ihn entfernt und das Zhälen funktioniert bis auf folgendes Problem:
    Alle 7 Messungen erhalte ich eine Fehlmessung
    Wenn ich z.B. eine Frequenz um 1Mhz anlege wird folgendes ausgegeben
    hallo
    hallo
    988549 983040
    998130 983040
    1007712 983040
    1017545 983040
    1027379 983040
    1037212 983040
    1047048 983040
    1056887 1048576
    1001440 983040
    1011281 983040
    1021125 983040
    1030970 983040
    1040818 983040
    1050667 1048576
    995230 983040
    1004832 983040
    1014685 983040
    1024539 983040
    1034396 983040
    1044254 983040
    1054116 1048576

    Könnt ihr den Fehler finden?

    Gruß
    moin


    Code:
    'Dieses Programm soll mal ein Frequenzzähler werden, wenn es groß ist    ;-)
    'Mit Timer0 wird ein Zählfenster von ca. einer Sek eingestellt.
    
    'Mein Problem ist, dass ich imPulse die ich an T1 (PD5) anlege
    'zwar zählen kann, aber nicht richtig 
    
    'Alle 7 Messungen erhalte ich eine Fehlmessung
    
    'Wo ist mein Fehler?
    
    
    
    
    $regfile = "m8def.dat"
    $crystal = 16000000
    $baud = 38400
    
    Dim Var1 As Byte
    Dim Freq As Long
    Dim W As Long
    
    Print "hallo"                           'zum Überprüfen der Verbindung
    
    Config Portb = Output
    Config Portd = Input
    
    Config Timer1 = Counter , Edge = Rising              
    Enable Timer1                            'Counter1 Einstellungen
    On Timer1 Pulses
    Enable Interrupts
    Timer1 = 0
    
    
    Config Timer0 = Timer , Prescale = 1024 'Konfiguriere Timer0
    Enable Timer0                           'Torzeit für Messung
    On Timer0 Sek
    Enable Interrupts
    Timer0 = 9
    
    
    
    Do
     '....Hauptprogramm
    Loop
    End
    
    
     'Interruptroutinen Von Timer0 Und Counter1
    
    Sek:
    Incr Var1
    If Var1 = 62 Then
      Freq = W + Timer1
        Var1 = 0
    
      Toggle Portb.1
    
      Print Freq ; " " ; W
      'Print W
      Timer0 = 0
      W = 0
    
      End If
    Return
    
    
    Pulses:
    W = W + 65536
    'Print "W"
    'Print W
    Return
    [/code]

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    01.07.2004
    Ort
    Osnabrück
    Beiträge
    30
    Ich war entwas undeutlich in meiner Fehlerbeschreibung:
    Die gemessene Frequenz (1. Wert) steigt immer. Das kann ein Fehler im Programm sein oder ein "Fehler" im Frequenzgenerator. Ich vermute eher einen Fehler im Programm, kann ihn aber nicht finden.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    15.09.2004
    Beiträge
    30
    Hallo,
    Da fehlt ein
    Timer 1 = 0 oder ?

    Teste mal das:


    Code:
    .
    .
    .
    Sek:
    Incr Var1
    If Var1 = 62 Then
        Disable Interrupts
      Freq = W + Timer1
        Var1 = 0
    
      Toggle Portb.1
    
      Print Freq ; " " ; W
      'Print W
      Timer0 = 0
      W = 0
      Timer1 = 0
    
      Enable Interrupts
      End If
    Return
    .
    .

Berechtigungen

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

Labornetzteil AliExpress