-
Постов
74 -
Зарегистрирован
-
Посещение
Достижения Вадим Куманов
-
@Starichok счетчик регистр это роли не играет, не в этом суть, все прекрасно поняли о чем речь, не стоит так сильно уделять этому внимание там два кода предоставил, с осциллограмами и каждый код подписан что в нем происходит, в одном коде только регистр В, в другом и А и В, нужно быть по внимательней. речь идет о поведении прерываний, почему при работе со счетчиком А ненужно сбрасывать счетный регистр и таймер работает как положено, а при работе с В регистром таймер срабатывает один раз и ждет пока вручную сбросишь счетный регистр. И почему при работе с двумя счетчиками приоритет переходит к счетчику А, а не работают как два отдельных прерывания, вот основная проблема а не то что я неправильно пишу счетчики таймеры регистры
-
@Starichok В регистре TIMSK0 есть биты отвечающие за прерывание только по сравнению OCIE0A и только по сравнению OCIE0B, и есть бит на переполнение TOIE0. Каким образом при установке бита только сравнение по OCIE0B, срабатывает вектор и по OCIE0А. А при установке OCIE0А срабатывает вектор OCIE0А и OCIE0В вне зависимости что указано в регистре OCR0В я знаю что таймер один, далее там писал про счетчики, это не столь важно. OCR0A закоментирована потому что работает только счетчик OCR0B а выше осцилограмма сигнала, там же все подписано.
-
Задача в том что бы отследить прерывание по faling на первом пине и отсчитать 700uS и на протяжение этих 700мкс не должно быть положительных фронтов, если хоть один будет то все заново
-
Проблема в том что таймер B некорректно работает хотя настроен с ног до головы, устанавливаю все нужные регистры, примерно рассчитываю тайминги в итоге таймер работает как попало. Наблюдения: При инициализации таймера он считает один раз до совпадения и больше не хочер, и так каждый раз при перезагрузки При обнуление регистра TCNT0 он начинает заново считать но тайминги не совпадают вообще(откудато с неба) При инициализации счетчика OCR0A прерывания срабатывают по вектору TIM0_COMPA_vect и по вектору TIM0_COMPB_vect Attiny13 работает на 1.2МГц, делитель для таймера 1 минимальный тайминг таймера 54uS таймиги смотрю логическим анализатором. #define DISABLE_SAFEMODE //#define INTERRUPT_SERIAL_RX void setup() { OSCCAL = 0x68; DDRB |= (1 << PB2)|(1 << PB4); PORTB &= ~(1 << PB2); PORTB &= ~(1 << PB4); /* GIMSK |= (1 << INT0); MCUCR &= ~(1 << ISC00); MCUCR |= (1 << ISC01);*/ TCCR0A |= (1 << WGM01); TCCR0B = (1 << CS00); OCR0A = 100; OCR0B = 25; TIMSK0 = (1 << OCIE0B) | (1 << OCIE0A); sei(); } ISR(INT0_vect) { } ISR(TIM0_COMPB_vect) { PORTB |= (1 << PB2); PORTB &= ~(1 << PB2); //OCR0B = 25; //TCNT0 = 0; } ISR(TIM0_COMPA_vect) { PORTB |= (1 << PB4); PORTB &= ~(1 << PB4); //OCR0B = 25; //TCNT0 = 0; } void loop() { } Вот работа только счетчика OCR0B без обнуления вручную TCNT0: Это с принудительным обнулением TCNT0: #define DISABLE_SAFEMODE //#define INTERRUPT_SERIAL_RX void setup() { OSCCAL = 0x68; DDRB |= (1 << PB2)|(1 << PB4); PORTB &= ~(1 << PB2); PORTB &= ~(1 << PB4); /* GIMSK |= (1 << INT0); MCUCR &= ~(1 << ISC00); MCUCR |= (1 << ISC01);*/ TCCR0A |= (1 << WGM01); TCCR0B = (1 << CS00); //OCR0A = 100; OCR0B = 25; TIMSK0 = (1 << OCIE0B); sei(); } ISR(INT0_vect) { } ISR(TIM0_COMPB_vect) { PORTB |= (1 << PB2); PORTB &= ~(1 << PB2); //OCR0B = 25; TCNT0 = 0; } ISR(TIM0_COMPA_vect) { PORTB |= (1 << PB4); PORTB &= ~(1 << PB4); //OCR0B = 25; //TCNT0 = 0; } void loop() { } Расчетные тайминги для A - 83uS B - 20uS расчеты грубые, сильно не пинайте. При работе только счетчика A тайминги правильные с погрешностью 3uS
-
@Roll-o-matic В этом посте я описываю теорию а не утвердительные факты. В сети амплитуда 310В всегда по разному, броски напряжения могут быть и больше, у драйвера тоже есть свои максимальные входные параметры, не думаю что там стоят драйверы на 800В, вот и теория о том что драйвер может не справиться с таким напряжением
-
@Roll-o-matic выгорел светодиод, это типичная поломка для всех ламп такого типа, драйвер там стоит хороший. через какое-то время вообще перестал запускаться, драйвер запускается но уходит в защиту. смысла его ремонтировать не вижу, буду покупать новый и не один, включаться будут часто от датчика движения или команды умного дома там свои алгоритмы, вот и думаю как сгладить пусковые моменты
-
@Alex91 Да конечно драйвер сам ограничивает ток, но всему есть предел, броски напряжения могут быть разной амплитуды, прошлый мой светильник отработал год хотя покупал хорошего качества и не дешевый, изза нестабильного напряжения он и вышел из строя, хотя такой же светильник купленый в то же время работает уже около 3х лет но в другом месте
-
Суть такая что бы светодиодные лампы питающиеся от сети 220В запускать только при переходе через 0, таким образом уменьшить нагрузку на драйвер светодиода, ведь мы же не знаем когда там 0 а когда максимальная амплитуда питающего напряжения. Если драйвер будет стартовать с примерно 0 вольт то ему проще будет стабилизировать ток и напряжение нежели при пуске с 300 вольт от сети, работу должен обеспечивать оптосимистор с детектором нуля, напряжение будет подаваться только после перехода через 0. Что скажете заморачиваться со схемой?
-
@mihelson потому что на ризисторах будет падать напряжение соответсвенно амплитуда входного сигнала уменьшится и это повлияет на основную схему с которой сигнал подворовываеться, даже изменение на 0.5В критичны, а входы компаратора имеют очень несущественное влияние. использование высокоомных резисторов привет к наводкам, использлвание низкоомных резисторов приведет к протеканию сигнал по новой цепи из резисторов менуя основную схему куда сигнал должен идти. @vrytsev какого транзистора? в компараторе? в даташите на компаратор написано до 36В
-
Какое напряжение подавать на входы LM393 для сравнения
Вадим Куманов опубликовал тема в Песочница (Q&A)
вопрос вот в чем можно ли подать повышенное напряжение на входы даного компаратора, суть в том что нужно воровать сигнал с наименьшим влиянием на схему и сам сигнал и плюс сразу этот сигнал конвертировать по уровню. компаратор будет питаться от 3В на не инвертирующий вход будет тоже подаваться 3В, а на не инвертирующий будет подаваться 12-14В напрямую что бы не использовать резисторы делители так как они повлияют на сигнал, транзистор тоже может повлиять на сигнал и тд. по идеи все должно работать как и задумано но так же хочется знать мнение и других радиолюбителей. -
@alend операционник будет обрезать все что ниже порога КУ или 0, двух полярное питание не хочу городить придеться переделывать всю схему @jam_yps не совсем понимаю как реализовать такую схему правильно, после конденсатора сигнал уже станет переменным а операционник обрежет все что ниже 0 @jam_yps вот что операционник делает
-
@jam_yps я же написал убрать постоянную с сигнала, соответственно амплитуда на выходе от 0 до 4 или 5 вольт это уже не важно, мне нужна точка отсчета от 0. резистором на плюс и базу преоткрываю базу что бы избежать порога включения транзистора 0.6В, конечно же пытаюсь подобрать резисторы так что бы транзистор не уходил в насыщение сразу, но ничего не выходит, или симулятор не может это симулировать @IMXO кого поставить? сигнал приходит с амлитудой 2-5В, а нужно от 0 и хотябы до 4В там это уже не важно
-
Как избавиться от постоянной составляющей в сигнале
Вадим Куманов опубликовал тема в Песочница (Q&A)
Доброго дня Нужно обработать сигнал, но он незначительный и приходит с постоянной составляющей, установил разделительный конденсатор - сигнал стал переменным, подтянул базу транзистора, немного приоткрыл его. Вроде как должно работать но по факту на выходе прямоугольные импульсы так как транзистор не повторяет сигнал а работает в ключевом режиме, открываеться выше 0.6В