Программирование МК AVR

 

 

 

Помечено: 

Просмотр 15 сообщений - с 31 по 45 (из 45 всего)
  • Автор
    Сообщения
  • #17656
    rulot
    Участник

    Добрый день. Сегодня на дворе 2019 год, но по прежнему AVR актуальна, так как эти контроллеры более доступны да и программ под них написано не мало.
    Я понимаю, что уроки по AVR уже давно прошли, но у меня возник вопрос.
    В уроке 21″Управление DS1307 кнопками” при компиляции программного кода выводит ошибку на этот код
    инициализации портов BUTTONDDR &= ~((1<<BUTTONDDR3)|(1<<BUTTONDDR2)|(1<<BUTTONDDR1));// где ножки
    кнопок на вход. В общем типа они не объявлены, хотя в начале программы они продефайнены.
    Решил указать явным образом вот так – BUTTONDDR = 0b00000010;
    BUTTONDDR = 0b00000100;
    BUTTONDDR = 0b00001000;. Почему то только так видит компилятор инициализацию.

    #17668
    juliya
    Участник

    Здравствуйте! Смотрю ваш урок 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”. Это для любого контроллера. Подскажите пожалуйста как это исправить? Спасибо!

    #17669
    talich
    Участник

    Проблема может быть в обновлениях win, если под ней работаете. Люди в сети тоже мучаются. У меня 10ка лицензия, студия 7 – стимулятор работает.

    #18149
    AlexMerser
    Участник

    Здравствуйте, нужна помощь в написании дипломной работы на тему: “Разработка индикатора непрерывности цепи заземления специальной аппаратуры”. А именно: есть готовый код прошивки микроконтроллера Attiny 13 ( без комментариев) и алгоритм его работы(составлял программист, который уволился и в общем-то связь с ним потеряна). Нужно подробно закомментировать каждую строку кода, чтобы было понятно даже новичку в программировании. Если возьметесь, пишите на почту filatov.alex1996@mail.ru . О цене и сроках готовности договоримся.

    #20092
    Andrey_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; является неправильным.

    Подскажите пожалуйста как сделать правильный вид записи, чтобы с помощью переменной менять уровень одного из выводов порта??? И, если не сложно, то как потом собрать виртуальный порт из переменных?

    #20855
    oleg76
    Участник

    Добрый день. AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 6
    Подскажите как через if(clockmode==DAY) ledprint(day*1000,DAY); вывести символы дня недели?

    #20869
    Tester1992
    Участник

    Добрый день, скажите пожалуйста кто мог бы за оплату, помочь сделать 2 контрольных работы (только код и алгоритм) микроконтроллера ATMega48.

    1) Светодиоды включаются по очереди, создавая эффект бегущих огней следующим образом: слева направо, справа налево слева-направо и т.д. После нажатия кнопки SW4 процесс останавливается и начинается сначала через 5 с.

    и

    2) После нажатия на кнопку SW3 («Старт») формируется запрос на прерывание INT1, в результате обработки которого последовательно с интервалом в 2 с происходит включение светодиодов, начиная с LED0 и до LED7, а затем происходит их выключение, в той же последовательности. После нажатия на кнопку SW2 («Стоп») формируется запрос на прерывание INT0, в результате обработки которого выключаются все светодиоды, и процесс их включения останавливается.

    Напишите мне пожалуйста на имел kristine12716@yahoo.com

    Заранее спасибо!

    #21337
    Vadim888
    Участник

    Здравствуйте!

    В 10 уроке Таймеры-счетчики не могу понять код TCCR1B |= (); А именно что обозначают скобки ()??

    То что TCCR1B присваивается результат логического сложения TCCR1B и ( ) это понятно. Непонятно что обозначают скобки ( )?

    Подскажите пожалуйста.

    #21725
    prostotip13
    Участник

    Всем доброго времени суток!!! Хочу обратиться за помощью по восстановлении управления камерой LAICE LSD-364, в неё ударило грозой, сгорел МК atmega 2561 16au, МК заменил но вот где взять прошивку или дамп на него не знаю, подскажите как быть перелопатил кучу прошивок но не одна не встала. Видео сигнал идёт, движки целые, зум работает, камера полностью исправна за исключением МК? Или можно хотя бы частично восстановить управление камерой, ну там просто вперед, назад, влево, вправо?Ну или дайте хотя бы контакт с кем можно связаться для того что бы написали ПО управления, очень нужно восстановить данную камеру, а возможности приобрести новую сейчас к сожалению нет

    #21726
    Ortos
    Участник

    Могу сбросить готовый проэкт

    #21727
    Swed
    Участник

    Ребят привет, я новичек в AVR мне задали задание сделать лед матрицу 8×8 где в начале загарается только 1 диод. И каждые 0,5 сек рядом с ним загораются следующие светодиоды
    в направлении указателя по периметру матрицы. Предыдущие светодиоды горят.
    Когда все светодиоды по периметру включены, алгоритм повторяется.

    #22047
    Walle Log
    Участник

    Здравствуйте, в комментарии к уроку 32 по AVR (LCD дисплей 20×4) по поводу русификации дисплея ссылку на таблицу знакогенератора заблокировали, поэтому для целостности изложения оставлю ссылку здесь: Русификация дисплея 20×4 в Proteus (пост #106)

    • Ответ изменён 2 месяца, 3 недели назад пользователем Narod Stream. Причина: Внешняя ссылка
    #22049
    Narod Stream
    Хранитель

    Товарищи! Старайтесь на данном ресурсе не использовать внешние ссылки. Либо объясняйте как-то без этого, либо кидайтесь ссылками в личной переписке.

    #22050
    Walle Log
    Участник

    Простите, сложно донести мысль без их использования…

    #22175
    augadi@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 ‘кнопка DOWN

    Buzzer 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 If

    If Down_button = 0 And Buzzer = 0 Then
    If Wt > 195 Then Wt = Wt – 6 ‘уменьшаем мощность
    Set Buzzer ‘пикаем
    Count_debounce = 0 ‘сбрасываем счетчик антидребезга
    End If

    Select 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 Select

    Loop
    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 Select

    Waitms 2 ‘частота обновления индикатора

    Return
    ‘——————————————————————————
    Imp_0: ‘прерывание от детектора нуля

    Timer0 = Wt ‘чем большее значение, тем быстрее переполнится таймер
    Start Timer0

    Return
    ‘——————————————————————————
    Perepolnenie_0: ‘переполнение TIMER0

    Stop 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
    ‘——————————————————————————

  • Автор
    Сообщения
  • #17656

    rulot
    Участник
    • Оффлайн

    Добрый день. Сегодня на дворе 2019 год, но по прежнему AVR актуальна, так как эти контроллеры более доступны да и программ под них написано не мало.
    Я понимаю, что уроки по AVR уже давно прошли, но у меня возник вопрос.
    В уроке 21″Управление DS1307 кнопками” при компиляции программного кода выводит ошибку на этот код
    инициализации портов BUTTONDDR &= ~((1<<BUTTONDDR3)|(1<<BUTTONDDR2)|(1<<BUTTONDDR1));// где ножки
    кнопок на вход. В общем типа они не объявлены, хотя в начале программы они продефайнены.
    Решил указать явным образом вот так – BUTTONDDR = 0b00000010;
    BUTTONDDR = 0b00000100;
    BUTTONDDR = 0b00001000;. Почему то только так видит компилятор инициализацию.

    #17668

    juliya
    Участник
    • Оффлайн

    Здравствуйте! Смотрю ваш урок 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”. Это для любого контроллера. Подскажите пожалуйста как это исправить? Спасибо!

    #17669

    talich
    Участник
    • Оффлайн

    Проблема может быть в обновлениях win, если под ней работаете. Люди в сети тоже мучаются. У меня 10ка лицензия, студия 7 – стимулятор работает.

    #18149

    AlexMerser
    Участник
    • Оффлайн

    Здравствуйте, нужна помощь в написании дипломной работы на тему: “Разработка индикатора непрерывности цепи заземления специальной аппаратуры”. А именно: есть готовый код прошивки микроконтроллера Attiny 13 ( без комментариев) и алгоритм его работы(составлял программист, который уволился и в общем-то связь с ним потеряна). Нужно подробно закомментировать каждую строку кода, чтобы было понятно даже новичку в программировании. Если возьметесь, пишите на почту filatov.alex1996@mail.ru . О цене и сроках готовности договоримся.

    #20092

    Andrey_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; является неправильным.

    Подскажите пожалуйста как сделать правильный вид записи, чтобы с помощью переменной менять уровень одного из выводов порта??? И, если не сложно, то как потом собрать виртуальный порт из переменных?

    #20855

    oleg76
    Участник
    • Оффлайн

    Добрый день. AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 6
    Подскажите как через if(clockmode==DAY) ledprint(day*1000,DAY); вывести символы дня недели?

    #20869

    Tester1992
    Участник
    • Оффлайн

    Добрый день, скажите пожалуйста кто мог бы за оплату, помочь сделать 2 контрольных работы (только код и алгоритм) микроконтроллера ATMega48.

    1) Светодиоды включаются по очереди, создавая эффект бегущих огней следующим образом: слева направо, справа налево слева-направо и т.д. После нажатия кнопки SW4 процесс останавливается и начинается сначала через 5 с.

    и

    2) После нажатия на кнопку SW3 («Старт») формируется запрос на прерывание INT1, в результате обработки которого последовательно с интервалом в 2 с происходит включение светодиодов, начиная с LED0 и до LED7, а затем происходит их выключение, в той же последовательности. После нажатия на кнопку SW2 («Стоп») формируется запрос на прерывание INT0, в результате обработки которого выключаются все светодиоды, и процесс их включения останавливается.

    Напишите мне пожалуйста на имел kristine12716@yahoo.com

    Заранее спасибо!

    #21337

    Vadim888
    Участник
    • Оффлайн

    Здравствуйте!

    В 10 уроке Таймеры-счетчики не могу понять код TCCR1B |= (); А именно что обозначают скобки ()??

    То что TCCR1B присваивается результат логического сложения TCCR1B и ( ) это понятно. Непонятно что обозначают скобки ( )?

    Подскажите пожалуйста.

    #21725

    prostotip13
    Участник
    • Оффлайн

    Всем доброго времени суток!!! Хочу обратиться за помощью по восстановлении управления камерой LAICE LSD-364, в неё ударило грозой, сгорел МК atmega 2561 16au, МК заменил но вот где взять прошивку или дамп на него не знаю, подскажите как быть перелопатил кучу прошивок но не одна не встала. Видео сигнал идёт, движки целые, зум работает, камера полностью исправна за исключением МК? Или можно хотя бы частично восстановить управление камерой, ну там просто вперед, назад, влево, вправо?Ну или дайте хотя бы контакт с кем можно связаться для того что бы написали ПО управления, очень нужно восстановить данную камеру, а возможности приобрести новую сейчас к сожалению нет

    #21726

    Ortos
    Участник
    • Оффлайн

    Могу сбросить готовый проэкт

    #21727

    Swed
    Участник
    • Оффлайн

    Ребят привет, я новичек в AVR мне задали задание сделать лед матрицу 8×8 где в начале загарается только 1 диод. И каждые 0,5 сек рядом с ним загораются следующие светодиоды
    в направлении указателя по периметру матрицы. Предыдущие светодиоды горят.
    Когда все светодиоды по периметру включены, алгоритм повторяется.

    #22047

    Walle Log
    Участник
    • Оффлайн

    Здравствуйте, в комментарии к уроку 32 по AVR (LCD дисплей 20×4) по поводу русификации дисплея ссылку на таблицу знакогенератора заблокировали, поэтому для целостности изложения оставлю ссылку здесь: Русификация дисплея 20×4 в Proteus (пост #106)

    • Ответ изменён 2 месяца, 3 недели назад пользователем Narod Stream. Причина: Внешняя ссылка
    #22049

    Narod Stream
    Хранитель
    • Оффлайн

    Товарищи! Старайтесь на данном ресурсе не использовать внешние ссылки. Либо объясняйте как-то без этого, либо кидайтесь ссылками в личной переписке.

    #22050

    Walle Log
    Участник
    • Оффлайн

    Простите, сложно донести мысль без их использования…

    #22175

    augadi@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 ‘кнопка DOWN

    Buzzer 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 If

    If Down_button = 0 And Buzzer = 0 Then
    If Wt > 195 Then Wt = Wt – 6 ‘уменьшаем мощность
    Set Buzzer ‘пикаем
    Count_debounce = 0 ‘сбрасываем счетчик антидребезга
    End If

    Select 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 Select

    Loop
    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 Select

    Waitms 2 ‘частота обновления индикатора

    Return
    ‘——————————————————————————
    Imp_0: ‘прерывание от детектора нуля

    Timer0 = Wt ‘чем большее значение, тем быстрее переполнится таймер
    Start Timer0

    Return
    ‘——————————————————————————
    Perepolnenie_0: ‘переполнение TIMER0

    Stop 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
    ‘——————————————————————————

Просмотр 15 сообщений - с 31 по 45 (из 45 всего)
  • Для ответа в этой теме необходимо авторизоваться.