- Akku Tests und Balkonkraftwerk Speicher         
Seite 4 von 10 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 92

Thema: Howto Frequenzzähler

  1. #31
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    Anzeige

    Praxistest und DIY Projekte
    Hallo, danke für die Antwort, wie kann isch den Interupt von Timer0, und die Anzahl der "überläufe" von Timer1 ( hier counter1) auslesen?
    aber das stimmt oder:
    Code:
    Config Pinb.5 = Input                                       ' Signal Input 
    Dim Erge As Long 
    Portb.5 = 0                                                 ' Aktiviert int. Pulldown 
    
    Config Timer0 = Timer , Prescale = 1                        ' Config. Timer0 als Timer 
    Config Timer1 = Counter , Edge = Rising 
                                                                ' Config. Timer1 als Counter mit steigender Flanke

  2. #32
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    124
    Hallo Teslanikola,

    wie kann isch den Interupt von Timer0, und die Anzahl der "überläufe" von Timer1 ( hier counter1) auslesen?
    Du kannst die Anzahl der Überläufe nicht auslesen.
    Du schreibst für Timer0 und Timer1 jeweils eine Interrupt Routine und gibst die Interrupts frei. Bei jedem Überlauf wird dann in die jeweilige Routine gesprungen. In den Routinen erhöhst Du jeweils Die zugehörige Zählvariable.

    Stichworte für die Suche in der BASCOM-Hilfe sind
    On Interrupt
    On Timer0 (1)
    Enable Timer0 (1)
    Enable Interrupts
    sowie generell Timer0 und Timer1

    > aber das stimmt oder:
    > Config Pinb.5 = Input ' Signal Input
    Ich hab gerade nicht im Kopf, ob PinB.5 der Counter-Eingang für Timer1 ist. Wenn ja, dann stimmt das

    > Dim Erge As Long
    Timer1 ist nur 16 bit breit (Word). Bascom konvertiert aber automatisch.
    Du kannst mit "Overlay" Deinen Überlauf-Zähler und den Timer1-Wert prima zu einem long zusammenfassen. s. Bascom Hilfe zu DIM und OVERLAY.

    > Portb.5 = 0 ' Aktiviert int. Pulldown
    Die AVRs haben keinen int. Pulldown. Du schaltest 'nur' den int. Pullup aus.

    >Config Timer0 = Timer , Prescale = 1 ' Config. Timer0 als Timer
    Prescale = 1024

    Ciao,
    Werner

  3. #33
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470

    Die Lösung!!!!!!! .....Vielleicht

    Hab nen Code vor nem Frequenzzähler gefunden und geändert
    würde das so hinhauen????


    Code:
    $regfile = "2313def.dat"
    $crystal = 16384000                                         'Quarz: 16,384MHz
    
    Dim Lcount As Long At &H60                                  'Zähler-Variable
    Dim Wcountlo As Word At &H60 Overlay                        'LoWord der Zählervariablen
    Dim Wcounthi As Word At &H62 Overlay                        'HiWord der Zählervariablen
    Dim Sresult As String * 16 At &H64                          'Ausgabestring
    Dim Result(16) As Byte At &H64 Overlay                      'Ausgabestring als Byte-Array
    Dim I As Byte
    Dim Gate As Byte
    
    'Timer0 (Torzeit) und Timer1 (Zähler) konfigurieren:
    On Timer0 Ongatetime                                        'Interrupt-Routine für die Torzeit
    On Timer1 Oncounteroverflow                                 'Interrupt-Routine fürs HiWord des Zählerstands
    Config Timer0 = Timer , Prescale = 1024                     'Torzeit-Timer mit Takt/1024
    Config Timer1 = Counter , Edge = Rising                     'Zähler an steigender Signalflanke
    Ddrd.5 = 0                                                  'PD5/T1 auf Eingang setzen (Zähler-Eingang)
    
    
    Enable Timer0                                               'Timer0-Interrupts ein (Torzeit)
    Enable Interrupts                                           'Interrupts global einschalten
    Start Timer0
    
    Main:
    Goto Main
    
    Ongatetime:                                                 'Timer0-Torzeit beendet
      If Gate = 0 Then                                          'Zähler starten
        Enable Counter1                                         'Zähler-Overflow-Interrupts einschalten
        Start Counter1
        Gate = 1
      Elseif Gate < 40 Then                                     '40 Timer0-Umläufe warten
        Incr Gate
      Else                                                      'Tor zumachen, Zähler auslesen
        Stop Counter1
        Disable Counter1                                        'Zähler-Overflow-Interrupts ausschalten
        Wcountlo = Counter1                                     'LoWord in die LONG-Zählervariable holen
        Counter1 = 0                                            'Zähler zurücksetzen (Voreinstellen geht hier auch!)
        Gate = 0
    
        'ANZEIGERUTINE
    
    
        Tifr.tov0 = 1                                           'Timer0-Overflow-Flag löschen (nicht = 0!!!)
        Tifr.tov1 = 1                                           'Timer1-Overflow-Flag löschen (nicht = 0!!!)
      End If
    Return
    
    Oncounteroverflow:
      Incr Wcounthi                                             'HiWord der Zählervariablen erhöhen (lCount=lCount+65536)
    Return

  4. #34
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    124

    Re: Die Lösung!!!!!!! .....Vielleicht

    Hallo,

    > Hab nen Code vor nem Frequenzzähler gefunden
    das merkt man ...

    > und geändert
    aber nicht verstanden.

    Dabei war Dein eigenes Programm doch fast schon fertig. Fehlten noch die Interrupts, das wäre es gewesen. Warum schmeist Du das was Du selbst geschrieben hast so einfach weg. Da (scheinst) Du gewust zu haben wie das Programm arbeitet, auch wenn noch Fehler drin waren. Bei der jetzt verwendeten fremden Lösung bezweifel ich das.

    > würde das so hinhauen????
    nein, würde es nicht. Beim Timer1 Interrupt fehlt die Hälfte.

    Was ich auch nicht verstehe, Bascom hat einen recht gut funktionierenden und einfach zu bedienenden Simulator. Warum probierst Du es nicht aus.


    Ciao,
    Werner

  5. #35
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470

    was das war richtig?

    Hallo, ich weis des war nen echter Seiten sorung kommt nich wieder vor, aber du hast mir was von interupts und overlay usw geschrieben und wie du mir geraten hast in der Help nachgeschaut und TADA da hat es Klick gemacht nicht der verstand sondern die Hauptsicherung im Hirn fazit:
    Weniger Verstanden als vorher ( naja ohne gescheite Englisch kommste ne arg weit, bis jetzt hatts immer gereicht )
    Hab dir doch nen Code geschickt, es würde mir helfen wenn du ihn so modifizieren würdest das es Hinhaut, das mit der Multiplexanzeige hab ich ja schon gelöst ( war leicht ), aber da ich mich mit Timer so gut auskenn wie der Metzger vom Brotbacken wurde das klene Problem zu nem großen. Wie ich aus deine Beiträgen ersehen konnte weist du von was du redest könntest du mir vielleicht modifizieren [-o< ( ob als WERt ein String oder ne Variable rauskommt is mir wurscht)
    Vielen dank für dein bemühen mir was beizubringen.

    Grüßle teslanikola

  6. #36
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    124

    Re: was das war richtig?

    Hallo Teslanikola,

    Danke für den Honig, aber ich bin fast genauso Anfänger wie Du und
    Programme für andere schreibe ich nur gegen Geld.

    > Weniger Verstanden als vorher
    Dann solltest Du da genau etwas mehr Zeit investieren bzw. genau nach dem fragen was Du nicht verstanden hast.
    z.B. Kann mir jemand erklären wie man Interrupts verwendet?
    Oder...
    Was hat es mit dem Overlay auf sich?

    Das Buch von Rowalt ist zudem auf deutsch. Wie schon gesagt, ich kann es nur empfehlen.


    > Hab dir doch nen Code geschickt, es würde mir helfen wenn du ihn so modifizieren würdest das es Hinhaut
    No, mach ich nicht. Wenn Du es nicht selber machen/schaffen willst, dann geh in einen Elektronikladen und kauf Dir einen Frequenzzähler.

    > das mit der Multiplexanzeige hab ich ja schon gelöst ( war leicht ),
    und ein Frequenzzähler ist genauso leicht.

    >aber da ich mich mit Timer so gut auskenn wie der Metzger vom Brotbacken wurde das klene Problem zu nem großen.
    Wo ist das Problem?

    Ein Timer kann Zählen.
    Er zählt entweder interne Takte == Timer, oder er zählt externe Ereignisse == Counter. Er kann zusätzlich einen Interrupt auslösen wenn er überläuft.
    Einige können zusätzlich Interrupts auslösen wenn ein bestimmter Zählerstand erreicht ist == Compare und Zählerstände bei externen Ereignissen speichern == Capture.

    Mehr gibts eigentlich nicht zu wissen, alles andere kann man nachschlagen.

    > Vielen dank für dein bemühen mir was beizubringen.
    Gern geschehen.

    Ciao,
    Werner

  7. #37
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    Hallo werner,
    wenn ich mir selber helfen könnte , dann hätte ich die frage doch nicht in ein forum gestellt.
    [schild=13 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Selbsthilfe e.V.[/schild]

  8. #38
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470

    Tschuldigung

    Sorry, wenn ich so böse war, aber wer 2 Stunden damit beschäftigt war herrauszufinden wie man 2 Timer als Counter und timer zusammen bringt und nach den 2 stunden soweit wie vorher ist dem brennt schon mal ein Fusebit durch. wollte dich nicht beleidigen, aber hier werden ja Bücher über ein Problem geschrieben, das man mit nen paar befehlen Quellcode lösen kann. Zwar lernt man besser wenn man alles selber rausfindet aber ich will das problem halt so einfach wie möglich lösen, wenn man dan nen code bekommt und sich den mal GENAU anschaut lernt man doch auch was! Ich hab mir bis jetzt alles selberbeibringen können ( immer so weit bis mein RS-Enbglisch versagt ) aber das mit dem Timer verstehe ich echt nicht hat den niemand EIN CODE, muss doch ned fertig sein, aber so das man ihn benutzten kann ( WERT auslesen ). Echt tut mir leid.
    [schild=2 fontcolor=FF0000 shadowcolor=000000 shieldshadow=1]SORRY[/schild]

  9. #39
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    Aber die Frage ging nicht nur an werner, wer mir helfen kann der helfe

  10. #40
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    124
    Hallo Teslanikola

    wenn ich mir selber helfen könnte , dann hätte ich die frage doch nicht in ein forum gestellt.
    ist ja auch OK, ich und vermutlich auch alle anderen hier sind gerne bereit Dir zu helfen.

    Wozu ICH nicht bereit bin, und das Thema hatten wir hier schonmal, ist Deine Arbeit zu machen. Ich erkläre Dir gerne wie man mit Interrupts umgeht, ich schaue auch gerne mal über Deinen Code und gebe meinen Senf dazu was man imo besser oder anders machen könnte. Aber Programmieren mußt Du Dein Programm schon selbst.

    Sorry, wenn ich so böse war, aber wer 2 Stunden damit beschäftigt war herrauszufinden wie man 2 Timer als Counter und timer zusammen bringt und nach den 2 stunden soweit wie vorher ist dem brennt schon mal ein Fusebit durch.
    Armer schwarzer Kater!

    Aber warum fragst Du dann nicht nach DEM womit Du ein Problem hast? Du fragst immer nur danach wer eine Lösung hat. Am besten gleich für das ganze Programm.

    Wie Du 2 Interrupts ans laufen bringst ... kein Problem ...

    Im abgekupferten Code hast Du für Timer0 stehen:

    On Timer0 Overflow_Routine_Timer0
    Enable Interrupt

    Genau das "On Timer ..." fehlt für Timer 1!

    On Timer0 Overflow_Routine_Timer0
    On Timer1 Overflow_Routine_Timer1
    Enable Interrupt

    Mit On Timer0 (1) sagst Du dem Compiler das er 1. den Overflow-Interrupt einschalten soll und du sagst ihm 2. wohin er bei einem Interrupt springen soll. Nämlich zum Lable Overflow_Routine...


    Also z.B.

    Code:
    $regfile = "M8def.dat"
    Dim Var1 as Byte
    Dim Var2 as Byte
    
    On Timer0 Test1
    On Timer1 Test2
    Enable Interrupt
    
    Config Timer0 = Timer, Prescale = 1
    Config Timer1 = Timer, Prescale = 1
    
    Do 
    loop
    
    
    Test1:
    incr Var1
    Return
    
    Test2:
    incr Var2
    Return
    Schau Dir im Simulator mal an was mit den Variablen Var1 & Var2 passiert und wann es passiert. Klar?

    Ciao,
    Werner

Seite 4 von 10 ErsteErste ... 23456 ... LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests