LGT8F328P настройка ШИМ на PD2/INT0/OC3B
- Войдите на сайт для отправки комментариев
Ср, 08/06/2022 - 16:58
Здравствуйте!
Не могу понять почему ШИМ не запускается.
#include <EEPROM.h>
#include <GRGB.h>
#define B_Kanal D5
#define R_Kanal D2 //D2 F2
#define G_Kanal D6
GRGB led(COMMON_CATHODE, R_Kanal, G_Kanal, B_Kanal);
void setup()
{
HDR |= 1 << 0; // Enable high current D5
HDR |= 1 << 1; // Enable high current D6
//HDR |= 1 << 3; // Enable high current F2/D2
pinMode(R_Kanal, OUTPUT);
pinMode(G_Kanal, OUTPUT);
pinMode(B_Kanal, OUTPUT);
digitalWrite(R_Kanal, LOW);
digitalWrite(G_Kanal, LOW);
digitalWrite(B_Kanal, LOW);
digitalWrite(R_Kanal, HIGH);
digitalWrite(G_Kanal, LOW);
digitalWrite(B_Kanal, LOW);
delay(1000);
digitalWrite(R_Kanal, LOW);
digitalWrite(G_Kanal, HIGH);
digitalWrite(B_Kanal, LOW);
delay(1000);
digitalWrite(R_Kanal, LOW);
digitalWrite(G_Kanal, LOW);
digitalWrite(B_Kanal, HIGH);
delay(1000);
digitalWrite(R_Kanal, LOW);
digitalWrite(G_Kanal, LOW);
digitalWrite(B_Kanal, LOW);
}
void SHIMWrite(byte val)
{
TCCR3A |= (1 << COM3A1);
TCCR3A |= (1 << COM3B1);
TCCR3A |= (1 << WGM30);
TCCR3B |= (1 << WGM32);
TCCR3B |= (1 << CS30);
OCR3BH = 0;
OCR3BL = val;
}
void loop()
{
SHIMWrite(100);
delay(1000);
}
Такое чувство, что что-то я не активировал… связь между таймером и тактовым генератором или питание таймера или ещё чего. https://disk.yandex.ru/i/F-669sUXm0UfMQ
Раньше для PIC писал, там примеры прям в документации, для STM есть программа конфигуратор периферии, а тут не знаю даже куда копать.
http://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p
Немного разобрался, "GRGB led" мешал.
Но таймер так и не удалось перевести в режим PWM. Только CTC работает.
#include <EEPROM.h> #define B_Kanal D5 #define R_Kanal D2 //D2 F2 #define G_Kanal D6 enum Prescalers { PRESCALER_STOP = 0, PRESCALER_1 = 1, PRESCALER_8 = 2, PRESCALER_64 = 3, PRESCALER_256 = 4, PRESCALER_1024 = 5 }; int dig = 256; uint8_t r3ah; uint8_t r3al; void setup() { HDR |= 1 << 0; // Enable high current D5 HDR |= 1 << 1; // Enable high current D6 //HDR |= 1 << 3; // Enable high current F2/D2 //pinMode(R_Kanal, OUTPUT); pinMode(G_Kanal, OUTPUT); pinMode(B_Kanal, OUTPUT); //digitalWrite(R_Kanal, LOW); digitalWrite(G_Kanal, LOW); digitalWrite(B_Kanal, LOW); //digitalWrite(R_Kanal, HIGH); digitalWrite(G_Kanal, LOW); digitalWrite(B_Kanal, LOW); delay(1000); //digitalWrite(R_Kanal, LOW); digitalWrite(G_Kanal, HIGH); digitalWrite(B_Kanal, LOW); delay(1000); //digitalWrite(R_Kanal, LOW); digitalWrite(G_Kanal, LOW); digitalWrite(B_Kanal, HIGH); delay(1000); //digitalWrite(R_Kanal, LOW); digitalWrite(G_Kanal, LOW); digitalWrite(B_Kanal, LOW); } void SHIMWrite(byte val) { DDRF |= (1<<PF2) | (1<<PF1); OCR3AH = 0x00; // Важно, вначале необходимо загрузить верхний регистр!!! OCR3AL = val; // затем нижний, Нельзя как для Atmega328 - OCR3A = topValue; OCR3BH = 0x00; OCR3BL = val; TCCR3A |= (1 <<COM3A0) | (1 << COM3B0) | (1 << WGM31) | (1 << WGM30); TCCR3B = (1 << WGM33) | (1 << WGM32) | 5; //TCCR3A=1 <<COM3A0 | 1<<COM3B0; // ПИН D2 + TXI //TCCR3B = (1 << WGM32) | 5; // Режим СТС WGM3[3:0]=4 или 12 } void loop() { SHIMWrite(100); delay(1000); }D2 не реагирует никак, а вот на TX есть сигнал, частота которого зависит от val, но ШИМ - скважность надо менять, а не частоту. В общем пока не получается.
15.2.3. Быстрый режим PWM
Когда установлено WGM3[3:0] = 5,6,7,14 или 15, счетчик/таймер 3 переходит
в быстрый режим ШИМ, то счетом максимального значения TOP являются 0xFF, 0x1FF, 0x3FF, ICR3 или OCR3A, он может быть использован для получения Высокочастотный ШИМ-сигнал. Разница между быстрым режимом PWM и другими режимами PWM заключается в том, что это односторонняя операция.
Разобрались!
void SHIMWrite(byte val) { DDRF |= (1<<PF2) | (1<<PF1); OCR3AH = 0x00; OCR3AL = val; OCR3BH = 0x00; OCR3BL = val; ICR3H = 0x00; ICR3L = 0xFF; TCCR3A = 0xA0; TCCR3B = 0x12; } void loop() { SHIMWrite(255); delay(10000); SHIMWrite(254); delay(10000); SHIMWrite(4); delay(10000); SHIMWrite(0); delay(10000); }Кто подскажет как LGT8F328 с кварцем на 16 мГц перевести в режим работы на 32 мГц.