Skip to main content
LFerr.7
Associate III
July 19, 2022
Question

TIMER doesnt work when i link the lcd

  • July 19, 2022
  • 5 replies
  • 2089 views
#define TRIAC_PULSE_WIDTH 500 // Duration of TRIAC trigger pulse in µs
 
lcd_init();
 
 lcd_send_cmd (0x80|0x00);
 lcd_send_string("HELLO WORLD");
 
 lcd_send_cmd (0x80|0x40);
 lcd_send_string("LCD 20x4 DEMO");
 
 lcd_send_cmd (0x80|0x1C);
 lcd_send_string("BY");
 
 lcd_send_cmd (0x80|0x54);
 lcd_send_string("powertechnologies");
 
void timer1_init( void )
{
 __HAL_RCC_TIM1_CLK_ENABLE(); // Enable Timer 1 clock
 TIM1->CR1 = 0x0088; // Auto-reload, One-Pulse-Mode 
 TIM1->CR2 = 0x0000; // Idle-state configuration
 TIM1->SMCR = 0x0066; // Trigger-Mode, Timer input 2
 TIM1->DIER = 0x0000; // Disable interrupts
 TIM1->SR = 0x0000; // Clear status register
 TIM1->EGR = 0x0000; // Clear event generation register
 TIM1->CCMR1 = 0x0178; // OC1: PWM2-Mode, Preload, IC2: IC2 on TI2
 TIM1->CCMR2 = 0x0000; // OC3/OC4, IC3/IC4 off
 TIM1->CCER = 0x00A1; // OC1: On, AH; IC2: On, Both edges 
 TIM1->CNT = 0; // Clear timer 1 counter
 TIM1->PSC = 168-1; // Set prescaler to 168
 TIM1->ARR = 0x0000; // Initialize Auto-reload register
 TIM1->RCR = 0x0000; // Clear repetition counter 
 TIM1->CCR1 = 0x0000; // Initialize Capture/Compare register 1
 TIM1->CCR2 = 0x0000; // Clear Capture/Compare register 2
 TIM1->CCR3 = 0x0000; // Clear Capture/Compare register 3
 TIM1->CCR4 = 0x0000; // Clear Capture/Compare register 4
 TIM1->BDTR = 0x8000; // Main output enable
 TIM1->DCR = 0x0000; // Clear DMA configuration (DMA not needed)
 // TIM1->DMAR = ......; 
 TIM1->CR1 |= 0x0001; // Timer 1 Enable
}
 
void gpio_init( void )
{
 __HAL_RCC_GPIOE_CLK_ENABLE(); // Enable GPIOE clock
 GPIOE->MODER = 0x00880000; // Enable PE9/PE11 alternate function mode
 GPIOE->AFR[1] = 0x00001010; // Select PE9/PE11 alternate function AF1
 GPIOE->AFR[0] = 0x00000000; // Clear AFRL
 GPIOE->OTYPER = 0x00000000; // Set all outputs to push-pull mode (default)
 GPIOE->OSPEEDR = 0x00000000; // Set all outputs to low-speed (default)
 GPIOE->PUPDR = 0x00000000; // Disable all pull-ups and pull-downs
}
 
 
void set_alpha( int alpha )
{
 TIM1->CCR1 = alpha;
 TIM1->ARR = alpha + TRIAC_PULSE_WIDTH; 
}

I use STM32F429ZI and stmcube ide to write the code. I have activate the timer 1 (ch1 at output compare PE9 and ch2 input capture PE11 ).

On PE11 i put a quare wave of 50 hz and in the output(PE9 i have the pulses every rising and falling edges.)The lcd works very fine (i2c but i have tried also spi and it works.) but when i connect the lcd to send strings(for example when i write lcd init(), the timer output(PE9 ) go up at 3.3v and the pulse misses.

Can you help me please? if you want more information , i can be more clear.

This topic has been closed for replies.

5 replies

waclawek.jan
Super User
July 19, 2022

> for example when i write lcd init(), the timer output(PE9 ) go up at 3.3v and the pulse misses

Read out and check/compare GPIOE and timer registers content between working and non-working cases.

JW

LFerr.7
LFerr.7Author
Associate III
July 19, 2022

thanks for your answer, i have tried a lot , reading manual , changing things on code but without result.

waclawek.jan
Super User
July 19, 2022

That's why I say, read out the content of registers and check/compare/post.

JW

Andrew Neil
Super User
July 19, 2022

@LFerr.7​  "The lcd works very fine (i2c but i have tried also spi and it works.) but when i connect the lcd to send strings(for example when i write lcd init(), the timer output(PE9 ) go up at 3.3v and the pulse misses."

Not quite clear what you're saying here - is this purely a software change, or are you also changing hardware?

As @Community member​ says, whenever you have one working and one non-working case, the thing to do is to compare them side-by-side - step through, and see where things are different.

Or, perhaps, go back to the working case and just make small, incremental changes - so you don't have much to debug at the point that it stops working...

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.
LFerr.7
LFerr.7Author
Associate III
July 19, 2022

It is a software change. I see on the oscilloscope that in the output of timer i have Constant voltage 3,3V instead of the pulses

Andrew Neil
Super User
July 19, 2022

so compare & contrast your timer setup in the 2 cases

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.
Tesla DeLorean
Guru
July 19, 2022

Blind writing all the pin configuration,etc, looks like it will cause headaches and waste time.

Think harder, and tread more carefully..

Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
LFerr.7
LFerr.7Author
Associate III
July 19, 2022

thank you