Перейти к содержанию
    

Зависание микроконтроллера

2Flasher, я действительно неправ с пунктуацией в первом посте -приношу извинения.

 

схема, софт?невопрос

 

 

чета в одном посте не добавилоpost-28718-1209679377_thumb.jpg

Изменено пользователем smalcom

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуй подключить к схеме аккумулятор или крону, решает вопрос о помехе в питании и погоняй девайс. А вообще в качестве стабилизатора, я бы использовал ШИМ + танталы по цепи питания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

схема, софт?невопрос

Критика схемы:

Зачем нужно- пояснять не буду- хто знает- сам поймет.

1) МАХ232 - со стороны PC последовательно резисторы 100 Ом и кондеры 100пик между выходом и входом максимки.

2)С15 убрать, С13 уменьшить до 4,7мкф

3)Вход 12 вольт на кренку пустить через резистор пару ом. Параллельно входу кренки поставить что-то типа 1,5КЕ18А

4) вместо 6N137 можете еще глянуть в сторону H11L1

5) внешний супервизор- ну просто нах не нужен.

6) Набуя там hc245 - науке неизвестно...

Про все остальное- автор может в асю стукнуть при желании- поможем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это компьютерный блок питания. В большинстве случаев товарищи даже и не знают, что пытаются запитать свою технику от драндулета, на корпусе которого в незаземленном варианте присутствует 110 Вольт

Хм... А сколько там, по-вашему, ДОЛЖНО БЫТЬ, в незаземленном варианте-то? И какое сопротивление было у мультиметра, котрым вы намеряли эти 110 В?

 

 

Критика схемы:

Некоторые моменты в схеме позволяют уверенно утверждать, что автор схемы не читал статью "Помехоустойчивые устройства"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хм... А сколько там, по-вашему, ДОЛЖНО БЫТЬ, в незаземленном варианте-то? И какое сопротивление было у мультиметра, котрым вы намеряли эти 110 В?

Некоторые моменты в схеме позволяют уверенно утверждать, что автор схемы не читал статью "Помехоустойчивые устройства"

Открываем схему любого компового блока питания. На входе между фазовым и нулевым проводом стоят на корпус(который должен подключаться к заземлению) конденсаторы 4700 *2kV. Для переменного тока частотой 50Гц эти конденсаторы имеют реактивное сопротивление = 1 / (2 * Pi * F * C) 670кОм.

Образуется делитель напряжения , со средней точкой на корпусе, если его не заземлить. Китайский мультиметр имеет входное сопротивление несколько Мом...дальше объяснять?

 

 

Насчет второго замечания- когда сможете изготовлять устройства с 4 группой жесткости по электромагнитной совместимости- обсудим тонкости за баночкой пива вместе :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2Flasher, я действительно неправ с пунктуацией в первом посте -приношу извинения.

 

схема, софт?невопрос

чета в одном посте не добавилоpost-28718-1209679377_thumb.jpg

По схеме можно сказать одно, половину деталей можно смело выкинуть в результате хватит и 88меги, а вот то что необходимо на схеме не наблюдается. Особенно умиляют подтяжки на 485 - 47К, а так же транзистор. который и нафиг там не нужен, да и резисторы по SPI - 4,7К внушают уважение :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дальше объяснять?

Да. Пожалуйста, не останавливайтесь на полдороги. Недоговоренности могут привести к ошибкам.

 

Насчет второго замечания- когда сможете изготовлять устройства с 4 группой жесткости по электромагнитной совместимости- обсудим тонкости за баночкой пива вместе :)

Я дал ссылку на статью, которую, насколько я могу судить, автор схемы не читал, но которую ему, как мне кажется, полезно было бы прочесть. Объясните, каким таинственным образом моя рекомендация почитать статью связана с тем, прошли ли мои изделия испытания на 4 группу или нет? Пока что речь идет о том, что устройство и на 1 группу не тянет, поскольку зависает даже при очевидном отсутствии внешних помех.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да. Пожалуйста, не останавливайтесь на полдороги. Недоговоренности могут привести к ошибкам.

Я дал ссылку на статью, которую, насколько я могу судить, автор схемы не читал, но которую ему, как мне кажется, полезно было бы прочесть. Объясните, каким таинственным образом моя рекомендация почитать статью связана с тем, прошли ли мои изделия испытания на 4 группу или нет? Пока что речь идет о том, что устройство и на 1 группу не тянет, поскольку зависает даже при очевидном отсутствии внешних помех.

Рекомендацию принял на свой счет :) Так что ссори, если что не так. Статья довольно жиденькая и многие ошибки она никак не поможет найти. Поэтому максимум- пару выводов автор может взять на будущее. здесь больше вопрос целесообразности схемотехнических решений.

Продолжу про БП. Корпус его во многих реализациях соединен с общим проводом выходных цепей, а уж если он находится в компьютере- то тем более соединен. Таким образом на устройстве присутствует потенциал половины сетевого напряжения относительно заземления и всего что не имеет этого потенциала. Ток КЗ между землей и корпусом 110В/680 Ком. -десятые доли миллиампера. Так что при касании устройства чем-то еще пойдет ток через схему либо до уравнивания потенциалов либо постоянно. Отчего схема, конечно , может обидется...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Особенно умиляют подтяжки на 485 - 47К, а так же транзистор. который и нафиг там не нужен,

Подтяжки как подтяжки... Вы зато посмотрите на супернавороченный "терминатор"! :lol: При таком терминаторе (с высоким импедансом на постоянке) хватит и 47К.

 

Теперь насчет транзистора. Как я вижу, изолированное питание для RS-485-ой части ("+5Viso") схема получает отдельно, по одному кабелю с самой линией? Мы с таким сталкивались. Получается, при отрубании питания процессорной части с сохранением питания линии выход оптрона включения драйвера (в данной схеме "ISO2") в "неактивном" состоянии, т.е. транзистор оптрона закрыт, и если он напрямую подключен к DE драйвера RS-485, то подтяжка к "+5Viso" заставляет драйвер включаться на постоянную передачу.... :maniac: Весь обмен на линии останавливается, объект стоит, электрики бегают, операторы матерятся, мастера смены пинают программистов... :1111493779: ...И все это из-за отсутствия инвертора между выходом оптрона и входом DE драйвера RS-485. Разработчики этой схемы, судя по наличию инвертора (в виде Q1) тоже с такой проблемой сталкивались :beer: . Другое дело, что "забыли" КРЕНку сделать на "+5Viso", а по линии подавать вольт 12, но это уже другие проблемы...

 

У нас, например, сделан в каждом модуле на питание RS-485 персональный DC/DC от основного питания всей схемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Продолжу про БП. Корпус его во многих реализациях соединен с общим проводом выходных цепей, а уж если он находится в компьютере- то тем более соединен. Таким образом на устройстве присутствует потенциал половины сетевого напряжения относительно заземления и всего что не имеет этого потенциала.

Угу. Странно было видеть, что в своем исходном посте вы преподносите это как открытие, как удивительное и мало кому известное откровение.

 

Следующий шаг. В своем исходном посте вы особо выделяете и все время подчеркиваете, что речь идет о БП компьютера. Создается впечатление, что БП компьютера в этом смысле является чем-то особым, выдающимся. Так ли это?

 

Какое напряжение вы ожидаете увидеть между землей и вторичной если возьмете обычный трансформатор 220В 50Гц? А если возьмете маломощный импульсный блок питания, тапример, так наз. "plug pack" (т.е. маломощный БП, совмещенный с сетевой вилкой)?

 

Отчего схема, конечно , может обидется...

Как вы думаете, может ли "обидеться" схема, если вместо БП компьютера используется любой другой БП (конечно, при прочих равных, т.е. при отсутствии заземления)?

 

6) Набуя там hc245 - науке неизвестно...

Судя по тому, что проц может управлять их направлением, они используются и как входные буферы, и как выходные драйверы типа "с открытым эмиттером". Особой науки в этом нет, просто надо схемы научиться читать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу транзистора в 485 тута уже объяснили)) таки были проблемы с переходом в состояние передачи.

HC245 нужны для того чтобы они выгорали - их легче менять чем атмегу, плюс вместо них можно ставить улн2803.

Подтяжки на 485ом на 47к нужны чтобы при переходе всех модулей в режим приема линии не принимала нестабильных состояний.

 

Почему не пущено по линии 12В, почему нет защиты от переполюсовки питания? Провтыкал, када управляющие звенья начинают вмешиваться и когда "быстрей, быстрей,быстрей".

 

По поводу оптрона - посмотрю, сенк.

Резисторы в цепи 232, угу я в курсе про них, но данные железяки используются в нестандартных местах... К примеру кабель с 232-м до следующего устройства может быть 5,7,15 метров.

 

Супервизор зачем? Я - параноик)

 

У нас, например, сделан в каждом модуле на питание RS-485 персональный DC/DC от основного питания всей схемы.

тоже так хотел, уже и накидал схемку, как вдруг:

Я: шеф пали какая железяка у нас терь будет!

Шеф: должно быть маленькое и дешевое!

Я: Ммм, ладно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если комуто вдруг интересно будет(тк как в асме я не силен) ложу три сгенеренных компиляторами файла

linavr_new - gcc-4.3.0 + binutils-2.18 + libc-1.6

linavr_old - gcc-3.4.6 + binutils-2.15.92.0.2 + libc-1.4.6

winavr - gcc-4.1.2 + binutils-2.17 + libc-1.4.6

 

Прблема вот здесь (castet_switch_rs1.7ucom.linavr_new.lss):

SIGNAL(_VECTOR(10)) //4.4ms
{
     97a:    1f 92           push    r1
     97c:    0f 92           push    r0
     97e:    0f b6           in    r0, 0x3f; 63
     980:    0f 92           push    r0
     982:    11 24           eor    r1, r1
     984:    8f 93           push    r24
     986:    df 93           push    r29
     988:    cf 93           push    r28
     98a:    cd b7           in    r28, 0x3d; 61
     98c:    de b7           in    r29, 0x3e; 62
    TickVal1s++;
     98e:    80 91 56 03     lds    r24, 0x0356
     992:    8f 5f           subi    r24, 0xFF; 255
     994:    80 93 56 03     sts    0x0356, r24
    TickVal50ms++;
     998:    80 91 55 03     lds    r24, 0x0355
     99c:    8f 5f           subi    r24, 0xFF; 255
     99e:    80 93 55 03     sts    0x0355, r24
    //input devices
    Inputs_Test();
     9a2:    0e 94 52 08     call    0x10a4; 0x10a4 <Inputs_Test>
    Usart0_FF();

 

При в ходе в обработчик прерывания сохраняються регистры r1, r0, SREG, r24, r29, r28. Дальше по коду идет вызов функции Inputs_Test, которая:

void Inputs_Test(void)
{
    10a4:    df 93           push    r29
    10a6:    cf 93           push    r28
    10a8:    cd b7           in    r28, 0x3d; 61
    10aa:    de b7           in    r29, 0x3e; 62
    if((IN_PORT & (0x01 << COIN_IN)) == 0) //if high level on input1 pin
    10ac:    e9 e3           ldi    r30, 0x39; 57
    10ae:    f0 e0           ldi    r31, 0x00; 0
    10b0:    80 81           ld    r24, Z
    10b2:    88 2f           mov    r24, r24
    10b4:    90 e0           ldi    r25, 0x00; 0
    10b6:    81 70           andi    r24, 0x01; 1
    10b8:    90 70           andi    r25, 0x00; 0
    10ba:    00 97           sbiw    r24, 0x00; 0

Изменяет регистры r31, r30, r24, r25.

 

Тоесть, обработчик прерываня сохраняет не все регистры которые в нем изменяються.

 

gcc-4.1.2 генерирует правильный код:

SIGNAL(_VECTOR(10)) //4.4ms
{
     9ee:    1f 92           push    r1
     9f0:    0f 92           push    r0
     9f2:    0f b6           in    r0, 0x3f; 63
     9f4:    0f 92           push    r0
     9f6:    11 24           eor    r1, r1
     9f8:    2f 93           push    r18
     9fa:    3f 93           push    r19
     9fc:    4f 93           push    r20
     9fe:    5f 93           push    r21
     a00:    6f 93           push    r22
     a02:    7f 93           push    r23
     a04:    8f 93           push    r24
     a06:    9f 93           push    r25
     a08:    af 93           push    r26
     a0a:    bf 93           push    r27
     a0c:    ef 93           push    r30
     a0e:    ff 93           push    r31
     a10:    cf 93           push    r28
     a12:    df 93           push    r29
     a14:    cd b7           in    r28, 0x3d; 61
     a16:    de b7           in    r29, 0x3e; 62

 

Прада зачем было нужно лесть с отверткой в кварц я не понял.

 

Анатолий.

Изменено пользователем aesok

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

HC245 нужны для того чтобы они выгорали - их легче менять чем атмегу, плюс вместо них можно ставить улн2803.

Хм... Вы в курсе, что ULN2803 имеют выходы с открытым коллектором, т.е. ток нагрузки втекает в выходы, а то, что у вас нарисовано на выходе 245-х дает вытекающий ток? Странные у вас "замены".

 

Подтяжки на 485ом на 47к нужны чтобы при переходе всех модулей в режим приема линии не принимала нестабильных состояний.

Приемники RS485 всегда имеют петлю гистерезиса (т.е. являются триггерами Шмитта). Поэтому для них принципиально не существует "нестабильных состояний", их выход стабильно находится или в 0, или в 1.

 

Я догадываюсь, что говоря о "нестабильных состояниях" вы на самом деле имели ввиду "неопределенные состояния". Действительно, когда все приемопередатчики RS485 находятся в режиме приема, и разность напряжений между сигнальными линиями мала, на выходе любого приемника может быть как 0, так и 1, заранее сказать нельзя, что именно. При этом даже малая помеха, наведенная на линию связи, способна вызвать переключение и инициировать начало прииема ложного пакета данных. Для определенности и уменьшения влияния помех предпочтительно использовать приемопередатчики с так наз. failsafe фичей. Читайте аппноту TI Interface Circuits for TIA/EIA-485 (RS-485), там это подробно разобрано начиная со стр. 2-5. Обратите внимание на рекомендуемые номиналы резисторов подтяжки.

 

Навешивая подтягивающие резисторы или используя failsafe приемники, вы не избавляетесь от неопределенности сигнала на входе UARTа в паузах между пакетами. Эта неопределенность уменьшается, но не исчезает. При мало-мальски мощной наведенной помехе вы опять получите на входе UART-а то, что вам не хотелось бы видеть.

 

Вообще же требование на наличие failsafe (самопального или встроенного) является верным признаком того, что или используется дурной самопальный протокол обмена, или же нормальный протокол реализован программистом с грубыми ошибками. В любом случае помехоустойчивость обмена будет примерно в сотню раз хуже, чем могла бы быть, если бы, например, был использован грамотно реализованный Modbus RTU. Хорошему протоколу совершенно по барабану, каково состояние приемников, когда на линии нет драйвера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подтяжки драйвера RS-485, кстати тоже неправильно сделаны. Линия A должна подтягиваться к "+", B - к общему ("-"), а не наоборот.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подтяжки драйвера RS-485, кстати тоже неправильно сделаны. Линия A должна подтягиваться к "+", B - к общему ("-"), а не наоборот.

Имейте ввиду, что оптрон инвертирует сигнал.

 

Однако, даже если бы он не инвертировал. Объясните, почему, собственно, на входе UARTа вам хочется в паузах между пакетами видеть высокий уровень, а не низкий. Зачем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...