Прошивка Attiny85

Тема в разделе "Arduino & Shields", создана пользователем Rodstan, 21 авг 2013.

  1. Rodstan

    Rodstan Нерд

    Всем доброго дня.
    Пытаюсь прошуть tiny85.
    Вроде как собрал из Ардуино программатор, подключил к тиньке, написал скретч чтобы поморгать светодиодом, поставил библиотеки, выбрал соответствующую плату, нажимаю залить и наблюдаю следующее:
    avrdude: usbdev_open(): did not find any USB device "usb".

    Кто-нибудь может подсказать что делать? В инете рылся почти неделю, шаманство не помогло.
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Можете включить «Show verbose output during upload» через File -> Preferences и скопировать вывод Arduino IDE при заливке?

    Ваш avrdude явно не находит «подключенного USB программатора» коим должна прикинуться Arduino. С полным выводом можно будет рассуждать дальше.
     
  3. Rodstan

    Rodstan Нерд

    Подключил. Выдает:
    Почти неделю ковырялся не переключая тип плапты, решил залить другой код в Ардуино и обнаружил, что порт COM3 (на котором всегда работал) вообще в программе отсутствует есть только COM1. Соответственно не смог залить другую прошивку. Или после прошивки Ардуино в программатор ее нужно как-то востанавливать?

    Еще подскажите при прошшивке tyni в меню Сервис>>Программатор должно стоять Arduino as ISP? Или это работает только при прошивке через программатор (соответствующий пункт в меню Файл).

    Пробую востановить COM3.
     
  4. Rodstan

    Rodstan Нерд

    Аминь! Снес все драйвера. Востановил порт. Только теперь у меня COM3 (как утверждает компьютер) занят каким-то устройством, перешел на COM5. Все собрал еще раз. Заработало!

    Залил моргалку светодиодом. Задержка почему-то очень длинная. Выставил интервал 50мс, а моргает через 500 а то и больше. Это из-за отсутствия внешнего кварца?
     
  5. Rodstan

    Rodstan Нерд

    После долгих ковыряний с tiny заметил одну особенность:
    время задержки функции delay() напрямую связано с выставленной частотой т.е.
    delay(1000); - частота 1 МГц - задержка 1 сек.
    delay(1000); - частота 8 МГц - задержка 8 сек.
    delay(1000); - частота 16 МГц - задержка 16 сек.

    Прошиваю в Attiny84.

    Собственно хочу спросить: кто-нибудь пытался подключить датчики к тини и получилось ли?
    Пытался запустить ультразвуковой дальномер, работает (слышен очень тихий щелчек) но данные с него (гасить светодиод при уменьшении расстояния) получить так и не смог.
    На УНО тотже код работает. Также написал управление RGB светодиодной лентой, заливал в тот же тини тоже работает. А вот более сложные датчики запустить так и не смог. Может у кого получалось?
     
  6. Unixon

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

    Это от того, что неверно задается #define F_CPU, величина в программе должна соответствовать действительной частоте контроллера.

    А можно ли более конкретно? Что, как, откуда, куда, и т.д. и т.п. Ну и по одному датчику за раз. ;)
     
  7. slyy

    slyy Официальный нерд

    Функция delay(..) устроена так, что она заставляет микроконтроллер работать "вхолостую" нужное число тактов. Так как, время одного такта известно (1/частота), таким образом высчитывается нужное время. Если реальная тактовая частота не соответствует тому, что указанно в МК, время тоже не будет соответствовать. Притом, ошибка будет пропорциональна отношению этих частот.
     
  8. Rodstan

    Rodstan Нерд

    А задать ее как-то можно, чтобы в delay работать с величиной в милисекундах?

    Пытаюсь подключить ультразвуковой дальномер HC-SR04.
    Код такой:
    Код (C):

    int ledpin0=0; //Контакт отладочного светодиода
    int ledpin=1; //Контакт светодиода

    //Контакты дальномера
    int inputPin=9; // Echo
    int outputPin=10; // Trig

    void setup()
    {
    //Установка пинов
    pinMode(ledpin0,OUTPUT);
    pinMode(ledpin,OUTPUT);
    pinMode(inputPin, INPUT);
    pinMode(outputPin, OUTPUT);
    digitalWrite(ledpin0,LOW);
    }
     
    void loop()
    {
    //Получение данных с дальномера
    //**************************************
    digitalWrite(outputPin, LOW);
    delayMicroseconds(2);
    digitalWrite(outputPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(outputPin, LOW);
    int distance = pulseIn(inputPin, HIGH);
    distance= distance/58;
    delay(50);
    //**************************************

    if (distance<30)
         {
           digitalWrite(ledpin0, HIGH);
           //delay(50);
         }
         else
         {
           digitalWrite(ledpin0, LOW);
           //delay(50);
         }
    }
     
    З.Ы.
    Забыл указать: подключаю к tiny84
     
  9. Rodstan

    Rodstan Нерд

    Ну я примерто так и понял. Только непонятно если частота растет, то время должно уменьшаться т.к. контроллер работает быстрее - за единицу времени проходит большее количество циклов. На деле зависимось обратнопропорциональная, не пойму почему?
     
  10. Unixon

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

    А вот это странно. Можете еще раз проверить? И величину F_CPU рядом напишите.
     
  11. Rodstan

    Rodstan Нерд

    Извиняюсь F_CPU это тактовая частота? Если да то я вроде писал.
    Только что проверил, прошивал одним и темже кодом тини84 (код - мигалка светодиодом через delay(1000), заливал подряд не отключая, при 16МГц подключен кварц, спаяно на макетной плате).
     
  12. Unixon

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

    Есть реальная тактовая частота, а есть "частота" F_CPU для программы.
    У вас реально контроллер как работает?

    Если вы при реальной частоте в 1МГц начнете крутить F_CPU в большую сторону, тогда да, программа будет думать, что у вас быстрый процессор и увеличивать число тактов ожидания, а на самом деле контроллер работает медленнее и будет увеличиваться задержка. Логично.

    #define F_CPU не задает реальную частоту работы чипа, это "хак", через который программе сообщается реальная частота процессора, сама программа без каких-либо точных вторых часов не сможет определить истинное значение у F_CPU или нет.
     
    Megakoteyka нравится это.
  13. Rodstan

    Rodstan Нерд

    Так, понятно. Я прошивал тини84 через среду программирования Arduino с установленной библиотекой для tiny. Соответственно выбирал варианты на 1, 8 и 16 МГц. Получается что прошивая тини таким образом его реальная частота не меняется, а остается 1 МГц.
    А низкая частота контроллера может стать причиной того, что я немогу с дальномера данные получить?