- 3D-Druck Einstieg und Tipps         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 36

Thema: Timer und Register

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied Avatar von derNeue
    Registriert seit
    01.01.2011
    Ort
    Bierstadt Radeberg
    Alter
    38
    Beiträge
    101
    Anzeige

    Powerstation Test
    Zitat Zitat von Searcher Beitrag anzeigen
    Nein, stimmt schon. ADIW geht nur bei den oberen Registerpärchen. Besteht da irgendwo ein Widerspruch oder warum fragst Du nach? Ist doch eine kurze Methode um etwas zu einem 16Bit Wert zu addieren
    Es besteht kein Widerspruch und mit deinem Post erinnerte ich mich auch wieder an diesen Befehl. Ich wollte einfach nur ergänzen, dass dieser Befehl eben nur bei bestimmten Registern funktioniert. Nicht das der TO sich dann wundert, warum es wieder nicht klappt, nur weil er die "falschen" Register nimmt.

    Also ansich hattest du den besseren Vorschlag, ich wollte ihn nur ergänzen, war mir aber nicht mehr 100% sicher, ob ich da nicht etwas verwechsle, deswegen mein nachfragen


    Dennis
    Ich studiere die Wirkung der Sonnenstrahlen auf das Liebesleben der Pflastersteine

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    05.05.2013
    Beiträge
    22
    Danke für all Eure Antworten.
    Ich wollte vorerst mir die Begriffe im Handbuch und per Suche bei Google durchlesen bevor ich mich melde.
    Die Idee mit dem ICP finde ich super, aber durch das lesen über diese Methode ist mir erstmal bewusst geworden, das der Timer 1 die gleiche Genauigkeit hat wie Timer 0.
    @avr_racer deine Ausführung mit dem Pulsen per CTC finde ich klingt auch sehr Interessant, allerdings kann ich noch nicht folgen wie das Funktioniert.
    Im Handbuch steht dazu folgendes:
    C-2|C-1|C|C+1|C+1
    Wenn ich das richtig verstanden habe Toggelt er bei jedem Übergang von C-1|C den Eingang.
    Das würde aber doch bedeutet, das der Eingang 500ms an und auch aus wäre, außer ich würde C nachdem Pegel ändern. Sehe ich das falsch?

    Ich laß die Frage was das für ein Projekt ist.
    Das Projekt ist eine Positionsbestimmung per Töne. Es wurde vor einigen Monaten per Arduino gemacht. Funktionieren tut es, allerdings sind die Offsetzeiten zu hoch.

    Eigentlich ist das Projekt abgeschlossen, ich benutze es als vorbild zum lernen von Assembler und den Umgang von AVR.

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied Avatar von derNeue
    Registriert seit
    01.01.2011
    Ort
    Bierstadt Radeberg
    Alter
    38
    Beiträge
    101
    http://www.mikrocontroller.net/articles/FAQ#Timer

    Sehr gut die üblichen Timer-Modi beschrieben


    Dennis
    Ich studiere die Wirkung der Sonnenstrahlen auf das Liebesleben der Pflastersteine

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    Hallo,

    > Das würde aber doch bedeutet, das der Eingang 500ms an und auch aus wäre,
    Das ist korrekt. Deshalb ja die Anspielung auf den PWM-Mode da kannst du die ON/OFF-Zeit variabel gestalten soll heißen bei z.B.:10Khz = 100µs = 20/100µs Off __ und 80/100µs high
    ----------.

    > außer ich würde C nachdem Pegel ändern.

    Was ist C ? Du meinst den Timer ?


    > Im Handbuch steht dazu folgendes:

    Ich gehe davon aus das du Arduino nutzt, mit diesen hab ich bisher nichts zu tun gehabt. Nutze das Datenblatt des entsprechenden µC weil

    > ich benutze es als vorbild zum lernen von Assembler und den Umgang von AVR.

    nur das Datenblatt ist das Handbuch für den Controller dort bekommt man vielleicht die ein oder andere Info mehr.

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    05.05.2013
    Beiträge
    22
    Nein, das hast du falsch verstanden. Ich rede über das ATMEL_Atmega328P-PU Dokument von der Hauptseite. Angesprochene seite ist die 130. Dort wird es OCRnx statt C genannt.

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    ick find dit irgendwie net auf Seite 130 sind Diagramme und die Rede von OCR-1, OCR+1 usw

    hier der Link
    http://www.atmel.com/Images/Atmel-82..._datasheet.pdf

    Achtung wenn du die Includedatei des µC öffnest dann siehst du das dort an einigen Stellen MOMERY MAPPED steht diese Adressen sind nur mit LDS/STS zu erreichen.

    aber vielleicht hilft der Code ein wenig weiter

    Code:
        
            rcall        mode2_T0_init
            rcall        prescaler_T0_on
    
    start:
    
            rjmp        start
    
    mode2_T0_init:;CTC_MODE  OCRx update sofort oder im INT
            sbi            ddrd,6            ;output aktivieren wenn Toggeln am PIND6=OCR0A erwünscht
            ldi            temp0,$80        ;Toggeln oder Clr/Set aktiv muss OCR0A-Register beachtet werden um
            out            OCR0A,temp0        ;____--- oder _------ zu erreichen
        ;mit OCRyx wird die Frequenz festgelegt des Rechtecksignales
            lds            temp0,TIMSK0
            ori            temp0,(0<<OCIE0B||0<<OCIE0A|0<<TOIE0)    ;INTs aktivieren
            sts            TIMSK0,temp0
            
            ldi            temp0,(0<<COM0B1|0<<COM0B0|0<<COM0A1|1<<COM0A0|1<<WGM01|0<<WGM00)    ;zum Toggeln COMyx Einstellungen beachten!!!!!!!!!
            out            TCCR0A,temp0                                    ;
            
            ldi            temp0,(0<<FOC0A|0<<FOC0B|0<<WGM02) 
            out            TCCR0B,temp0
            ret
    
    prescaler_T0_on:
            in            temp0,TCCR0B
            ori            temp0,(0<<CS02|0<<CS01|1<<CS00) ;schmeißt den counter 
            out            TCCR0B,temp0
            sei
            ret
    
    OC0A_int:
            in            temp0,OCR0A
            out            OCR0A,temp0
            reti

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    05.05.2013
    Beiträge
    22
    Danke für dein Beispiel.
    In deinem Beispiel steht, das du mit OCR0A die Frequenz einstellst. In konnte mir nicht vorstellen wie du ein _------ Signal mit einem Festen Wert erzeugen möchtest. In der Doku habe ich dazu folgenden Satz gefunden:
    If the interrupt is enabled, the interrupt handler routine can be used for updating the TOP value
    Zur Erklärung, der TOP Value ist der Wert an dem Der Vergleich zwischen OCR0A und TCNT statt findet und der Wert wieder auf 0 gesetzt wird. Bedeutet ich setze in der ISR einfach einen neuen Wert bei OCR0A ein?

    Wieso nimmst du eigentlich den ORI befehl?
    Performs the logical OR between the contents of register Rd and a constant and places the result in the destination register Rd.
    Quelle: http://www.atmel.no/webdoc/avrassemb...er.wb_ORI.html

    Übriegens, dein Link führt auf die Doku, die ich weiter oben meinte.

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    > Zur Erklärung, der TOP Value ist der Wert an dem Der Vergleich zwischen OCR0A und TCNT statt findet und der Wert wieder auf 0 gesetzt wird. Bedeutet ich setze in der ISR einfach einen > neuen Wert bei OCR0A ein?

    jep so siehts aus. Aber solltest du den Mode ändern denn guck in die Tabelle welches Register als Vergleich herangezogen wird. Der Quellcode ist nur für den CTC-Modus (Autoreload) heißt, wenn OCR0A geändert wird, änderst du nur die Frequenz nicht aber das ON/OFF Verhältniss. Dafür müsstest du die FAST-PWM nutzen.

    > Wieso nimmst du eigentlich den ORI befehl?

    Der OR-Befehl bezieht sich direkt auf 2 Register die geodert werden, bei dem ORI-Befehl wird eine Konstante mit dem Register geodert. Der Klimzug mit dem ORI-Befehl habe ich nur deshalb gemacht wenn man den Timer noch andersweitig nutzt oder verändern will also kompatibel bleiben möchte.

    > Übriegens, dein Link führt auf die Doku, die ich weiter oben meinte.

    Check

    Gruß avr_racer

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    05.05.2013
    Beiträge
    22
    Also erste Überlegungen:
    Timer 0 kann mit einem Prescale von 1028 eine maximal Zeit von 13,15 mS erreichen bis zum Überllaufen
    Timer 1 schafft eine Zeit von 3,36s

    Meine Idee ist also, den Timer 0 auf einen Prescale von 8 einzustellen, dann ist die Laufzeit zum Overflow 102us. Das Vergleichs Register OCRA0 , stelle ich dann auf 0x64(100);
    In der Routine des Vergleichs Vergleichs Interrupts, muss ich dann prüfen ob der Pegel High oder Low war und wie häufig es Überlaufe gab.
    Code:
    ISR_Compare:
                   inc r16 ; Zähle Überläufe
                   sbic PORTB, 0 ; Prüfe ob Ausgang LOW
                   jmp Pegel_Low
                   sbis PORTB, 1 ; Überprüfe ob Ausgang High
                   jmp Pegel_High ; Wenn nicht setze Ihn High
                   reti
    Pegel_Low:
                  cpi r16, 0x05 ; Überprüfe ob Wert 5;
                  brne reti
                  ldi r16,0x00
                  cbi PORTB,0
                  reti
    
    Pegel_High:
                  cpi r16, 0x01 ; Überprüfe ob Wert 1;
                  brne reti
                  ldi r16,0x00
                  sbi PORTB,0
                  reti
    Nur mal als Idee.
    Timer 1 würde ich als ICP fahren und damit die Messwert Laufzeit erfassen.

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    > Timer 0 kann mit einem Prescale von 1028 eine maximal Zeit von 13,15 mS erreichen bis zum Überllaufen
    > Timer 1 schafft eine Zeit von 3,36s

    ACHTUNG der Teiler ist max 1024 und bits max. 255bits machen 13,05...ms !!!!!! in längster Ausführung

    > Meine Idee ist also, den Timer 0 auf einen Prescale von 8 einzustellen, dann ist die Laufzeit zum Overflow 102us. Das Vergleichs Register OCRA0 , stelle ich dann auf 0x64(100);

    jo 8 ist gut und wenn du OCR0A mit 250 ($FA) beschreibts hast du alle 100µs eine OC0A Interrupt der ausgelöst wird und könntest diesen nutzen.

    Warum auf 100? denn wird doch alle 40µs einer OVFL ausgelöst oder verstehe ich das jetzt falsch?

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. gleiche register bei atmega32 und 16
    Von avrrobot im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 20.02.2011, 10:19
  2. Timer-Register mögen Befüllung durch Funktion nicht
    Von stefan_Z im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 06.08.2007, 19:25
  3. Asuro und OSCCAL Register Taktfrequenz
    Von Winne im Forum Asuro
    Antworten: 3
    Letzter Beitrag: 11.09.2005, 09:49
  4. Interne Register und Register in SRAM
    Von FoCus im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 27.07.2005, 13:06
  5. ADC und USART über Register?!
    Von BASTIUniversal im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 29.04.2005, 14:28

Berechtigungen

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

12V Akku bauen