-
        

Ergebnis 1 bis 8 von 8

Thema: Existiert ein timer Interrupt?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    29.11.2006
    Ort
    Köln
    Alter
    36
    Beiträge
    42

    Existiert ein timer Interrupt?

    Anzeige

    Hi leute,

    ich programmiere schon etwas länger Assambler (mit dem 486 Befehlssatz) da gibt es so einen schönen Timer - Interrupt 8h, der wurde in schöner regelmäßigkeit ausgeführt, je nach wunsch 1 bis x mal in der Sekunde.

    Jetzt will ich eine art Uhr basteln.
    also der Atmel soll sich im normalen Geschäft darum kümmern das eine 4 mal 8 Segmentanzeige die aktuelle Uhrzeit anzeigt, aber einmal in der Sekunde (oder von mir aus auch öfters) will ich das der Chip einen Interrupt auslöst der dann die Zeit ein weiterstellt. (Währe höllisch praktisch, wie unter DOS)

    Oder geht das nur klassich das ich selber die arbeitsschritte zählen muss und die Schleifen manuell einstellen muss?
    Das Probelm ist, das ich diese Schleifen nie exakt eingestellt bekomme da ich nicht weiß welcher der Befehle 1 Tick brauch, welcher 2 Ticks braucht und ob der chip nicht einige Befehle zusammen ausführen kann.

    Den Quarz kenne ich (16 MHz) aber muss ich Zeit wirklich manuell justieren oder kann ich nicht wirklich einen Timer interrupt einstellen.

    Ich habe dazu im Netz leider nichts gefunden.

    Währe nett wenn ihr mir einen Quelltextbeispiel geben könntet in dem ein Timer configuriert wird, so das ich weis wie oft er in einer Sekunde ausgeführt wird, das ich also anfangen kann zu zählen, um dann zum richtigen zeitpunkt die Sekunden vorzustellen.

    mfg
    Aileron

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    ich programmiere schon etwas länger Assambler
    Dann bist du bestimmt auch gewohnt Datenblätter zu lesen...

    Es gibt je nach AVR-Typ eine ganze Menge von Timer-Interupts,
    und einen 1Hz-Int zu erzeugen ist kein Problem.

    Ein Quelltextbeispiel macht ohne Angabe des konkreten AVR-Typs wenig Sinn.
    Du findest jedoch im Datenblatt deines AVR auch Beispiele für die Timer-Programmierung.

    www.atmel.com

    Gruß Jan

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    @aileron: Interessanter Nickname. Flieger ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    29.11.2006
    Ort
    Köln
    Alter
    36
    Beiträge
    42
    @PicNick: Nein... ich habe selber keine Ahnung wie ich darauf kam (ist schon lange her) so hieß auf jeden Fall mein erste Shadowrun Chara...
    Aber wieso Flieger?

    @JanB: Danke für den Hinweis ich hatte gehoft mir das lesen des 380 Seiten langen "DatenBLATTES" ersparen zu können XD
    Ausserdem kann man sich die Protected Mode Programmierung des 486 (eigendlich 286 XD) auch gut ohne des Intel-Datenblattes mit Hilfe von Foren und Tutorials aneigenen
    Ich habe viele Anleitungen gelsen, und ich werde wohl was rumpribieren.
    Vielleicht arbeite ich auch in C weiter, da habe ich sogar in dieser Wiki einen Timer gefunden.

    Wenn du mir vielleicht doch ein Beispiel geben könntest wie ich auf dem Atmel Mega8-16 bei 16 MHz einen timer (von z.B. 2 Hz) einrichte währe ich dir SEHR dankbar

    mfg Aileron

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    @JanB: Danke für den Hinweis ich hatte gehoft mir das lesen des 380 Seiten langen "DatenBLATTES" ersparen zu können XD
    Tja, dann mußt Du wohl Basic nehmen, dort weigern sich auch 99% der Leute Datenblätter zu lesen

    Schau mal hier : http://www.izaseba.roboterbastler.de/

    Dort habe ich etwas über Timer geschrieben...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    Hallo Aileron,
    Du brauchst dazu nicht die ganzen 300 Seiten zu lesen.
    Es genügt doch der Abschnitt über die Timer und evtl. der über Interrupts.
    Um dich ein wenig zu motivieren hier ein Stückchen Beispielcode,
    der einen Mega8-16 dazu bringt mit 2Hz also alle 0,5s
    einen Timerinterupt auszulösen.
    Die Interruptroutine Int2Hz zählt dann PortC hoch, damit sich auch was tut.

    Gruß Jan


    Code:
    ;*** Int2Hz ***
    
    .NOLIST
    .INCLUDE <m8def.inc>
    .LIST
    
    .equ clk=16000000
    
    ;Interrupt Vector Table
            rjmp RESET           ;Reset Handler
            rjmp RESET           ;EXT_INT0 ; IRQ0 Handler
            rjmp RESET           ;EXT_INT1 ; IRQ1 Handler
            rjmp RESET           ;TIM2_COMP ; Timer2 Compare Handler
            rjmp RESET           ;TIM2_OVF ; Timer2 Overflow Handler
            rjmp RESET           ;TIM1_CAPT ; Timer1 Capture Handler
            rjmp int2hz          ;TIM1_COMPA ; Timer1 CompareA Handler
            rjmp RESET           ;TIM1_COMPB ; Timer1 CompareB Handler
            rjmp RESET           ;TIM1_OVF ; Timer1 Overflow Handler
            rjmp RESET           ;TIM0_OVF ; Timer0 Overflow Handler
            rjmp RESET           ;SPI_STC ; SPI Transfer Complete Handler
            rjmp RESET           ;USART_RXC ; USART RX Complete Handler
            rjmp RESET           ;USART_UDRE ; UDR Empty Handler
            rjmp RESET           ;USART_TXC ; USART TX Complete Handler
            rjmp RESET           ;ADC_CC ; ADC Conversion Complete Handler
            rjmp RESET           ;EE_RDY ; EEPROM Ready Handler
            rjmp RESET           ;ANA_COMP ; Analog Comparator Handler
            rjmp RESET           ;TWSI ; Two-wire Serial Interface Handler
            rjmp RESET           ;SPM_RDY ; Store Program Memory Ready Handler
    
    
    RESET:  ldi r16,high(RAMEND) ;SP setzen
            out SPH,r16
            ldi r16,low(RAMEND)
            out SPL,r16
    
    ;Init PortC = Output
            ldi r16,0xff
            out ddrc,r16
            
    
    ;Init Timer1
    ;Mode 4, CTC, TOP=OCR1A, Prescl=256
            clr r16
            out TCCR1A,r16      
            ldi r16,(1<<WGM12)|(1<<CS12) 
            out TCCR1B,r16
            ldi r16,high(clk/256/2)
            out OCR1AH,r16
            ldi r16,low(clk/256/2)
            out OCR1AL,r16
    ;Enable Timer 1 Output Compare A INT
            in r16,TIMSK
            ori r16,1<<OCIE1A     
            out TIMSK,r16
            sei
    
    main:   rjmp main
    
    ;Die Interruptroutine
    int2hz: inc r16
            out portc,r16
            reti

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Ich muß aileron in Schutz nehmen, zum ..486 Programmieren liest man keine HW-Datasheets. Da ist man haupotsächlich mit dem BIOS konfrontiert.

    Bei den Controllern is das was anderes, da geht alles zu Fuß, ohne BIOS.

    OT: "Aileron" sind die Querruder beim Flugzeug, das weiß üblicherweise keiner, der nicht damit befaßt ist. Daher meine Frage. Aber so oder so, is ok.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    29.11.2006
    Ort
    Köln
    Alter
    36
    Beiträge
    42
    @izaseba, JanB:

    Na ja, ist ja nicht so, das ich mir das Tutorial und die Datenblätter nicht durchlesen würde , aber ich lerne lieber aus bereits funktionierenden Programmen XD

    Sowohl das Programm als auch das Tutorial ist GENAU das was ich gesucht hatte

    Ansonsten lese ich mir, sobald ich den gesammtzusammenhang kenne auch das Datenbalt durch, das ist sicher.

    vielen danke für eure Hilfe

    mfg Aileron

Berechtigungen

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