AVR учебный курс. IAR AVR. Первая программа на Си

10/09/2009 - 21:00 Павел Бобков

   По сложившейся до меня традиции программирование микроконтроллеров начинается с программы управляющей светодиодом. И я в свое время наморгался светодиодами на старом добром AVRовском ките STK200. Это было несколько лет назад, и я до сих пор помню восторг от первых работающих программ, пускай и примитивно простых. Я начинал изучение микроконтроллеров с ассемблера и только спустя пару-тройку лет постепенно перешел на Си. К этому времени я уже хорошо знал всю периферию AVR микроконтроллеров, поэтому  больших затруднений этот переход не вызвал.
    На интернет форумах время от времени возникают религиозные войны ассемблерных и сишных программистов. По правде говоря, я и сам принимаю в них участие, но не для того чтобы отстоять какую-либо точку зрения, а просто шутки ради. Лично я считаю, что ассемблер полезно знать, но программировать нужно на Си. Знание ассемблера позволят лучше понимать работу микроконтроллера, писать более компактный код на Си. В некоторых случаях к ассемблеру нужно прибегать для написания критичных по времени исполнения или по объему кода кусков программы. Писать же полностью программу на ассемблере… увольте, это слишком утомительно.
   Тема у нас сегодня - написание первой программы на Си для AVR микроконтроллера. И для начала нам нужно определиться с компилятором. На данный момент существует довольно много Си компиляторов для AVR микроконтроллеров. Наиболее популярные из них: CodeVision, WINAVR, ICC ImageCraft, IAR AVR. Какой из них использовать – личное дело каждого. Я немного пользовался всеми, но в конце концов отдал предпочтение IAR AVR. Это платный компилятор, он не так прост в освоении как ICC или CodeVision, для него нет такого количества библиотек как для WINAVR и по нему мало информации на русском языке. Ммм.. сплошные недостатки. За что же я его тогда так люблю? За его мощь. Мало какой из компиляторов может сравниться с IARом по качеству компиляции сишного кода. И это неудивительно, ведь система команд и внутреннее устройство микроконтроллеров AVR разрабатывались совместно с фирмой IAR Systems. Если вы разделяется мой энтузиазм по поводу этого компилятора или просто решили довериться моему мнению, то эта и последующие статьи по программированию на Си для AVR микроконтроллеров в среде IAR AVR для вас.

   Итак, первое что вы должны сделать – найти и установить на свой компьютер  компилятор IAR AVR. Есть несколько путей решения этой проблемы. Можно скачать программу с официального сайта IAR Systems - iar.com. В разделе Download есть две версии - 30-day evaluation edition и Kickstart edition. Первый вариант – полнофункциональная 30-ти дневная версия без ограничений по коду, второй – полнофункциональная версия без ограничения по времени, но с ограничением по коду 4к. Можно найти программу на просторах сети – поискать на торрентах, на форумах по электронике. Я использую полнофункциональную программу без ограничений версии 5.11. До сих пор никаких нареканий эта версия у меня не вызывала.

   Надеюсь, программу вы поставили. Дальше я опишу последовательность действий для создания первого проекта в IARе. Возможно, чересчур подробное описание вызовет у некоторых читателей изрядную степень раздражения. Спокойно, без пены. Люди разные. Кому-то просто необходимо разжевать материал.
   Итак, запускаем программу. Откроется диалоговое окно Embedded Workbench Startup. Выбираем пункт Create new project in current workspace (создать новый проект в текущем рабочем пространстве).
Откроется окно Create New Project. IAR предложит вам выбрать тип шаблона проекта (Project templates). Выбираем C > main.
    В стандартном Save As диалоге указываем название проекта (led1) и папку, в которой хотим его сохранить.
Сохраняем  workspace - File > Save Workspace
    Проект создан.
    Приглядимся к IARу.  Верхняя строка – почти стандартный menu bar. Ниже - tool bar с кнопками. С левой стороны -  рабочее пространство (workspace), в котором отображается структура нашего проекта. С правой стороны находится редактор кода. Сейчас там открыт файл main.c, но в нем ничего нет, кроме функции main().
   IAR позволяет объединять несколько проектов в одном workspace. Это очень удобно для быстрой навигации между проектами. Каждый workspace может содержать один или несколько проектов, а каждый проект должен быть частью, по крайней мере, одного workspace.
   Каждый проект имеет так называемые build configuration. По умолчанию их две – Debug и Release. Эти конфигурации отличаются настройками проекта. В простейшем случае это опции оптимизации, формат выходного файла. Это позволяет быстро менять настройки, не залезая в меню Project > Options… При желании можно создать свои build configurations, но сейчас нам это не понадобится. Подробнее об организации проектов в IARе.


Зададим настройки проекта для конфигурации Release.  

Кликаем на название проекта и в строке меню выбираем Project > Options… Откроется диалоговое окно с множеством настроек.

Выбираем тип микроконтроллера.
General Options > Target > Processor configuration
У меня это ATmega8535.  

Меняем тип выходного файла.
Linker > Output.
B поле Output file cтавим галочку Override default и заменяем расширение d90 на hex
В поле Format выбираем Other и в выпадающем меню Output format выбираем тип файла intel-standart
Жмем ОК.

   Теперь дело за программой. Сформулируем нашу задачу: заставить микроконтроллер моргать светодиодом с частотой видимой человеческому глазу.
Схема для нашего примера.

Алгоритм программы следующий:
1.    конфигурируем порт, к которому подключен светодиод, в режим выхода
2.    выставляем в порту ноль – то есть, зажигаем светодиод
3.    ждем
4.    выставляем в порту единицу – то есть, гасим светодиод
5.    ждем
6.    возвращаемся на шаг номер 2

   Самая простая для понимания вещь в любых языках программирования – это комментарии. Назначение комментариев – помогать разбираться в программе. Ну то есть пояснять трудные участки кода, назначение функций и тому подобное. Иногда бывает, откроешь свою старую программу и не можешь вспомнить, как она работает. А все почему? Да потому что впопыхах не написал комментариев к ней.

_____________________синтаксис комментариев_______________________

// однострочный комментарий

/* длинный
многострочный
комментарий */

_________________________________________________________________

   Комментарии игнорируются компилятором и не включаются в текст конечной программы. Часто символы комментариев используются, когда нужно исключить часть кода из программы, не удаляя его при этом.
Пусть первой строчкой нашей программы будет комментарий.

//первая прога на Си для  AVR

   В нашей программе мы будем использовать имена регистров микроконтроллера и для того чтобы компилятор их понимал, мы должны подключить к нашей программе заголовочный файл (хедер файл или просто хедер), который содержит описание адресов регистров, адресов векторов прерываний, имен битов регистров  микроконтроллера ATMega8535. Это делается с помощью директивы препроцессора #include
Препроцессор это специальная часть компилятора, обрабатывающая текст программы перед началом процесса компиляции кода. Все директивы препроцессора начинаются с символа #.

_______________синтаксис директивы include__________________

#include <имя_файла.h>
#include “имя_файла.h”

   Угловые скобки указывают компилятору, что подключаемые файлы нужно сначала искать в стандартной папке IARа с именем INC. Двойные кавычки “ и “ указывают компилятору начинать поиск с директории, в которой хранится проект.

________________________________________________________


   Для каждого типа микроконтроллера есть свой заголовочный файл. Для ATMega8535 этот файл называется iom8535.h, для ATMega16 – iom16.h. По идее мы должны в начале каждой программы подключать заголовочный файл того микроконтроллера, который мы используем.  Умные люди немного облегчили нам жизнь и написали заголовочный файл ioavr.h. Препроцессор обрабатывает этот файл и в зависимости от настроек проекта включает в нашу программу нужный заголовочный файл.
Итак, следущая строчка программы

#include <ioavr.h>

    В нашей программе мы будем использовать задержку. Задержку можно реализовать программно и аппаратно. Сейчас нас интересует программная задержка. IAR содержит библиотеку, в которой уже есть готовая функция задержки. Нам нужно подключить к нашей программе эту библиотеку. Как это сделать? Каждая библиотека имеет свой заголовочный файл в котором описано какие фукции она содержит. Этот файл мы и должны включить в программу. Делается это, как вы догадались с помощью директивы #include.

#include <intrinsics.h>
    
   Основу любой сишной программы составляют функции, и любая  программа на Си имеет хотя бы одну функцию – main().Вообще-то на примере main() не хотелось бы объяснять синтаксис функций, потому что main() хоть и является функцией, но вызывается не как обычно, а автоматически. С этой функции микроконтроллер начинает выполнение написанной нами программы. Вызовы всех других функций, наших или библиотечных, должны быть записаны в коде. Как вызывается функция, мы увидим дальше.
У функции есть заголовок – int main(void) и тело – оно ограниченно фигурными скобками {}. В тело функции  мы и будем добавлять наш код.

______________________пояснения к функции main() _______________________


   Перед именем функции указывается тип возвращаемого значения. Если функция не возвращает значение – используется ключевое void.

int – это целое 2-ух байтное число, диапазон значений от – 32768 до 32767

   После имени функции в скобках () указываются параметры, которые передаются функции при ее вызове. Если функция без параметров – используется ключевое слово void

   Для того чтобы завершить выполнение функции используется ключевое слово return. Если функция возвращает значение, то  оно пишется после слова return.

_____________________________________________________________________


   Сейчас нам нужно настроить порт С на выход. Режим работы порта определяется содержимым регистра DDRC. Ничего кроме светодиода на данный момент к порту C не подключенно, поэтому можно весь порт конфигурировать на выход. Это делается записью в регистр DDRC числа 255 (0b11111111 – в двоичном виде. В языке Си нет поддержки двоичных чисел, но это можно обойти с помощью макроопределений. Об этом мы поговорим позже)
   Дополнительную информацию по портам ввода-вывода микроконтроллеров AVR вы можете почерпнуть здесь.  
Добавляем после фигурной скобки

DDRC = 255;

   В языке Си знак равно = это оператор присваивания. Обратите внимание на точку с запятой, этим символом должно оканчиваться любое выражение на Си.
Теперь нам нужно выставить в порту ноль, то есть зажечь светодиод.

PORTC = 0;

  Дошли до задержки. Как я говорил, мы будем использовать готовую библиотечную функцию. Она называется __delay_cycles(unsigned long int). Она ничего не возвращает и содержит один параметр – сколько тактов микроконтроллера должна длиться задержка. Значение этого параметра мы должны передать функции при ее вызове. Здесь мы сталкиваемся с новым типом данных.

_____________________________________________________________________


unsigned long int – это беззнаковое длинное целое число, его размер 4 байта, а диапазон  значений от 0 до 232 –1   (4294967295 – вот такое вот здоровенное число)

_____________________________________________________________________

   Мы хотим, чтобы светодиод моргал с частотой видимой нашему глазу. Это единицы, десятки герц. Допустим, мы выбрали 1 Гц. Мой микроконтроллер работает на частоте 8 МГц, длительность одного такта =1/8000000 Гц = 125 нс. Сигнал частотой 1 Гц имеет период повторения 1 c. Светодиод будет гореть только половину периода - 0,5с. Делим 0,5 с на 125 нс и получаем искомое число тактов – 4000000. Это число укладывается в диапазон типа unsigned long int.
Следующая строчка нашей программы – вызов функции:

__delay_cycles(4000000);

Далее – гасим светодиод и снова вызываем функцию задержки:

PORTC = 255;
__delay_cycles(4000000);

5 шаг алгоритма – вернуться на шаг 2. По сути дела нам нужно повторить кусок программы, зациклить его. Для этих целей в Си существуют три типа циклов: for, while и do. Мы используем while.

__________________синтаксис цикла while_____________________________


while(condition){        
     statement1;
     statement2;
     statement3;
}

while – имеет условие выполнения (condition), оно записано в скобках () и тело цикла, оно заключено между фигурными скобками {}. В качестве условия цикла может выступать переменная, константа, выражение или функция,  возвращающая значение. Перед каждым выполнением цикла происходит проверка условия, если условие истинно, цикл выполняется, если условие ложно, цикл не выполняется. Любое ненулевое значение в скобках оператор воспримет как истину, и цикл будет выполняться.
            
while(1){    //этот цикл будет выполняться бесконечно
     statement1;
     statement2;
     statement3;
}

____________________________________________________________________


Нам нужен бесконечный цикл. Помещаем наши строчки
    
    PORTC = 0;
    __delay_cycles(4000000);
    PORTC = 255;  
    __delay_cycles(4000000);

внутрь бесконечного цикла, и вот что в итоге должно получиться:

//первая прога на Си для  AVR
#include <ioavr.h>
#include <intrinsics.h>


int main(void)
{
  DDRC = 255;

  while(1){
    PORTC = 0;
    __delay_cycles(4000000);
    PORTC = 255;  
    __delay_cycles(4000000);
  }
  return 0;
}

   Если у вас другой результат – пройдитесь снова по тексту. Может, я что-то полохо объяснил, может, вы что-то плохо поняли.  
    
   Кликаем Make на  панели с кнопками (можно нажать F7). Если все сделано правильно, IAR откомпилирует и соберет проект, а внизу откроется окно Messages, в котором будет написано:

…..
Total number of errors: 0
Total number of warnings: 1

   Все прошло без ошибок, но компилер выдал warning - statement is unreachable. Ничего страшного – он просто сообщает нам, что функция main() никогда не возвратит значение. Просто у нас в программе бесконечный цикл и микроконтроллер при работе никогда не дойдет до строчки return 0.
   Ищем папку проекта на жестком диске. Там, в директории Release лежит файл прошивки led.hex. Грузим в микроконтроллер... Светодиод заморгал? Отлично. А теперь легко проверить правильно ли работает наша программа. Берем механические часы и смотрим, моргает ли светодиод в такт с секундной стрелкой. У меня моргает, а у вас?

Файлы

Схема для нашего примера.
Проект для IAR AVR. Первая программа на Си для AVR
Проект для WINAVR
Проект для CodeVision

Комментарии   

# vasil 04.11.2009 08:59
Цитата:
Дополнительную информацию по портам ввода-вывода микроконтроллеров AVR вы можете почерпнуть здесь.
вот там ссылка не пашет чета. =)
А, еще хотел спросить, у IAR подсветка ситаксиса своеобразная, нельзя ли как то сделать чтобы как в visual studio?
Ответить | Ответить с цитатой | Цитировать
# Pashgan 04.11.2009 20:28
Да, ссылка не пашет.. никак не добью эту статью. Редактор кода в IARе фиговый. Изменить подсветку синтаксиса можно так Tools > Options > Editor > Colors and Fonts
Ответить | Ответить с цитатой | Цитировать
# Guest 18.11.2009 06:00
Спасибо за прекрасную статью! Пиши еще )
Если не трудно, напиши статью (а лучше парочку) про работу с компилятором IAR AVR. Действительно очень мало инфы на русском по этому компилятору, так может Вы исправите это недоразумение =). Думаю не только меня интересуют краткий ликбез по основным пунктам IAR (от изменений подсветки синтаксиса до установки различных параметров компиляции и установки размера стека).

По поводу статьи возник один вопрос. __delay_cycles достаточно точный оператор? Если не изменяет память то в WinAVR можно делать задержки с помощью опереторов _delay_ms (задержка в миллисекундах) и _delay_us (задержка в микросекеундах) . Так вот с _delay_ms частенько возникали непонятки т.к практическая задержка порой очень сильно отличалась от задержки заложенной в программе.
Ответить | Ответить с цитатой | Цитировать
# Pashgan 18.11.2009 17:32
Планирую написать, только не знаю когда.
Насколько точные задержки получаются с __delay_cycles( )?... ммм.. не задумывался, потому что с ними никогда не было проблем. Думаю, что точные. Величина задержки может "плавать", если во время ее выполнения происходят прерывания...
Ответить | Ответить с цитатой | Цитировать
# jimmy neutrone 15.01.2010 23:05
Сайт понравился.Изло жение материала отличное.Неплох о было бы выложить для скачки компилятор IAR для скачивания(кряк нутый+библиотек и)в архиве
Ответить | Ответить с цитатой | Цитировать
# Pashgan 18.01.2010 07:47
это противозаконно. .. :-) к тому же он есть на торренте
Ответить | Ответить с цитатой | Цитировать
# Guest 19.02.2010 08:48
Статья конечно полезна, НО поверхностна, не в том смысле что мало описано возможностей. А в том, что описанное не все объяснено.
Нет упоминания о пошаговой отладке. Ни слова о Datasheet. Хотелось бы добавить пример использования порта ввода (как с помощью кнопки без фиксации включать/выключ ать мигание светодиода)
Ответить | Ответить с цитатой | Цитировать
# Guest 23.02.2010 21:47
Хороший ликбез, скачал себе на комп, но вопросы по тексту…
Вот в перечислении алгоритмов:
4. выставляем в порту единицу – то есть, гасим светодиод
а на самом деле:
PORTC = 255;
Так PORTC = 255; или PORTC = 1. ???
А чем HEX(ы) грузить в микроконтроллер ?
Ответить | Ответить с цитатой | Цитировать
# Guest 19.08.2010 17:57
Есть программа PonyProg2000. Скачиваешь любую версию и зашиваешь ей свой hex-файл в контроллер
Ответить | Ответить с цитатой | Цитировать
# Guest 23.02.2010 21:52
Alex
Это первая программа и того что здесь есть и так больше чем достаточно чтоб начать!
Ответить | Ответить с цитатой | Цитировать
# Pashgan 24.02.2010 06:18
Светодиод у нас подключен к определенному выводу. Чтобы его зажечь или погасить, мы по идее должны манипулировать с этим выводом. Но так как у нас к порту микроконтроллер а ничего кроме светодиода не подключено, то мы управляем сразу всем портом.

PORTC = 255; это значит, что на всех восьми выводах порта будут единицы.

Цитата:
А чем HEX(ы) грузить в микроконтроллер ?
Программатором.
Ответить | Ответить с цитатой | Цитировать
# Guest 24.02.2010 22:51
Pashgan,
А какой у Вас программатор, если не секрет?
Наверное, их много разных в зависимости от типа микроконтроллер а?
Ответить | Ответить с цитатой | Цитировать
# Pashgan 25.02.2010 07:41
У меня 3 программатора. Один фирмы АРГУССОФТ для com порта. Куплен несколько лет назад, до сих пор исправно работает. Другой - USB программатор фирмы ATMEL. Достался бесплатно на работе. И третий - самодельный, собранный специально для сайта. На этой неделе выложу материал.
Ответить | Ответить с цитатой | Цитировать
# Guest 17.03.2010 19:15
НИштяк сделал первый самый простой проект(совсем простой ток gnd vcc diod+resistor и все) только переделал конфигурацию на ATMEGA32 все работает ааааааааааааа я РАД СПСАСИБО.
Ответить | Ответить с цитатой | Цитировать
# Pashgan 17.03.2010 20:05
Молодец ;-)
Ответить | Ответить с цитатой | Цитировать
# Guest 31.03.2010 01:30
Обещали выложить материал.
Pashgan, вы не занимаетась материальным обеспечением: программаторами , микроконтролёра ми, нет правда, у нас в Твери ни черта нет!
USB программатор фирмы ATMEL на родном сайте не нашёл.
Ответить | Ответить с цитатой | Цитировать
# Guest 31.03.2010 01:34
Сейчас все учебники про C++.
А что из языка нужно по темам?
Наверное всё что относится к консольным приложениям?
Ответить | Ответить с цитатой | Цитировать
# Pashgan 31.03.2010 20:26
Цитата:
Обещали выложить материал
Да, обещал. Все готово, только текст никак не напишу. Бывает такое - ступор и все тут.
Цитата:
Pashgan, вы не занимаетась материальным обеспечением
Нет. Попробуйте в Терраэлектронике посмотреть. У них вроде можно заказать доставку по почте.
Цитата:
Сейчас все учебники про C++
Есть и по Си книжки: Брайан Керниган, Деннис Ритчи - Язык программирования C; Стефан Кочан - Программирование на языке С
Цитата:
Наверное всё что относится к консольным приложениям?
Нет, в консольных приложениях тоже используется вся мощь С++ - классы, наследование, полиморфизм.
Ответить | Ответить с цитатой | Цитировать
# Новый Гость 04.01.2011 21:21
Цитирую Pashgan:
Цитата:
Обещали выложить материал

Да, обещал. Все готово, только текст никак не напишу. Бывает такое - ступор и все тут.
Цитата:
Pashgan, вы не занимаетась материальным обеспечением
Нет. Попробуйте в Терраэлектронике посмотреть. У них вроде можно заказать доставку по почте.
Цитата:
Сейчас все учебники про C++
Есть и по Си книжки: Брайан Керниган, Деннис Ритчи - Язык программирования C; Стефан Кочан - Программирование на языке С
Цитата:
Наверное всё что относится к консольным приложениям?
Нет, в консольных приложениях тоже используется вся мощь С++ - классы, наследование, полиморфизм.
Так какой язык изучать, С или С++ ?
Ответить | Ответить с цитатой | Цитировать
# Pyku_He_oTTyda 29.04.2010 09:44
Считаю, что была бы интересна статья о выборе раздела стека.
И о конфигурации командной строки для прошивки МК при помощи программатора STK500
Ответить | Ответить с цитатой | Цитировать
# Pyku_He_oTTyda 03.05.2010 13:12
Цитирую Pyku_He_oTTyda:
Считаю, что была бы интересна статья о выборе раздела стека.

Прошу прощения, конечно же "размер" имелся ввиду, а не раздел.
Ответить | Ответить с цитатой | Цитировать
# Pashgan 03.05.2010 13:57
Про стек что-то можно написать, а вот по поводу командной строки мне нечего сказать. Я ей почти не пользуюсь
Ответить | Ответить с цитатой | Цитировать
# Guest 17.05.2010 04:51
Привет. А материалы по Си одним файлом можно получить от Вас?
Ответить | Ответить с цитатой | Цитировать
# Pashgan 23.05.2010 16:21
Нет, у меня нет такого файла.
Ответить | Ответить с цитатой | Цитировать
# Guest 23.05.2010 23:07
Очень хороший материал... и сайт...не слушай никого...Разжев ывать сильно не надо-
пусть книжки читают...А кому не нравиться -
на воздух, а то им и то расскажи, и то покажи , может за них, мля , ещё и спять?
Ответить | Ответить с цитатой | Цитировать
# Guest 24.05.2010 10:53
Отличный материал...Хоро ший сайт...Автор настоящий Д`Артаньян :)
Ответить | Ответить с цитатой | Цитировать
# Pashgan 26.05.2010 14:47
Спасибо.
Ответить | Ответить с цитатой | Цитировать
# Guest 20.06.2010 23:29
Спасибо! Сайт реально очень и очень хорош! Автор супер-профи программист высокой квалификации и ГЛАВНОЕ !Кайфово читать профессионально и доходчиво написанные учебные материалы! Лучший сайт по этой тематике.Pashga n-ВАМ полный респект и Заслуженное Уважение!
Ответить | Ответить с цитатой | Цитировать
# Pashgan 20.06.2010 23:34
Спасибо, но на самом деле до профи мне еще далеко. Я просто пытаюсь доступно подать материал, потому что по себе помню, как сложно осваивать новую область, не имею простых и понятных руководств или книг.
Ответить | Ответить с цитатой | Цитировать
# Guest 26.06.2010 16:32
Спасибо большое- перерыл весь интернет пока нашел Ваш материал -спасибо и труд ждем продолжении по иар мало че по русски есть :-)
Ответить | Ответить с цитатой | Цитировать
# Yoruk 06.09.2010 05:05
Автору поклон до земли ! Вче четко и доступно,без лишних малеваний. За 1 выходной первые 2,5 статьи осилил.
Ответить | Ответить с цитатой | Цитировать
# asele 14.11.2010 14:44
Спасибо! Очень полезный для меня материал. Есть ли в IAR средство прошивки HEX-файла в микроконтроллер ?
Ответить | Ответить с цитатой | Цитировать
# JoJo 14.11.2010 20:33
Нет, но можно добавить через меню Tools
Ответить | Ответить с цитатой | Цитировать
# Levch 26.11.2010 18:51
...Ищем папку проекта на жестком диске. Там, в директории Release лежит файл прошивки led.hex. Грузим в микроконтроллер ... Светодиод заморгал?...

Как его в микроконтроллер -то загрузить?
Ответить | Ответить с цитатой | Цитировать
# JoJo 26.11.2010 20:18
С помощью программатора
http://chipenable.ru/index.php/projects-avr/64-avr-programmer.html
Ответить | Ответить с цитатой | Цитировать
# Levch 28.11.2010 08:35
Спасибо!!
Действительно очень важно.
А 5-ти проводковый LPT программатор сработает с понипрог?
Ответить | Ответить с цитатой | Цитировать
# koval_kvg 17.12.2010 08:39
Прекрасное начало. Очень последовательно е и подробное изложение. С нетерпением жду настроек в опциях. Сам начинал и сечас иногда пользуюсь версией 1,40.
Ответить | Ответить с цитатой | Цитировать
# And893 10.01.2011 05:19
Собрал самуюпростую схему на АТмеге8 с светодиодом, прошивку написал простую чтоб горел. А он часто мигает!!!!!!!! Прошивку проверял на АТмеге16,все работает.
Ответить | Ответить с цитатой | Цитировать
# And893 10.01.2011 05:26
Код не могу полностью вставить. Мега8 новая была. Что может быть с ней ? И как исправить?
Ответить | Ответить с цитатой | Цитировать
# Pashgan 10.01.2011 19:33
Чтобы добавить в комментарии код его нужно заключить между тегами code. Над формой комментариев написано!!!
Напиши свой код, чтобы было понятно. У тебя вывод RESET подтянут к плюсу питания через резистор? Светодиод может мигать из-за того, что микроконтроллер постоянно сбрасывается.
Ответить | Ответить с цитатой | Цитировать
# And893 12.01.2011 05:20
Все нормально, фьюзы сбросил. Поставил стандартно. Стал нормально работать))))
Зато убил Мегу16 когда запустить его с кварцем на 16мгц... молчит не отвечает и программатор не видит (((
Ответить | Ответить с цитатой | Цитировать
# Vet 22.01.2011 14:34
Респект автору! Отличная статья для начинающих.
Ответить | Ответить с цитатой | Цитировать
# Pashgan 22.01.2011 23:24
Спасибо.
Ответить | Ответить с цитатой | Цитировать
# greenvovk 16.02.2011 10:08
Большое спасибо автору за материал! Если можно, поясните настройки компилятора. Я использую версию IAR 5.50. Не могу использовать конструкции типа Код:MCUCR=1<<SM|1<<SE|1<<ISC00
приходится задавать настройки регистров числом(для любого регистра, не только MCUCR), т.к. на имена битов ругается. говорит что не определены. Заранее благодарен. Весь материал на вес золота.
Ответить | Ответить с цитатой | Цитировать
# Pashgan 16.02.2011 16:27
Поставь в Options > General Options > System галочку Enable bit definitions in I/O-Include files
Ответить | Ответить с цитатой | Цитировать
# greenvovk 17.02.2011 15:33
Спасибо большое! Как жаль что у меня небыло таких преподавателей в ВУЗе.
Ответить | Ответить с цитатой | Цитировать
# Pashgan 20.02.2011 21:07
Пожалуйста
Ответить | Ответить с цитатой | Цитировать
# iZverrG 28.02.2011 10:17
Да, изложение и правда очень, даже чрезмерно подробное, не знаю уж куда еще разжевывать и чем были недовольны некоторые выше по ветке...
Ответить | Ответить с цитатой | Цитировать
# N.I.K. 23.06.2011 22:09
Автору БОЛЬШОЕ человеческое спасибо.

Материал для "начинающих" крайне полезен.
Ответить | Ответить с цитатой | Цитировать
# Hamlet 28.06.2011 17:48
плз... Кто скачал программу? Ну дайте ссылку! А то на офф. сайте много чего хочет: телефон, адрес, индекс, сайт...
Ответить | Ответить с цитатой | Цитировать
# Pashgan 21.09.2011 20:46
rutracker.org - там всегда можно найти IAR
Ответить | Ответить с цитатой | Цитировать
# Александр1986 04.09.2011 14:46
Не могу до конца понять, для чего нужна ф-ция(команда) return? Какое значение и куда она возвращает? И без нее можно все возвратить спокойно.
Автору спасибо большое!
Ответить | Ответить с цитатой | Цитировать
# Денис 04.09.2011 16:10
Спасибо огроменное)
Ответить | Ответить с цитатой | Цитировать
# Pashgan 21.09.2011 20:46
Пожалуйста
Ответить | Ответить с цитатой | Цитировать
# ВВА 27.09.2011 22:07
Огромное Спасибо!
Долго искал где бы было так хорошо "разжевано", наконец нашел.
Не потому что лень изучать "буквари", просто время катостроф. не хватает и направление (в смысле напис. прог.) не основное, а смежное. И у пр-стов особо нет желания пис. прогу из 5 строчек и с неп. техзаданием, которое еще все время меняется.
Еще раз Огромное Спасибо!
Ответить | Ответить с цитатой | Цитировать
# ArtemPR 22.10.2011 18:54
БОЛЬШОЕ спасибо автору! Материал изложен вплоть до людей с IQ = 1 :-) Только начал изучать МК... но судя по сложности ;-) и пережеванности материала, начну обучать программировани ю свою овчарку! :lol:
Ответить | Ответить с цитатой | Цитировать
# Юрий90 15.11.2011 10:40
Спасибо громное за проект! У меня при программировани и возникают две неладки:
-Работают выводы 0,1 и 6,7 на остальных же постоянное напряжение, от чего диоды не горят соответственно.
-При продолжительной работе эти четыре светодиода начинают чаще моргать.
Если в силе обьяснить причину, помогите пожалуйста.
Ответить | Ответить с цитатой | Цитировать
# Жекос 06.02.2012 20:53
Пользуюсь Avr Studio 4 вполне впечатляет. Генерация кода отличная... хочу спросить может кто ставил пятую версию. как она будет, интересно
Ответить | Ответить с цитатой | Цитировать
# Pashgan 03.03.2012 09:34
Я поставил ее ради интереса, но не использую. Все что могу сказать про пятую студию - у нее теперь хороший редактор кода.
Ответить | Ответить с цитатой | Цитировать
# wukrlvy 29.02.2012 16:48
Сайт для "начинающих работать на СИ" выше всех похвал. Начинающим, по моему он дает даже больше информации, чем они ожидали или чем им надо.

Только вот для себя я никак не могу понять, продолжает ли он функционировать ? Есть куча разделов, есть FAQ в конце концов. Но по-моему, модератор туда уже не заглядывает. Вообще, есть какой-либо интерес в продолжении?
В течение месяца оставил на сайте в различных разделах до 20 вопросов. Ни на один не получил ответ. Хотя многие из вопросов помещены сюда именно с целью "развития" того, что уже выложено.
Ответить | Ответить с цитатой | Цитировать
# Pashgan 01.03.2012 18:25
Функционирует.. но жизнь еле теплится. Творческий кризис.. отсюда потеря интереса. Не знаю, может конкурс устрою, чтобы пользователи своими статьями сайт оживили. Бесплатно не хотят помогать.
Ответить | Ответить с цитатой | Цитировать
# alec220 28.02.2013 08:37
Что-то со мной, наверное не так, хоть первый приемник спаял в 1975. Решил попробовать Ваш курс, после книги Лебедева о CodeVision AVR и еще пары сайтов. Как всегда написано: нажмите ... получите это. А если не получаем? Три раза перепроверил шаг за шагом. Нажимаю МАКЕ - выскакивают ерроры
Changed settings forces a full rebuild...
Building configuration: LED2 - Debug
Updating build tree...

3 file(s) deleted.
Updating build tree...
main.c
Warning[Pe223]: function "_delay_cycles" declared implicitly C:\Users\alec\D ocuments\FIRST PROJECT\main.c 13
Warning[Pe111]: statement is unreachable C:\Users\alec\D ocuments\FIRST PROJECT\main.c 17
Linking
Error[e46]: Undefined external "_delay_cycles" referred in main ( C:\Users\alec\D ocuments\FIRST PROJECT\Debug\O bj\main.r90 )
Error while running Linker

Total number of errors: 1
Total number of warnings: 2

вот, что я написал:
//Nn-íàÿ ïîïûòêà ïåðâîé ïðîãè, òåïåðü â IAR AVR//

#include

#include


int main( void )
{
DDRC=255;
while(1){
PORTC=0;
_delay_cycles(4 000000);
PORTC=255;
_delay_cycles(4 000000);
}
return 0;
}

и где закопана собака?
Ответить | Ответить с цитатой | Цитировать
# alec220 28.02.2013 08:41
забыл Код:<ioavr.h>
<intrinsics.h>
не с копировалось.
Ответить | Ответить с цитатой | Цитировать
# Pashgan 28.02.2013 09:03
Перед delay_cycles должно быть два подчеркивания. Вот так
Код:
__delay_cycles(4000000);

у вас одно. Компилятор не может найти эту функцию и поэтому ругается.
Ответить | Ответить с цитатой | Цитировать
# alec220 28.02.2013 14:38
Спасибо, все получилось... теперь только программатор не хочет шить. Каждый раз выдает разную подпись чипа, хотя вроде через эти провода и эту плату не раз шил эту мегу. Спирта на нее перевел больше, чем сам выпью... :)
Ответить | Ответить с цитатой | Цитировать
# Pashgan 28.02.2013 19:14
А что за программатор?
Ответить | Ответить с цитатой | Цитировать
# alec220 28.02.2013 19:59
на FT232, почти что "5 проводков", самодельный. купленная "годзила" прожила только неделю.
Ответить | Ответить с цитатой | Цитировать
# Pashgan 01.03.2013 12:38
У меня есть программатор на ft232, но с ним проблемы возникали, только когда микроконтроллер по UART`у постоянно что-то слал.
Ответить | Ответить с цитатой | Цитировать
# Ренат 11.11.2013 18:59
Не прошло и пол года как я смог разобраться и написать свою первую программу)) Нет, оказывается уже год прошел))) Теперь хочу с SPI что нибудь сделать, что нибудь типа три микроконтроллер а, 2 ведомые и один мастер. Есть какие нибудь соображения?
Ответить | Ответить с цитатой | Цитировать
# Pashgan 14.11.2013 18:49
Какие тут могут быть соображения? Изучи SPI и сделай такой девайс. Статьи по SPI здесь есть. Не по всем темам, но есть.
Ответить | Ответить с цитатой | Цитировать
# Andre 23.12.2013 13:12
Здравствуйте. У меня следующий вопрос: при компиляции программы, компилятор выдает сообщение: "This file should only be compiled with iccAVR". Возникает это сообщение при подключении библиотеки intrinsics.h. С чем это может быть связано. (используемый компилятор: IAR C/C++ 6.11)
Ответить | Ответить с цитатой | Цитировать
# Pashgan 23.12.2013 14:56
На вскидку не могу сказать. Я только что скачал версию 6.3 и в ней этот код компилируется без ошибок.
Настройки проекта заданы? Тип контроллера установлен?
Ответить | Ответить с цитатой | Цитировать
# Andre 24.12.2013 07:14
Тип контроллера ATmega128, установлен. Из остальных настроек: В закладке General Options/System поставлены галочки: Initialize unused interrupt vectors with RETI instructions и Enable bit definitions in I/O-Include files. Всё больше никаких настроек не делал. А ещё подключен JTAGICE MK2. Остальные настройки: Factory Settings
Ответить | Ответить с цитатой | Цитировать
# Andre 24.12.2013 07:22
Прошу прощения за беспокойство, ещё раз проверил настройки, везде поставил настройки по умолчанию (Factory Settings
) и всё скомпилировалос ь. Интересно а счем это могло быть связано? Какие настройки компилятора на что влияют? Вы не могли-бы написать про настройки компилятора IAR.
Ответить | Ответить с цитатой | Цитировать
# Pashgan 25.12.2013 14:46
Не знаю, я не сталкивался с такой ошибкой. Все настройки компилятора описаны в документации. Если руки дойдут, то напишу и по этой теме материал.
Ответить | Ответить с цитатой | Цитировать
# Andre 26.12.2013 13:04
Дело в том что не всегда очевидно в каких случаях необходимо использовать ту или иную опцию компилятора. Так-что ждём с нетерпением.
Ответить | Ответить с цитатой | Цитировать
# Sergey_vl 17.08.2015 15:24
Имеется готовый проект в IAR. Необходимо внести изменения и вновь собрать проект. Как правильно произвести компиляцию.
Ответить | Ответить с цитатой | Цитировать
# Александр11 09.04.2016 07:52
Как начинающий не совсем понял - настроили регистр DDRx на выход, прописав 1. А зачем, чтоб загорелся светодиод писать именно 0 в регистр PORTx, когда как туда пишут 1 (читал в других источниках) ?
Ответить | Ответить с цитатой | Цитировать
# Александр11 04.06.2016 06:22
А, дошло, в других вариантах светодиод установлен наоборот, разная полярность)
Ответить | Ответить с цитатой | Цитировать
# releyshic 14.07.2016 09:58
С каких пор в С комментарии // появились?
Тк а может и операторы из С++ тоже есть? ifelse и тп? а то макросы - кошмар

В чем кокнкретно будет отличия в проектах С с++? ниуж то сильно код оптимизированне й на СИ?

PS Сделай Комментирование через VKонтакте, и ученикам общаться будет проще между собой. Делается легко както
сейчас неудобно комментарии писать,
Ответить | Ответить с цитатой | Цитировать

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

Защитный код
Обновить