Программирование МК AVR
Главная › Форумы › Программирование микроконтроллеров › Программирование МК AVR
Помечено: AVR
- В этой теме 57 ответов, 44 участника, последнее обновление 5 месяцев, 1 неделя назад сделано
ZenProg.
-
АвторСообщения
-
23 января, 2019 в 3:13 пп #17656
rulot
УчастникДобрый день. Сегодня на дворе 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)
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
‘—————————————————————————— -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.

