TIMER doesnt work when i link the lcd
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-07-19 2:00 AM
#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.
- Labels:
-
STM32 Motor Control
-
STM32F4 Series
-
TIM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-07-19 2:14 AM
> 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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-07-19 2:18 AM
thanks for your answer, i have tried a lot , reading manual , changing things on code but without result.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-07-19 2:20 AM
That's why I say, read out the content of registers and check/compare/post.
JW
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-07-19 5:55 AM
@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 designed from scratch never works and cannot be patched up to make it work.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-07-19 6:00 AM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-07-19 6:00 AM
Blind writing all the pin configuration,etc, looks like it will cause headaches and waste time.
Think harder, and tread more carefully..
Up vote any posts that you find helpful, it shows what's working..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-07-19 6:02 AM
thank you
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2022-07-19 7:01 AM
so compare & contrast your timer setup in the 2 cases
A complex system designed from scratch never works and cannot be patched up to make it work.
