Помогите новичку!!

Тема в разделе "Arduino & Shields", создана пользователем Evgen-82, 4 дек 2018 в 20:13.

  1. parovoZZ

    parovoZZ Гуру

    Код говно. Что мешает изучить дашик, подобрать необходимый кварц и на таймере самостоятельно сгенерировать необходимую частоту?
     
  2. Airbus

    Airbus Оракул

    Очередной тюнинг Авто?Тогда мультивибратор на двух транзисторах или как Вам сказали генератор на 555
    И это код всего этого устройства?
    Код (C++):
    void setup()
    {
    pinMode(3, OUTPUT);
    tone(3, 20);
    }

    void loop()
    {

    }
     
  3. parovoZZ

    parovoZZ Гуру

    Тем абдуринщики и ущербны - лезут туда, куда - не ведают
     
  4. parovoZZ

    parovoZZ Гуру

    Взяла я 441 аттиньку и побыренькому написала пару строк:
    Код (C++):
    /*
    * Generator.c
    *
    * Created: 04.12.2018 22:09:10
    * Author : Andrey
    */


    #include <avr/io.h>

    #define Bit(bit)  (1<<(bit))

    #define GEN_pin            PINA1
    #define GEN_port            PORTA

    #define Prescaler_1            Bit(CS10)                    // Делитель тактов
    #define Prescaler_8            Bit(CS11)
    #define Prescaler_64        Bit(CS10) | Bit(CS11)
    #define Prescaler_256        Bit(CS12)
    #define Prescaler_1024        Bit(CS10) | Bit(CS12)

    #define Set_Prescaler1        Prescaler_8                // Установка предделителя для таймера 1
    #define ClearPrescaler        GTCCR = Bit(PSR)                // Сброс предделителя

    #define Timer1_Start        TCCR1B |= Set_Prescaler1; ClearPrescaler    // Пуск таймера1 с очисткой делителя
    #define Timer1_Stop            TCCR1B &= (~(Bit(CS10) | Bit(CS11) | Bit(CS12)))    // Останов таймера1 (делитель = 0)
    #define Timer1_Clear        TCNT1 = 0


    int main(void)
    {
        DDRA = 0xFF;
        DDRB = 0xFF;                        // Абсолютно все пины на выход

        TCCR1A = Bit(COM1A0);                    // При совпадении значения таймера с блоком сравнения COM1A опрокинется пин
        TCCR1B |= Bit(WGM12);                    // Режим СТС

        TOCPMSA0 = Bit(TOCC1S0);                    // Привязка блока сравнения COM1A к пину
        TOCPMCOE = Bit(TOCC1OE);                    // Разрешаем работу пина от блока сравнения

        OCR1A = 55555;                        // Задатчик интервала

        Timer1_Start;
     
        while (1)
        {
        }
    }

     
    Всего 130 байт. Надо поработать над оптимизацией (хз какая была выставлена, если честно)))
    Подключила свой новенький ЛА (UNI-T, сука, хрень показывает) и увиделалала ла ла ла)))
    oneherz.png

    Что да как сегодня уже не буду - спать ушел. Ничего не нагрелось, ну и не погорело!
    На 328 сами перенесете - это домашнее задание!
     
  5. b707

    b707 Гуру

    ну далеко не пару... а порядка 25 -ти...

    И главное, ну нафига с такой частотй - таймер?
    Вот этот детский код будет генерить меандр с частотой 17.87 Гц
    Код (C++):
    void setup()
    {
    pinMode(3, OUTPUT);
    digitalWrite(3, LOW);
    while(1) {
    digitalWrite(3, ! digitalRead(3) );
    delay(28);
    }

    void loop()
    {
    }
     
    DetSimen нравится это.
  6. parovoZZ

    parovoZZ Гуру

    зато смотри в компараторе какая цифра висит - 55555 =) Подкрутить любую частоту - вообще не проблема. Дорисовать любой необходимый функционал - тоже - подводных камней нет в виде занятых таймеров. Можно сказать, что СВОБОДА!
    зато абсолютно всё аппаратно! МК можно в IDLE загнать и всё будет работать. Мне уже лень было писать.
     
  7. b707

    b707 Гуру

    зато мой код будет работать абсолютно на любом МК, поддерживаемом ардуино
     
  8. parovoZZ

    parovoZZ Гуру

    это не может оправдать
     
  9. b707

    b707 Гуру

    ну почему же - вполне может. Переносимость - очень важное свойство, ради которого имеет смысл пожертвовать призрачной "эффективностью" твоего кода, которая в данном конкретном случае совершенно ни к чему.
    Если ты не заметил, главная концепция ардуино - именно переносимость. И Вайринг написан таким вовсе не потому, что его создатели криворукие быдлокодеры, а потому что самая главная цель была получить код, одинаково исполняющийся на всем семействе ардуин.
     
    DetSimen нравится это.
  10. parovoZZ

    parovoZZ Гуру

    не понял - куда и что надо переносить? Я свой код перепишу под абсолютно любой другой AVR за приемлемое время. Да и под любой другой тоже. Только не понимаю - зачем это? Есть конкретное устройство с конкретным функционалом. Зачем ему совместимость со всеми МК? У АВР вертикальная совместимость не блещет. Яркий пример - 2313A и 2313 между собой не совместимы никак.
     
  11. DetSimen

    DetSimen Гуру

    это горизонтальная совместимость. Семейство одно.
    Вертикальная - это 328, 168 и 8, например
     
  12. parovoZZ

    parovoZZ Гуру

    ошибся. Вот 18 герц.
    17herz.png
     
    DetSimen нравится это.