-         
+ Antworten
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 34

Thema: AT90S2313 - Timer

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    29
    Beiträge
    81

    AT90S2313 - Timer

    Hallo,

    kann mir jemand sagen wie man die Timer des AT90S2313 benutzen kann?? Ich hab schon in den Datenblättern nachgeschaut, allerdings stand da nur etwas über die Register (TCCR0 und TCNT0). Nur kann ich damit nicht soviel anfangen. Und als ich darunter dann noch was über einen 16Bit-Timer gelesen hab wars ganz vorbei.
    Am besten wärs wenn mir jemand mal ne übersicht über die ganze Timergeschichte geben könnte.

    MfG
    enoritz

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    24.04.2004
    Ort
    Karlsruhe
    Alter
    38
    Beiträge
    1.277

    Re: AT90S2313 - Timer

    Zitat Zitat von enoritz
    Hallo,

    kann mir jemand sagen wie man die Timer des AT90S2313 benutzen kann?? Ich hab schon in den Datenblättern nachgeschaut, allerdings stand da nur etwas über die Register (TCCR0 und TCNT0). Nur kann ich damit nicht soviel anfangen. Und als ich darunter dann noch was über einen 16Bit-Timer gelesen hab wars ganz vorbei.
    Am besten wärs wenn mir jemand mal ne übersicht über die ganze Timergeschichte geben könnte.

    MfG
    enoritz
    In welcher Programmiersprache?
    Ansonsten gibt's im Internet doch genug Tutorials, oder?

    Gruß, Sonic
    http://www.dontfeedthetroll.de/images/dftt.gif
    If the world does not fit your needs, just compile a new one...

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    29
    Beiträge
    81
    Oh, sry.... in Assembler

    Wo gibts denn die Tutorials?? bei Google hab ich dann wahrscheinlich die falschen Stichwörter angegeben.

  4. #4
    Gast
    In welcher Programmiersprache du arbeitest, ist für dein Problem vollkommen belanglos. Solange du nicht weisst, wie ein Timer funktioniert, wirst du ihn auch nicht verwenden können.
    Ich empfehle dir, mal die Linkliste auf mikrocontroller.net durchzuarbeiten. Ansonsten kannst du bei Google auch mal nach Christian Schifferle suchen, der hat auch ein gutes AVR-Tutorial geschrieben. Zuletzt kannst du auch noch auf www.mc-project.de schauen, dort steht auch noch ein bischen was zu Timern.

    Gruß, Gast

  5. #5
    Gast
    Da er offenbare kein nützlichen Beispiele/Tutorials gefunden hatte, betrachte ich meine Links schon als hilfreich:

    http://www.mikrocontroller.net/artic...er_Counter.htm
    http://mc-project.de/Pages/timer.html

    Diese Quellen sprengen auch nicht den didaktischen Anspruch und eine umfassende Antwort erübrigt sich eigentlich (Warum das Fahrrad zweimal erfinden?)

    Gruß, Gast

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    29
    Beiträge
    81
    Hallo,

    ich hab mir mal n bisschen was durchgelesen... und würde jetzt gerne wissen ob das so in ordnung ist:


    Code:
    .include "2313def.inc"
    
    .def temp=r16
    .def int_per_sec=r17
    
    initTimer:
    	ldi temp,5             ;CPU-Takt/1024
    	out TCCR0,temp
    	ldi temp,2             ;aktivieren des Interrups bei einem
    	out TIMSK,temp    ;Überlauf
    
    	ldi int_per_sec,46 ;Anzahl der Interrupts pro Sekunde
     
     ;12MHz: 12.000.000/1024=11718,75 --> Bei jedem 11718,75ten Takt 
     ;wird ein Interrupt eingeworfen
     ;=>11718,75/256(wegen 8Bit TCNT)=45,78 (ca. 46 Interrupts pro Sek.)
    
    	sei                      ;Interrupts global erlauben
    
    endlos:                                ;Endlosschleife
    	rjmp endlos
    
    time:                                   ;Aufruf bei jedem Interrupt
    	dec int_per_sec
    	brne zurueck        ;nach 46 Interrupts (int_per_sec=0) wird 
                                               ;nicht nach "zurueck" gesprungen
    
                    ;irgendwas zur vollen sekunde
    
    zurueck:
    	reti                      ;rücksprung in die Endlosschleife
    Dort müsste doch jetzt eigentlich zu jeder vollen sekunde bei dem Label time (dort wo der Kommentar ist) das ausgeführt werden was ich gerne möchte oder?

  7. #7
    Gast
    Woher soll der MC wissen, dass er bei einem Timerinterrupt zu time: springen muss?

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    28
    Beiträge
    2.624
    Wenn ich das jetzt so spät noch auf die schnelle sehe, ich glaube es ist richtig!
    Probier es doch einfach aus! :o)

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    24.02.2004
    Ort
    Starnberg
    Alter
    39
    Beiträge
    170
    Hallo,

    Dir fehlen die Interruptvektoren!
    Wie Gast schon erwähnt hat, weiss dein Controller nicht, was er bei einem Timerinterrupt machen soll. Nachdem auch der Stackpointer-Init fehlt, wird das Programm sowieso nicht laufen.

    Falls du dafür Hilfe brauchst, schreib nochmal hier rein.
    Es ist aber auch in fast allen Bespielprogrammen drin.

    Grüsse, Martin

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    17.07.2004
    Alter
    29
    Beiträge
    81
    Hallo,

    hier müsste es so mit dem Stackpointer gehn oder?

    Code:
    .include "2313def.inc" 
    
    .def temp=r16 
    .def int_per_sec=r17 
    
    .start:
      ldi temp,low(ramend)
      out spl,temp
    
    initTimer: 
       ldi temp,5             ;CPU-Takt/1024 
       out TCCR0,temp 
       ldi temp,2             ;aktivieren des Interrups bei einem 
       out TIMSK,temp    ;Überlauf 
    
       ldi int_per_sec,46 ;Anzahl der Interrupts pro Sekunde 
      
     ;12MHz: 12.000.000/1024=11718,75 --> Bei jedem 11718,75ten Takt 
     ;wird ein Interrupt eingeworfen 
     ;=>11718,75/256(wegen 8Bit TCNT)=45,78 (ca. 46 Interrupts pro Sek.) 
    
       sei                      ;Interrupts global erlauben 
    
    endlos:                                ;Endlosschleife 
       rjmp endlos 
    
    time:                                   ;Aufruf bei jedem Interrupt 
       dec int_per_sec 
       brne zurueck        ;nach 46 Interrupts (int_per_sec=0) wird 
                                               ;nicht nach "zurueck" gesprungen 
    
                    ;irgendwas zur vollen sekunde 
    
    zurueck: 
       reti                      ;rücksprung in die Endlosschleife
    Das mit dem Interruptvektoren hab ich allerdings nicht verstanden... Wie kann man die setzen??

+ Antworten
Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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