admin

Видеокурс По Avr-Микроконтроллерам Для Начинающих

2 067 сообщений в этой теме

Сайт Паяльник открывает обучающий видеокурс по AVR-микроконтроллерам.

В этой теме "обратной связи" будем постепенно добавлять новые видеоролики с нашего канала. Здесь можно задавать вопросы, давать рекомендации, критиковать, оставлять отзывы и пожелания, а также запросы на тему будущих видеоуроков.

Ведет видеокурс наш форумчанин kobzar.

Профиль пользователя на сайте cxem.net. Там же финансовые реквизиты для тех, кто пожелает финансово отблагодарить автора данного видеокурса

Подписка на YouTube канал

Краткий обзор сред разработки для различных микроконтроллеров на сайте: http://cxem.net/software/soft_mcu.php

Внимание начинающим! Перед тем, как задавать вопросы не по теме видеоуроков, прочитать:

Статьи по МК для начинающих

Книга по программированию микроконтроллеров AVR

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

Кракозябры вместо русских букв

Ребята - спешу сообщить что найден метод борьбы с кракозябрами вместо русских символов, при работе с ЖК. Дело в том, что у некоторых из вас, проект создается в кодировке UTF-8, а наша библиотека работает только с ср1251

Фикс:

1.Открываем проект

2. File - Advanced Save Options

3. Вместо кодировки UTF-8 выбираем Cyrillic(Windows) - cp1251

Сохраняем, сохраняем проект - компилируем!

Добавлено 12.01.16 :

Изменённые версии библиотеки lcd_5110 :

От Alex - http://forum.cxem.ne...20#comment-2287906

От COKPOWEHEU - http://forum.cxem.net/index.php?showtopic=136229&st=1840#comment-2373820

Изменено пользователем Alex
8

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Первый видеоурок

Второй видеоурок

Третий видеоурок

Изменено пользователем admin
Добавлен видеоролик
9

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Четвертый видеоурок

Пятый видеоурок

Шестой видеоурок

Файлы к 6-му видеоуроку: LCD_5110.zip

Практика к шестому видеоуроку

Изменено пользователем admin
Добавлен видеоурок
9

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Седьмой видеоурок:

Практика к 7-му уроку:

Восьмой видеоурок:

Изменено пользователем admin
4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброго времени суток!

Вы при выборе IDE вы ориентировались в основном на удобство и понятливость в освоение.

Желательно бы еще указать сравнительные данные компилятора студии 6 по размеру выходного файла с остальными.

Ведь это самый важный параметр и ради которого некоторые пренебрегают всякими неудобствами.

Если в студии 6 оптимальность и размер кода занимает второе, третье место то это самый лучший вариант.

Ранее таким продуктом был WinAvr который сейчас вроде как интегрирован в студию.

Читал где то что сегодня функционал в студии по отношению к WinAvr выше, а по компактности и размеру кода хуже чем в последнем WinAvr.Тем более у WinAvr вроде как намечается продолжение.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Курс рассчитан на новичков. Размер файла нас, пока, не интересует

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Курс рассчитан на новичков. Размер файла нас, пока, не интересует

Ну тогда всем надо смотреть в сторону графических IDE и подбирать МК с большим объемом памяти и зачем учить С, там достаточно основ алгоритма.

Изменено пользователем capicator
-2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Atmel Studio 6.2 была выбрана и рекомендована для начинающих по следующим критериям:

1. Уроки будут вестись в ней

2. Она бесплатна

3. В отличие от безнадежно устаревшего винавр - проще и понятней в освоении!

4. У нее лучший редактор КОДА! (что для начинающих архиважно)

Провел тест - скомпилил один и тот же код в 4 и 6 студии! В 6 размер оказался на 15 процентов меньше! Не вижу смысла пользоваться устаревшим ПО!

А где же продолжение. Ждемс. Спасибо.

Сегодня будует третий урок переснят - практика! и на неделе 4 с практикой !

Так что не переживайте !

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Atmel Studio 6.2 была выбрана и рекомендована для начинающих по следующим критериям:

1. Уроки будут вестись в ней

2. Она бесплатна

3. В отличие от безнадежно устаревшего винавр - проще и понятней в освоении!

4. У нее лучший редактор КОДА! (что для начинающих архиважно)

Провел тест - скомпилил один и тот же код в 4 и 6 студии! В 6 размер оказался на 15 процентов меньше! Не вижу смысла пользоваться устаревшим ПО!

По всем пунктам не вижу препятствий и для WinAvr, все относительно....

Пожалуйста, очень прошу сравните код Atmel Studio 6.2 с WinAvr (чтоб без сомнения ).

А то все ни как не решусь что же применять.

Изменено пользователем capicator
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Выбирайте то что вам удобнее!

Разницы в написанни кода для вас не будет! Но я не собираюсь рассказывать новичкам как изачем править мейк файл, как подключать бибилиотеки, как компилировать и отлаживать проект в ВинАВР!

Я по моему очень подробно обьяснил - использовать ВинАвр нет никакого вобще смысла! Проект развивался, рос - и в каокой-то момент он превратился в avr-toolchain который используется в 4 студии! Сама же ветка ВИнАВР так и осталась без продолжения развития! Там плохой редактор! Нет автокомплита! Нет фолдинга И так далее! Зачем нам с ним мучаться?

Я бы понял если бы вы метались от ИАР к АтмелСутдио --- но между студией от самого производителя и ВиНавр - развите котого и поддержка закончились несколько лет назад.... даже и не знаю что вам сказать!

Если вас не устраивает 6 студия - назовите причины - и используйте 4 !

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А то все ни как не решусь что же применять.

Если предъявляете жесткие требования к скорости и размеру - только ассемблер. И библиотеки самому писать.

Не вижу смысла в полемике - 4 или 6. ТС сказал 6 - читаем, учимся, задаем вопросы по существу.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не спорьте попусту. Я понял, что в студии удобнее написание программы и ее отладка.

А если нравится компилятор от WinAvr, так он прикручивается к студии влегкую.

Напоминаю про 2 и 3 уроки. Хочется уже посмотреть.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А то все ни как не решусь что же применять.

Если предъявляете жесткие требования к скорости и размеру - только ассемблер. И библиотеки самому писать.

Не вижу смысла в полемике - 4 или 6. ТС сказал 6 - читаем, учимся, задаем вопросы по существу.

А где вы тут полемику увидели.

Речь вообще то не о номерах версий, а о разных продуктах, это раз.

А два это что не внимательно читаем, а потом не по существу вопросы задаем.

Если всем так хороша 6, то почему бы это не увидеть воочию.

kobraz пожалуйста сделайте сравнение на простом файле мигания светодиода (blink).

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не понимаю что вы от меня просите! Какое сравнение вам нужно?

з/ы/ уроки у же у администрации ждем пока их обработают и выложат !

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не понимаю что вы от меня просите! Какое сравнение вам нужно?

з/ы/ уроки у же у администрации ждем пока их обработают и выложат !

Я очень прошу Вас сделать сравнение по размеру кода простой программы (мигание светодиодом)

скомпилированной в Atmel Studio 6.2 и в WinAvr.

-2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Код

//Atmega8
#define F_CPU 8000000 //в WinAVR без этой строки
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0xFF;
PORTB = 0x00;
   while(1)
   {
    PORTB = 0xFF;
 _delay_ms(1000);
 PORTB = 0x00;
 _delay_ms(1000);
   }
}

Студия

Program Memory Usage : 108 bytes 1,3 % Full

Data Memory Usage : 0 bytes 0,0 % Full

Winavr

Program: 106 bytes (1.3% Full)

(.text + .data + .bootloader)

Data: 0 bytes (0.0% Full)

(.data + .bss + .noinit)

Я надеюсь мне удалось удовлетворить ваше любопытство вместо вас?

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня не компилит вот ошибка.

post-171225-0-00621200-1396288594_thumb.jpg

Также не могу изменить Тульчайн. Постоянyо возвращает на AVR 32-bit

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

hardbar, уберите русские буквы из имени проекта/пути к проекту. Заодно убрал бы еще и пробелы. Программа "импортная"... не сильно русский лексикон любит. :)

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Таки да! Избегайте русских букв в названиях файлов и путях

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

hardbar, а что собственно не устраивает? То, что в Debug->Options an Settings ->ToolChain по Default стоит Atmel AVR 32-bit?

- подходит? Изменено пользователем MadLor
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да смущает что там не 8 а 32. А видео я это уже смотрел.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а смысл нам от 32 для 8 битного камня? На самом деле можно не менять! В наших уроках разницу мы не заметим!

Данную опцию я задел исключительно для того что бы показать основные настройки программы!

:)

Переснял третий урок - сейчас он на обработке у администрации!

В конце урока домашнее задание - тем кто хочет действительно научиться - рекомендую к выполнению! Читайте гугл ищите примеры - ТВОРИТЕ!

Только самостоятельная работа позволит понять и запомнить материал :)

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот чисто для сравнения. Никаких нареканий на СИ. Просто кому интересно.

Программа мигания двумя светодиодами. Размер HEX файла 279 байт

#define F_CPU 9600000
#include <avr/io.h>
#include <util/delay.h>



void options_port()
{
DDRB = 0b00001100;
PORTB = 0X00;
}

int main(void)
{
options_port();
while(1)
{
PORTB=0b00001000;
_delay_ms(1000);
PORTB=0b00000100;
_delay_ms(1000);
}
}

Программа вывода чисел от 0 к 9 в сдвиговый регистер. Размер HEX файла 333 байта (не верите проверьте)(завтра покажу видео работы программы в железе)

.include "tn13def.inc"
.list

.def temp=r16
.def temp1=r17
.def tim=r18
.def timer=r19
.def pob=r20
.def sd=r21
.def aa=r22
.def bb=r23
;-----------------------------
.macro outi
ldi sd,@1
out @0,sd
.endm

.cseg
.org 0
rjmp reset

;----------------------------
reset:
cli
outi spl,low(ramend)
outi ddrb,0xff
outi portb,0x00
outi acsr,0x80
outi tccr0b,0x05
ldi timer,255
clr temp1
sei
;------------------------------
main:
clr temp1
Read:
OUTi DDRB, (1<<PB3) | (1<<PB4)




        ldi ZH,High(Array*2)  ;загрузка начального адреса массива
        ldi ZL,Low(Array*2)

        ldi Temp,0            ;прибавление внутр. адреса
        add ZL,Temp1
        adc ZH,Temp

        lpm                   ;загрузка из ПЗУ

         cpi temp1,10
breq main
inc temp1
;=====================================
LDI pob, 8

back1:
       SBRC R0, 0
       RJMP bitset
           ; Установить сегмент в 0 (горит)
           OUTi PORTB,(0<<PB3)|(0<<PB4)
           OUTi PORTB,(1<<PB3)|(0<<PB4)
       RJMP bitunset
       bitset:
           ; Установить сегмент в 1 (погашен)
           OUTi PORTB,(0<<PB3)|(1<<PB4)
           OUTi PORTB,(1<<PB3)|(1<<PB4)
       bitunset:
       LSR R0
       DEC pob
   cpi pob,0
   BRNE back1 
;============================================
rcall wait
rcall wait
rcall wait
rcall wait
rcall wait
rcall wait
rcall wait
rcall wait
rcall wait
rcall wait
rcall wait
rcall wait
rjmp read 
;--------------------------------
wait: ;Все что снизу задержка на таймере.
ldi tim,0
out tcnt0,tim
wt1:
in tim,tcnt0
cp tim,timer
brlo wt1
ret
;-------------------------------------

Array:
.DB   0b00100001, 0b01111101 ; 0, 1
.DB   0b10101000, 0b00111000 ; 2, 3
.DB   0b01110100, 0b00110010 ; 4, 5
.DB   0b00100010, 0b01111001 ; 6, 7
.DB   0b00100000, 0b00110000 ; 8, 9

Программу то есть прошивка (на Asm) писал я.

ЗЫ: прошивка на СИ из видео урока.

Изменено пользователем hardbar
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

hardbar,

вы уверены, что ваша программа (второй вариант) на Ассме рабочая? И зачем нужно было столько городить?

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

9
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был востановлен.   Очистить редактор

Загрузка...

  • Сообщения

  • Похожие публикации

    • Автор: Max1201
      Код с помощью которого двигатель вращается в одном направлений по часовой стрелке.
      А нужно "составить программу на языке ассемблера для реверсивного управления электродвигателем постоянного тока". так написано в заданий
      Но я думаю можно новую не писать, а можно изменить эту так что бы двигатель вращался в одну сторону и потом в другую, наверно так. Помогите, а то я вообще не понимаю этот ассемблер(( 
      ;* На выходе OC1A МК АТmega16 получаем выходные импульсы ;* с частотой 50 Гц и коэффициентом заполнения g=0,025. ;* Тактовая частота MK AVR: 4 МГц .nolist .include"m16def.inc" .list .def STAT = r15 ;Регистр для хранения состояния главной программы .def WorkH = r16 ;Рабочий регистр для главной программы .def WorkI = r17 ;Рабочий регистр для прерывания от таймера .def AddLo = r18 ;Вспомогательный регистр для прибавления константы .equ Impuls = 9000 ;Число тактовых сигналов, соответствующее импултсу .equ Pause = 1000 ;Число тактовых сигналов, соответствующее паузе Reset: rjmp Initial ;Переход к части инициализации reti ;Внешнее прерывание 0 (не используется) reti ;Внешнее прерывание 1 (не используется) reti ;Прерывание по захвату (не используется) Timer1CompA: ;Прерывание CompareA для ATmega16 in STAT,SREG ;Сохраняем флаги главной программы in WorkI,TCCR1A ;Регистр управления А счетчика Т/С1 sbrs WorkI,COM1A0 ;Пропускаем следующую команду, если COM1A0 = 1 rjmp TC1 ;Пропускаем следующую команду, если COM1A0 = 0 cbr WorkI,1<<COM1A0 ;При следующем прерывании OC1A -> 1 out TCCR1A,WorkI ;Сохраняем новое значение in AddLo,OCR1AL ;Младший байт OCR1A subi AddLo,Low(-Impuls) ;Прибавляем младший байт значения импульса in WorkI,OCR1AH ;Старший байт OCR1A sbci WorkI,High(-Impuls) ;Прибавляем старший байт значения импульса rjmp IntEnde TC1: sbr WorkI,1<<COM1A0 ;При следующем прерывании OC1A -> 1 out TCCR1A,WorkI ;Сохраняем новое значение in AddLo,OCR1AL ;Младший байт OCR1A subi AddLo,Low(-Pause) ;Прибавляем младший байт значения длительности импульса in WorkI,OCR1AH ;Старший байт OCR1A sbci WorkI,High(-Impuls) ;Прибавляем старший байт значения длительности импульса IntEnde: out OCR1AH,WorkI ;Назад - старший байт нового значения out OCR1AL,AddLo ;Назад - младший байт нового значения out SREG,STAT ;Восстанавливаем старые флаги reti ;Выход из обработки прерывания CompareA Initial: ;Инициализация регистра ввода/вывода ldi WorkH,High(RamEnd) out sph,WorkH ldi WorkH,Low(RamEnd) out spl,WorkH ;Инициализируем стек clr WorkH ;Все разряды = 0 out PortD,WorkH ;Вывод в порт D ldi WorkH,$20 ;Разряд 5 - в 1, остальные - в 0 out DDRD,WorkH ;OC1A (PD5) - выход, остальные входы ldi WorkH,High(Pause) ;Старший байт значения паузы out OCR1AH,WorkH ;в старший байт регистра сравнения А ldi WorkH,Low(Pause) ;Младший байт значения паузы out OCR1AL,WorkH ;в младший байт регистра сравнения А ldi WorkH,$C0 ;OC1A -> 1 out TCCR1A,WorkH ;Сохраняем новое значение ldi WorkH,$02 ;Входной такт Т/С1 = такт сист. синхр./8 out TCCR1B,WorkH ;Запускаем Т/С1 ldi WorkH,$40 out TIMSK,WorkH ;Разрешаем прерывание CompareA sei ;Общее разряшение прерываний (разряд I) Haupt: rjmp Haupt ;Главная часть программы: ожидаем возникновения прерывания Программа работает двигатель крутиться по часовой стрелке, Препод сказал что на один вход мы сигнал подали теперь нужно его сохранить и подать на другой, на фотках схема подключения и установка




      В методичке это 4 лаба, там программа не та но теория та что и вновой методичке
      lab_rab_MK_AVR.pdf
    • Автор: zeconir
      Добрый день (вечер)! Уже практически целый день голову ломаю, что же это может быть... Итак, в чем проблема. Имеется некий проект на ATmega8, компилятор - WinAVR, среда - встроенный в протеус редактор кода. Все бы хорошо, но вот незадача, при компилировании и запуске в отладчике отображается черт знает что. Пример:

      Строки 147, 153 и т.д. не должны иметь адресов, но они есть. А вот строки 143, 150 и т.д. наоборот. И это при выключенной оптимизации...
       
      Никто не сталкивался с таким? Весь проект очень не хочется заново делать, но чувствую по-другому этот странный баг не одолеть. Так как остальные проекты открываются и редактируются нормально. Пробовал и менять версии протеуса, машины, оптимизацию. Результат 0.
    • Автор: Евгений Гольцвeрт
      Куплю процессор MC908JL8CPE на ARDO TL105S модуль 5460079600-02 (45SX-85DX-85SX) 

      Также нужен процессор MC68HC705P6 зашитый прошивкой для ARDO A833. модуль DMPU 5460229301
    • Автор: A1essandro
      Atmel Studio 7.
      Здравствуйте. Занимаюсь в свободное время небольшим проектом. Пару дней был перерыв, всё работало. Сегодня делаю ребилд, вот Output:
      ------ Rebuild All started: Project: RF, Configuration: Debug AVR ------ Build started. Project "RF.cproj" (Clean target(s)): Target "Clean" in file "D:\Circuits\AtmelStudio\7.0\Vs\Compiler.targets" from project "D:\Circuits\AvrProjects\RadioNanny\RF\RF.cproj" (entry point): Task "RunCompilerTask" Shell Utils Path D:\Circuits\AtmelStudio\7.0\shellUtils D:\Circuits\AtmelStudio\7.0\shellUtils\make.exe clean rm -rf library.o rm -rf library.d rm -rf "libRF.elf" "libRF.a" "libRF.hex" "libRF.lss" "libRF.eep" "libRF.map" "libRF.srec" "libRF.usersignatures" Done executing task "RunCompilerTask". Done building target "Clean" in project "RF.cproj". Done building project "RF.cproj". Build succeeded. ------ Rebuild All started: Project: RF, Configuration: Debug AVR ------ Build started. Project "RF.cproj" (default targets): Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!=''). Target "CoreBuild" in file "D:\Circuits\AtmelStudio\7.0\Vs\Compiler.targets" from project "D:\Circuits\AvrProjects\RadioNanny\RF\RF.cproj" (target "Build" depends on it): Task "RunCompilerTask" Shell Utils Path D:\Circuits\AtmelStudio\7.0\shellUtils D:\Circuits\AtmelStudio\7.0\shellUtils\make.exe all --jobs 2 --output-sync D:\Circuits\AvrProjects\RadioNanny\RF\Release\Makefile(79,1): error: recipe for target 'library.o' failed make: *** [library.o] Error 1 Done executing task "RunCompilerTask" -- FAILED. Done building target "CoreBuild" in project "RF.cproj" -- FAILED. Done building project "RF.cproj" -- FAILED. Build FAILED. ========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ========== В ошибках:
      Severity Code Description Project File Line Error recipe for target 'library.o' failed RF D:\Circuits\AvrProjects\RadioNanny\RF\Release\Makefile 79 Что находится в Makefile строка 78-82:
      78: ./%.o: .././%.c 79: @echo Building file: $< 80: @echo Invoking: AVR/GNU C Compiler : 5.4.0 81: $(QUOTE)D:\Circuits\AtmelStudio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DNDEBUG -I"D:\Circuits\AtmelStudio\7.0\Packs\atmel\ATtiny_DFP\1.2.118\include" -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -mmcu=attiny13 -B "D:\Circuits\AtmelStudio\7.0\Packs\atmel\ATtiny_DFP\1.2.118\gcc\dev\attiny13" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" 82: @echo Finished building: $< Перестало билдиться именно при ребилде. Если откатить изменения, и сделать просто билд - всё работает.
      Запускаю студию от администратора, т.е. с правами проблем нет. Да и по логике, если хватает прав удалить при clean файлы, то должно хватать и на создание.
      Вообще, мне не совсем понятна фраза recipe for target 'library.o' failed.
    • Автор: A1essandro
      Здравствуйте. Думаю кто-то сталкивался с таким.
      Пишу прошивку для двух контроллеров, которые будут общаться через RF модуль. Для них нужны некоторые общие настройки, например частота, время задержки при определенных действиях, и тд. Задавать в каждом проекте в коде - противоречит принципу DRY, да и вообще...
      Сделал два проекта, для передатчика и приемника. И сделал проект static library для общих настроек, назвал Common. Добавил референсы на статическую библиотеку.
      Определяю в common:
      unsigned char KEY = 0b10010110; Пытаюсь использовать в проекте передатчика:
      send(KEY); При ребилде получаю ошибку, что KEY не определена.