Генератор с раздельной регулировкой длительности 0 и 1
- Войдите на сайт для отправки комментариев
Чт, 06/04/2017 - 15:01
Может кто подбросит код готовый ?
Везде только меандры да ШИМы
Может кто подбросит код готовый ?
Везде только меандры да ШИМы
Если нет готового,подскажите как удобнее это реализовать на встроеном milis или другие таймеры подключать
или может библиотеку Timerone использовать ?
длительность 1..100мс как для "0" так и для "1"
пока использую прерывание по совпадению но чёт получается больше 1мс,точнее 1.024мс длительность импульса
OCR0A = 0xAF; TIMSK0 |= _BV(OCIE0A); ISR(TIMER0_COMPA_vect) { PORTB ^=(1<<2); }проще всего на micros() (см. блинк без делэй)
ногами дрыгать напрямую или либой CyberLib (что одно и то же)
selevo, тыц
оо круто но ...
неработает почему-то
void setup() { pinMode(9,OUTPUT); TCCR1A=(1<<COM1A1)|(1<<COM1A0); TCCR1B=(1<<WGM13)|(1<<CS12)|(1<<CS10); OCR1A=1; ICR1=0; } bool trigger1; void loop() { if (!trigger1) { ICR1= 300; OCR1A= 300; trigger1=1; } //OCR1A=100; ICR1=100; }selevo, конечно не работает. А разве должен? Вы выкинули мой код и вснули свои параметры не понимая их смысл.
ну мне то нужно только вывод,я его только и оставил. С куском терминальным и с вводом ,работает...
вообще не понятно работает... такого режима нет в описании при котором сравнивается с начала с одим потом с другим, OCR1A и ICR1. Это какое-то колдунство.
как тогдаа сделать чтобы посто переменными a и b задавать длительность ?
как тогдаа сделать чтобы посто переменными a и b задавать длительность ?
Так всё уже было сделано в моём коде, переменные x и y задавали длительность единицы и ноля на выходе.
спасибо большое,работает,туплю сильно...
мне бы твои нервы боярин... )))
Рабочий код:
(дя увеличения точности перестройки, можно делить и на 1 вместо 1000 в обеих строках и шаг будет 1мкс но не менее 128 исходя из деления на 128)
void setup() { Serial.begin(9600); pinMode(10,OUTPUT); pinMode(9,OUTPUT); TCCR1A=(1<<COM1A1)|(1<<COM1A0); TCCR1B=(1<<WGM13)|(1<<CS12)|(1<<CS10); OCR1A=1; ICR1=0; bool volatile trigger1; uint16_t x = 13; uint16_t y = 20; ICR1= (uint32_t) (x+y) *1000/128; OCR1A= (uint32_t) y*1000 /128; } void loop() { }Так всё уже было сделано в моём коде, переменные x и y задавали длительность единицы и ноля на выходе.
Всё таки никак не могу понять где описание такого режима работы таймера было найдено ?
я весь PDF перерыл
10 раз
selevo, не знаю, что вы подразумеваете под описанием, даташит крайне скуп на подробности. Это режим №8 в таблице "Waveform Generation Mode Bit Description"