Главная › Форумы › Программирование микроконтроллеров › Программирование МК AVR
Помечено: AVR
- В этой теме 55 ответов, 42 участника, последнее обновление 3 месяца, 4 недели назад сделано Alexmaks.
-
АвторСообщения
-
Январь 23, 2019 в 3:13 пп #17656rulotУчастник
Добрый день. Сегодня на дворе 2019 год, но по прежнему AVR актуальна, так как эти контроллеры более доступны да и программ под них написано не мало.
Я понимаю, что уроки по AVR уже давно прошли, но у меня возник вопрос.
В уроке 21″Управление DS1307 кнопками» при компиляции программного кода выводит ошибку на этот код
инициализации портов BUTTONDDR &= ~((1<<BUTTONDDR3)|(1<<BUTTONDDR2)|(1<<BUTTONDDR1));// где ножки
кнопок на вход. В общем типа они не объявлены, хотя в начале программы они продефайнены.
Решил указать явным образом вот так — BUTTONDDR = 0b00000010;
BUTTONDDR = 0b00000100;
BUTTONDDR = 0b00001000;. Почему то только так видит компилятор инициализацию.Февраль 15, 2019 в 1:06 пп #17668juliyaУчастникЗдравствуйте! Смотрю ваш урок https://www.youtube.com/watch?v=g7d0IUXscOQ&feature=youtu.be Программирование МК AVR. Урок 2. Создание проекта в Atmel Studio. После создания проекта и выбора контроллера Atmega8 на вкладке Project -> Properties -> Tool нет возможности выбрать Simulator, Select debagger/programmer список пустой, и надпись «unsupported tools*device combination». Это для любого контроллера. Подскажите пожалуйста как это исправить? Спасибо!
Февраль 17, 2019 в 12:04 пп #17669talichУчастникПроблема может быть в обновлениях win, если под ней работаете. Люди в сети тоже мучаются. У меня 10ка лицензия, студия 7 — стимулятор работает.
Апрель 7, 2019 в 9:41 дп #18149AlexMerserУчастникЗдравствуйте, нужна помощь в написании дипломной работы на тему: «Разработка индикатора непрерывности цепи заземления специальной аппаратуры». А именно: есть готовый код прошивки микроконтроллера Attiny 13 ( без комментариев) и алгоритм его работы(составлял программист, который уволился и в общем-то связь с ним потеряна). Нужно подробно закомментировать каждую строку кода, чтобы было понятно даже новичку в программировании. Если возьметесь, пишите на почту filatov.alex1996@mail.ru . О цене и сроках готовности договоримся.
Октябрь 12, 2019 в 5:33 пп #20092Andrey_47УчастникХочу создать виртуальный порт для того, чтобы выводы из разных реальных портов можно было бы объединить в один виртуальный.
Решил для начала попробовать с помощью указателей создать переменную, и, чтобы с помощью этой переменной менять значение вывода одного из портов (PORTA0)
Вот как я это пытался делать:
#define F_CPU 8000000UL
#include <avr/io.h>int *a;
int main(void)
{
DDRA |= (1<<0);
a = &PA0;
*a = 1;while (1)
{
}
}Разумеется ничего не компилируется, потому что вид записи типа a = &PA0; является неправильным.
Подскажите пожалуйста как сделать правильный вид записи, чтобы с помощью переменной менять уровень одного из выводов порта??? И, если не сложно, то как потом собрать виртуальный порт из переменных?
Февраль 11, 2020 в 3:15 пп #20855oleg76УчастникДобрый день. AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 6
Подскажите как через if(clockmode==DAY) ledprint(day*1000,DAY); вывести символы дня недели?Февраль 20, 2020 в 1:45 пп #20869Tester1992УчастникДобрый день, скажите пожалуйста кто мог бы за оплату, помочь сделать 2 контрольных работы (только код и алгоритм) микроконтроллера ATMega48.
1) Светодиоды включаются по очереди, создавая эффект бегущих огней следующим образом: слева направо, справа налево слева-направо и т.д. После нажатия кнопки SW4 процесс останавливается и начинается сначала через 5 с.
и
2) После нажатия на кнопку SW3 («Старт») формируется запрос на прерывание INT1, в результате обработки которого последовательно с интервалом в 2 с происходит включение светодиодов, начиная с LED0 и до LED7, а затем происходит их выключение, в той же последовательности. После нажатия на кнопку SW2 («Стоп») формируется запрос на прерывание INT0, в результате обработки которого выключаются все светодиоды, и процесс их включения останавливается.
Напишите мне пожалуйста на имел kristine12716@yahoo.com
Заранее спасибо!
Апрель 3, 2020 в 4:39 пп #21337Vadim888УчастникЗдравствуйте!
В 10 уроке Таймеры-счетчики не могу понять код TCCR1B |= (); А именно что обозначают скобки ()??
То что TCCR1B присваивается результат логического сложения TCCR1B и ( ) это понятно. Непонятно что обозначают скобки ( )?
Подскажите пожалуйста.
Июнь 13, 2020 в 3:07 дп #21725prostotip13УчастникВсем доброго времени суток!!! Хочу обратиться за помощью по восстановлении управления камерой LAICE LSD-364, в неё ударило грозой, сгорел МК atmega 2561 16au, МК заменил но вот где взять прошивку или дамп на него не знаю, подскажите как быть перелопатил кучу прошивок но не одна не встала. Видео сигнал идёт, движки целые, зум работает, камера полностью исправна за исключением МК? Или можно хотя бы частично восстановить управление камерой, ну там просто вперед, назад, влево, вправо?Ну или дайте хотя бы контакт с кем можно связаться для того что бы написали ПО управления, очень нужно восстановить данную камеру, а возможности приобрести новую сейчас к сожалению нет
Июнь 13, 2020 в 5:21 пп #21726OrtosУчастникМогу сбросить готовый проэкт
Июнь 14, 2020 в 10:26 пп #21727SwedУчастникРебят привет, я новичек в AVR мне задали задание сделать лед матрицу 8×8 где в начале загарается только 1 диод. И каждые 0,5 сек рядом с ним загораются следующие светодиоды
в направлении указателя по периметру матрицы. Предыдущие светодиоды горят.
Когда все светодиоды по периметру включены, алгоритм повторяется.Июль 31, 2020 в 10:37 дп #22047Walle LogУчастникЗдравствуйте, в комментарии к уроку 32 по AVR (LCD дисплей 20×4) по поводу русификации дисплея ссылку на таблицу знакогенератора заблокировали, поэтому для целостности изложения оставлю ссылку здесь: Русификация дисплея 20×4 в Proteus (пост #106)
- Ответ изменён 4 года, 4 месяца назад пользователем Narod Stream. Причина: Внешняя ссылка
Июль 31, 2020 в 10:40 дп #22049Narod StreamХранительТоварищи! Старайтесь на данном ресурсе не использовать внешние ссылки. Либо объясняйте как-то без этого, либо кидайтесь ссылками в личной переписке.
Июль 31, 2020 в 10:43 дп #22050Walle LogУчастникПростите, сложно донести мысль без их использования…
Октябрь 2, 2020 в 5:20 пп #22175augadi@mail.ruУчастникПомогите переписать программу с BASCOM-AVR на атмел студио
———————————-
$regfile = «m8adef.dat» ‘ATmega8A
$crystal = 8000000 ‘8МГц (деление на 8 отключить)
$baud = 9600 ‘——————————————————————————
Ddrb = &B11111111 ‘PB7, PB6, PB5, PB4, PB3, PB2, PB1, PB0
Ddrc = &B11111111 ‘N/C, RESET, PC5, PC4, PC3, PC2, PC1, PC0
Ddrd = &B11001010 ‘PD7, PD6, PD5, PD4, PD3, PD2, TXD, RXD
‘——————————————————————————
Dim Count_led As Byte ‘счетная переменная
Dim Count_debounce As Byte ‘счетная переменная
Dim N(3) As Integer ‘значения трех разрядовDim Wt As Byte ‘регулировка времени открытия симистора
Dim Led As Byte ‘индикация мощности
‘——————————————————————————
Config Int0 = Falling ‘вход детектора 0
On Int0 Imp_0 ‘обработка прерывания INT0
‘——————————————————————————
Config Timer0 = Timer , Prescale = 1024 ‘переполнение каждые 0,032сек.
On Timer0 Perepolnenie_0 ‘обработка прерывания TIMER0
‘——————————————————————————
Dig1 Alias Portc.1 ‘сотни
Dig2 Alias Portc.3 ‘десятки
Dig3 Alias Portc.5 ‘единицыOpto Alias Portd.3 ‘управление симистором
Up_button Alias Pind.4 ‘кнопка UP
Down_button Alias Pind.5 ‘кнопка DOWNBuzzer Alias Portd.6 ‘пищалка
‘——————————————————————————
Enable Interrupts ‘разрешаем использование прерываний
Enable Timer0 ‘разрешаем прерывание по переполнению TIMER0
Enable Int0 ‘разрешаем внешнее прерывание INT0
‘——————————————————————————
Wt = 195 ‘минимальный накалMaine: ‘основной цикл
Do
If Count_debounce > 40 Then Reset Buzzer ‘антидребезг
Gosub Refresh_led ‘обработка индикации
If Up_button = 0 And Buzzer = 0 Then
If Wt < 255 Then Wt = Wt + 6 ‘увеличиваем мощность
Set Buzzer ‘пикаем
Count_debounce = 0 ‘сбрасываем счетчик антидребезга
End IfIf Down_button = 0 And Buzzer = 0 Then
If Wt > 195 Then Wt = Wt — 6 ‘уменьшаем мощность
Set Buzzer ‘пикаем
Count_debounce = 0 ‘сбрасываем счетчик антидребезга
End IfSelect Case Wt ‘соответствие открытия симистора % мощности
Case 195 : Led = 1
Case 201 : Led = 10
Case 207 : Led = 20
Case 213 : Led = 30
Case 219 : Led = 40
Case 225 : Led = 50
Case 231 : Led = 60
Case 237 : Led = 70
Case 243 : Led = 80
Case 249 : Led = 90
Case 255 : Led = 100
End SelectLoop
End
‘——————————————————————————
Refresh_led: ‘подготовка данных для вывода на индикаторN(1) = Led ‘разбиваем число на цифры
N(2) = N(1)
N(3) = N(1)N(1) = N(1) / 100 ‘1 цифра
N(1) = Abs(n(1))N(2) = N(2) Mod 100 ‘2 цифра
N(2) = N(2) / 10
N(2) = Abs(n(2))N(3) = N(3) Mod 10 ‘3 цифра
N(3) = Abs(n(3))Incr Count_led ‘выбираем разряд для загрузки
If Count_led > 3 Then Count_led = 1 ‘всего 3 разрядаSet Dig1 : Set Dig2 : Set Dig3 ‘гасим индикатор
Portb = Lookup(n(count_led) , Digits) ‘закидываем в порт код цифры
Select Case Count_led ‘включаем соответствующий разряд индикатора
Case 1 : If N(1) <> 0 Then Reset Dig1 ‘гашение незначащего 0 в 1 разряде
Case 2 : If N(3) <> 1 Then Reset Dig2 ‘гашение незначащего 0 в 2 разряде
Case 3 : Reset Dig3 ‘3 разряд
End SelectWaitms 2 ‘частота обновления индикатора
Return
‘——————————————————————————
Imp_0: ‘прерывание от детектора нуляTimer0 = Wt ‘чем большее значение, тем быстрее переполнится таймер
Start Timer0Return
‘——————————————————————————
Perepolnenie_0: ‘переполнение TIMER0Stop Timer0
Set Opto ‘включение симистора
Waitus 100 ‘курим
Reset Opto ‘выключение симистораIncr Count_debounce ‘антидребезг
Return
‘——————————————————————————
Digits: ‘цифры, выводимые на LED-индикаторData &B00000011 , &B10011111 , &B00100101 , &B00001101 , &B10011001 ‘0 1 2 3 4
Data &B01001001 , &B01000001 , &B00011111 , &B00000001 , &B00001001 ‘5 6 7 8 9
‘—————————————————————————— -
АвторСообщения
-
АвторСообщения
-
Добрый день. Сегодня на дворе 2019 год, но по прежнему AVR актуальна, так как эти контроллеры более доступны да и программ под них написано не мало.
Я понимаю, что уроки по AVR уже давно прошли, но у меня возник вопрос.
В уроке 21″Управление DS1307 кнопками» при компиляции программного кода выводит ошибку на этот код
инициализации портов BUTTONDDR &= ~((1<<BUTTONDDR3)|(1<<BUTTONDDR2)|(1<<BUTTONDDR1));// где ножки
кнопок на вход. В общем типа они не объявлены, хотя в начале программы они продефайнены.
Решил указать явным образом вот так — BUTTONDDR = 0b00000010;
BUTTONDDR = 0b00000100;
BUTTONDDR = 0b00001000;. Почему то только так видит компилятор инициализацию.Здравствуйте! Смотрю ваш урок https://www.youtube.com/watch?v=g7d0IUXscOQ&feature=youtu.be Программирование МК AVR. Урок 2. Создание проекта в Atmel Studio. После создания проекта и выбора контроллера Atmega8 на вкладке Project -> Properties -> Tool нет возможности выбрать Simulator, Select debagger/programmer список пустой, и надпись «unsupported tools*device combination». Это для любого контроллера. Подскажите пожалуйста как это исправить? Спасибо!
Проблема может быть в обновлениях win, если под ней работаете. Люди в сети тоже мучаются. У меня 10ка лицензия, студия 7 — стимулятор работает.
Здравствуйте, нужна помощь в написании дипломной работы на тему: «Разработка индикатора непрерывности цепи заземления специальной аппаратуры». А именно: есть готовый код прошивки микроконтроллера Attiny 13 ( без комментариев) и алгоритм его работы(составлял программист, который уволился и в общем-то связь с ним потеряна). Нужно подробно закомментировать каждую строку кода, чтобы было понятно даже новичку в программировании. Если возьметесь, пишите на почту filatov.alex1996@mail.ru . О цене и сроках готовности договоримся.
Хочу создать виртуальный порт для того, чтобы выводы из разных реальных портов можно было бы объединить в один виртуальный.
Решил для начала попробовать с помощью указателей создать переменную, и, чтобы с помощью этой переменной менять значение вывода одного из портов (PORTA0)
Вот как я это пытался делать:
#define F_CPU 8000000UL
#include <avr/io.h>int *a;
int main(void)
{
DDRA |= (1<<0);
a = &PA0;
*a = 1;while (1)
{
}
}Разумеется ничего не компилируется, потому что вид записи типа a = &PA0; является неправильным.
Подскажите пожалуйста как сделать правильный вид записи, чтобы с помощью переменной менять уровень одного из выводов порта??? И, если не сложно, то как потом собрать виртуальный порт из переменных?
Добрый день. AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 6
Подскажите как через if(clockmode==DAY) ledprint(day*1000,DAY); вывести символы дня недели?Добрый день, скажите пожалуйста кто мог бы за оплату, помочь сделать 2 контрольных работы (только код и алгоритм) микроконтроллера ATMega48.
1) Светодиоды включаются по очереди, создавая эффект бегущих огней следующим образом: слева направо, справа налево слева-направо и т.д. После нажатия кнопки SW4 процесс останавливается и начинается сначала через 5 с.
и
2) После нажатия на кнопку SW3 («Старт») формируется запрос на прерывание INT1, в результате обработки которого последовательно с интервалом в 2 с происходит включение светодиодов, начиная с LED0 и до LED7, а затем происходит их выключение, в той же последовательности. После нажатия на кнопку SW2 («Стоп») формируется запрос на прерывание INT0, в результате обработки которого выключаются все светодиоды, и процесс их включения останавливается.
Напишите мне пожалуйста на имел kristine12716@yahoo.com
Заранее спасибо!
Здравствуйте!
В 10 уроке Таймеры-счетчики не могу понять код TCCR1B |= (); А именно что обозначают скобки ()??
То что TCCR1B присваивается результат логического сложения TCCR1B и ( ) это понятно. Непонятно что обозначают скобки ( )?
Подскажите пожалуйста.
Всем доброго времени суток!!! Хочу обратиться за помощью по восстановлении управления камерой LAICE LSD-364, в неё ударило грозой, сгорел МК atmega 2561 16au, МК заменил но вот где взять прошивку или дамп на него не знаю, подскажите как быть перелопатил кучу прошивок но не одна не встала. Видео сигнал идёт, движки целые, зум работает, камера полностью исправна за исключением МК? Или можно хотя бы частично восстановить управление камерой, ну там просто вперед, назад, влево, вправо?Ну или дайте хотя бы контакт с кем можно связаться для того что бы написали ПО управления, очень нужно восстановить данную камеру, а возможности приобрести новую сейчас к сожалению нет
Могу сбросить готовый проэкт
Ребят привет, я новичек в AVR мне задали задание сделать лед матрицу 8×8 где в начале загарается только 1 диод. И каждые 0,5 сек рядом с ним загораются следующие светодиоды
в направлении указателя по периметру матрицы. Предыдущие светодиоды горят.
Когда все светодиоды по периметру включены, алгоритм повторяется.Здравствуйте, в комментарии к уроку 32 по AVR (LCD дисплей 20×4) по поводу русификации дисплея ссылку на таблицу знакогенератора заблокировали, поэтому для целостности изложения оставлю ссылку здесь: Русификация дисплея 20×4 в Proteus (пост #106)
- Ответ изменён 4 года, 4 месяца назад пользователем Narod Stream. Причина: Внешняя ссылка
Товарищи! Старайтесь на данном ресурсе не использовать внешние ссылки. Либо объясняйте как-то без этого, либо кидайтесь ссылками в личной переписке.
Простите, сложно донести мысль без их использования…
Помогите переписать программу с BASCOM-AVR на атмел студио
———————————-
$regfile = «m8adef.dat» ‘ATmega8A
$crystal = 8000000 ‘8МГц (деление на 8 отключить)
$baud = 9600 ‘——————————————————————————
Ddrb = &B11111111 ‘PB7, PB6, PB5, PB4, PB3, PB2, PB1, PB0
Ddrc = &B11111111 ‘N/C, RESET, PC5, PC4, PC3, PC2, PC1, PC0
Ddrd = &B11001010 ‘PD7, PD6, PD5, PD4, PD3, PD2, TXD, RXD
‘——————————————————————————
Dim Count_led As Byte ‘счетная переменная
Dim Count_debounce As Byte ‘счетная переменная
Dim N(3) As Integer ‘значения трех разрядовDim Wt As Byte ‘регулировка времени открытия симистора
Dim Led As Byte ‘индикация мощности
‘——————————————————————————
Config Int0 = Falling ‘вход детектора 0
On Int0 Imp_0 ‘обработка прерывания INT0
‘——————————————————————————
Config Timer0 = Timer , Prescale = 1024 ‘переполнение каждые 0,032сек.
On Timer0 Perepolnenie_0 ‘обработка прерывания TIMER0
‘——————————————————————————
Dig1 Alias Portc.1 ‘сотни
Dig2 Alias Portc.3 ‘десятки
Dig3 Alias Portc.5 ‘единицыOpto Alias Portd.3 ‘управление симистором
Up_button Alias Pind.4 ‘кнопка UP
Down_button Alias Pind.5 ‘кнопка DOWNBuzzer Alias Portd.6 ‘пищалка
‘——————————————————————————
Enable Interrupts ‘разрешаем использование прерываний
Enable Timer0 ‘разрешаем прерывание по переполнению TIMER0
Enable Int0 ‘разрешаем внешнее прерывание INT0
‘——————————————————————————
Wt = 195 ‘минимальный накалMaine: ‘основной цикл
Do
If Count_debounce > 40 Then Reset Buzzer ‘антидребезг
Gosub Refresh_led ‘обработка индикации
If Up_button = 0 And Buzzer = 0 Then
If Wt < 255 Then Wt = Wt + 6 ‘увеличиваем мощность
Set Buzzer ‘пикаем
Count_debounce = 0 ‘сбрасываем счетчик антидребезга
End IfIf Down_button = 0 And Buzzer = 0 Then
If Wt > 195 Then Wt = Wt — 6 ‘уменьшаем мощность
Set Buzzer ‘пикаем
Count_debounce = 0 ‘сбрасываем счетчик антидребезга
End IfSelect Case Wt ‘соответствие открытия симистора % мощности
Case 195 : Led = 1
Case 201 : Led = 10
Case 207 : Led = 20
Case 213 : Led = 30
Case 219 : Led = 40
Case 225 : Led = 50
Case 231 : Led = 60
Case 237 : Led = 70
Case 243 : Led = 80
Case 249 : Led = 90
Case 255 : Led = 100
End SelectLoop
End
‘——————————————————————————
Refresh_led: ‘подготовка данных для вывода на индикаторN(1) = Led ‘разбиваем число на цифры
N(2) = N(1)
N(3) = N(1)N(1) = N(1) / 100 ‘1 цифра
N(1) = Abs(n(1))N(2) = N(2) Mod 100 ‘2 цифра
N(2) = N(2) / 10
N(2) = Abs(n(2))N(3) = N(3) Mod 10 ‘3 цифра
N(3) = Abs(n(3))Incr Count_led ‘выбираем разряд для загрузки
If Count_led > 3 Then Count_led = 1 ‘всего 3 разрядаSet Dig1 : Set Dig2 : Set Dig3 ‘гасим индикатор
Portb = Lookup(n(count_led) , Digits) ‘закидываем в порт код цифры
Select Case Count_led ‘включаем соответствующий разряд индикатора
Case 1 : If N(1) <> 0 Then Reset Dig1 ‘гашение незначащего 0 в 1 разряде
Case 2 : If N(3) <> 1 Then Reset Dig2 ‘гашение незначащего 0 в 2 разряде
Case 3 : Reset Dig3 ‘3 разряд
End SelectWaitms 2 ‘частота обновления индикатора
Return
‘——————————————————————————
Imp_0: ‘прерывание от детектора нуляTimer0 = Wt ‘чем большее значение, тем быстрее переполнится таймер
Start Timer0Return
‘——————————————————————————
Perepolnenie_0: ‘переполнение TIMER0Stop Timer0
Set Opto ‘включение симистора
Waitus 100 ‘курим
Reset Opto ‘выключение симистораIncr Count_debounce ‘антидребезг
Return
‘——————————————————————————
Digits: ‘цифры, выводимые на LED-индикаторData &B00000011 , &B10011111 , &B00100101 , &B00001101 , &B10011001 ‘0 1 2 3 4
Data &B01001001 , &B01000001 , &B00011111 , &B00000001 , &B00001001 ‘5 6 7 8 9
‘—————————————————————————— -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.