Страница 14 от 14 ПърваПърва ... 4 10 11 12 13 14
Резултати 326 до 342 от 342

Тема: Релеен атенюатор с 32 стъпки + входен буфер + селектор с 3 входа

  1. #326
    OFFTOP: времето за редакция на съобщение е крайно малко!
    ---
    2. ... или директно в:
    mcp5(0x09, ((0b00100000 << countBts) || (0b00000100 << countSel)));
    Редактирано от veso74; 23 June 2019 в 09:31.

    • #0
      Реклама от Google Реклама от Google
      Членува от
      Dec 2007
      Адрес
      Google.com

        
       

  2. #327
    Гайкаджия ittso's Avatar
    Членува от
    Jul 2008
    Адрес
    София
    Мнения
    4,394
    Цитат Публикувано от veso74 Покажи мнения
    OFFTOP: времето за редакция на съобщение е крайно малко!
    Форумът има раздел за мнения и предложения. Подобни неща ги пишете там, за да ги гледат администраторите и да умуват върху тях...
    Учените са открили, че 90% от хората са симулирали еволюцията.

  3. #328
    С малка корекция тръгна и бачка перфектно, няма примигване няма угасване, супер е.
    Много ти благодаря Веселине за помощта

    mcp5(0x09, ((1 << 0) << countSel) | ((1 << 3) << countBts));

    Първи, втори и трети бит са селектора, от трети до осми бит еиндикацията.

    Това побитово преместване взе да ми харесва. Оптимизацията на кода ще включва побитово преместване и на звука

  4. #329
    ако в изразът няма грешка (напр. от форумната форма)

    mcp5(0x09, ((1 << 0) << countSel) | ((1 << 3) << countBts));

    то обясни за (1 << 0)?

    За || към | видях -> моя неточност, по инерция

  5. #330
    Цитат Публикувано от veso74 Покажи мнения
    ако в изразът няма грешка (напр. от форумната форма)

    mcp5(0x09, ((1 << 0) << countSel) | ((1 << 3) << countBts));

    то обясни за (1 << 0)?

    За || към | видях -> моя неточност, по инерция
    С този код: mcp5(0x09, ((1 << 5) << countBts) | ((1 << 2) << countSel));
    Яркостта Bts е от пети бит наляво, тоест 6, 7 и 8 бит за останалите 2 нива на яркост "няма място". Селекторът е от втори бит наляво, тоест 3, 4 и 5 бит. 1 и 2 бит са неизползваеми

    А при този код: mcp5(0x09, ((1 << 0) << countSel) | ((1 << 3) << countBts));
    селектора започва от първия бит, тоест 1, 2 и 3-ти бит. Индикацията е от 3-ти бит наляво, тоест 4, 5, 6, 7 и 8-ми бит.

    Написаното в горните няколко реда го установих опитно

  6. #331
    Да спомена само: (1 << 0) нищо не прави (едно, измести го нула пъти наляво).

    А иначе разбрах разминаването откъде е: в 8-те бита:
    от 0 до 7, с "тежест": 7 - най-голяма, 0 - най-малка: 0b[b7][b6][b5][b4][b3][b2][b1][b0].

    Доколото виждам ти си си ги кръстил от 1 до 8 .
    Нищо, ще си ги наместиш, ти си му рзбираш там логически кое-какво трябва прави .

    Написаното в горните няколко реда го установих опитно
    Никакви опити - първо на хартия с молива! Логика към микроконролера повтаря написаното на хартията .
    Редактирано от veso74; 23 June 2019 в 16:55.

  7. #332
    Аз го разбирам по малко по мой си начин

    mcp5(0x09, (1 << countSel) | ((1 << 3) << countBts));

    Това е излишно да 1 << 0 (иначе аз го разбрах да започне от нула, тоест първи бит, който в случая е нулевият) единицата се мести наляво само от countSel до третия бит, който в случая е 2. Броя ги осем бита, защото включвам и нулата, иначе са от 0 до 7.

    А втората част ((1 << 3) << countBts) я разбирам така: ((премести единицата 3 пъти наляво) премести единицата countBts пъти на ляво)

    Може да не е съвсем правилно, но така го разбирам

  8. #333
    Вместо 2 страници форумно писане: нарисувай на хартия 8-те бита на MCP (изходи от Q0 до Q7) какво има закачено и как искаш да се управлява и да му напишем заедно правилно условието. Иначе едва ли можем да вникнем в логиката.

  9. #334
    Ето така работи в момента, с кода, който е отдолу
    IMG_20190623_175853.jpg
    Всъщност точно така ми трябва и на мен, но дали условието е написано правилно

  10. #335
    Да, блг, четимо е така. Написаното съответства на израза по-долу. А и работи

  11. #336
    Нещо не се получава при побитовото преместване за нивото на звука. До 14 бит включително всичко е ок, но при при "ниво на звука" 15 всички битове на ляво се установяват в логическа 1-ца. При "ниво на звука" над 15 всички битове са "0".
    Ето и нагледно, че не обяснявам толкова добре

    IMG_20190624_191053.jpgUntitled12.png

  12. #337
    Сложи 1UL вместо 1:
    uint32_t tmp = 1UL << vol;

  13. #338
    Благодаря за бързия отговор. С "1UL" заработи нормално. Ако не е много сложно и трудно за обяснение, били обяснил, защо с "tmp = 1 << vol;" при tmp=15 се "препълва" 32 битовата променлива (аз така го разбрах, може и да греша), а с "tmp = 1UL << vol;" работи нормално ?

  14. #339
    Магии, както винаги, няма .
    Цитат из Arduino Reference:
    By default, an integer constant is treated as an int with the attendant limitations in values. To specify an integer constant with another data type, follow it with:
    a 'u' or 'U' to force the constant into an unsigned data format. Example: 33u
    a 'l' or 'L' to force the constant into a long data format. Example: 100000L
    a 'ul' or 'UL' to force the constant into an unsigned long constant. Example: 32767ul

  15. #340
    Нещо не ми е ясно на кода от картинката по-горе #336 .

    Във функцията set_mcp на третата променлива tmp се прави побитово AND с FF - каква е идеята ?

    При второто използване на set_mcp променливата tmp >> 8 се измества на дясно 8 бита. (tmp= tmp >> 8 ) ?
    При третото използване на set_mcp би трябвало tmp да има стойността от по-горния ред - вече изместена в дясно ? Т.е. в това използване да се "мести" >>8 само 8 бита?
    Редактирано от stef; 24 June 2019 в 20:29.

  16. #341
    OFFTOP:
    ... tmp се прави побитово AND с FF - каква е идеята ...
    Extracts the low-order (rightmost) byte of a variable (e.g. a word),
    което е точно:
    #define lowByte(w) ((uint8_t) ((w) & 0xff))

    ... променливата tmp >> 8 се измества на дясно 8 бита ...
    tmp не се измества, а функцията взема за вход изместената применлива tmp,
    в случая първи (младши) 8 бита - към единия MCP, следващи по-старши 8 - към втория, следващи - към трети, и най-старшите 8 - към четвъртия MCP.

    За "разбиване" на променлива от тип uint32_t на 4 по uint8_t има много начини, които водят до един резултат.
    (При запусната на високо ниво (по подразбиране) оптимизация на компилатора в Arduino дори няма (особена) разлика в обема заета памет, а бързодействие: в случая е без зачение).
    Редактирано от veso74; 24 June 2019 в 21:00.

  17. #342
    veso74,
    Благодаря!

Страница 14 от 14 ПърваПърва ... 4 10 11 12 13 14

Права за публикуване

  • Вие не можете да започвате нова тема
  • Вие не можете да отговаряте в тема
  • Вие не можете да прикачвате към мненията си
  • Вие не можете да редактирате мненията си
  •  
  • BB кодове са Включени
  • Smilies са Включени
  • [IMG] кодове са Включени
  • [VIDEO] code is Включени
  • HTML кодове са Изключени