- 3D-Druck Einstieg und Tipps         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 52

Thema: timer vll mal erklären???

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    Anzeige

    LiFePo4 Akku selber bauen - Video
    also kann ich i individuell verändern. gibt es da auch irgendwie ne formel zum zeit berechnen? also ich meine ich kann da jetzt jawohl nicht wirklich einfach 300 sekunden eintragen oder?

    und wie kriege ich dass hin dass wenn ich jetzt nen taster betätige dass er änfängt zu zählen und wenn ich ihn nochmal drücke dass er weiterläuft?
    und ne reset taste?

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    also hier komme ich mir echt als alleinunterhalter vor.

    ich verstehe den schei... timer net und keiner hilft mir mal.

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    34
    Beiträge
    485
    Du hättest vielleicht mal die Suche benutzen können und wärst dann auf das Programm rnAvr gestoßen. Ich hab mal mit diesem Programm den Timer0 und Prescale etc. berechnet:

    Pro Sekunde wird 100 mal die ISR aufgerufen, das entspricht i += 100 pro sekunde -> Nach 3 Minuten: i = 18.000

    Code:
    Config Timer0 = Timer, Prescale = 1024
    
    On Timer0 Timer_irq
    
    'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen
    Const Timervorgabe = 100
    
    'Hier werden die Timer aktiviert
    Enable Timer0
    Enable Interrupts
    
    
    Do
    
    Loop
    
    Timer_irq:
      Timer0 = Timervorgabe
    
       Return
    Das Programm ist für einen Atmega mit 16Mhz Quarz gedacht, wenn du eine andere Quarzfrequenz hast, musst du es mit Hilfe von rnAvr anpassen.

    Als Reset Taste kannst du ja die Reset Taste vom AVR benutzen, aber was meinst du mit:

    und wie kriege ich dass hin dass wenn ich jetzt nen taster betätige dass er änfängt zu zählen und wenn ich ihn nochmal drücke dass er weiterläuft?
    Zum starten kannst du einfach eine Taste abfragen und wenn die Taste gedrückt wurde könntest du eine Variable taster_gedrueckt auf eins setzen. In der ISR schreibst du dann nicht einfach i++; sondern machst noch eine Abfrage ob taster_gedrueckt 1 ist, wenn ja dann wird i inkrementiert, wenn nein dann passiert nix. Wenn die Taste nochmal gedrückt wird könntest du die Variable taster_gedrueckt wieder auf 0 setzen.

    Hoffe das war das, was du wissen wolltest.

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    na jetzt kommt mal rollen in die sache.

    also ich hab mich da vertippt.
    ich möchte das programm per tastendruck 5 minuten laufen lassen. nun soll das programm aber anhalten wenn ich die taste erneut drücke und auch weiterlaufen wenn ich se wieder drücke.
    reseten will ich es irgendwie mit ner anderen taste.

  5. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    34
    Beiträge
    485
    Für die Reset Taste muss du einfach den Reset-Pin deines AVRs (bei mir is es Pin9, mega32) über eine Taste mit Masse verbinden.

    Hab hier mal das Programm geschrieben, ist natürlich nicht ausführbar weil du die Eingangports definieren musst und noch die Syntax anpassen, weil ich die nicht so gut kenne (programmiere in C).
    Code:
    dim i as integer
    dim taste_gedrueckt as bool
    taste_gedrueckt = 0
    
    Config Timer0 = Timer, Prescale = 1024 
    
    On Timer0 Timer_irq 
    
    'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen 
    Const Timervorgabe = 100 
    
    'Hier werden die Timer aktiviert 
    Enable Timer0 
    Enable Interrupts 
    
    
    Do 
    if [taste] == 1 then
     if taste_gedrueckt = 0 then taste_gedrueckt = 1 endif
     if taste_gedrueckt = 1 then taste_gedrueckt = 0 endif
    endif
    
    Waitms 1
    Loop 
    
    Timer_irq: 
      Timer0 = Timervorgabe 
      if i == 30000 then
       i = 0
       taste_gedrückt = 0
      'Hier können auch Befehle stehen, die ausgeführt werden wenn die 5 Minuten erreicht sind.
      else if taste_gedrückt == 1 then
       i++
      endif
       Return
    Das Programm wird über eine Taste gestartet und kann mit der selben Taste unterbrochen werden und der timer wieder "eingeschaltet" werden (stimmt net ganz, weil der timer ja weiterläuft, nur wird i net inkrementiert). Nach 5 Minuten stoppt das Programm die Inkrementation von i und muss mit der Taste neu gestartet werden.

    MfG

  6. #16
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    noch ne grundlegende frage was heißt prescale und warum hast du 1024 hier angegeben.

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    34
    Beiträge
    485
    Prescale gibt den Wert an, durch den die Frequenz des Quarzes geteilt wird. Damit zählt der Timer dann von 0-255 und löst beim Überlauf einen Interrupt aus und der Code in der ISR wird ausgeführt. Ohne den Prescaler würde der Timer bei einem 16Mhz Quarz, 16.000.000/256 Interrupts pro Sekunde auslösen.


    edit: achja die 1024 hab ich mit dem Programm rnAvr berechnet

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    cool also danke schon mal ich meld mich falls ich es nicht hinbekomme.

  9. #19
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    36
    Beiträge
    380
    ich verstehe net ganz was du da bei do machst kannst mir dass mal erklären?

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    34
    Beiträge
    485
    In der Do Schleife wird eine Taste abgefragt. ([taste] musst du mit Portb.1 oder ähnlichem ersetzen)
    Wenn die Variable taste_gedrueckt 1 ist, erhält sie nun den Wert 0, wenn sie 0 war, erhält sie den Wert 1.

    Diese Variable wird verwendet um die Inkrementierung von i und somit deinen "Counter" anzuhalten bzw. zu starten.

    Am Anfang vom Programm wird taste_gedrueckt der Wert 0 zugewiesen. Sprich die Variable i bleibt unverändert, weil sie nur inkrementiert wird wenn taste_gedrueckt 1 ist. Drückt man nun zum Starten der 5 Minuten auf die Taste, wird taste_gedrueckt auf 1 gesetzt und somit i inkrementiert. Dies geschieht solange bis taste_gedrueckt wieder 0 ist. Das kann entweder der Fall sein, wenn die 5 Minuten erreicht sind oder wenn du nochmals auf die Taste gedrueckt, dadurch wird taste_gedrueckt der Wert 0 zugewiesen.

    Hoffe du verstehst es ^^

    MfG

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test