Вступление
Программирование для микроконтроллеров на языке Си начинается с первой программы. Изучая просторы сети Интернет наталкивался на различные первые проекты начинающих программистов микроконтроллеров. Подавляющим большинством первых программ оказалось банальное мигание светодиодом. Банальное для человека, который далеко продвинулся в изучении работы и принципов и приемов реализации устройств на микроконтроллерах AVR. Но до мигания светодиодом необходимо получить хотя бы общие понятия что такое микроконтроллер, как он работает и как с ним обращаться. Заинтересовавшись однажды этими устройствами, интерес к ним не потерялся с течением нескольких лет, а только усилился :-)
Язык для написания программ из всего множества я выбрал Си(удобно, понятно, современно), компилятор Win AVR, среда разработки AVR Studio. Все программы, по крайней мере большинство на этом сайте, будет именно в таком формате, микроконтроллеры использовал следующие: AtTiny2313, AtMega8, AtMega16.
По ссылкам можно почитать Почему именно AVR, так же как собрать программатор. В разделе "Шаблоны" легко можно найти необходимые для написания простеньких программ шаблоны и заготовки.
в чем отличия сред
в чем отличия сред программирования и компилляторов (ну кроме интерфейса и ключей?)
смогу ли я скомпилировать код, созданный в winavr, на маковском компиляторе? ведь по идее машинный код должен быть одинаковым? (при идентичных по смыслу ключах?)
и сразу - какое напряжение соответствует нулю и единице?
какие паяльники/припои посоветуете для пайки корпусов типа dip-20 (лучше ткнуть пальцем на конкретный экземпляр)
Стоп, winavr - компилятор под
Стоп, winavr - компилятор под винду.
Есть правда macavr - для мака, только про совместимость кода ничего сказать не могу.
Т.е. код на одни и те же команды компиляторы могут генерить разный, но работать он должен одинаково. Также у синтаксис команд различается от компилятора к компилятору. Т.е. код написанный в WinAvr не всегда можно скомпилировать под CodeVisionAVR и наоборот. Исходя из этого вывод: выбрать себе компилятор и писать только на нем, чтобы потом не столкнуться с проблемой совместимости старого кода.
При 5В питании логический ноль: 0-0.5В; логическая единица 4,5-5В.
Про паяльники - топаеш на местный радиорынок, покупаешь канифоль, ПОС-61 или аналогичный с температурой плавления 180-210 градусов. Паяльник бери 40-60 Вт, с мелким жалом, чтобы было удобно паять. На вскидку вот такой: masteram.com.ua/ru/Proskit-8PK-S120NB-40-Soldering-Iron-220V-40W.php
(этим паялом не пользовался, т.е. про его качество хзхз, привел как пример, сам пользую древний совдеповский 40Вт и доволен)
"Т.е. код написанный в WinAvr
"Т.е. код написанный в WinAvr не всегда можно скомпилировать под CodeVisionAVR и наоборот."
ээ. не понял. как это код, написанный в компиляторе?
компилятор делает из текстового файла в данном случае на языке си машинный код в файле с расширением .hex, который заливается на микроконтроллер. так? (по ссылке ниже - еще файлы .rom и .bin, у меня, не уверен, но кажется в кросспаке (obdev.at/products/crosspack/index-de.html) .h файлы создаются в результате.
программу на си с одинаковым синтаксисом можно скормить любому компилятору, но машинный код они выдавать могут разный,так? но при этом результат (наверное, за исключением производительности в каких-то пределах) для устройства будет одинаковым? или компилятор не всякий, пусть и синтаксически правильный код переварит?
а что есть CodeVisionAVR и зачем оно надо?
ru.wikipedia.org/wiki/CodeVisionAVR - тут конечно написано, но теоретически можно все то же самое и руками сделать в простом текстовом редакторе, разве нет?
про паяльник и расходники - спасибо!
""Т.е. код написанный в
""Т.е. код написанный в WinAvr не всегда можно скомпилировать под CodeVisionAVR и наоборот."
ээ. не понял. как это код, написанный в компиляторе?"
Имел ввиду код написанный для WinAVR без изменений не скомпилиться в CodeVision. Можеш взять любой проект с сайта и попробовать.
Да компилятор из С-кода создает машинный исполняемый код. Теоретически каждый компилятор должен кушать ANSI C код. Но на практике не все так гладко.
"а что есть CodeVisionAVR и зачем оно надо?
ru.wikipedia.org/wiki/CodeVisionAVR - тут конечно написано, но теоретически можно все то же самое и руками сделать в простом текстовом редакторе, разве нет?"
Удобство и не более + библиотеки, константы для каждого МК. В теории можно и hex файл руками писать в бинарном виде, но неудобно.
попробовал :-) код взял
попробовал :-)
код взял отсюда:
http://avrlab.com/node/30
запихнул его в файл main.c
вот что в терминале:
makakasirapuka$ make
avr-gcc -Wall -Os -DF_CPU=8000000 -mmcu=attiny2313 -c main.c -o main.o
avr-gcc -Wall -Os -DF_CPU=8000000 -mmcu=attiny2313 -o main.elf main.o
rm -f main.hex
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
на самом деле сначала ругался - пришлось убрал в строчке
#include < avr/io.h >
лишние пробелы внутри угловых скобок, в итоге осталось лишь предупреждение:
main.c:42:2: warning: no newline at end of file
пришлось добавить новую строчку в конце файла - вроде ок.
а, и еще, у меня по умолчанию для atmega8 делалось, в makefile поправил на attiny2313
кроме того, в makefile заставляют задуматься строчки
CLOCK = 8000000
PROGRAMMER = -c stk500v2 -P avrdoper
OBJECTS = main.o
FUSES = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m
то есть он машинный код делает разным для разных программаторов? или это уже опции для avrdude - типа как заливать?
(у меня тут есть еще приложение AVRfuses - оболоча для avrdude, где выбирается тип программатора и порт, на котором он работает, модель микроконтроллера, фьюзы, а потом еще некие файлы Flash и EEPROM с расширением .hex. я так понял что мы делаем как раз flash?
и кстати, заказал два разных attiny2313 - отличаются частотой и рабочим напржением. это имеет значение? какие тут тонкости?
хз, у меня в свое время не
хз, у меня в свое время не получилось перетащить проект (посложнее бегущих огней) методом копипасты из AVR Studio 4 в CodeVisionAVR. На много чего ругалось, в том числе на синтаксис прерываний и т.д.
Насчет строк
CLOCK = 8000000
PROGRAMMER = -c stk500v2 -P avrdoper
OBJECTS = main.o
FUSES = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m
ничего сказать не могу
"(у меня тут есть еще приложение AVRfuses - оболоча для avrdude, где выбирается тип программатора и порт, на котором он работает, модель микроконтроллера, фьюзы, а потом еще некие файлы Flash и EEPROM с расширением .hex. я так понял что мы делаем как раз flash? "
не понял вопроса.
tiny2313 и tiny2313L отличаются диапазоном питающих напряжений и тактовых частот, все остально - одинаково.
нарыл вот такой документ -
нарыл вот такой документ - там разные типы микросхем (TTL, CMOS), плюс для разных напряжений питания.
allaboutcircuits.com/vol_4/chpt_3/10.html
Ага, ошибся с толкованием
Ага, ошибся с толкованием единицы.
Начало
Добрый день!
Некоторое время присматриваюсь к программированию микроконтроллеров, как к возможному хобби что ль. Интересно, но несколько боязно начать. Вот зашёл в Ваше вступление и есть пара вопросов.
Насколько трудно начать? Что нужно (кроме паяльника, канифоли и припоя :) ) для самого начала? Имеется в виду какие то монтажные платы, возможно измерительные приборы. Достаточно ли мультиметра для начала?
В конце 80-х ходил в радиокружок, наткнулся вот на Ваш сайт, аж руки зачесались :).
Если не сложно отписать на atr[собачка]email.ua
Спасибо.
Необходимо для начала
Ничего сложного, тем более страшного вообще нету!
Я лично сам выходец кружка радиоэлектроники Дарницкой СЮТ г. Киев по прошествии времени тоже решился заняться. В первое время баловался цифровой электроникой, брал сдвиговый регистр напрмиер К155ИР3 и делал бегущий огонек на светодиодах :-) как задающий генератор была К155ЛА3.
Для того, что бы начать необходимо:
1. Общие азы электроники. Понимание законов Ома.
2. Опыт работы с паяльником, опыт хорошей пайки (хорошей - когда проводник не отваливается от дорожки).
3. Знание базовых элементов схемотехники.
4. Опыт работы с персональным компьютером и его наличие, а так же наличие подключения к интернету.
5. Хотя бы базовое знание английского языка (вся документация на английском, редко где хорошие статьи на русском).
6. Базовые знания цифровой техники (достаточно знать какое напряжение соответсвует 0 и 1-це).
7. БОЛЬШОЕ ЖЕЛАНИЕ УЧИТСЯ И НАЛИЧИЕ СВОБОДНОГО ВРЕМЕНИ!
Остальное все прийдет с опытом, опыт приобретается точно так же как в законе шахмат: "...что бы научится, играй с теми, кто играет лучше тебя...".
Все вопросы, даже самые простые, размещайте на форуме. Если ответ будет комплексным - будет написана статья.