Jump to content

TWIN

Members
  • Content Count

    94
  • Joined

  • Last visited

Community Reputation

2 Обычный

About TWIN

  • Rank
    Осваивающийся

Информация

  • Пол
    Мужчина
  • Город
    Украина, Харьков.
  1. Однозначно! Но человеку нужно "подогнать" индуктивность дросселя, а таймер у него нужный уже есть под рукой СтОит ли собирать что-то серьёзнее, чем временный и "быстрый" вариант? Впрочем, решать не мне...
  2. Проблема, скорее всего не в "обвесе", а в дросселе. "Обвес" как раз задает частоту на которой работает дроссель... А Вы уверенны, что поставив на первое место критерий компактности устройства, получится вообще собрать его работоспособным по заданным характеристикам? Ну, и раз просите совет, то: А попробуйте сначала повторить схему как в описании, с "правильным" дросселем, а не "места мало..." или "сколько влезло..." или "на гантельке витков 20...". Дело в том, что в этом устройстве самая главная деталь - дроссель. От него полностью будет зависеть результат. И у него должна быть четко просчитанная (для конкретной схемы) индуктивность, ну, можно чуток больше. Если нечем померить индуктивность - для решения этой проблемы соберите хотя бы что-то наподобие: http://nice.artip.ru/?id=doc&a=doc99 P.S.: А про какую-то прежнюю зарядку и от чего она работала и про 50гц я вообще не понял ничего... И еще... Раз Вы боретесь в первую очередь за "компактность" к Вам еще один вопрос: какова суммарная емкость входных конденсаторов и суммарная на выходе?
  3. У Вас где-то системная ошибка (проблема)... Ну я даже не знаю, может, и с дросселями косяки, хотя перемотали уже кучу вариантов... Только какие-то нелепые варианты приходят в голову. Вот, кстати, расскажите к какому тестовому БП вы подключаете свой девайс и какими проводами (сечение)?
  4. Вот! Уважаю мнения людей с реальными предложениями, а не рекомендациями изучения новых языков программирования... Да я вот тут прикинул... Поскольку ADC-преобразования, обмен по TWI и 1-wire происходят 1 раз в 0,5с (раз в 8млн тиков) и причем последовательно, а почти максимальная частота возникновения внешнего прерывания от датчика скорости находится в районе 200Гц... Вобщем, думаю просто убрать явное запрещение прерываний в выдержке таймингов 1-wire. Сдается мне, что это аж никак не приведет к сбоям обмена данными (1-wire) в моём конкретном случае... Ну, если быть справедливым, то в даташите меги: Real Time Counter (RTC) в даташите DS1307: Real Time Clock (RTC) Что, уверен, по сути одно и то же и не стоит даже спорить, не так ли? Только не думаю, что в моем случае это удобное решение вопроса
  5. К сожалению, с АСМом я совсем не знаю Единственный операнд, который мне знаком - NOP Очевидно, Вы на него мне и намекаете? А читал внимательно Ну если Вы не в курсе что такое IAR, значит, видимо, вопрос был не к Вам А то, что у МК нет часов, простите, я и без Вашего предположения в курсе... И в курсе, что считают таймеры...
  6. Вопрос остается без ответа... Каким образом в IAR реализуется задержка __delay_cycles? Ну очень явно почему-то в названии указаны циклы! Почему? "Удобнее" (на первый взгляд) было бы сделать задержку с понятным временным интервалом в названии. Ну не спроста же?! А?
  7. Да читал я... Давно уже на винте... Ну, про таймеры счетчики, допустим загнул я... Ну, естественно, что отдельные модули (устройства) микроконтроллера, с использованием общего тактирования... Кстати, в ДШ упомянут несколько раз программный счетчик, о котором ничего подробно, он 16-битный. Но, как я понял он используется для адресации внутри программы МК. Т.е. не то... Да, и еще... Я вообще-то именно на АТмеге 128 девайс и собираю - в начале темы сказано
  8. Сейчас врядли найду, но когда-то вычитывая даташит что-то подобное отложилось в памяти. А как Вы думаете реализовано прерывание по переполнению? Это же не подпрограмма какая-то в МК по подсчету тиков. Иначе, логично было бы предположить, что какое-то время (такты) отъедалось бы на ее исполнение
  9. Ответов нету... Может я задаю просто глупые вопросы? Или сложные? Видимо, придется реализацию строить по методу проб и ошибок... Что ж, начну просто с __delay_cycles, без запрета прерываний. Посмотрю на результат. Жаль только что до установки девайса на автомобиль еще далековато - нескоро испытания
  10. Кстати, а кто-нибудь знает как реализована в IAR задержка __delay_cycles? В чем, собственно, мысль - если эта функция сравнивает задержку именно с внутренним счетчиком тактов процессора, то нет необходимости делать задержки через таймеры...
  11. В программе задействован сейчас только один таймер по переполнению - для обновления информации с датчиков. Еще один таймер будет использован в режиме ШИМ для регулировки подсветки LCD. Т.е. 2 уже железно "заняты" и третий таймер для реализации задержек 1-wire. Остается еще один свободный... Пока планов по его использованию нет... Но, в принципе, можно использовать для рассчета скорости движения, хотя планов делать электронный спидометр нету...
  12. И все-таки, никто не отписался по поводу идеи делать тайминги 1-wire через таймеры? Думаю, если произойдет одно или несколько внешних прерываний (в теле которых будет только инкремент) во время временной задержки 1-wire не повлечет ощутимого отклонения. Как думаете?
  13. Уважаемые, ну выскажитесь по теме, пожалуйста!
  14. А если все-таки по теме? Про приоритет прерываний я то в курсе... Я так понимаю, самое проблемное в моём случае - это решить вопрос с запрещением прерываний во время "задержек" (таймингов) протокола 1-wire? В принципе, конечно можно заморочиться делать эти задержки через прерывания по таймеру... Тогда отклонения в таймингах (из-за вызова по внешнему прерыванию) от необходимых будет совсем небольшим (но, теоретически возможны). Мысль такая: просто сделать таймер, например, на 2us и запускать его в необходимые моменты. Этим таймером инкриментировать переменную-счетчик, сравнивая в функции (в которй нужно сделать задержку) с необходимым значением нужной в данный момент задержки. Например: unsigned int counter=0; f() { 1. нужна заержка 500us 2. запускаем счетчик с переполнением в 2us while(counter<250) {} // Ничего не делаем, пока не пройдет 500us (250x2us) counter = 0; 3. останавливаем таймер. 4. делаем то, что необходимо после задержки (читаем состояние пина и пр...) } timer_interrupt() // обработчик прерывания по переполнению таймера (2us) { counter++; } Как Вам такое решение? 2us - это минимальный интервал (тайминг) для обмена протокола 1-wire... И еще... При тактовой частоте меги 16МГц - 2us это 32 тика. Будут ли какие-то поправки или мысли связанные с этим моментом?
×
×
  • Create New...