Uno и ATtiny45

Тема в разделе "Микроконтроллеры AVR", создана пользователем Егор, 14 фев 2014.

  1. Егор

    Егор Нерд

    Заполучил контроллер ATtiny45. Научился прошивать, поигрался с блинками, теперь хочу реализовать двухстороннюю связ UNO и тиньки, желательно по serial. Наверное мои вопросы будут тупыми но в общем вот:
    1) Где у тиньки45 ножки rx и tx. Смотрю в даташит и не понимаю.
    2) Подключать нужно rx-tx, tx-rx напрямую? Просто проводами соеденить?
     
  2. Unixon

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

    1) Нигде, у ATtiny45 вообще нет UART.
    2) Но есть SPI и выводы DI, DO (data input, data output).

    Если контроллер ведомый, тогда DI=MOSI, DO=MISO, а если ведущий, тогда наоборот DI=MISO, DO=MOSI.
     
    Tomasina и Егор нравится это.
  3. Егор

    Егор Нерд

    Спасибо большое, буду пробовать)
     
  4. Airbus

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

    Но можно сделать. http://tinyurl.com/neyvxpe Написано на Си откомпилить в AVR Studio или Кодвижн и зашить.И будет Вам щастье. А лучше возьмите ATtinny 2313 там всё есть на борту!
     
  5. Unixon

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

    Лучше тогда 4313, а то память очень быстро заканчивается.
     
  6. Airbus

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

    Ха!Ну Вы даёте!2313 и так мощный инструмент особенно если писать на Асме ну а 4313 и вовсе....Я взял парочку правда пока не юзал.Надоть сделать Ардуино на 2313
     
  7. Unixon

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

    Смотря какие задачи... что-то с легкостью влазит в tiny13, а чему то и старших контроллеров маловато. Печально, что на этой мелочи библиотеки пролетают из-за размера кода, а напрямую через регистры неудобно периферией пользоваться и код получается нечитаемый.
     
  8. Orland303

    Orland303 Нуб

    Подскажите новичку. Хочу запрограммировать attiny45 через arduino. Скетч написал. Используются порты 2,4,7,12, (без PWM) и A0.
    На какие номера надо поменять порты, для работы с attiny.
     
  9. geher

    geher Гуру

    У ATTiny 45 всего 6 пинов. Соответственно пины от 0 до 6 можно использовать как цифровые.
    Аналоговые A1,A2,A3 совмещены с пинами 2,4,3 соответственно.
    A0 совмещен с Reset. подозреваю, что для его использования требуется этот самый reset отключить, что может создать проблемы при прошивке (будет ограничен выбор способов прошивки).
    Так что номера можно поменять, например, на 0,1,2,3 и A2 (ноги AtTiny 5,6,7,2 и 3 соответственно, если ничего не напутал).
     
  10. Airbus

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

    Хех!А никак.Пишите на Асме или на чистом Си.Да и програмировать тоже придётся через ISP. В attiny45 нет бутлоадера в принципе так что Скетч Вы никак туда не зальёте
     
  11. rav_75

    rav_75 Гик

    Не шутите так. Все заливается и работает.
     
  12. Unixon

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

    Только тратить и без того малые ресурсы тиньки на загрузчик... это как-то не очень рационально.
     
  13. rav_75

    rav_75 Гик

    Вполне вероятно. Но, согласитесь, "не рационально" и "невозможно" - разные понятия. Рационально или нет - решается в каждом конкретном случае, главное чтоб была возможность.
     
  14. Airbus

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

    Это я имел ввиду.Но сказал бы-бессмысленно.Заливать бутлоадер (его ещё надо нагуглить!) соизмеримый или больший по размеру чем основная программа-ну уж нафиг лучше через ISP на "чистом Си" Да и "цена вопроса" М-8 и Тини-45 одинакова.Сразу возникает вопрос-смысл?
     
  15. rav_75

    rav_75 Гик

    Простите великодушно, но пустой скетч для тини45 весит 326 байт. Это не мало, но это далеко не половина от 4Кб. Оставшихся ~3.7 Кб большинству с лихвой хватит, чтоб считать показания с датчика и включить - выключить релюшку.
    Все выкладки про "чистый Си" и Асм конечно великолепны, но не стоит забывать, что мы на форуме ардуино, а ардуино, по-большому, любительская платформа. И сфера профессиональной деятельности многих обитателей форума (моя в том числе) очень далека от программирования на "чистом Си"/Асме и микроконтроллеров. Среда Arduino IDE тем и хороша, что позволяет практически любому прикоснуться к программированию микроконтроллеров. А дальше - кому как понравится. Поэтому не надо всех отправлять учить "чистый Си" и Асм, а лучше помогите чем можете, и мы будем Вам благодарны. :)
    Сорри за оффтоп.
     
    Megakoteyka нравится это.
  16. geher

    geher Гуру

    Есть документированный фокус с ардуиной, который позволяет залить скетч на ATTiny из Arduino IDE. Конечно, это некоторые потери памяти и не всегда вполне эффективно, но не смертельно и в простых случаях вполне сойдет.
    Бутлоадера, кстати, насколько я понимаю, на ATTiny от этого не появляется.
     
  17. Витя

    Витя Гик

    Для этого в ардуино загружается стандартный скетч ArduinoISP, в меню программатора выбирается Arduino as ISP и через ISP как раз программируется все. Только надо еще вот отсюда https://code.google.com/p/arduino-tiny/ скачать и установить тиньки для arduino. Вот например кусок моей платы который я так программировал:
    isp.png
     
  18. Максим B

    Максим B Гуру

    Здравствуйте. А подскажите пожалуйста, как будет выглядеть кусок кода для управления реле через контроллер attiny 2313 ??? Светодиодом мигал )))
     
  19. geher

    geher Гуру

    Реле с точки зрения контроллера - этот тот же светодиод, только не светит, а контакты переключает.
    Ну и подключать его надо не через резистор, а через транзистор (кто его знает, какой там ток получится в обмотке реле, и будет ли оно срабатывать, если резистор поставить).
    Но с точки эрения кода это никакой разницы не имеет.
     
  20. Mitya145

    Mitya145 Нуб

    Всем доброго времени суток, написал скетч для ATtiny45, но получаю ошибку
    "avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny45".
    Что с этим делать?
    Вот сама программа
    int i; //Счётчик.
    boolean a; //Показывает, включён ли свет.
    int vvod = 3; //Пин на датчик движения.
    int vivod = 1; //Пин на светодиод.

    void setup()// Объявление контактов и говорим, что свет выключен
    {
    pinMode(vvod, INPUT);
    pinMode(vivod, OUTPUT);
    a=false;
    }

    void loop()
    {
    //если датчик движения заметил движение и свет выключен, то плавно включаем светодиод и ждём 5 секунд.
    if (digitalRead(vvod)==HIGH and a==false)
    {
    for(i=0; i<255; i++)
    {
    analogWrite(vivod, i+1);
    delay(20);
    }
    delay(5000);
    a=true;
    }
    //------------------------------------------------------------------------

    //Если датчик в течении двух секунд не видит движение и свет включен, то плавно гасим свет.
    if (a==true)
    {
    for(i=0 ; i<20; i++)
    {
    if (digitalRead(vvod)==HIGH)
    a=false;
    delay(100);
    }
    if (a==false)
    a=true;
    else
    {
    a=false;
    for(i=0 ; i<256; i++)
    {
    analogWrite(vivod, 255-i);
    delay(20);
    }
    }
    }
    //-----------------------------------------------------------------------
    delay(1000);
    }
     
    Последнее редактирование: 24 июл 2014