-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Phasenkorrekt Modus Interrupts

  1. #1
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1

    Phasenkorrekt Modus Interrupts

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo zusammen,

    ich habe eine Frage zu dem Phasenkorrekten Interrupts.
    Der Timer zählt von Bottom bis Top und zurück. Ein Interrupt kann bei Top oder Bottom ausgelöst werden.
    Kann man auch bei Top und Bottom einen Interrupt auslösen?
    Wie kann ich die Interrupts gleichzeitig einschalten?
    Oder muss ich in der Hauptschleife die Flags auslesen??

    Mit On Timer2 xxx und Sreg.7=1 kann ich den Top Interrupt einschalten.
    Wie sieht der Code bei dem Bottom Interrupt aus?

    Habe im Datenblatt und im Netz bis jetzt keine Antwort gefunden. Ich hoffe ihr könnt mir helfen.

    Danke im Vorraus
    Geändert von Wombatz (01.12.2011 um 10:47 Uhr)

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Es treten die gleichen Interrupts auf wie in den anderen Timer-Modi. Overflow jedesmal wenn BOTTOM erreicht wird, MatchCompare jeweils beim Rauf- und beim Runterzählen:

    The Timer/Counter Overflow Flag (TOV2) is set each time the counter reaches BOTTOM. The Interrupt Flag can be used to generate an interrupt each time the counter reaches the BOTTOM value.

    The OCF2 bit is set (one) when a Compare Match occurs between the Timer/Counter2 and the data in OCR2 – Output Compare Register2.
    (Aus dem Datenblatt des Mega8 unter "Phase Correct PWM Mode")

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Hallo,

    Kann man auch bei Top und Bottom einen Interrupt auslösen?
    Müßte man ins jewilige Datenblatt schauen. Welchen µC und welchen Timer darauf nutzt Du?

    Beim ATMega8 wird bei Timer1 der Overflow Interrupt im Phase Correct am Bottom ausgelöst. Bei Top ist es der COMPARE1A oder ICR1, je nach Konfiguration des Timers.

    TOV und die anderen kann man gleichzeitig enablen und sollten dann auch nutzbar sein.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #4
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1
    Wie springe ich denn bei dem MatchCompare/bzw ICR1 Modus in das Label?
    Nutze übrigends auch den Atmega8
    Geändert von Wombatz (01.12.2011 um 11:17 Uhr)

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Also oben sehe ich, das Du Timer2 nutzen möchtest. Da ist es das OCR2 Compare Register für Interrupt on TOP (EDIT nicht Interrupt on TOP sondern on Compare, on TOP geht mit Timer2 Phase Correct PWM nicht !?)

    Sollte mit

    Enable OC2
    Enable TIMER2

    On OC2 ISR_COMPARE
    On TIMER2 ISR_BOTTOM

    gehen

    Gruß
    Searcher
    Geändert von Searcher (01.12.2011 um 11:45 Uhr) Grund: Berichtigt
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    In der Bascomhilfe unter On Interrupt findet man diese Liste von möglichen Interrupts:

    INT0, INT1, INT2, INT3, INT4,INT5, TIMER0 ,TIMER1, TIMER2, ADC , EEPROM , CAPTURE1, COMPARE1A, COMPARE1B,COMPARE1.

    Or you can use the AVR name convention:

    OC2 , OVF2, ICP1, OC1A, OC1B, OVF1, OVF0, SPI, URXC, UDRE, UTXC, ADCC, ERDY and ACI.
    Vermutlich bedeutet On Timer2 den Überlaufinterrupt bei BOTTOM, aber um sicher zu gehen würde ich diesen so initialisieren:

    On OVL2 OVL-ISR

    Für den MatchCompare-Interrupt bei TOP müßte man das OCR2 mit 255 laden und die ISR etwa so einklinken:

    On OC2 MatchCompare-ISR

    (ungetestet und zu langsam)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    (ungetestet und zu langsam)
    Bei mir auch und hab grad 'nen Fehler bei mir entdeckt. Der OC2 Interrupt wird nicht bei TOP ausgelöst, sondern bei Compare match. TOP Interrupt geht im Timer2, glaub ich, nicht. Sollte mir auch etwas mehr Zeit nehmen.

    @Wombatz: Beschreib doch mal genauer, was Du machen möchtest. Denke, das Timer1 geeigneter wäre. Da gibt es aber mindestens 2 Möglichkeiten...

    Gruß
    Searcher
    Geändert von Searcher (01.12.2011 um 11:54 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  8. #8
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1
    Also, ich bastel gerade an einer Motoransteuerung für einen Brushless Motor. Gerade versuche ich den Kommutierungszeitpunkt zu ermessen (ADC). Hierzu brauche ich den PhaseCorrectModus, damit der Nulldurchgang einerseits gemessen wird und andererseits der Mittelwert verglichen wird. Da der Nulldurchgang die Hälfte der Ausgangsspannung ist, muss der Wert halbiert und dann mit einem Interrupt ausgelöst werden. Damit schaltet der Controller dann im richtigen Zeitpunkt auf die nächste Spule des Motors.

    Danke der schnellen Antworten

    Ach ja den Timer1 wollte ich für die PWM der Phasenansteuerung nehmen

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Hi,
    also ich versuchs nochmal:

    Kann leider nicht beurteilen, ob Du nicht auch Timer2 anstelle Timer1 für die PWM der Phasenansteuerungs nehmen kannst.

    So wie ich das Datenblatt verstehe, ist es mit Timer2 nicht vorgesehen, Interrupts im Phase Correct PWM bei TOP und BOTTOM zu nutzen.

    Für Timer1 geht es nach Tabelle 39, Seite 98 im Datenblatt nur für die Modes 8, 9, 10 und 11.
    Modes 1, 2, 3 scheinen mir keinen Interrupt bei TOP auszulösen.

    Einstellung des Modes 8 :
    CONFIG TIMER1 = TIMER , PRESCALE = x
    SET TCCR1B.WGM13
    SET - noch weitere Einstellungen zB welche Pins als Output genutzt werden sollen
    (hab dazu keine Erfahrung, wie das mit dem CONFIG TIMER Kommando geht. Ich benutze immer SET Anweisungen)

    TOP Wert einstellen im Register ICR1
    ICR1 = x

    Pulsweite einstellen im Register OCR1A oder OCR1B (je nachdem welche PWM Output Pins am µC genutzt werden sollen)

    Interrupts:

    ENABLE ICP1
    ENABLE OVF1

    ON ICP1 ISR_TOP
    ON OVF1 ISR_BOTTOM

    ENABLE INTERRUPTS

    Timer1 ist ja 16 Bit und läßt sich für Deine gewünschte Funktion nicht auf geringere Auflösung umstellen!?
    Timer2 ist 8 bit und könnte für Phasenansteuerung noch gehen ???

    PS: Kann das leider nicht testen.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  10. #10
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1
    Vielen Dank für deine Hilfe.

    Ich werd das mal so versuchen.

    Gruß Wombatz...

    Sorry nochmal aber es hakt.....

    Ich habe es gerade mal Versucht mit dem Timer1 zwei Interrupts auszulösen. Bei mir geht immer nur einer der Beiden. Zusammen funktionieren die nicht:
    Hier mal der Code:

    Tccr1a = &B00000010 'Bit7+4=keinCompare,Bit3+2=keinForceOutputCompare, Bit1+0=PWMPhaseCorrect
    Tccr1b = &B00010010 'Bit7=NoiseCancelaus,Bit6=FallingEdge,Bit5=Reserve ,Bit4+3=WaveformGenerationMode,Bit2+0=Prescaler/8
    Timsk.toie1 = 1 'Timer Overflow Interrupt (TOP) ein
    Enable Icp1 'Timer Bottom Interrupt ein

    Sreg.7 = 1 'Interrupt global freigeben

    On ovf1 Adc_messung
    On Icp1 Compare_messungen

    '_____________

    Do
    "Mach Sachen"
    Loop
    '____________

    Adc_messung:

    Toggle Portd.6

    Return
    '___________________

    'Compare_messungen:

    Toggle Portd.7

    Return

    Einmal ist Portd.6 (ADC_Messung) 0,00V und wenn ich den anderen Interrupt ausblende, funktionier der???
    Mache ich da was falsch???
    Geändert von Wombatz (01.12.2011 um 19:54 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. sind ALLE Interrupts wieder ON nach Enable Interrupts?
    Von sBronco im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 19.07.2011, 15:58
  2. EA DIP204-4 4 bit modus
    Von DBF im Forum Assembler-Programmierung
    Antworten: 4
    Letzter Beitrag: 07.03.2008, 14:16
  3. Idle-Modus
    Von wolleausmallo im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 17.04.2007, 10:41
  4. LCD - initialisieren im 4-Bit Modus
    Von henne im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 12.03.2005, 01:26
  5. Bootstrap Modus
    Von lollo im Forum C-Control II
    Antworten: 5
    Letzter Beitrag: 20.01.2005, 16:31

Berechtigungen

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