Jump to content

    

maik-vs

Участник
  • Content Count

    246
  • Joined

  • Last visited

Community Reputation

0 Обычный

About maik-vs

  • Rank
    Местный
  1. Код так код. Вот: Код; ;=============================================================================== biphali: ///////////  bi-phase  driver                                               /// calls from main in fast cycle                                           ///                                                                                    ///          0      forward 1-0-2                                                        ///       1     2    backward 2-0-1                                           ///          3      so, incr/decr nodes shifted in space. Can be stored in bits 0,1 of biphase            ///               until 2->3 or 3->2 to remove this shift.                         .equ CT_B1    = $80 .equ CT_B2    = $40     ldi    tmp1,CT_B1 | CT_B2     sbis    BIPORT-PIN,BIPHA    cbr    tmp1,CT_B2     sbis    BIPORT-PIN,BIPHB    cbr    tmp1,CT_B1     eor    tmp1,biphase        ; <1> = BaBb 0 0  0 0 0 0     cpi    tmp1,CT_B2        brlo biret;/// return if B1B2 readed same as prev. saved     eor    tmp1,biphase        ;  restore <1>     lsr    biphase        lsr    biphase     or    tmp1,biphase        cbr    tmp1,3     mov    biphase,tmp1        ;  aabbcc00 phase history     lds    tmp2,bico     cpi    tmp1,$48        brne    bidro;  01-00-10 00    102 forward     lds    tmp1,biforw        add    tmp2,tmp1    rjmp bdsa bidro:    cpi    tmp1,$84        brne    biret;  10-00-01 00    201 backward     lds    tmp1,biforw        sub    tmp2,tmp1     bdsa:    sts    bico,tmp2 biret:    ret biphali вызывается часто, чаще, чем крутится енкодер. Изменяет bico (байт). Чаще, чем переполняется bico нужно вызывать подпрограмму которая это bico прибавляет к счётчику (у меня 4-байтный) и обнуляет bico.
  2. Вычитанием 50000,10000,5000,10000 и т.д. hex в Yh:Yl результат в регистрах tmp1..tmp3 работает довольно быстро Код//;                 hex16tobcd                                             hex2utobcdf:; Y -><1:2:3> 6:55:35 max     clr    tmp1     clr    tmp2     clr    tmp3            ; 159 циклов в худшем случае (59999)     cp2i    Yh,Yl,50000                ; 65 в лучшем (0)                 brlo hxl50k     subi    tmp1,-5    sub2i    Yh,Yl,50000                 hxl50k: cp2i    Yh,Yl,10000                 brlo hxl10k     inc    tmp1        sub2i    Yh,Yl,10000                 rjmp hxl50k hxl10k: cp2i    Yh,Yl,5000                 brlo hxl5k     subi    tmp2,-$50    sub2i    Yh,Yl,5000 hxl5k: cp2i    Yh,Yl,1000                 brlo hxl1k     subi    tmp2,-$10    sub2i    Yh,Yl,1000                 rjmp hxl5k hxl1k: cp2i    Yh,Yl,500                 brlo hxl5c     subi    tmp2,-5    sub2i    Yh,Yl,500 hxl5c: cp2i    Yh,Yl,100                     brlo hxl1c     inc    tmp2        sub2i    Yh,Yl,100                 rjmp hxl5c hxl1c: cpi    Yl,50        brlo hxl50     subi    tmp3,-$50    subi    Yl,50 hxl50: cpi    Yl,10        brlo hxl10     subi    tmp3,-$10    subi    Yl,10                 rjmp hxl50 hxl10: or    tmp3,Yl     ret .MACRO CP2I        ///CP2I r1,r2, 1234   compare <1:2> with 1234            push  r26         cpi    @1,low(@2)              ldi    r26,high(@2)      cpc    @0,r26      pop    r26 .ENDMACRO                                 .MACRO SUB2I        ///    SUB2I Yh,Yl,1234      ; <@0:@1> - 1234 --> <@0:@1>           subi     @1,low(@2)      sbci    @0,high(@2) .ENDMACRO
  3. ATtiny45 настройка PB3

    Как-то сложно всё у ваc в 20м сообщении. Нельзя просто записать константу в DDR? По приведённому куску кода я вижу инверсию ЧЕТВЁРТОГО бита DDRB, если он был "1" в r16 до "andi r16". А третий (и все, кроме четвёртого) бит в DDRB не изменился.
  4. AVR+MAX232E

    Такэта... Смотреть осциллоскопом сигналы, сравнивать времена-напряжения. Такой же случай: прибор ВКТ-7, RS232, от компа связь есть, от usb/rs нет. А он берёт напряжение с RTS для питания своего гальванически развязанного RS'a. Вот и не хватает мощи у USB/RS адаптера (если там вообще есть RTS).
  5. ATMega128 - проблема с SPI Master

    Непрерывную строку пикселов выводить не получается. Между двумя байтами минимальный зазор 1,5 такта spi, на загрузку нового значения. Долго возился в своё время с мегой16 - не получилось. И в даташите в общем так и нарисовано. Разве что переделали SPI в 128-й меге, но вряд ли.
  6. Платы тоже можно заказывать у китайцев, здесь ссылки и там вокруг почитайте, человек заказывал.
  7. Не вижу, чем ijmp отличается от goto? ну хорошо, goto (label+index) "IJMP: ...jump to the address pointed to by the Z pointer register ..."
  8. ATMega16 + AT45DB16

    Цитата(Stalker27 @ Jun 14 2012, 11:09) Подскажите, как лучше реализовать аналоговый вход и выход (на схеме обвел красным), нужно ли ставить какую-либо защиту? Правильно ли я подключил буферную микросхему? Это всё зависит от параметров сигнала и чего бояться. Все входы контроллера подключены через 2 диода к питаню и земле. Ток через эти диоды не должен превышать 1 ма. У вас этот ток ограничивается R3. Если иметь в виду сетевую наводку от прикосновения к XW1, то ничего не сгорит, но входное напряжение АЦП может превысить опорное и результат оцифровки будет непредвиденным. Можно поставить стабилитрон параллельно С4, но его нелинейность будет влиять. ШИМ должен усредняться фильтром R4C5? Тогда нужно добавить резистор параллельно С5, через который С5 будет разряжаться. Его роль может играть сопротивление нагрузки на XW2, но тогда это сопротивление должно быть известным и приемлемым. Что будет подключено к XW2? Если стрелочный прибор, то решение приемлемое. Если что-то менее инерционное, то плохо отфильтрованная частота ШИМ может давать интересные результаты. Можно увеличивать ёмкость С5, чтобы лучше фильтровать переменку. Тогда возрастёт инерционность, напряжение на С5 будет отставать от быстрых изменений скважности ШИМ (если они есть).
  9. ATMega16 + AT45DB16

    Пара замечаний по схеме. Конденсаторы около кварца указаны 0.022мкф, а надо 22 пф. Очевидно, просто описка, на такой частоте с 0.022 генератор контроллера просто не начнёт работать. В блоке питания стоит стабилитрон КС509, очевидно, для защиты от перенапряжения по входу. Тогда нужно добавить предохранитель последовательно с VD1, чтобы он сгорал раньше, чем стабилитрон.
  10. Как отправить даные Master со Slave? I2C

    Цитата(ILYAUL @ Jun 8 2012, 12:57) Вы путаете работу мастера с привязкой CLK. Я не путаю, я плохо помню тонкости. Прошло время, подзабылось. Помню принципиальную причину зависаний, которые побоорол только обоюдными таймаутами. Помню, что такие же проболемы былы и у других людей. Цитата(ILYAUL @ Jun 8 2012, 12:57) Для себя мастер сформировал все 9 тактов , физически slave получил 8 и не ответил мастеру ACK Ответил! По окончании 8-го импульса он выставил ACK низким уровнем на линию данных. И ждёт 9-й импульс, по его окончанию он снимет этот свой АСК. А не дождётся: пропал импульс, сгинул в дороге. Цитата(ILYAUL @ Jun 8 2012, 12:57) В работе в режиме чтения , после выдачи адреса с режимом чтения, мастер освобождает шину , но продолжает выдавать clock , по которым slave выдает данные на шину, затем мастер на 9-ом перехватывает шину и шлёт ведомому ACK или NACK. Данные на шине считаются верными только в течении high длительности импульса. Здесь точно не помню, но опять-таки, если мастер и слейв сбились в подсчёте импульсов, то может возникнуть ситуация, когда слейв выдаёт нулевые биты, мастер ставит свой NAK, но в это время слейв передаёт 0. Слейв видит АСК и может держать линию данных как угодно долго, ожидая синхроимпульсов. Мастер, наверное, должен проверять свой собственный NAK, установился ли (через какое время? ёмкость линии никто не отменял). Не установился, что ему делать? Предлагают передать 9 синхроимпульсов и молиться. Цитата(ILYAUL @ Jun 8 2012, 12:57) Для простых slave легче сформировать Stop и повторить обмен, если данных от него не много. Я всё о наболевшем: слейв держит линию данных и не отпускает, какой стоп? Кстати, если всё прекрасно, откуда взялось понятие "Soft reset" ?
  11. Как отправить даные Master со Slave? I2C

    Цитата(ILYAUL @ Jun 8 2012, 00:04) Так как слейв выставляет ACK только во время 9 импульса от мастера , то он так и будет его ждать, а мастер , если только не полный кретин , тупо передающий данные и ничего не проверяющий , не примет ACK и поступит согласно тому , что ему указано по сему поводу. Что значит "во время 9 импульса"? В жизни он увидел окончание 8 импульса и поставил свой АСК. Это в талмудах только данные так красиво меняются посерединке между синхроимпульсами.
  12. проблемы с usbasp

    Цитата(ArtemKAD @ Jun 6 2012, 18:32) Очень типичная ошибка - запись зеркальных фьюзов которая почти всегда приводит к проблемам при следующей записи Что я делаю не так, как все? Ни разу не ловил подобной бяки. Всегда сначала прочитаю фьюзы, в даташите написано, какие прошиты на заводе. Там уже понятнее становится, где инверсия - где не инверсия... Ну и меняю их по одному, не все гамузом сразу. Потому что например АВРка работает с кварцем больше 8МГц емнип только если ckopt установлен на полную амплитуду. Значит, сначала ставим ckopt потом cksel.
  13. Как отправить даные Master со Slave? I2C

    Цитата(DmitryM @ Jun 7 2012, 14:31) Для изменения направления передачи, ведь при чтении сначала идет запись адреса, а потом уже чтение. А старт-стоп подразумевают определенный алгоритм, т.ч. это не одно и то же. И что же, я не могу передать несколько рестартов? Могу. Кто из них тогда "старт" а кто "рестарт"? Нет разницы. И без "стопа" можно спокойно обойтись.
  14. Как отправить даные Master со Slave? I2C

    Цитата(BeginnerAVR @ Jun 6 2012, 01:05) Нужно было написать вопрос две недели назад и получить ваш ответ, сохранив тем самым две недели и нервы. Это вряд ли. Я тогда искал как сделать, чтобы окно, сделанное в MFC С++ оставалось "живым" на длинных операциях и как покрасить строку в листбоксе. Весь в компе/интернете, только ноги наружу торчали Ещё про IIC. Совершенно непонятно, зачем им сущность "рестарт". Ну старт и старт, нет, надо обозвать одно и то же разными словами. И неприятный глюк, про который аппноты молчат. Например, мастер пишет в слейв. И пропал один синхроимпульс. Слейв выставляет свой АСК, а мастер уже обмен закончил. Всё, линия данных заблокирована. Или наоборот, мастер читает со солейва. Помеха прибежала, лишний синхроимпульс. Слейв может никогда не увидеть NAK от мастера, останется в цикле чтения и засадит шину данных в 0. Словом, любая рассинхронизация счётчиков битов мастера и слейва может привести к катастрофическому зависанию. Поэтому вторая версия протокола предусматривает ограничение скорости обмена снизу, или проще говоря тайм-ауты, которые должны бдить все устройства на шине. Нет синхроимпульсов в течение заданного времени - работу долой, шину освободить, ждать старта.
  15. Проблема с AVR Studio

    Там же два симулятора - simuator1 и simulator2. Вот первый и не поддерживает вочдога и много чего ещё. Выберите второй ( но он не позволяет внаглую менять биты в регистрах TWI, SPI и т.п. Вообще-то не представляю, как симулировать wdog. Он работает асинхронно, медленно, поэтому может вылезти в любом месте программы, ну перестартует. Что там отлаживать? Поставьте точку выполнения на старт вручную - вот вам и wdog. Его надо просто выключать при отладке. Могучая конструкция #define debug - #ifdef debug ... переключит всё, что надо одной кнопкой.