Чтение и запись на пины "напрямую"

Тема в разделе "Arduino & Shields", создана пользователем strinda, 3 авг 2018.

  1. strinda

    strinda Гик

    Добрый день!

    Код (C++):


    void setup() {
    pinMode (4, OUTPUT);

    }

    void loop() {

    delayMicroseconds (14);
    PORTB = PORTB & 0b11111110; // clear D8 (low)

    delayMicroseconds (14);
    PORTB = PORTB | 0b00000001; // set D8 (high)


    }
    Хочу больше прочесть про это. Как называется такой способ програмирования Arduino (чтобы понять, что искать)?
     
    Последнее редактирование: 3 авг 2018
    NikitOS нравится это.
  2. Mitrandir

    Mitrandir Гуру

    В даташите написано
     
  3. SergeiL

    SergeiL Оракул Модератор

    У вас странный код,
    Четвертый выход это не порт B, D8 - это не бит 0.
    А вообще, это просто запись в порт, без wiring.
     
  4. Daniil

    Daniil Гуру

    Я еще рекоммендую книгу ansi c Деннис Ритчи, Брайан Керниган.
    Маленькая, по основным моментам пробегает и объяснит что делает операция "&" и покажет другие.
     
    Mitrandir нравится это.
  5. Mitrandir

    Mitrandir Гуру

    Так вроде с и у него все в порядке...
     
    Daniil нравится это.
  6. parovoZZ

    parovoZZ Гуру

    На сайте микрочипа есть прекрасные апноуты с примерами кода.
     
  7. Daniil

    Daniil Гуру

    это для расширения кругозора, просто рекомендация
     
    Mitrandir нравится это.
  8. Daniil

    Daniil Гуру

    о, и ещё, чуть не забыл, в интернете гуляет даташит на тини2313 переведённый на русский язык.
    Есть сайт gaw.ru, на котором подобные вещи делают.
    Есть сайт easyelectronics, где DiHalt выложил свой учебный курс.
    И есть Евтисфеев А.В. - его книги - это перевод и компиляция даташитов на семейства тини и атмега.
    т.е. эта одна строчка использует синтаксис си, поэтому про си надо почитать, и "переменную" PORTB, о которой (и ей подобных) подробнее можно узнать из даташитов и учебных курсов.
     
    parovoZZ нравится это.
  9. Airbus

    Airbus Радиохулиган Модератор

    Можно ещё короче PORTB.4=1; PORTB.4=0;
     
  10. Mitrandir

    Mitrandir Гуру

    Можно вопрос по синтаксису?
    Что значит конструкция вида точка четыре ?
     
  11. ИгорьК

    ИгорьК Гуру

    Кажется, это синтаксис CodeVision. Только.
     
    Mitrandir и Limoney нравится это.
  12. ZAZ-965

    ZAZ-965 Гуру

    Это доступ к полям битовой структуры. В заголовочных файлах AVR GCC быстро не нашел, но где-то там есть что-то такое
    Код (C++):
    struct port_reg {
            unsigned char bit0: 1;
            unsigned char bit1: 1;
            unsigned char bit2: 1;
            unsigned char bit3: 1;
            unsigned char bit4: 1;
            unsigned char bit5: 1;
            unsigned char bit6: 1;
            unsigned char bit7: 1; };

    #define PORTB (*((volatile struct port_reg *)0x37))

    void foo(void)
    {
            PORTB.bit0 = 1;
            PORTB.bit1 = 0;
    }
     
  13. Mitrandir

    Mitrandir Гуру

    Так у вас в foo написано portb.bit0 а там сразу номер бита после точки В сях же нельзя члены структуры называть числами
     
  14. a1000

    a1000 Гуру

    Навалили человеку кучу ненужной информации. А он всего-лишь спросил "Как называется такой способ програмирования Arduino"
    Это написано на чистом Си. То, на чём пишем в ардуино, называют Wiring. О нём в разных источниках пишут по разному, но как я понимаю это Си подобный набор макросов
     
  15. Mitrandir

    Mitrandir Гуру

    Wiring это набор библиотек си.
     
    a1000 нравится это.
  16. a1000

    a1000 Гуру

    Скорее всего так. Я наверное не совсем точно выразился.
     
  17. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Это называется управление отдельными разрядами регистра процессора. В данном случае, с этим регистром связаны выводы или "ноги или пины" процессора. Поэтому он называется Портом вывода (по аналогии). Регистр - это комплект триггеров " сидящих" на одном адресе в схеме процессора. А язык программирования Ардуино - разновидность языка С++ - надстройка над языками низкого уровня (ассемблерами) нескольких разновидностей процессоров.
     
    Последнее редактирование: 3 авг 2018
    Airbus нравится это.
  18. Airbus

    Airbus Радиохулиган Модератор

    Кажется битовые операции.Порт В вывод 4 в высокое логическое состояние./В низкое
    Вряд ли.В Ассемблере также почти Cbi PortB,4 //0 в Порт В 4////Sbi portB,4 // 1 в Порт В 4
    Одним ударом как гриться
     
  19. Mitrandir

    Mitrandir Гуру

    а это точно на с?
    Код (C++):
    void loop()
    {
       
        PORTB.4=1; PORTB.4=0;
    }
    Даже не компилится
     
  20. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Будьте заранее готовы, что вам будут попадаться коды не на конкретном языке, а на "пингвиньем языке" - на "языке" логики или идеи кода. А перевести эту логику/идею в конкретный язык для вашего компилятора, для того же Arduino IDE - это еще репу почесать придется. Народ любит делиться идеями, но не всегда - окончательными результатами. Я бывало матерился. Пока не понял, что хорошая идея - важнее кода.
     
    Последнее редактирование: 4 авг 2018
    Daniil, Mitrandir и ИгорьК нравится это.