STm32F103: Probleme mit den Compare Registern Timer 1

Gast #5116608
Hallo,

ich bin etwas auf dem Schlauch, da es mal funktioniert und mal nicht und 
die Ursache einfach nicht offensichtlich zu sein scheint.

Es sollen einfach ein paar LEDs an Schieberegistern gedimmt werden über 
den OE Pin. Klappt auch soweit aber sobald ich Compare Kanal 1 des 
Timers 1 hinzu nehmen will um auch noch die Display beleuchtung zu 
dimmen geht es nicht mehr :-( Benutz sind PA8 und PA9 des uC, der Timer 
wurde auch remapped auf diese Pins.

Jemand da eine Idee?

Gedimmt wird mit

/* Helligkeitsregelung: Compare Wert / Duty Cycle variieren */
    TIM_SetCompare2(TIM1,DCValue * (float)LDR_Value / 100);

Sobald ich diese Zeilen hinzu nehme, spielt die Dimmung auf Kanal 2 
nicht mehr. Oszi habe ich leider keines.

#define TIM1_FREQ     15                     // 15 ms = 150 Hz
const uint32_t DCValue =  TIM1_FREQ * 10;    // 10-fache Periode
1
 /* Compare Register Channel 1 konfigurieren (Display) */
2
   TimerOCInitStructure.TIM_Pulse           = DCValue / 2;
3
   TIM_OC1Init(TIM1, &TimerOCInitStructure);
1
GPIO_InitTypeDef  GPIO_InitStructure;
2

3
    /* Clocks einschalten */
4
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
5

6
    /* HC595_CTRL konfigurieren */
7
    GPIO_StructInit(&GPIO_InitStructure);
8
    GPIO_InitStructure.GPIO_Pin   = HC595_DS | HC595_STCP | HC595_SHCP | HC595_MR;
9
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
10
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
11
    GPIO_Init(HC595_CTRL, &GPIO_InitStructure);
12

13
    GPIO_ResetBits(HC595_CTRL,HC595_MR);        // Master Reset = Shift Register loeschen
14
    GPIO_SetBits(HC595_CTRL,HC595_MR);
15

16
    //GPIO_SetBits(HC595_PWM,HC595_OE);         // Outputs = Z-State
17
    GPIO_ResetBits(HC595_CTRL,HC595_STCP);      // Storage Register = LOW
18
    GPIO_ResetBits(HC595_CTRL,HC595_SHCP);      // Shift Register = LOW
19

20
/* Timer 1 aktivieren und remappen */
21
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
22
    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);
23

24
    /* Der Timer clock'ed mit 36Mhz, einstellen auf 200Hz */
25
   TIM_TimeBaseStructInit(&TimerBaseInitStructure);
26
   TimerBaseInitStructure.TIM_CounterMode   = TIM_CounterMode_Up;
27
   TimerBaseInitStructure.TIM_Prescaler     = tim_presc;
28
   TimerBaseInitStructure.TIM_Period        = DCValue;
29
   TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
30
   TIM_TimeBaseInit(TIM1, &TimerBaseInitStructure);
31

32
   /* Compare Register allgemeine Einstellungen */
33
   TimerOCInitStructure.TIM_OCMode          = TIM_OCMode_PWM1;
34
   TimerOCInitStructure.TIM_OutputState     = TIM_OutputState_Enable;
35
   TimerOCInitStructure.TIM_OCPolarity      = TIM_OCPolarity_Low;
36

37
   /* Compare Register Channel 1 konfigurieren (Display) */
38
   TimerOCInitStructure.TIM_Pulse           = DCValue / 2;
39
   TIM_OC1Init(TIM1, &TimerOCInitStructure);
40

41
   /* Compare Register Channel 2 konfigurieren (LEDs) */
42
   TimerOCInitStructure.TIM_Pulse           = DCValue / 2;
43
   TIM_OC2Init(TIM1, &TimerOCInitStructure);
44

45
   /* Predload Register Kanal 1 und 2 einschalten */
46
   TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
47
   TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
48

49
   /* Compare Register INT de-aktivieren */
50
   TIM_ITConfig(TIM1,TIM_IT_CC1,DISABLE);
51
   TIM_ITConfig(TIM1,TIM_IT_CC2,DISABLE);
52

53
   /* Timer 1 Main Outputs aktivieren und los */
54
   TIM_ARRPreloadConfig(TIM1, ENABLE);          /* PreLoad Register aktivieren */
55
   TIM_CtrlPWMOutputs(TIM1, ENABLE);            /* PWM Ausgänge aktivieren */
56
   TIM_Cmd(TIM1, ENABLE);                       /* Timer 1 los ! */
57
}
Gast #5116632
Edit:

Es kann doch nicht sein, dass die Reihenfolge dieser Sequenz 
entscheidet, ob das funzt oder nicht?

Ausführlich, auch wennn die Werte im struct ja erhalten bleiben und die 
die bei beiden gleich sind nicht doppelt gesezt werden müssen. 
Vertausche ich diese beiden Blöcke miteinander klappt die PWM nicht 
mehr.

Bahnhof?

 /* Compare Register Channel 1 konfigurieren (Display) */
   TimerOCInitStructure.TIM_OCMode          = TIM_OCMode_PWM1;
   TimerOCInitStructure.TIM_OutputState     = TIM_OutputState_Enable;
   TimerOCInitStructure.TIM_OCPolarity      = TIM_OCPolarity_Low;
   TimerOCInitStructure.TIM_Pulse           = DCValue / 2;
   TIM_OC1Init(TIM1, &TimerOCInitStructure);

   /* Compare Register Channel 2 (LEDs) */
   TimerOCInitStructure.TIM_OCMode          = TIM_OCMode_PWM1;
   TimerOCInitStructure.TIM_OutputState     = TIM_OutputState_Enable;
   TimerOCInitStructure.TIM_OCPolarity      = TIM_OCPolarity_Low;
   TimerOCInitStructure.TIM_Pulse           = DCValue / 2;
   TIM_OC2Init(TIM1, &TimerOCInitStructure);
Gast #5116640
DraconiX schrieb:
> Christian J. schrieb:
>> TIM_OC1Init(TIM1, &TimerOCInitStructure);
>
> Und..
>
> Christian J. schrieb:
>> TIM_OC2Init(TIM1, &TimerOCInitStructure);
>
> Finde den Fehler. ;-)

Ja, wo denn ???? Das eine ist CC1 und das andere CC2, also 2 Kanäle.... 
habe ich denn Tomaten auf den Augen?
Beitrag #5116644 wurde von einem Moderator gelöscht.
Gast #5116737
Auch Eina schrieb:
> Wenn du schon das Forum rebellisch machst könntest du ja
> wenigstens auch die Lösung deines Problems andeuten.

Steht doch schon da... sieht doch jeder. Ganz einfach halt.

>> DraconiX schrieb:
>> Finde den Fehler. ;-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.