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

ViKo

Модератор
  • Постов

    12 216
  • Зарегистрирован

Весь контент ViKo


  1. А сами почему-то скриптами пользуетесь... ;)
  2. Хотелось бы узнать у автора темы, почему у него "не заработали" два параллельно соединенных выхода. Это самое "правильное" решение для данной задачи. Зачем же усложнять схему с помощью транзисторов и др. буферов, если можно обойтись двумя ногами PICа.
  3. Видел схемы, делящие такты на 3, на 5, со скважностью 50% в бумажном журнале, издаваемом Xilinx. Но в интернете ничего такого не нашел.
  4. Так вы запутаете всех, включая себя. Емкость аккумулятора измеряется в Ампер-часах. Т.е., сколько часов аккумулятор может выдать определенный ток. Напряжение аккумулятора - отдельная характеристика. Устройство, подключенное к аккумулятору, потребляет от него какой-то ток. А напряжение остается все тем же - напряжением аккумулятора. Что там дальше делается в схеме с потребляемым током, не важно. Можно хоть в 3000V преобразовать. Важно знать, сколько тока будет потребляться от аккумулятора. Поделив емкость аккумулятора на потребляемый ток, получим время работы. Ну, конечно! :-) Относиться так, как и к любому другому элементу. Просто не забывать, что при питании от повышенного напряжения обычно потребляемый ток увеличивается. Вот об этом, видимо, и предупреждали вас два человека, и некоторые участники форума. К счастью, это только часть схемы, правильно?
  5. Емкость аккумулятора такой же и останется 2300 mAh. Если ваше устройство будет потреблять, например, 100 mA (уже с учетом всех преобразователей, стабилизаторов в т.п.), то от этого аккумулятора оно проработает 23 часа.
  6. А плюсовой? Не могли бы показать напряжение на обеих обкладках конденсатора относительно земли.
  7. Показано напряжение именно на конденсаторе? Между верхней и нижней обкладками? А как меняется напряжение относительно земли? Нужно ли такое автору темы?
  8. Блоки охранной сигнализации, например, могут переговариваться между собой на 433 MHz. В любой системе частота не занята постоянно, значит, есть вероятность приема чего-то непредусмотренного.
  9. К той схеме, что я показал, присобачить n-p-n транзистор, выдерживающий 350V: эмиттером на землю, коллектором к резистору, что идет на МОП-транзистор, а базой - к компаратору...
  10. Я все же в первую очередь подозревал бы команду, принятую с эфира (после той причины, которая КРОМЕ). С потерей содержимого флэш-памяти не сталкивался никогда. А вот по висящей в воздухе ноге Rx (USART) залетал хрен знает куда.
  11. И так как на 433 MHz работают все, кому ни лень, не исключается возможность, что ваше устройство воспринимает нечто с эфира, как команду к перепрограммированию. Было дело, устройство отказывалось работать в определенное время, в определенном месте. Возможно, оттого, что рядом парковались машины. И еще процессор в компьютере работал на 433 MHz. Других объяснений я не нашел. Если в программе есть функция стирания - перепрограммирования памяти, то рано или поздно в нее можно залететь.
  12. Я включал транзистор, как на моем рисунке :) Правда, коммутировал не 350V, а 12V. p-канальный транзистор открывается, когда напряжение на затворе становится ниже, чем на истоке. Т.е. закоротил цепь ON на землю - открыл транзистор.
  13. От стабилитрона и запитать, или от источника опорного напряжения. Всю схему я не подскажу, только идею.
  14. А полевиком, управляемым компаратором, сравнивающим напряжение на батарее с опорным от стабилитрона или источника опорного напряжения?
  15. Если внимательно пройдетесь по темам данного форума, и по приводимым в них ссылкам, то найдете не один десяток книг и др. документов по Verilog и VHDL. На русском, правда, мало. А "Языки VHDL и VERILOG в проектировании цифровой аппаратуры", по моему мнению, ясности в сознание не добавляет, скорее, наоборот. Как-то бессистемно все набросано. Но вывод, что удобнее (по крайней мере, мне) сделать позволяет. А упомянутый вами учебник - действительно, лучшее, что я видел на русском. Жаль, не до конца написан... и уже слегка устарел.
  16. Например, я - изучал, изучаю и буду изучать SV, и уходить не собираюсь... :) Как и большинство других, наверное. А VHDL - тоже листал (но не более).
  17. Есть книжка - Поляков А.К. Языки VHDL и Verilog в проектировании цифровой аппаратуры. Пролистав ее, я понял, что моё - Verilog (а сейчас SystemVerilog). Размер одного и того же исходного кода на VHDL всегда больше (~ на треть), чем на Verilog. Verilog близок к C. Скобочек фигурных у него для выделения блоков, к сожалению, нет (ибо есть блоки begin - end, а есть fork - join). upd. P.S. // Да за одни комментарии в C стиле я уже выбрал бы Verilog :)
  18. Обращал, но понял смысл только после вашей подсказки :). Спасибо!
  19. В файле startup_stm32f10x_hd.s имеется код: __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler ... DCD SysTick_Handler ; SysTick Handler ... SysTick_Handler PROC EXPORT SysTick_Handler [WEAK] B . ENDP В файле stm32f10x_it.c я создал следующий код: /** * @brief This function handles SysTick Handler. * @param Каждую 1 ms декрементируется переменная TimerTicks до 0 * @retval None */ void SysTick_Handler(void) { if(TimerTicks) TimerTicks--; } Вопрос - как в выходном коде появляется мой обработчик? Ведь в стартапе уже есть "заглушка", переход сам на себя.
  20. Я для себя написал следующий алгоритм конфигурации. Правда, это для Cyclone-II, но, может, пригодится. Времена будут другие. Проверьте, что у вас удовлетворяются все условия - по времени, по напряжениям. Вдруг на тактовом сигнале глитчи? * После включения питания Cyclone-II находится в состоянии сброса POR ~ 100 ms * В это время ПЛИС удерживает STATUSn и CONF_DONE низким, * а USER I/O в высокоимпедансном состоянии * ПЛИС сбрасывается низким уровнем на любом из выводов CONFIGn или STATUSn * Когда CONFIGn переводится из низкого уровня в высокий, сброс заканчивается * и STATUSn переходит в высокоимпедансное состояние (через Max 40 us) * Когда STATUSn отпущен, ПЛИС готова принять код конфигурации * (фронт такта через min 1 us). * VCCINT и VCCIO выводы должны быть запитаны требуемым напряжением. * Код из памяти пересылается в ПЛИС побайтно, до тех пор пока ПЛИС не отпустит * CONF_DONE, который за счет внешнего резистора станет высоким. * Данные защелкиваются в ПЛИС по фронту / тактов (период min 10 ns). * Первым посылается младший бит байта (LSB). * Никакого сигнала BUSY не выдается (успевает записаться за 10 ns?). * Такты DCLK после конфигурирования не влияют на ПЛИС. * Для тактов инициализации можно задать использовать CLKUSR * Или использовать внутренний тактовый генератор (~ 10 MHz) по-умолчанию * Требуется 299 тактов, допускается частота до 100 MHz * Такты CLKUSR не влияют на процесс конфигурации * Сигнал INIT_DONE, если используется, говорит об окончании инициализации * INIT_DONE становится низким после первого кадра конфигурации, * и устанавливается высоким после инициализации * После этого ПЛИС входит в USER режим * В USER режиме внутренние weak pull-up резисторы на user I/O отключаются * Если во время конфигурации случился сбой, STATUSn становится низким * и ПЛИС сбрасывает себя внутри * Для реконфигурации ПЛИС нужно подать низкий сигнал CONFIGn (min 40 us)
  21. А не лучше ли бороться и с причиной, и со следствиями? В меру своих возможностей и способностей. То, что вы пишете, хорошо и правильно, но для чего тогда в каждом процессоре стоит сторожевой таймер, например? От всех внешних воздействий не спасешься. Поэтому и нужно предусматривать выход из самой невероятной ситуации. И тогда будет "лучше всех :yeah: ".
  22. На этот вопрос я ответил http://electronix.ru/forum/index.php?showt...st&p=779719 Вы имели в виду "по левому"? Знак будет рисоваться в самой левой позиции. Я такого не хотел.
  23. Я пользуюсь библиотечной. Надеюсь, ее писали мастера. Да и используется функция однократно. Принципы, как нужно писать, здесь уже оговорены.
  24. Думаю, хуже не станет, если я доложу, что уменьшил количество тактов для преобразования -2147483647 в строку до 195. Жаль, что не байтов. void itoad(int32_t number, uint8_t *string) { *(uint32_t *)(string) = 0x20202020; *(uint32_t *)(string + 4) = 0x20202020; *(uint32_t *)(string + 8) = 0x00302020; string += 10; uint8_t sign = '+'; if (!number) return; if (number < 0) { number = -number; sign = '-'; } do { *string-- = number % 10 + '0'; } while (number /= 10); *string = sign; }
  25. Перепробовал все "извращения" со сравнениями и др. в надежде уменьшить количество байтов. Кто бы мне объяснил, почему в некоторых местах команда MOV r2,... кодируется двумя байтами, а в некоторых четырьмя? И не только эта команда. ;;;63 uint8_t sign = '+'; 000010 222b MOVS r2,#0x2b ;;;64 if (!number) return; 000012 2800 CMP r0,#0 000014 d010 BEQ |L1.56| ;;;65 if (number < 0) { 000016 da03 BGE |L1.32| ;;;66 number = -number; 000018 f1c00000 RSB r0,r0,#0 ;;;67 sign = '-'; 00001c f04f022d MOV r2,#0x2d |L1.32| ;;;68 } Как-то связано с операторами перехода по результатам сравнения. Как будто учитывается конвейер.
×
×
  • Создать...