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

&y JOKER

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный
  1. В общем попробовал 8, 10 и 13 МГц с разной обвязкой. Ничего не изменилось. Таки есть предположение, что контроллер заводится, но чего-то ждет. Вывод такой напросился сам собой: при питании от аккума - на подключение щупов не реагирует, хотя тактовая есть. От встроенного имп. БП при тыканьи щупом - та же тактовая, но только он признаки жизни подает-моргает там, пишет на LCD. Наводка через OSC1 на входные порты? Уже из принципа буду доковыривать, придется схему черного ящика рисовать, т.к. ни описухи, ни мануала на девайс нет. :(
  2. Приветствую всех! Притащили плату от девайса. На ней 4 кнопы, мелочевка и PIC18F6720, который управляет по шине LCD дисплеем 16x2 (С216x05). Кварц по схеме: По маркировке инфу раскопать не удалось: "S8A000D7". В один прекрасный день девайс просто взял и умер. На кнопки не реагирует, на экране верхний ряд включен. Поковырямшись ткнул осциллом в OSC1, он вроде как завелся и даже чето нормально написал на экране. Тактовую увидел. Выкл/вкл - опять молчит. Думал мож по питанию чего. Померял 4,85 V. Дал напрямую на ноги 5,5 V от аккума через LM338 - опять тишина, но от щупов осцилла запускается вроде как. Ладно, думаю, у осцилла 40 pF 1 MOhm (древний с1-72), мож емкости в обвязке поменять. Ставил и 15 и 22 и 39 pF - не хотит стартовать. Пробовал выкидывать резюк из обвязки, менял кварц на 20 MHz - ему пофигу. Запускается токо када щупами тыкаешь. Трещин, сколов нет, все чистенько. Думаю, извращаться - так до конца уж. Взял тактовую 20 MHz с CLKO от Меги88, дал ему на OSC1. Опять только от щупа запускается. Шить-не вариант. Фактически уверен, что на чтение защита. Встроенного RC-гены у него нет, чтобы уж наверняка проверить. Вопрос: мог-ли вылететь каскад тактовой на чипе? Операционник там или еще чего... Или это исключительно проблема в обвязке? Просто странно как-то, плата-далеко не ручная поделка, работало - никого не трогало... Единственное что не совсем понравилось в разводке - кварц SMD (на площадке) в 1,5 см от камня, ноги от кварца к дорогам под прямым углом, земли рядом нет. Но все равно это не повод отказываться запускаться. У меня мега88 вообще на 20 MHz на соплях с первого раза запустилась. Последний вариант, попробовать прошить фьюзами на RC-генератор разве что... Да, иногда даже запускается если тыркаешь щупом отключенным от осцилла. p.s. номиналы родного кварца и кондеров не известны, померять нечем :( Чего-нить еще можно придумать, чтобы запустить?
  3. Ыыы, хочу! :rolleyes: (ушел читать про FPGA).
  4. эээ, видимо я не совсем понял вопрос. мне подумалось, что фразой "вы случайно не доктор?" Вы имели в виду, что с моим подходом в програминьи не дай Бог я соберусь кого-нибудь таким-же способом лечить. :) Моя проф.деятельность вообще никак не связана с электроникой. Это хобби, чтобы мозги не закисли. На самом деле не очень понятно, почему тему восприняли за стёб? Ну вот такой у меня вот подход - не люблю ходить хожеными тропами. а мне его и не в массовое производство. и юзать COM-port уж куда удобнее чем прикручивать какой-нить LCD с тачскрином и управлением по I2C, плюс писать еще под него софт. Для обычного гены не слишком-ли много почестей. Сегодня он гена, завтра - в ченить другое перепрошью. Зачем что-то еще покупать, когда все уже есть? Мне удобнее с компа управлять, чем жмакать пимпы и думать куда-бы это все пристроить, чтобы ничего не оторвалось. с FPG'ой еще разбираться придется. 5ns, конечно, очень хоцца, но сомневаюсь что это будет дешевле чем решение на авр с программируемой SRAM. дубль два. Вариантов кода задержки - 10, если я правильно посчитал, то: собссно без задержки вообще (0 байт) 1такт-nop (2 байта) 2такта-sbi P,b (2 байта) 3-lpm (2 байта) 4-push Rr, pop Rr (4 байта) 5-push Rr, pop Rr, nop (6 байт) 6-push Rr, pop Rr, sbi P,b (6 байт) 7-push Rr, pop Rr, lpm (6 байт) это перекроет диапазон 0-7 тактов, дальше мона юзать предложенный вариант от 8 тактов: mov r16,r4 mov r30,r17 mov r31,r18 ijmp m3: nop m2: nop m1: nop d1: subi r16,1 brcc d1 nop в r4,r17 и r18 значения заносятся лоадером. занимает это все богатство - 20 байт. Далее идет предложенный вариант для большой задержки на 4х регистрах - 28 байт. Не сложно подсчитать, что перебором всех вариаций: 0-9 (от 0й задержки до цикла на 4х регистрах) out "1" 0-9 out "0" 0-9 loop будет 10^3=1000. Суммарно 28800 байт. Как Вы предлагаете упихать все это в 2313 и его 2k, не совсем понятно. Канеш мона отказаться от задержки d2 длительности импульса или сделать не 10, а два варианта, например без задержки и с задержкой в 1 такт. Это сократит код, но немного испортит задуманное, а мы не привыкли отказываться от своих целей на пол-пути. :) Пасиб, интересный проект. Если по-моему не выйдет, попробум ченить подобное, хотя тайминги похожие. вот, а в итоге хоцца увидеть что-то подобное:
  5. логично. вряд-ли атмеловцы стали бы скрывать от юзера такую возможность. :)
  6. столько-же выйдет 4 меги32, токо все в одном корпусе. Попробую еще эксперименты с ШИМ.
  7. =GM=, на счет ijmp и связки sbci-brcc благодарю за подсказку, упустил как-то из виду, что мона еще быстрее. под невозможностью изменения PC подразумевалась работа как с обычными регистрами, напрямую, а не косвенно через джампы. С целью выиграть еще один такт у обычного перехода. На счет jmp Вы правы, изначально у меня был rjmp, но с ростом кода возникли сомнения, что relative'а хватит (меня заклинило, что переход только в пределах 64 слов, а не 2k). Кто его формировать-то будет? Еще один контроллер вешать? :) Всего 3 задержки. Плюс условие последовательного выполнения без джампов и call'ов, кроме основного цикла. <Задержка фазы (0-20000000)> L1: <Вывод лог.1> <Задержка длины имп. (0-20000000)> <вывод лог.0> <задержка T-t (0-20000000)> <переход на L1> Стабильно остаются только 3 шага. Остальное может быть минимум в нескольких вариантах, типа: 1-nop 2-nop,nop (ну или любое двухтактное) 3-lpm 4-push-pop и т.д. Минимальный "универсальный" цикл на sbсi,brсс сможет "заменить" ну скажем минимум 8 тактов. Т.е. от 0 до 8 придется чем-то забивать.Итого получается 10 вариантов. Несложно подсчитать, что код всех вариантов займет всего-лишь каких-то 28.8 кило. Классно. Это минимум мега32 и сорок ног из которых зайствованы будут от силы 6. Ничего не скажешь - очень гибко и ни сколько не дуболомно. :) Либо у меня несколько другие понятия о "гибкости", но на мой взгляд куда удобнее таки генерить компактный код и исполнять его в ОЗУ, чем заранее просчитывать тысячи вариантов. Другими словами, я хочу от авр'а - комп. С один раз прошитым лоадером и некоторыми процедурами, все остальное - делать в ОЗУ. И надолго забыть про 10 килоциклов. :) p.s. Это примерно как купить мобильник, который до выключения питания в памяти может только набранные номера хранить, а каждое новое java-приложение нужно будет прошивать вместе с прошивкой трубы и только 10 килораз. :)
  8. Только rjmp это 2 такта, когда, например, ченить типа ldi pc,k заняло бы 1. :) ОЗУ потому, что задержка в 1,4,10 или 344547890 тактов - это будет 4 разные проги. Объясните plz, каким образом мне организовать на таймере по одинаковому алгоритму задержку в 1 и 10000000 тиков? Когда только для перехода по прерыванию требуется минимум 4? =GM=, согласен, можно и такой вариант, но его мона применять для значений от 19 тактов и больше (если я правильно посчитал). Для значений от 1 до 18 такой вариант не подходит. Если использовать в качестве подпрограмм и через icall это еще плюсом 5 тактов (загрузка в z и icall). Даже если предусмотреть ВСЕ возможные варианты, сомневаюсь что хватит и 16 кило. Ради такой фигни городить огород на сороканожках-бррр. Начал с tiny13, 2313, добрался до меги48. Похоже, придется в сторону хмеги или вот тех вот AT76C713 и AT76C712 смотреть.
  9. в том-то и дело, что там вообще может быть все "не одно". максимальная частота и минимальная длительность импульса, например: ldi r22,1 ldi r23,0 s1: out 0x18,r22 out 0x18,r23 rjmp s1 А на другом канале-то,что в первом посте. А на 3м - вообще относительно запуска задержка в пол-секунды. На таймер и прерывания уйдут лишние такты. А если одновременно на 3 канала надо синхронно и точно? Не писать же на каждый вариант отдельный код. :) не совсем, мне - "ехать". Просто принцип у меня: "бери от жизни все" :) - если есть еще возможность сделать лучше - нужно выжать все что можно. Если уж никак низя - тада другие варианты. Готов смириться, что из меги в данном случае больше не выжать, но если работать будет сносно, то можно попробовать и пересмотреть исходные условия задачи. Ну будет шаг не 0,05 а 0,4 us, на низких частотах, воможно, и не будет столь актуально. Расчет был на максимум возможного, с запасом, как можно более точно. пасиб, поизучаю. Кстати, если кому нада, могу выложить прогу расчета задержки до такта. delay.h так не умеет. :laughing: Диапазон от 1 до 20000000 тиков (дальше не тестил). Длина кода в среднем получается 20 строк. На 20 млн. не смог "разобрать по запчастям" 4 числа, но это собссно поправимо.
  10. К сожалению, нет. Понимаю, что разные архитектуры заточены под разные задачи и имеют свои преимущества и недостатки, но в данном случае не совсем понятно, что мешало ATMel значительно расширить функционал мк. Какая разница откуда поступают данные для выполнения команды: flash или SRAM? Даже если у них разное адресное пространство. Не спорю, можно и на x86 сделать, но мы не ищем легких путей. Нам проще заставить сделать задуманное, пусть и не очень красивым, но гибким способом, чем спасовать и искать более легкие пути, но с таким-же результатом. На это уйдет время. Мы не шаттл на орбиту запускаем. Можно было вообще тупо взять 3 ИС-генератора сигналов и крутить ручки или синтезатор, но это будет куча обвеса, с проблемами синхронизации и стоимостью как боинг. На таймерах и прерываниях-это дополнительные такты, а мне важен минимальный шаг. Это дополнительные расчеты. Что может быть проще, быстрее и точнее, чем заранее рассчитанный до такта алгоритм? У меня была вполне конкретная задача: 3х канальный синхронный генератор импульсов, с возожностью автоматического перебора параметров импульса и управлением по COM-порту, скважностью до 2000000, шагом хотя-бы 0,05 us и минимальной длительностью 0,1 us. AVR теоретически позволял бы сделать такой девайс, если бы не вот это вот неожиданно всплывшее "но". :) Согласен, не очень симпатишно выглядит, зато теоретически работает как было задумано. :) неа. Просто в далеком децтве у меня не было возможности проектировать и конструировать, а интерес и желание осталось. Спасибо за критику - для меня это на самом деле имеет значение. Оставшийся у меня вопрос: кто из мк таки умеет из оперативки запускать код?
  11. видимо, сильное желание достигнуть цели ослепило меня, и я по любви и старой памяти к Z80 посчитал что всегда и везде адресное пространство едино как территориальное пространство Российской Федерации :) Ну вот как-то вот так у меня получилось, что Data memory map каким-то образом вошло и в program memory. Логика подсказывала, что порядочные микроконтроллеры просто обязаны позволять делать с собой подобные вещи, иначе зачем их производить. :) Просто никада раньше с мк кроме 80ки не работал. В общем то, проблема решаема. Придется в раму запихивать лоадером разные значения для одного и того-же цикла в ущерб точности. Печально канеш, ну шож поделаешь...
  12. от жыж блин... ех было время када Z80 умел и из ПЗУ и из рамы... а тут даже регистр PC низя изменить. :( тада еще вопрос, а кто-нить из моторол, пиков или не АВРов умеет с ОЗУ более продвинуто работать? p.s. нафига тада в даташите рисовать это все как единое адресное пространство?
  13. Всем h! Собирается 3-х канальный синхронный генератор импульсов с претензией на прецизионность :) На компе в проге для каждого канала задается начальная задержка импульса относительно общего старта, длительность и период. Прога по формуле высчитывает точную задержку до такта. Далее по COM-порту инфа, а точнее сгенеренный код программы для каждого гена передается на управлющий МК, который программит по шине 3 МК-генераторы. Предполагается, что 3 гены будут юзать один внешний клок ген. Частота 20 MHz. МК-ATMega48. Гены слушают шину и ловят каждый свои данные и программят через STS SRAM после чего ждут команды на общий запуск. Вапрос. А запустит-ли МК код сгенеренной программы в SRAM? В протеусе все изюмительно работает, а вот в реале мона-ли так издеваться? ;) Почему SRAM. Потому, что код нужен динамический, максимально быстрый и компактный. 10 килоциклов для FLASH уйдут за 16 часов. Хранить параметры в SRAM и оттуда грузить - слишком медленно. К примеру вот пока еще черновой сгенеренный код для имульса с начальной задержкой 15 тактов, длиной импульса t=15587453 такта и период-длина=2342356 тактов: ldi r22,1 // high-state ldi r23,0 // low-state push r30 //-delay 15- pop r30 push r30 pop r30 push r30 pop r30 lpm //----------- S1:out 0x18,r22 // out high ldi r26,0x17 //---- delay 15587453 ---- ldi r27,0x01 L1:ldi r28,0x3F ldi r29,0x18 L0:sbiw r28,1 push r30 pop r30 nop brne L0 nop sbiw r26,1 brne L1 nop //---------------- out 0x18,r23 // out low ldi r26,0x30 // ----- delay 2342356 ----- ldi r27,0x00 M1:ldi r28,0xA6 ldi r29,0x2F M0:sbiw r28,1 brne M0 nop sbiw r26,1 nop brne M1 nop nop nop //-------------------- jmp S1 Он может незначительно увеличиваться в объеме, но в SRAM вроде должен влезть.
×
×
  • Создать...