Здравствуйте!
Не могу понять почему ШИМ не запускается.
05 | #define R_Kanal D2 //D2 F2 |
08 | GRGB led(COMMON_CATHODE, R_Kanal, G_Kanal, B_Kanal); |
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); |
23 | digitalWrite(R_Kanal, HIGH); |
24 | digitalWrite(G_Kanal, LOW); |
25 | digitalWrite(B_Kanal, LOW); |
27 | digitalWrite(R_Kanal, LOW); |
28 | digitalWrite(G_Kanal, HIGH); |
29 | digitalWrite(B_Kanal, LOW); |
31 | digitalWrite(R_Kanal, LOW); |
32 | digitalWrite(G_Kanal, LOW); |
33 | digitalWrite(B_Kanal, HIGH); |
35 | digitalWrite(R_Kanal, LOW); |
36 | digitalWrite(G_Kanal, LOW); |
37 | digitalWrite(B_Kanal, LOW); |
40 | void SHIMWrite( byte val) |
42 | TCCR3A |= (1 << COM3A1); |
43 | TCCR3A |= (1 << COM3B1); |
44 | TCCR3A |= (1 << WGM30); |
45 | TCCR3B |= (1 << WGM32); |
46 | TCCR3B |= (1 << CS30); |
Такое чувство, что что-то я не активировал… связь между таймером и тактовым генератором или питание таймера или ещё чего. https://disk.yandex.ru/i/F-669sUXm0UfMQ
Раньше для PIC писал, там примеры прям в документации, для STM есть программа конфигуратор периферии, а тут не знаю даже куда копать.
http://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p
Немного разобрался, "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
07
enum
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
16
int
dig = 256;
17
uint8_t r3ah;
18
uint8_t r3al;
19
20
void
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
50
void
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
65
void
loop
()
66
{
67
SHIMWrite(100);
68
delay(1000);
69
}
D2 не реагирует никак, а вот на TX есть сигнал, частота которого зависит от val, но ШИМ - скважность надо менять, а не частоту. В общем пока не получается.
15.2.3. Быстрый режим PWM
Когда установлено WGM3[3:0] = 5,6,7,14 или 15, счетчик/таймер 3 переходит
в быстрый режим ШИМ, то счетом максимального значения TOP являются 0xFF, 0x1FF, 0x3FF, ICR3 или OCR3A, он может быть использован для получения Высокочастотный ШИМ-сигнал. Разница между быстрым режимом PWM и другими режимами PWM заключается в том, что это односторонняя операция.
Разобрались!
01
void
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
16
void
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
}
Кто подскажет как LGT8F328 с кварцем на 16 мГц перевести в режим работы на 32 мГц.