LGT8F328P настройка ШИМ на PD2/INT0/OC3B

MartynovElectric
Offline
Зарегистрирован: 08.06.2022

Здравствуйте!

Не могу понять почему ШИМ не запускается.

01#include <EEPROM.h>
02#include <GRGB.h>
03 
04#define B_Kanal D5
05#define R_Kanal D2 //D2 F2
06#define G_Kanal D6
07 
08GRGB led(COMMON_CATHODE, R_Kanal, G_Kanal, B_Kanal);
09 
10void setup()
11{
12  HDR |= 1 << 0;  // Enable high current D5
13  HDR |= 1 << 1;  // Enable high current D6
14  //HDR |= 1 << 3;  // Enable high current F2/D2
15 
16  pinMode(R_Kanal, OUTPUT);
17  pinMode(G_Kanal, OUTPUT);
18  pinMode(B_Kanal, OUTPUT);
19  digitalWrite(R_Kanal, LOW);
20  digitalWrite(G_Kanal, LOW);
21  digitalWrite(B_Kanal, LOW);
22   
23  digitalWrite(R_Kanal, HIGH);
24  digitalWrite(G_Kanal, LOW);
25  digitalWrite(B_Kanal, LOW);
26  delay(1000);
27  digitalWrite(R_Kanal, LOW);
28  digitalWrite(G_Kanal, HIGH);
29  digitalWrite(B_Kanal, LOW);
30  delay(1000);
31  digitalWrite(R_Kanal, LOW);
32  digitalWrite(G_Kanal, LOW);
33  digitalWrite(B_Kanal, HIGH);
34  delay(1000);
35  digitalWrite(R_Kanal, LOW);
36  digitalWrite(G_Kanal, LOW);
37  digitalWrite(B_Kanal, LOW);
38}
39 
40void SHIMWrite(byte val)
41{
42  TCCR3A |= (1 << COM3A1);
43  TCCR3A |= (1 << COM3B1);
44  TCCR3A |= (1 << WGM30);
45  TCCR3B |= (1 << WGM32);
46  TCCR3B |= (1 << CS30);
47  OCR3BH = 0;
48  OCR3BL = val;
49}
50 
51void loop()
52{
53  SHIMWrite(100);
54  delay(1000);
55}

Такое чувство, что что-то я не активировал… связь между таймером и тактовым генератором или питание таймера или ещё чего. https://disk.yandex.ru/i/F-669sUXm0UfMQ

Раньше для PIC писал, там примеры прям в документации, для STM есть программа конфигуратор периферии, а тут не знаю даже куда копать.

renoshnik
Offline
Зарегистрирован: 11.04.2013
MartynovElectric
Offline
Зарегистрирован: 08.06.2022

Немного разобрался, "GRGB led" мешал.

Но таймер так и не удалось перевести в режим PWM. Только CTC работает.

01#include <EEPROM.h>
02 
03#define B_Kanal D5
04#define R_Kanal D2 //D2 F2
05#define G_Kanal D6
06 
07enum Prescalers {
08   PRESCALER_STOP = 0,
09   PRESCALER_1 = 1,
10   PRESCALER_8 = 2,
11   PRESCALER_64 = 3,
12   PRESCALER_256 = 4,
13   PRESCALER_1024 = 5
14};
15 
16int dig = 256;
17uint8_t r3ah;
18uint8_t r3al;
19 
20void setup()
21{
22  HDR |= 1 << 0;  // Enable high current D5
23  HDR |= 1 << 1;  // Enable high current D6
24  //HDR |= 1 << 3;  // Enable high current F2/D2
25 
26  //pinMode(R_Kanal, OUTPUT);
27  pinMode(G_Kanal, OUTPUT);
28  pinMode(B_Kanal, OUTPUT);
29  //digitalWrite(R_Kanal, LOW);
30  digitalWrite(G_Kanal, LOW);
31  digitalWrite(B_Kanal, LOW);
32   
33  //digitalWrite(R_Kanal, HIGH);
34  digitalWrite(G_Kanal, LOW);
35  digitalWrite(B_Kanal, LOW);
36  delay(1000);
37  //digitalWrite(R_Kanal, LOW);
38  digitalWrite(G_Kanal, HIGH);
39  digitalWrite(B_Kanal, LOW);
40  delay(1000);
41  //digitalWrite(R_Kanal, LOW);
42  digitalWrite(G_Kanal, LOW);
43  digitalWrite(B_Kanal, HIGH);
44  delay(1000);
45  //digitalWrite(R_Kanal, LOW);
46  digitalWrite(G_Kanal, LOW);
47  digitalWrite(B_Kanal, LOW);
48}
49 
50void SHIMWrite(byte val)
51{
52  DDRF |= (1<<PF2) | (1<<PF1);
53  OCR3AH = 0x00;          // Важно, вначале необходимо загрузить верхний регистр!!!
54  OCR3AL = val;          // затем нижний, Нельзя как для Atmega328 -  OCR3A = topValue;
55  OCR3BH = 0x00;
56  OCR3BL = val;
57  TCCR3A |= (1 <<COM3A0) | (1 << COM3B0) | (1 << WGM31) | (1 << WGM30); 
58   
59  TCCR3B = (1 << WGM33) | (1 << WGM32) | 5; 
60   
61  //TCCR3A=1 <<COM3A0 | 1<<COM3B0;  // ПИН D2 + TXI
62  //TCCR3B = (1 << WGM32) | 5;   // Режим СТС WGM3[3:0]=4 или 12
63}
64 
65void loop()
66{
67  SHIMWrite(100);
68  delay(1000);
69}

D2 не реагирует никак, а вот на TX есть сигнал, частота которого зависит от val, но ШИМ - скважность надо менять, а не частоту. В общем пока не получается.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

15.2.3. Быстрый режим PWM

Когда установлено WGM3[3:0] = 5,6,7,14 или 15, счетчик/таймер 3 переходит
в быстрый режим ШИМ, то счетом максимального значения TOP являются 0xFF, 0x1FF, 0x3FF, ICR3 или OCR3A, он может быть использован для получения Высокочастотный ШИМ-сигнал. Разница между быстрым режимом PWM и другими режимами PWM заключается в том, что это односторонняя операция.

MartynovElectric
Offline
Зарегистрирован: 08.06.2022

Разобрались!

01void SHIMWrite(byte val)
02{
03  DDRF |= (1<<PF2) | (1<<PF1);
04   
05  OCR3AH = 0x00;
06  OCR3AL = val;
07  OCR3BH = 0x00;
08  OCR3BL = val;
09  ICR3H = 0x00;
10  ICR3L = 0xFF;
11 
12  TCCR3A = 0xA0;
13  TCCR3B = 0x12;
14}
15 
16void loop()
17{
18  SHIMWrite(255);
19  delay(10000);
20  SHIMWrite(254);
21  delay(10000);
22  SHIMWrite(4);
23  delay(10000);
24  SHIMWrite(0);
25  delay(10000);
26}

 

kpmic
Offline
Зарегистрирован: 01.12.2019

Кто подскажет как LGT8F328 с кварцем на 16 мГц перевести в режим работы на 32 мГц.