Вы понимаете этот код? Точнее вам не лень посмотреть? Хочу проверить верно ли я все нашел и верны ли мои выводы по этому куску кода.
uint16_t x = 10000;
float y = 36.0;
void setup() {
Serial.begin(115200); // для чего устанавливать скорость передачи данных… Для будущей кнопки?
pinMode(9,OUTPUT);
TCCR1A=(1<<COM1A1)|(1<<WGM11);
// COM1A1 = 1, COM1A0 = 0 значит на выходе OS1A установится лог. 0.
// т.к WGM13 = 0, WGM12 = 0, WGM11 = 1, WGM10 = 0 поэтому режим работы Phase Correct PWM 9-bit счет идет до 511
TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS10);
// т.к WGM13 = 1, WGM12 = 1, WGM11 = 0, WGM10 = 0 поэтому режим работы – сброс по совпадению (СТС); счет идет до значения в ICR1
// т.к. CS10 = 1, CS11 = 0, CS12 = 0 поэтому такт таймера равен такту МК.
OCR1A = ((float) y / 0.0625 ) -1; // Задается рабочий цыкл???, но разве тогда формула не должна выглядить как то так: OCR1A = (F_CPU/x) / 4;
ICR1 = (F_CPU/x)-1; // Получим период
}
void loop() {
}
в оригинале (если бы ты посмотрел код DIMAX) параметры задавались через терминал, затем и инициализация порта…
Для настройки таймеров удобно пользоваться картинками, к примеру для таймера 1
Какой? Я не видел от Вас никакого кода. Если Вы про следующее сообщение, то там нет правильно вставленного кода.
Проверяйте на здоровье.
Я никогда не смотрю куски кода. Чтобы ответственно и квалифицированно посмотреть код, нужно иметь возможность его запустить. Поэтому код надо вставлять полностью (и правильно).
А поприколу
int output_pin;
int control_pin;
bool contr=0;
void setup() {
pinMode(output_pin, OUTPUT);
pinMode(control_pin, INPUT_PULLUP);
}
void loop() {
static unsigned long tim;
static byte _contr;
if((micros()-tim)>=(digitalRead(output_pin)?64:36))
{ if(!contr) digitalWrite(output_pin,!digitalRead(output_pin));
tim=micros();
_contr++;
}
if (_contr>=100)
{
_contr=0;
if(!digitalRead(control_pin))contr=true;
}
if (!digitalRead(control_pin)&&contr)contr=false;
}
ну это только ради прикола и то 12 строку надо исправить:
if((micros()-tim)>=(digitalRead(output_pin)?12:30))
оставим этот прикол ТС
Трудные у вас приколы. Ну на вечер есть теперь чем заняться, поизучаю ваши приколы. Надеюсь что до этого было, тоже не прикол
какой прикол, там осциллограмма выложена, всё как в ТЗ, а вот этот прикол, для того, чтобы понимал, что не через таймера не получится нормально
Как я понял прикол дословно:
Вычисляем разницу между текущим моментом и ранее сохраненной точкой отсчета и это значение должно быть больше или равно показаниям считанных с output_pin, у него есть условие, но я его так и не понял . А дальше пошла инверсия какая то непонятная и я потерял суть… И следующий понятный кусок это с булевыми функциями (вроде как)…
Для чего мне* тут инверсии…
формирование меандра
Первое что я нашел это: “Меандр” - против радиолюбителей XD
А означает условие 12:30? Это же условие?
А какие порты задействуются в этом случае, по сути они не указаны, значит берутся по умолчанию? А какие порты тогда по умолчанию и как их определить…
ищите и обрящете, прога рабочая хоя и не кошерная, выложил как базу для подумать, лучше читайте матчасть а не флудите, для строки 12
какие назначишь
const int LED_PIN = 5;
const int BUTTON_PIN = 2;
volatile int buttonState = 0;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
// Установите прерывание таймера на Timer1
noInterrupts(); // отключите все прерывания
TCCR1A = 0; // установите весь регистр TCR1A равным 0
TCCR1B = 0; // то же самое для TCR1B
TCNT1 = 0; // Инициализируйте значение счетчика равным 0
OCR1A = 16000; // Установите регистр сравнения совпадений на 20 мс
TCCR1B |= (1 << WGM12); // включите режим CTC
TCCR1B |= (1 << CS12); // Установите бит CS12 для 256-го прескалера
TIMSK1 |= (1 << OCIE1A); // включить прерывание сравнения по таймеру
interrupts(); // включить все прерывания
}
ISR(TIMER1_COMPA_vect) {
buttonState = digitalRead(BUTTON_PIN);
}
void loop() {
if (buttonState == HIGH) {
digitalWrite(LED_PIN, LOW);
} else {
digitalWrite(LED_PIN, HIGH);
delayMicroseconds(36);
digitalWrite(LED_PIN, LOW);
delayMicroseconds(16);
}
}
ТС, дорогой, ты нарочно не смотришь на экран? Ну можно простить невнимательность по первому сообщению, но уже 37-е! Ты в самом деле не видишь, как вставляют код? В каждой теме напоминание висит:
ВСТАВКА КОДА - ТРИ ОБРАТНЫХ АПОСТРОФА ``` ДО И ПОСЛЕ КОДА
Чукча не читатель - Чукча ПИСАТЕЛЬ !!!
да писатель из него тоже хреновенький