- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 20

Thema: Timer als Counter zu konfigurieren

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    40
    Beiträge
    557
    Du kannst, wie 021aet04 schon anmerkte, den Timer auch auf ein externes Signal reagieren lassen. Bei Atmegas gibt es Register, mit denen du den Prescaler einstellst aber auch den Timer darauf einstellen kannst auf eine steigende oder fallende Flanke an einem Pin zu reagieren und in diesem Fall das dem Timer zugehörige Zählregister inkrementieren lassen.
    Alles ist möglich. Unmögliches dauert nur etwas länger!

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    07.07.2011
    Beiträge
    35
    Zitat Zitat von Arkon Beitrag anzeigen
    Du kannst, wie 021aet04 schon anmerkte, den Timer auch auf ein externes Signal reagieren lassen. Bei Atmegas gibt es Register, mit denen du den Prescaler einstellst aber auch den Timer darauf einstellen kannst auf eine steigende oder fallende Flanke an einem Pin zu reagieren und in diesem Fall das dem Timer zugehörige Zählregister inkrementieren lassen.
    wozu soll ich den Prescaler einstellen, wenn ich auf den Taktsignal (in diesem Fall externe Signale) keinen Einfluss habe?

    Die Frage an diese Stelle ist, kann sich der Counter an die Geschwändigkeit des externen Signals anpassen???? also zählt er so schnell wie sich das Signal ändert?
    geht man davon aus, dass der Signalgeber mit 200KHz läuft, nun kann der Counter je 5µs (1/200KHz) um eins erhöht bzw. verringert???? kann man in solchem Fall sowas konfigurieren und wie????

    mit dem Prescaler teile ich den Systemcore Clock vor. nun in diesem Mode verwende ich das Taktsystem nicht sonder externe Signale..!

    Danke für Hilfe

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    40
    Beiträge
    557
    Wenn du den Timer auf ein externes Signal einstellst hat das nichts mit dem Prescaler zu tun. Das wird nur im selben Register eingestellt.

    Welchen µC verwendest du denn für diese Aufgabe? Und in welcher Sprache soll programmiert werden?
    Alles ist möglich. Unmögliches dauert nur etwas länger!

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    07.07.2011
    Beiträge
    35
    STM32F100RB mit C-Sprache

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    07.07.2011
    Beiträge
    35
    Das Folgende Code habe ich in der STM32F10x_tim.c.

    Ich schätzr mal das ist der Code, das ich Suche oder? nun statt external Clock Mode ist eigentlich external Signal das sind gleich oder?

    /**
    * @brief Configures the External clock Mode1
    * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
    * @param TIM_ExtTRGPrescaler: The external Trigger Prescaler.
    * This parameter can be one of the following values:
    * @arg TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF.
    * @arg TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2.
    * @arg TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4.
    * @arg TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8.
    * @param TIM_ExtTRGPolarity: The external Trigger Polarity.
    * This parameter can be one of the following values:
    * @arg TIM_ExtTRGPolarity_Inverted: active low or falling edge active.
    * @arg TIM_ExtTRGPolarity_NonInverted: active high or rising edge active.
    * @param ExtTRGFilter: External Trigger Filter.
    * This parameter must be a value between 0x00 and 0x0F
    * @retval None
    */
    void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
    uint16_t ExtTRGFilter)
    {
    uint16_t tmpsmcr = 0;
    /* Check the parameters */
    assert_param(IS_TIM_LIST3_PERIPH(TIMx));
    assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPresca ler));
    assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarit y));
    assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter));
    /* Configure the ETR Clock source */
    TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);

    /* Get the TIMx SMCR register value */
    tmpsmcr = TIMx->SMCR;
    /* Reset the SMS Bits */
    tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS));
    /* Select the External clock mode1 */
    tmpsmcr |= TIM_SlaveMode_External1;
    /* Select the Trigger selection : ETRF */
    tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_TS));
    tmpsmcr |= TIM_TS_ETRF;
    /* Write to TIMx SMCR */
    TIMx->SMCR = tmpsmcr;
    }

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    40
    Beiträge
    557
    Mit dem µC kenn ich mich leider nicht aus. Aber wie schon gesagt:

    Bei den meisten (allen?) AVRs gibt es ein Register für den Timer um diesen zu konfigurieren. Man hat die Wahl zwischen zwei "Zählweisen"

    1. Der Zähler zählt mit dem µC-Takt, evtl. verrechnet mit einem Presceler, hoch, der überwachte Pin für die zweite Zählgeschwindigkeit hat keinen Einfluss
    2. Der Zähler zählt bei jeder steigenden oder fallenden Flanke um jeweils 1 hoch, der µC-Takt hat keinen Einfluss auf die Zählgeschwindigkeit

    Ich schätze mal, so eine Einstellung dürfte es auch bei deinem µC geben.
    Alles ist möglich. Unmögliches dauert nur etwas länger!

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    @Arkon Er verwendet keinen AVR sondern einen ARM. Ds ist nicht die gleiche Technik.

    @kmrish: Leider kann ich dir ebenfalls nicht weiterhelfen da ich mit Atmegas/Attinys, also AVR, programmiere.

    MfG Hannes

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    23.07.2011
    Ort
    Hamburg
    Beiträge
    7
    Die Initialisierung des TIM1 bis TIM5 und TIM8 als Endcoder ( Endcoder-Mode ) ist relativ einfach. Im Kap. 14.3.12 Manual Rev. 11 steht da alles beschrieben.

    Hier ein Bsp. für TIM3:

    #define ENCODER_TIMER TIM3
    #define C_QA GPIO_Pin_6 //- Input Encoder A
    #define C_QB GPIO_Pin_7 //- Input Encoder B

    void EncoderTimerInit( void )
    {
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_ICInitTypeDef TIM_ICInitStructure;

    /* Timer configuration in Encoder mode */
    TIM_DeInit(ENCODER_TIMER);
    TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

    TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // No prescaling
    TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //

    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(ENCODER_TIMER, &TIM_TimeBaseStructure);

    TIM_ICStructInit(&TIM_ICInitStructure);
    TIM_ICInitStructure.TIM_ICFilter = ICx_FILTER;
    TIM_ICInit(ENCODER_TIMER, &TIM_ICInitStructure);

    //-
    TIM_EncoderInterfaceConfig(ENCODER_TIMER, TIM_EncoderMode_TI12,
    TIM_ICPolarity_Falling, TIM_ICPolarity_Rising);


    // Clear all pending interrupts
    // TIM_ClearFlag(ENCODER_TIMER, TIM_FLAG_Update);
    // TIM_ITConfig(ENCODER_TIMER, TIM_IT_Update, ENABLE);

    TIM_Cmd(ENCODER_TIMER, ENABLE);

    }

    void init_gpio( void )
    {
    GPIO_InitTypeDef GPIO_InitStructure;
    //- andere Portpins für TIM3 ( GPIO 6 und GPIO 7 )
    GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);

    GPIO_InitStructure.GPIO_Pin = C_QA | C_QB;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    }

    void main( void )
    {
    u16 wCounter =0;

    init_gpio( );
    EncoderTimerInit();

    //- Bsp. für das lesen des Encoder-Counter
    wCounter = ENCODER_TIMER->CNT;


    // etc.

    }

    Das sollte so funktionieren. Musst Du halt noch entsprechend erweitern oder abändern ( Timer und Ports z.B. )

    Gruss
    Steffen

Ähnliche Themen

  1. Konfiguration: Timer als Counter gesucht
    Von robodriver im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 10.02.2008, 11:42
  2. Timer/Counter und PWM Channles
    Von ricola im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 04.07.2007, 19:48
  3. Timer/Counter
    Von Jon im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 17.05.2007, 18:43
  4. Attiny2313, Timer-Counter-Wie gehts?
    Von sebastian.fr im Forum AVR Hardwarethemen
    Antworten: 13
    Letzter Beitrag: 04.04.2006, 22:48
  5. Externer Timer/Counter um uC aufzuwecken
    Von Whassup im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 21.11.2005, 09:25

Berechtigungen

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

12V Akku bauen