@ru_arduino

Страница 64 из 7737
Petr
11.05.2016
13:35:14
хм хм хм да, понятно что это идеальнее

delayMicroseconds() does not use any counter, so it will work as normal https://www.arduino.cc/en/Reference/AttachInterrupt

т.е. это влиять не должно же

мб у меня два раза в полпериода прилетает прерывание кнеш

Google
Alexandre
11.05.2016
13:36:55
с чего бы только

помехи?

а, да

может быть, что и помехи

~hummingbirdwhocode
11.05.2016
13:37:30
мб у меня два раза в полпериода прилетает прерывание кнеш
Тыкнись в СКБ логическим анализатором прост.

Petr
11.05.2016
13:37:43
оно прибито гвоздями

Alexandre
11.05.2016
13:38:11
какая схема кросс-детектора?

~hummingbirdwhocode
11.05.2016
13:38:11
Пустой портфель решает проблему с географическим положением :)

Petr
11.05.2016
13:38:13
ладно, попробую найти оптопару с детектором ноля

какая схема кросс-детектора?
резисторы, диодный мост, 4n35

счас

Alexandre
11.05.2016
13:39:55
поставь последовательно со светодиодом оптрона 4N35 стабилитрон вольт на несколько в обратном включении

смысл в том, что возле "нуля" вольт дофига помех

Google
Alexandre
11.05.2016
13:42:11
или делай delayMicroseconds на 0,1-0,2мс в самом начале zero_crosss_int(), чтобы уйти из помеховой зоны до выхода из функции и начинай дергать ногу позже

я не верю, что во время симусоиды у тебя есть еще срабатывания

Alexandre
11.05.2016
13:46:27
а, еще кое-что

миллис() во время прерывания не работает

Petr
11.05.2016
13:47:02
останавливается т.е.?

Alexandre
11.05.2016
13:47:03
тупо не считает

да

Petr
11.05.2016
13:47:17
блин, вот почему они норм не пишут это

спс

тогда в ISR буду считать время прошедшее

и добавлять к volatile переменной

Alexandre
11.05.2016
13:47:55
https://www.arduino.cc/en/Reference/AttachInterrupt

Inside the attached function, delay() won't work and the value returned by millis() will not increment

Petr
11.05.2016
13:48:19
блин(

Alexandre
11.05.2016
13:48:32
на это время прерывания запрещены от слова совсем

поэтому все еще совет с флагом

Petr
11.05.2016
13:49:22
хз, я боюсь ифы сожрут 10микросекунд

Alexandre
11.05.2016
13:49:44
все не так плохо

kaktys
11.05.2016
13:49:50
А зачем так точно то ?

Google
Petr
11.05.2016
13:50:22
кмк надо тиристор открыть и ногу обратно в 0

Alexandre
11.05.2016
13:51:00
если ты это сделаешь на 0,05% полупериода позже - что будет?

Petr
11.05.2016
13:51:07
а, хз

ну типа если через 0 перейдет все, а тиристор откроется то диммер ж неочень

Alexandre
11.05.2016
13:52:22
диммер как работает? включает нагрузку в нужном месте полупериода, в конце она сама отключается

если ты ее включишь на 10мкс = 0,0005 от 20мс позже - потеряешь 0,05% нагрузки?

Petr
11.05.2016
13:53:55
а если тиристора управляющую ногу постоянно держать под 5вольт, то он не откроется после перехода через 0?

Alexandre
11.05.2016
13:54:15
емнип откроется

Petr
11.05.2016
13:56:10
ну тада если между преваниями вырубить не успеем то чот ниочень

Alexandre
11.05.2016
13:57:53
ты имеешь в виду, что всякие serial.print жрут время?

Petr
11.05.2016
13:58:22
ну да

Alexandre
11.05.2016
13:59:47
идея появилась - делать импульс запуска вторым таймером (еще один интеррапт)

Petr
11.05.2016
14:00:15
вариант

micros() works initially, but will start behaving erratically after 1-2 ms. микрос внутри прерываний работает нестабильно?

или что?

Alexandre
11.05.2016
14:02:59
емнип micros() и millis() внутри ISR перестают считать

ооо, прочитал, там засада!

The other answers are very good, but I want to elaborate on how micros() works. It always reads the current hardware timer (possibly TCNT0) which is constantly being updated by the hardware (in fact, every 4 µs because of the prescaler of 64). It then adds in the Timer 0 overflow count, which is updated by a timer overflow interrupt (multiplied by 256). Thus, even inside an ISR, you can rely on micros() updating. However if you wait too long then you miss the overflow update, and then the result returned will go down (i.e you will get 253, 254, 255, 0, 1, 2, 3 etc.)

забудь

Petr
11.05.2016
14:06:04
мде

Google
Alexandre
11.05.2016
14:06:31
если тебе не повезло и TCNT0 стоит на числе 254, то через 2*4мкс у тебя будет -254*4мкс (минус, Карл!)

или типа того, но как минимум через 255*4мкс все упадет, не позже

http://arduino.stackexchange.com/questions/22212/using-millis-and-micros-inside-an-interrupt-routine

Don't delay more than 500 µs or so, or you'll miss a timer overflow. Even short delays may cause you to you miss incoming serial data (at 115200 baud you will get a new character every 87 µs).

в общем, выводи любые задержки из ISR нафиг - best practice

Petr
11.05.2016
14:09:36
ясн

какой-нибудь TimerOne можно для такого заюзать?

Alexandre
11.05.2016
14:10:57
в порядке бреда - подавать "поджигающий" импульс на симистор через конденсатор - не вариант? :)

наверное можно, но легче тупо сконфигурить жлезный таймер через регистры

Admin
ERROR: S client not available

Petr
11.05.2016
14:11:40
а, кстати если я знаю сколько прерываний сработало, и какая задержка была каждый раз то я могу посчитать сколько микросекунд улетело в никуда

т.е. инкрементить волатиль переменную в прерывании временем задержки и все

и потом это учитывать

ну и потом делить на 10000 конеш

Alexandre
11.05.2016
14:12:33
с точностью до микросекунд? можно попробовать, но похоже на костыль ?

Petr
11.05.2016
14:12:42
ну костыль и есть

но подпереть - норм пока что

а дальше можно переписать все

Dmitry
11.05.2016
14:14:38
а подскажите и мне про ардуино. когда пытаюсь шить из родной IDE начало выдавать avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xa5 раньше все ок было. перешил бутлоадер по SPI — та же хрень. перекинул МК — та же хреть вытащил МК, замыкаю rx|tx — эхо проходит. куда копать?

Google
Dmitry
11.05.2016
14:16:00
эхо проходит, описался

Alexandre
11.05.2016
14:16:43
эхо проходит, описался
как при этом мигает L дуйня?

Dmitry
11.05.2016
14:16:49
так работало же. официальная плата, все дела. я с ней постоянно шилд дёргал туда-сюда правда

Dmitry
11.05.2016
14:17:31
как при этом мигает L дуйня?
без МК? горит в полнакала. если в МК зашить hardware\arduino\avr\bootloaders\atmega\ATmegaBOOT_168_atmega328.hex L мыргает

Alexandre
11.05.2016
14:17:38
так работало же. официальная плата, все дела. я с ней постоянно шилд дёргал туда-сюда правда
включи режим verbose на максимум в настройках и посмотри, в чем дело

Dmitry
11.05.2016
14:18:13
так вот вербос avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xa5 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xa5 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xa5

Alexandre
11.05.2016
14:18:17
без МК? горит в полнакала. если в МК зашить hardware\arduino\avr\bootloaders\atmega\ATmegaBOOT_168_atmega328.hex L мыргает
мыргает одинаково, независимо от того, шьешь (пытаешься) или нет?

Petr
11.05.2016
14:19:19
0x5a - хз в чем дело

Dmitry
11.05.2016
14:19:38
0x5a - хз в чем дело
там он разная бывает

Alexandre
11.05.2016
14:20:19
еще вопрос - бутлоадер чем шьешь? самой средой ардуины?

Petr
11.05.2016
14:20:33
И какой программатор?

Dmitry
11.05.2016
14:20:37
мыргает одинаково, независимо от того, шьешь (пытаешься) или нет?
не шью — мыргает раз в секунду начал шить — перестал мыргать, три раза вспыхнул RX и опять мыргает

Alexandre
11.05.2016
14:21:29
фюзы не забыл? разблокировать бутлоадерную память ручкаме не забыл?

выглядит как отсутствие ответа от бутлоадера

Страница 64 из 7737