Опубликовано 2010-01-24 11:11:02 автором MRS

З чого почати програмувати мікроконтролери AVR. Урок AVR 1


У цьому навчальному курсі з avr я постарався описати все саме основне для початківців програмувати мікроконтролери. avr . Всі приклади побудовані на мікроконтролері atmega8. Це означає, що для повторення всіх уроків вам знадобиться всього один МК. мікроконтроллер atmega8 В якості емулятора електронних схем використовується Proteus - на мій погляд, - найкращий варіант для початківців. Програми у всіх прикладах написані на компіляторі C для avr CodeVision AVR. Чому не на якому-небудь асемблері? Тому що початківець і так завантажений інформацією, а програма, яка примножує два числа, на асемблері займає близько ста рядків, та й у складних великих проектах використовують С. Компілятор CodeVision AVR заточений під мікроконтролери atmel, має зручний генератор коду, непоганий інтерфейс і прямо з нього можна прошити мікроконтролер.

У цьому навчальному курсі буде розказано і показано на простих прикладах як:

  • Почати програмувати мікроконтролери, з чого почати, що для цього потрібно.
  • Які програми використовувати для написання прошивки для avr, для симуляції та налагодження коду на ПК,
  • Які периферійні пристрої знаходяться всередині МК, як ними керувати за допомогою вашої програми
  • Як записати готову прошивку в мікроконтролер і як її відлагодити
  • Як зробити друковану плату для вашого пристрою
Для того, щоб зробити перші кроки на шляху програмування МК, вам будуть потрібні всього дві програми:
  • Proteus - програма - емулятор (у ній можна розробити схему, не вдаючись до реальної пайку і потім на цій схемі протестувати нашу програму). Ми всі проекти спочатку будемо запускати в Протеус а потім вже можна і паяти реальний пристрій. Скачати можна тут
  • CodeVisionAVR - компілятор мови програмування С для AVR. У ньому ми будемо розробляти програми для мікроконтролера, і прямо з нього ж можна буде прошити реальний МК. Скачати можна тут Після установки Proteus, запускаємо його первие кроки в Proteus Він нам пропонує подивитися проекти які йдуть з ним, ми чемно відмовляємося. Тепер давайте створимо в ній найпростішу схему. Для цього клацнем на значок первий проект Proteus візуально нічого не відбувається. Теперь потрібно натиснути на маленьку літеру Р (вибрати з бібліотеки) в панелі списку компонентів, відкриється вікно вибору компонентів вибор пристрою в Proteus в полі маска вводимо назву компонента, який ми хочемо знайти в бібліотеці. Наприклад, нам потрібно додати мікроконтролер mega8 вибор mega8 в Proteus у списку результатів тикаємо на mega8 і натискаємо кнопку ОК. у нас в списку компонентів з'являється мікроконтролер mega8 додати mega8 в Proteus Таким чином додаємо в список компонентів ще резистор, ввівши в поле маска слово res і світлодіод led додавання резистора в Proteus вибор світлодіода в Proteus Щоб розмістити деталі на схемі, натискаємо на деталь, далі натискаємо по полю схеми, вибираємо місце розташування компонента і ще раз клікаємо. Для додавання землі або загального мінуса на схему ліворуч кликаем "Термінал" і вибираємо Ground. Такім чином, додавши всі компоненти і з'єднавши їх, отримуємо ось таку простеньку схемку схема Hello World в Proteus Все, тепер наша перша схема готова! Але ви, напевно, запитаєте, а що вона може робити? А нічого. Нічого, тому що для того, щоб мікроконтролер заробив, для нього потрібно написати програму. Програма - це список команд, які виконуватиме мікроконтролер. Нам потрібно, щоб мікроконтролер встановлював на ніжці PC0 логічний 0 (0 вольт) і логічну 1 (5 вольт) .

    Написання програми для мікроконтролера

    Програму ми будемо писати на мові С в компіляторі CodeVisionAVR. Після запуску CV, він запитує нас, що ми хочемо створити: Source або Project Вибор проекту в CodeVisionAVR Ми вибираємо останнє і натискаємо кнопку ОК. Далі нам буде запропоновано запустити майстер CVAVR CodeWizard (це безцінний інструмент для початківця, тому як в ньому можна генерувати основний скелет програми) < img src = 'files/1/38/StartCV.JPG' class = 'center' alt = 'запуск майстра коду CVAVR CodeWizard'> вибираємо Yes вибор чіпа CVAVR CodeWizard Майстер запускається з активною вкладкою Chip, тут ми можемо вибрати модель нашого МК - це mega8, і частоту, на якій буде працювати МК (за замовчуванням mega8 виставлена на частоту 1 мегагерц ), тому виставляємо все, як показано на скріншоті вище. Переходимо у вкладку Ports вибор чіпа CVAVR CodeWizard У мікроконтролера atmega8 3 порти: Port C, Port D, Port B. У кожного порту 8 ніжок. Ніжки портів можуть знаходитися в двох станах:
    • Вхід
    • Вихід
    За допомогою регістра DDRx.y ми можемо встановлювати ніжку входом або виходом. Якщо в
    • DDRx.y = 0 - висновок працює як ВХІД
    • DDRx.y = 1 висновок працює на ВИХІД
    Коли ніжка налаштована як вихід, ми можемо виставляти на ній лог 1 ( +5 вольт ) і логічний 0 (0 вольт) . Це робиться записом в регістр PORTx.y . Далі буде детально розказано про порти введення -виведення . А зараз виставляємо всі , як показано на скріншоті, та натискаємо File - > Generate, Save and Exit. Далі CodeWizard запропонує нам зберегти проект, ми його зберігаємо і дивимося на код:
    #include <mega8.h> // бібліотека для роботи з мікро mega8 
    #include <delay.h> // бібліотека для створення тимчасових затримок void main ( void ) { PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; DDRC = 0x01; // робимо ніжку PC0 виходом PORTD = 0x00; DDRD = 0x00; // Timer / Counter 0 initialization TCCR0 = 0x00; TCNT0 = 0x00; // Timer / Counter 1 initialization TCCR1A = 0x00; TCCR1B = 0x00; TCNT1H = 0x00; TCNT1L = 0x00; ICR1H = 0x00; ICR1L = 0x00; OCR1AH = 0x00; OCR1AL = 0x00; OCR1BH = 0x00; OCR1BL = 0x00; // Timer / Counter 2 initialization ASSR = 0x00; TCCR2 = 0x00; TCNT2 = 0x00; OCR2 = 0x00; // External Interrupt ( s ) initialization MCUCR = 0x00; // Timer ( s ) / Counter ( s ) Interrupt ( s ) initialization TIMSK = 0x00; // Analog Comparator initialization ACSR = 0x80 ; SFIOR = 0x00; while ( 1) { } ; }

    Тут вам може здатися все страшним і незнайомим, але насправді все не так. Код можна спростити, викинувши ініціалізацію невикористовуваних нами периферійних пристроїв МК. Після спрощення він виглядає так:
    #include <mega8.h> // бібліотека для роботи з мікро mega8 
    #include <delay.h> // бібліотека для створення тимчасових затримок
    void main ( void ) { DDRC = 0x01; /* робимо ніжку PC0 виходом запис 0x01 може здатися вам незнайомій, а це всього лише число 1 в шістнадцятковій формі, цей рядок буде еквівалентна 0b00000001 у двійковій, далі я буду писати саме так. */ while ( 1) { } ; }

    Все добре. Але для того, щоб світлодіод замигав, нам потрібно міняти логічний рівень на ніжці PC0. Для цього в головний цикл потрібно додати кілька рядків:
    #include <mega8.h> // бібліотека для роботи з мікро mega8 
    #include <delay.h> // бібліотека для створення тимчасових затримок void main ( void ) { DDRC = 0x01; /* робимо ніжку PC0 виходом запис 0x01 може здатися вам незнайомій, а це всього лише число 1 в шістнадцятковій формі, цей рядок буде еквівалентна 0b00000001 у двійковій, далі я буду писати саме так. */ while (1) // головний цикл програми {// Відкривається операторна дужка головного циклу програми PORTC.0 = 1; // виставляємо на ніжку 0 порту З 1 delay_ms ( 500 ) ; // робимо затримку в 500 мілісекунд PORTC.0 = 0 ; // виставляємо на ніжку 0 порту С 0 delay_ms ( 500 ) ; // робимо затримку в 500 мілісекунд } ;// Закривається операторна дужка головного циклу програми }

    Все, тепер код готовий. Клацнем на піктограму Build all Project files, щоб скомпілювати (перевести в інструкції процесора МК ) нашу програму. У папці Exe, яка знаходиться в нашому проекті, повинен з'явитися файл з розширенням hex, це і є наш файл прошивки для МК. Для того, щоб нашу прошивку згодувати віртуальному микроконтроллеру в Proteus, потрібно два рази клікнути на зображенні мікроконтролера в Протеус. З'явиться ось таке віконце вибор прошивки МК в Proteus натискаємо на піктограму папки в полі Program File, вибераем hex - файл нашої прошивки і натискаємо кнопку ОК. Тепер можна запустити симуляцію нашої схеми. Для цього натискаємо кнопку "Відтворити" у нижньому лівому кутку вікна Протеус. добавленіе резистора в Proteus

    Комментарии - (6)

    • yu говорит:
      Здравствуйте! Вот прочитал Вашу статью и решил проверить, но разочаровался…. Сделал все как написано, но ничего не заработало. При этом никаких ошибок обе программы не выдали. В чем может быть проблема? Возможно, такое, что Вы допустили ошибку? Прошу проверьте, пожалуйста, код или еще лучше залейте файлы работоспособного проекта. Спасибо за внимание!
    • Admin говорит:
      Здравствуйте. У меня все правильно проверил.
    • Андрей говорит:
      Здравствуйте сделал все как у Вас после запуска программы сигнал доходит до резистора а дальше не поступает на светодиод. Объясните почему?
    • Admin говорит:
      Здравствуйте. На ножке микроконтроллера 5в устанавливается?
    • Филипп говорит:
      У меня тоже не мигает. Ошибка в том, что сопротивление резистора устанавливается как 10к по умолчанию. На вашем примере просто 10. Когда я у себя убрал букву "К" то диод замигал :)
    • Admin говорит:
      Все правильно, от 10к ему не хватает тока чтобы засветится, у меня стоит просто 10, это 10 ом

    Добавить комментарий

    Для отправки комментария вы должны авторизоваться.