Помогите исправить код под серво :(

Тема в разделе "Микроконтроллеры AVR", создана пользователем genia1991, 22 мар 2021.

  1. genia1991

    genia1991 Гик

    Эм.. вроде немного понял запись.
    А если так записать CLKPR = 0xFF; то деления не будет? )
     
  2. parovoZZ

    parovoZZ Гуру

    upload_2021-3-24_10-59-15.png
    Как думаешь, в какое место таблицы надо смотреть, чтобы найти результат?
     
  3. genia1991

    genia1991 Гик

    не знаю :(
    в даташите смотрел только на регистр CLKPR.
    только 3 день изучаю С. до этого только ардуино не сложное юзал :)
     
  4. genia1991

    genia1991 Гик

    CLKPR = (0 << CLKPS0 | 0 << CLKPS1| 0 << CLKPS2| 0 << CLKPS3);

    // Clock Prescaler to 1 ??????
    или не правильно? (
     
  5. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Ваша проблема в том, что вы вошли в НИЗКОУРОВНЕВОЕ программирование из ниоткуда. А из ниоткуда в программировании можно только веб-страницы рисовать, и всякие базы данных разворачивать. Что такое регистр ? - регистр это ячейка служебной памяти. Чаще всего они имеют стандартный 8-элементный (то бишь байтный) размер, Но это не обязательно. Назначение регистра, как любой электронной памяти - запоминать и хранить электрические потенциалы (0 вольт или 5 вольт). То есть одновременно 8 электрических потенциалов. Эти потенциалы могут либо выходить наружу микры, тогда регистр будет называться ПОРТОМ, либо служить для внутренних целей (тогда регистр будет иметь какое-либо имя-аббревиатуру, связанное с его назначением). Например управлять блоком формирователя внутренней частоты микросхемы. Элементы регистра называют битами (без лишних фантазий). Каждый бит имеет свой номер (или ВЕС). Традиционно - справа бит_0 или младший бит, слева бит_7 или старший бит. Если регистр работает на внутренние цели микросхемы, то биты регистра обычно тоже имеют имя (для удобства). Если все 8 бит регистра не нужны для какой-то одной цели, то каждый бит может иметь свое особое имя. Вот в #40 сообщении - таблица побитной "рашифровки" регистра CLKPR (clock prescaler - "нормировщик частоты"). Не путать с делителем. Прескалер делителем УПРАВЛЯЕТ . Из таблицы видно, что для управления делителем задействованы только 4 младших бита регистра прескалера. Поэтому, значение 0b11110011 - приведет к делению частоты на 8. Но запись в регистр не всегда бывает возможна. Для подробностей как раз и приходится штудировать даташиты. А кому не хочется (вроде меня) - лучше в низкоуровневое программирование не соваться.
    ПС. Неспроста сейчас микропроцессоры именуют микроконтроллерами. Это потому что разработчики помимо собственно арифметическо-логического устройства (АЛУ), интегрируют в кристалл разную периферию, типа АЦП, прескалеров, сериал-каналов, таймеров и тд. Управление ими требует промежуточных элементов - регистров, названий их и правил как этими регистрами управлять. Поскольку это интегрирование - процесс бесконечный, изучение структуры каждого нового процессора занятие прямо скажем неблагодарное. Но это личное, никому не навязываемое мнение. Именно поэтому мой любимый язык - Бейсик. В нем аппаратные тонкости периферии процессоров обсосаны до меня для меня. Опускаться в низкоуровневое программирование - конечно можно, но только при крайней необходимости.
     
    Последнее редактирование: 24 мар 2021
    genia1991 нравится это.
  6. parovoZZ

    parovoZZ Гуру

    Фраза, так ФРАЗА)))

    Микропроцессоры - устройства, которые выполняют код исключительно из ОЗУ и больше ниоткуда. В этом их тотальное отличие от МК.

    Неправильно. Все неуказанные биты компилятор превращает в 0. Поэтому вышеприведённая запись наглядна, но по сути бессмысленна (если только речь не про замену значения в регистре). Надо помнить: после включения питания или сброса все регистры в нуле, если даташитом не указано иное.
     
  7. Airbus

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

  8. genia1991

    genia1991 Гик

    уже есть прогресс. Начитался за эти 3 дня больше чем за весь год.
    Все запуталось в голове. но кое что понял . главное что бы теперь запомнилось.
    Вот сам написал :)
    Уже раз 200 перешил attiny. Больше всего путаюсь в регистрах и не всегда понятно наглядно что они делают . как работают и что озночают их были. Даташит читаю. инфы то много там. но написано сухо. как справка а не как пособие уроков :(
    пока только все на лампочках проверяю

    Код (C++):
    # define F_CPU 9600000

    #include <avr/io.h>
    #include <util/delay.h>




    int main(void)
    {

         DDRB = 0b000011;
        while (1)
        {

        PORTB &= ~0b000001;
        _delay_ms(500);
        PORTB &= ~0b000010;
        _delay_ms(500);

        }
    }
     
  9. SergeiL

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

    Остапа-то опять понесло?
    С чего это? :)
    Я не согласен ;)
    Прооф в студию :)
     
    Airbus нравится это.
  10. Airbus

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

    Весна....
    Вот видишь как все сложно? Это ты еще не измерял напряжение и не работал с ШИМ или USART. Есть ли смысл в низкоуровневом программировании?
     
    SergeiL и genia1991 нравится это.
  11. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. "из ниоткуда" подразумевается - не из электронщиков - "цифровиков". Им-то не надо объяснять что такое регистр или порт. Или что элемент (бит) регистра - триггер.
    2. В самом начале технологии микросхем загнать в кристалл только блок АЛУ и назвать это микропроцессором - уже было достижением
    3. Микроконтроллером зовут не только микросхему, но и целый коробок с электроникой. Так что термин неоднозначен.
     
    Последнее редактирование: 24 мар 2021
  12. genia1991

    genia1991 Гик

    Немного ковырял уже ШИМ на готовых примерах. не понятны его биты очень многие. Запутаны очень сильно. а если определенную частоту надо выставить то совсем ноль :)
    10 книг скачал. толку от них почти ноль. написано для людей у кого хоть минимальная основа есть. По сути все тоже самое что и в даташите инфа. не намного лучше :)
    Еще сложности даже со структурой языка. такое ^ такое &= такое 1<< и другое.
    В общем даже тяжело простейшую строчку с if написать :(
     
  13. SergeiL

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

    Ну так это за несколько дней не поднимешь.
    Нужна задача и желание. И ночи напролет до результата.
    И с первого раза покажется, что задача достигнута, и будет эйфория от того как круто, а потом придет осознание, что все нужно переписать... иначе стыдно.
    Все проходят через это, но некоторых несет не по-детски на среднем этапе :)
     
    vvr и genia1991 нравится это.
  14. Daniil

    Daniil Гуру

    genia1991 нравится это.
  15. genia1991

    genia1991 Гик

    так можно и свой компьютер сделать :)
     
  16. parovoZZ

    parovoZZ Гуру

    ну и чо
     
  17. genia1991

    genia1991 Гик

    А почему у меня здесь подсвечивается как ошибка?
    Компилируется без ошибок и работает правильно.
    И кстати sei все время кругом подсвечивает. но компилятор принимает эту штуку правильно
    upload_2021-3-25_10-22-13.png
     
  18. parovoZZ

    parovoZZ Гуру

    Где описан макрос _BV() - не знаю. Я свои макросы таскаю, которые выше приводил, т.к. прогаю на разных МК. А _BV() - это фича AVR GCC.
    Подчёркивание - это не всегда ошибка. Это значит, что студия не нашла описания на функцию/макрос. Иногда надо просто подождать.
     
    genia1991 нравится это.
  19. genia1991

    genia1991 Гик

    Меня иногда это пугает :)
    Не всегда понятно то ли это такой прикол то ли ошибка в коде ))

    Попробую еще отключить ошибки в комментариях. Они точно лишние там ))) тоже мешают
     
    Последнее редактирование: 25 мар 2021