- LiFePO4 Speicher Test         
Ergebnis 1 bis 9 von 9

Thema: Servus - keine Probleme mit Timer´n

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.07.2004
    Ort
    Münchener Osten
    Alter
    51
    Beiträge
    297

    Servus - keine Probleme mit Timer´n

    Anzeige

    E-Bike
    Ein Servus an Euch, **

    habe ein paar Fragen und Probleme mit den Von und Zu Timern *grins*

    Ich benutze den ATtiny26L und betreibe ihn mit folgenden Einstellungen:
    - Spannung 3,3V
    - Takt intern 1 MHz
    - Rev.-Spannung intern 2,56V
    - Resetschaltung extern

    Ich möchte einen Timer nutzen um alle 1,5 Sec. einen Ausgang auf PortA für ca. 0,5 Sec. einzuschalten (Timer 0)

    Ich möchte den zweiten Timer nutzen um alle 30 Sec. zwei Ausgänge auf PortA für ca. 500 uSec. einzuschalten. (Timer 1)

    Diese zwei Ausgänge sind ein Taktsignal für eine andere Elektronik.

    Der sonstige Programmablauf den die CPU erledigen soll, soll durch diese Timerzugriffe nicht beeinträchtigt werden.

    Frage 1:
    Das mit Timer 0 habe ich eigendlich hin bekommen, nur diese langen Zeiten von 1,5 Sec. und 0,5 Sec. bekomme ich nicht hin UND wenn ich den Ausgang für 0,5 Sec einschalte dann bleibt der sonstige Programmablauf mit stehen.

    Frage 2:
    Den Timer 1 bekomme ich garnicht zum laufen, habe ihn genauso programmiert wie Timer 0 - der will einfach nicht.

    Könnt Ihr mir helfen?????

    Danke!

    Gruß MrQu

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi MrQu,
    ich hab zwar nicht so viel Ahnung von Timern aber würde mal deinen Titel ändern denn da steht du hast keine Probleme mit Timern ich denk es soll kleine Probleme heißen!
    Gruß Michi

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ich würde das nur mit einem Timer machen, dann hast du Zeit, auch mit dem zweiten Freundschaft zu schliessen

    Deine kleinste Event-Zeit ist 0.5 mS, daß wäre dann Timer0 prescale 8 und preload 194.

    In der Timer-Interrupt routine mußt du dich um zwei Abläufe kümmern:

    1.5 Switch
    zwei Zustände:
    1 mit einem Zähler bis 3000 zählen, dann ist 1.5 sec rum,
    Schalter ein, auf Zustand 2 gehen
    2 mit einem Zähler bis 1000 zählen, dann ist 0.5 sec rum,
    Schalter aus, auf Zustand 1 gehen

    30 Switch
    Im grunde das Gleiche, andere Zahlen halt.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.07.2004
    Ort
    Münchener Osten
    Alter
    51
    Beiträge
    297

    Hmmm, ganz hab ich´s glaube ich net verstanden

    Wenn ich in der Interrupt-Schleiffe was rechnen lasse, dann hällt doch der Rest des eigendlichen Programmes an - oder???

    Das heisst doch das eigendliche Programm zwischen DO und LOOP bleibt so lange stehen - ODER???

    Habe unten mal das Musterprogramm angehängt wie ich es jetzt gemacht habe, kannst du mir das zum testen so umschreiben wie du es gemeint hast

    - oder

    es mir nochmal erklären.

    danke

    mfg MrQu
    Angehängte Dateien Angehängte Dateien

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo, was picknick meint ist sicher daß Du in der interruptroutine zu einem Zähler, der außerhalb der routine liegt, immer eine eins addierst.
    Das vergleichen machst Du dann im Hauptprogramm .
    ODer sehe ich das falsch?

    Gruß Sebastian

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    58
    Beiträge
    247
    Hallo


    Versuch mal so

    Code:
    $regfile = "At26def.dat"                                    ' CPU = ATtiny26L (externe Reset-Beschaltung)
    $crystal = 1000000                                          ' Takt = interner RC mit 1 MHz
    
    Dim Status As Byte
    Dim B As Word
    Dim C As Word
    
    
    C = 3000
    
    Const Timer_reload = 193
    
    Const An = 0
    Const Aus = 1
    
    Config Portb = Output
    
    Portb = &B00000000
    
    Config Timer0 = Timer , Prescale = 8
    
    On Timer0 Led
    
    Enable Timer0
    Enable Interrupts
    
    Do
    
        If B = C Then                                           '1,5 Sekunden vorbei 3000 * 500 µs = 1,5 s
             If Portb.1 = Aus Then                              'war die LED vorher aus
                Portb.1 = An                                    'dann einschalten
                C = C + 1000                                    'Zeit für ausschalten einstellen
             Else
                Portb.1 = Aus
                C = C + 3000                                    'Und Neue Zeit Berechnen
             End If
       End If
    
    Loop
    
    End
    
    
    'Interrupt Routine Timer0
    'wird ca alle 504 µs aufgerufen
    Led:
    
       Timer0 = Timer_reload                                    'Timer neu einstellen
       B = B + 1                                                'Variable b zählt die 0,5 ms Schritte                                           'Variable wird alle
    
    Return
    Ist nicht getestet, sollte aber schon so gehen.

    Gruß
    Dieter

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.07.2004
    Ort
    Münchener Osten
    Alter
    51
    Beiträge
    297
    He Ihr seit ja fixxxxxx *freu*

    Werde das heute nach der Arbeit gleich mal testen.

    Klingt logisch was Ihr sagt, zur zählen im interrapt, interrapt ergebnis extern abfragen und extern ausführen - so ist der normale programmablauf eigendlich nicht unterbrochen.

    Danke - bis später

    mfg MrQu

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    @izaseba: Ja, alles im Interrupt, selbst bei den 500 uS hat er ja
    500 x quartz - cyclen zeit. die zählervariablen und state-flags sind permanente variablen, die aber alleine dem Timer gehören (klassenmäßig gesehn)
    In der Hauptroutine tät ich in der richtung garnix, was'n auch.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.07.2004
    Ort
    Münchener Osten
    Alter
    51
    Beiträge
    297

    Glaube so geht´s

    Hallo Hallo

    hier mein Lösungsweg - kukst du unten.

    Stimmt der so???
    Ich meine habs getestet und es geht.

    Frage -
    habe ich den Timer0 richtig programmiert das die LED 0,8 Sec. OFF ist und dann für 1 Sec. ON ist - oder habe ich nen Rechen- / Denkfehler.

    Optisch beim testen kommt es hin.


    Gruß MrQu
    Angehängte Dateien Angehängte Dateien

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress