Jump to content
admin

Видеокурс по AVR-микроконтроллерам для начинающих

Recommended Posts

Посмотрите уроки с начала - и вы найдете ответы на ваши вопросы. Я специально обьяснял регистровые сдвиги! :)


коплю на мечту - Днепр К750

Share this post


Link to post
Share on other sites

Здравствуйте! Я попробывал сделать ДЗ к 5 видеоуроку, только у меня произвольно мигают все светодиоды одного из портов.

Вот код:

#include <mega8.h>

#include <delay.h>

#include <stdlib.h>

void preset(){

DDRB=0xff;

PORTB=0b00000000;

DDRC=0xff;

PORTC=0b00000000;

DDRD=0xff;

PORTD=0b00000000;

}

void main(void)

{

unsigned int f_number;

int i;

preset();

while (1)

{

f_number = rand()>>3;

switch (f_number)

{

case 0:

for(i=0;i<=7;i++)

{

PORTB = (1<<i);

delay_ms(50);

}

break;

case 1:

for(i=7;i>=0;i--)

{

PORTC = (1<<i);

delay_ms(50);

}

break;

case 2:

for(i=0;i<=7;i++)

{

PORTD = (1<<i);

delay_ms(50);

}

break;

}

};

}

Врпрос: а как правильно сделать, чтобы мигали только по одному из светодиодов каких-либо портов? Ну вобщем по условию домашнего задания к 5 уроку?

Работа с портами часть 3.rar

Edited by vitaliy_glata

Share this post


Link to post
Share on other sites

Приветствую всех!!! :bye:

Такой вопрос можно ли на меге8 часть портов к примеру pc0,pc1,pc2 настроить как аналоговый преобразователь ,а рс3,рс4,рс5,pc6 как цифровой выход в одном проекте, и можно ли их менять и использовать то как выход то переключать и использовать как вход в одном проекте?.

Сложно ли мегу подключить к порту (com или usb) чтоб получать данные(с adc) или передавать данные(на pb).

И возможно ли цифровой сигнал преобразовать в аналоговый на данном устройстве ?

Уроки замечательные !!!! на 7 уроке мозг раз 6 отключался от урока -пытаясь понять как это можно применить на реальности в различных устройствах логических и аналоговых :moil: а может старым становлюсь

Share this post


Link to post
Share on other sites

Как сделать ИП с ультрашироким диапазоном?

Ключевыми особенностями высоковольтных SiC MOSFET Wolfspeed являются малое сопротивление канала в открытом состоянии и минимальное значение паразитных емкостей, что позволяет максимально снизить статические и динамические потери, и, соответственно, увеличить рабочую частоту преобразователей.

Подробнее

Разве в уроках не сказано, что разные линии одного порта почти независимы друг от друга?

То есть можно настроить скажем PC0 - аналоговый вход, PC1 - цифровой вход, PC2 - цифровой выход, PC4,PC5 - альтернативная функция (I2C). Но питание у всего порта С общее (AVCC), так что если часть выводов используется как аналоговые, а часть как цифровые - получите помехи на аналоговых и пониженную точность. Поэтому для максимальной точности АЦП рекомендуется не вешать на выводы, соединенные с аналоговым мультиплексором, ничего, использующего большие токи и использовать специальный режим сна.

Но если особая точность не нужна - не страшно.

К usb есть готовая библиотека (vusb). Простейшую программу с ее использованием написать несложно, для большего придется разбираться.

С аналоговыми сигналами ядро контроллера работать не умеет, для этого существуют АЦП и компаратор, делающий из них цифровые.


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Вебинар «Практика разработки IoT-устройств с BlueNRG-LP – волшебной палочкой разработчика» (23/03/2021)

Приглашаем 23 февраля на бесплатный практический вебинар по BlueNRG-LP - новой SoC STMicroelectronics. Будут рассмотрены новые возможности создания прототипов IoT-устройств на BlueNRG-LP с использованием экосистемы и отладочных средств ST, а также практические примеры по использованию BlueNRG-GUI v.4.0.0, настройке и работе в сети BLE-MESH, пример управления умным домом с помощью BlueNRG-LP и другие.

Подробнее

...Но питание у всего порта С общее (AVCC)...

Вот что об этом пишут в Atmel:

"AVCC is the supply voltage pin for the A/D Converter, Port C (3..0), and ADC (7..6). It should be

externally connected to VCC, even if the ADC is not used. If the ADC is used, it should be con-

nected to VCC through a low-pass filter. Note that Port C (5..4) use digital supply voltage, VCC."


Нет слова "не могу", есть слово "не хочу"...

Share this post


Link to post
Share on other sites

Материалы вебинара Практическое использование TrustZone в STM32L5

Материалы вебинара, посвященного экосистеме безопасности и возможностях, которые дает новая технология TrustZone в МК STM32L5, содержат две подробные практические работы: создание простого приложения с изоляцией в TrustZone, и пример отладки и тестирования TFM-SBSFU. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее

Спасибо за уроки, по ним начал делать измеритель уровня бензина на свою таврюшку старушку, конечно без лсд, его жалко туда лепить, просто ряд диодов будет стоять :dance2: . Жду с нетерпением следующего курса, если конечно будет.

Share this post


Link to post
Share on other sites
конечно без лсд
Это радует, находиться за рулем под такими веществами и правда не стоит. :-D

Если серьезно, научитесь, наконец, различать LSD (Lysergsäurediethylamid) / ЛСД (скорее, правда, ДЛК) и LCD (Liquid crystal display) / ЖК (жидкокристаллический) дисплей.


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Добрый день.Вопрос по заданиям к 7 уроку. Откуда мы в расчетах выводимого на экран значения взяли 30 и почему не удается измерить значение больше 24 вольт?

Lcd_printf(0,0,FONT_1X,((readADC(0)*2.56*(30/2.56))/1023),1);

Share this post


Link to post
Share on other sites

Привет. У меня вопрос по 6-му уроку, а точнее по "железу". Прошивка в Протеусе заработала нормально, а вот когда попробовал собрать это дело на макетке - горят все писели дисплея.

63771293c95daddbddcdce0a5b9f2f8a.jpg

Вообще расположение контактов на реальном дисплее отличается от тех, что на схеме в Протеусе. Я соединял следующим образом:

905e946ce192306ff72e98700f1b072e.jpg

Может я чего напутал?

Edited by Alex_Andr1

Share this post


Link to post
Share on other sites

Оказывается про контрастность говорится в начале 7-го урока!

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

Снизил напряжение питания на дисплей и всё пришло в норму.

Share this post


Link to post
Share on other sites

Всем привет! Подскажите пожалуйста как в CodeVisionAVR 2.05 добавить файлы n5110.h и n5110.с к проекту, чтобы начать программировать дисплей от Nokia?

Edited by vitaliy_glata

Share this post


Link to post
Share on other sites

В сети поищи книжку М.Б Лебедев «CodeVision AVR пособие для начинающих».

Сам я в CodeVisionAVR только прошиваю микроконтроллеры, потому что AVR Studio не поддерживает мой программатор.

Share this post


Link to post
Share on other sites

Спасибо за уроки, по ним начал делать измеритель уровня бензина на свою таврюшку старушку, конечно без лсд, его жалко туда лепить, просто ряд диодов будет стоять :dance2: . Жду с нетерпением следующего курса, если конечно будет.

а как на счет заменить диоды на двухрозрядный семисегметный индикатор? просто лаконично и практично! цыфрами покажет литры! Темболее они есть красные синие зеленые....

Добрый день.Вопрос по заданиям к 7 уроку. Откуда мы в расчетах выводимого на экран значения взяли 30 и почему не удается измерить значение больше 24 вольт?

Lcd_printf(0,0,FONT_1X,((readADC(0)*2.56*(30/2.56))/1023),1);

30 ето предельное напряжение вольт которое мы измеряем ! Теперь представим что 30 вольт после нашего делителя - будут навны на входе м/к 2.56 вольта! потому мы делим 30 на 2/56 и получаем коэфициент на который нам нужно умножить имеренную величину перед выводом на экран дабы привести ее к читабельному виду. Пересмотрите урок не перематывая.

Оказывается про контрастность говорится в начале 7-го урока!

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

Снизил напряжение питания на дисплей и всё пришло в норму.

Дисплей согласно даташита работает от 3и3 вольт. Подозреваю что вы запитали схему от 5. По сему нужно либо менять програмно уровень контраста либо питать схему от 3и3 вольта либо пойти другим путем

Всем привет! Подскажите пожалуйста как в CodeVisionAVR 2.05 добавить файлы n5110.h и n5110.с к проекту, чтобы начать программировать дисплей от Nokia?

Дико прошу прощения но вопрос принципиальный: 18 страница 354 пост - но так как читать всем лень процитирую его для вас

Опубликовано 19 Май 2014 - 08:44

Внимание !!! Важное сообщение !

Уважаемые друзья!

На днях, волею судеб - у меня возникла необходимость набросать небольшой код в CоdevisonAVR...

По сему хочу предупредить заранее.

Отвечать на какие либо вопросы пользователям этой убогой, нелогичной, неудобной, кривой и дыбильной IDE - я не буду.

Если у Вас по какой либо причине (а они будут) не работает в ней код из урока... задавайте вопросы фанатам этой гадости.

Этот тот редкий случай когда действительно лучше писать в блокноте.

Благодарю за внимание.


коплю на мечту - Днепр К750

Share this post


Link to post
Share on other sites

доброго времени суток!!! у меня вопрос как можно сделать ожидание сигнала ? пытаюсь разобраться с COM портом и подключить его к atmega8 . подробнее- микроконтроллер чтоб ждал изменение сигнала на ноге после чего принимал 7- 8 бит т.е. как сделать программно ожидание?может кроме способа с if есть ещё команды какие?

Share this post


Link to post
Share on other sites

А аппаратный USART не устраивает?

Если надо именно по изменению ноги - ATmega88 удобнее, она умеет генерировать прерывание по такому событию. На обычной m8 можно завести на Int0/Int1/AIN или еще какую переферию, но будет чуть сложнее.

Если не нужна особая точность - по таймеру проверяется состояние интересующего вывода, xor'ится с предыдущим (сохраненным в переменной) и, если после xor получилось 1, то состояние изменилось. Недостатки по сравнению с предыдущими методами: требуется лишняя переменная (хотя бы 1 бит) и таймер; достаточно короткое изменение (если оно скакнуло с 0 на 1 и обратно между прерываниями таймера) можно пропустить.


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

А строчку кода подскажите!!! а то я тут мучаюсь пытаюсь while(PINC &(1<<PC0)&PINC &(1<<PC1)) опрос сделать пока всё впустую -как я только логику не пытался прикрутить получаю в студии всё вроде в норме то в протеусе либо проскакивает(не опрашивает) и выплёвывает на светодиоды что все нули либо останавливается и стоит без эмоций не реагирует (я уже осциллограф подключил в протеусе)

Edited by lazudhic

Share this post


Link to post
Share on other sites
А строчку кода подскажите!!!
Строчку ? :blink:

Вы считаете, что завести таймер, отлавливать внешнее прерывание, проверять состояние входа, и т.д... (всё, написанное COKPOWEHEU'ем) - это всего-лишь одна строчка ? :wacko:

Share this post


Link to post
Share on other sites

#define F_CPU 2000000//ЧАСТОТА ПРОЦЕССОРА
#include <avr/io.h>
#include <util/delay.h>//библиотека паузы

void present(){
DDRB = 0xff;//порт настроен на выход
PORTB = 0b00000000;// настройка какая ножка выдаёт 1 а какая 0
DDRC = 0x00;//порт настроен на вход
PORTC = 0x3f;// настройка какая ножка втягивующие рзисторы
DDRD =  0xff;//порт настроен на выход
PORTD = 0b00000000;// настройка какая ножка выдаёт 1 а какая 0
}

int main(void)
{
present();//перейти на vold present
while(1)// while(1)-бесконечое повторение
{
//PORTc = 0b00000001;
while(PORTC==0)
{

}

for(int i=0;i<=7;i++)//переменая i= равна от 0 до 7 с шагом 1
{
if (PINC&(1<<PC0))//проверка наличия 1 на входе С0
{

PORTB =(PORTB << 1);//СДВИНУТЬ сигнал
PORTD=~PORTD;//инвертировать сигнал
}
else//если условие не верно в строке if
{
PORTB =(PORTB |00000001);//присвоить 1
PORTB =(PORTB << 1);//СДВИНУТЬ символ
PORTD=~PORTD;//инвертировать сигнал
}
_delay_ms(0.0184);//пауза
}
_delay_ms(500);//пауза
}
}

вот что есть пока

ну что теперь скажите!!!!! какую строчку стоит добавить или поменять?

Edited by Alex
Тег CODE

Share this post


Link to post
Share on other sites
#define F_CPU 2000000//ЧАСТОТА ПРОЦЕССОРА

PORTB =(PORTB << 1);//СДВИНУТЬ сигнал

Капсом, чтобы контроллер уж точно понял, что от него хотят :-)
while(PORTC==0) { }
Оно из этого цикла вообще выходит? А то в настройках PORTC=0x3F, а прерывания не разрешены. Или это я чего-то не вижу?
while(PINC &(1<<PC0)&PINC &(1<<PC1))
А, простите, какой смысл в выражении PINC & PINC ?
А строчку кода подскажите!!!
В начале программы добавить #include <brain.h>
Вы считаете, что всё, написанное COKPOWEHEU'ем - это всего-лишь одна строчка ?
Ну, язык позволяет и в одну строчку записать при желании :-)

Так-то я привел 4 варианта решения, могу добавить еще пятый, аналогичный использованию таймера - сравнивать состояние ноги с предыдущем не в прерывании, а в бесконечном цикле. Так какой из них Вы пытаетесь реализовать?

ну что теперь скажите!!!!! какую строчку стоит добавить или поменять?Звучит как "я уже даже код выложил, хоть теперь сделайте за меня".
Наверное, я невнимательно читал код, но так и не понял, какой ножкой Вы пытаетесь принимать UART, PC0 что ли?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Как я уже только не пробовал . ожидается сигнал C0 . как я понимаю необходимо сделать проверку, что на ноге появилась единица. целый день по форумам бегаю гляжу . книжки скачиваю . но там идёт речь о других мк. код частично похож .

как сделать типа такого ---- если(сигнал) pc0 неравен 0 то выполнить следующее действие .............если равно 0 то повторить сравнение либо наоборот если рс0 равен 0 повторить цикл сравнения если неравен 0 выполнить действие........смысл одинаковый . но чтоб данное условие ещё и выполнить в протеусе

while(сравнение ножки с 0)-если получим 1 цикл запуститься если 0 то........

if pc==1 {выполняем считывание} else {как сделать переход к проверке на оператор if?}

Share this post


Link to post
Share on other sites

Я даже не стал разбирать код! Я уроки в таком формате не давал! И не собираюсь сидеть и переводить 16-ти ричную систему в десятичную ! Судя по всему ТС проходит какойто другой курс - но у него ничего не получаеться и он просто попросил помощи. Потому что банально тему с юсартом мы вобщене проходили! ТС - не по теме вопрос короче. Задавай его тому у кого обучаешься :)

И в догонку - если бы ты внимательно смотрел уроки - у тебя был бы ответ на вопрос как сделать проверку на состояние сигнала.

НО для этого надо понимать регистровые сдвиги которые мы все тут проходили! а учитывая твою манеру записи битов - ты этот урок не проходил.

Edited by kobraz

коплю на мечту - Днепр К750

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

  • Similar Content

    • By sunjob
      добрый день
      проект v-usb
      выкус из спецификации/инета/форумов:
      - реализация не полностью соответствует стандарту
      - работа на 100% не гарантируется
      - питание по USB / с компа может провалиться до 4-4.5В (а F_CPU идет в "притирочку" ...)  :))
      у всех рекомендованных схем подключения (3 шт) имеются те или иные очевидные минусы.



      как следствие стабильно может работать только при "определенных условиях"
      в планах поработать с библиотекой.
      для начало решил "набросать" альтернативный вариант. (так сказать, попытаться закрыть все возможные дыры в подключении)


       
      достаем помидоры, баркова, мысли, высказываемся (заранее благодарен)
      tag: v-usb, usb, avr, atmega328p, avr-gcc, linux/mac-osx
      NO atmega32u4, NO arduino pro micro etc...

    • By Илья Юрьевич
      Доброго времени суток. В эту тему буду выкладывать различное оборудование, которое у меня имеется. По мере разбора и пополнения хламом, буду дополнять позиции.
      Находится всё в Москве, Лосиноостровский район. Могу отправить в любое место, любой транспортной, за ваш счёт, но предпочтительней Сдеком (имеется аккаунт интернет магазина, цена будут примерно в 2 раза дешевле, чем для обычных клиентов).
      По всем позиция возможен аргументированный торг, т.к. в большинстве случаев я не обладаю полным представление о ценообразовании некоторых вещей.
      Просмотреть фото, можно нажав на название позиции
      1. Стереофонический магнитофон "Яуза-10". В очень непотребном и не рабочем состоянии, но внутренности вроде все на месте. Без колонок. По цене, пусть будет 1000руб
      2. Счётчики купюр. По цене пусть будет рублей по 300
      Magner 35. Включается, пытается но не захватывает купюры. Возможно нужно почистить, возможно пасики заменить Счетчик банкнот Plus P-106 A , включается, пытается что-то сделать, но сильно запахло горелым, выключил Cчетчик банкнот De La Rue 2620. Полуразобранный. 3. Дисплеи от неизвестной штуковины, похожей на большие часы. В сборе запустить это не удалось, потому корпус ушёл в металл, а дисплеи оставил. Один сегмент битый. Всего 3 платы по 2 дисплея на каждом. Отдаю только всё вместе, по цене рублей 300 за всё.
      4. Детонометр 7э61 . Включается, лампочки горят, стрелочки двигаются, пищалка пищит. Как его проверить более профессионально не вкурсе. По цене честно не знаю, предложите адекватную.
       
       
      5. Указатель проверки совпадения фаз УПСФ-10. Не проверял, но имеется этикетка с надписью Брак № такой-то.
       
      6. Одна колонка от аккустической системы10 АС-401 . По состоянию как-то не очень, но вроде рабочая, динамик цел.
       
    • Guest Moonlight
      By Guest Moonlight
      Нужна помощь в выборе перспективной дипломной работы ( не просто тяп ляп лишь бы выпустили). Хотелось бы сконструировать беспилотник или просто разработать небольшое устройство (развести и напечатать плату, закинуть прошивку на микроконтроллер). И если бы ещё это все было взаимосвязано с авиацией, то было бы супер, так как авиационный вуз оканчиваю. Из того что умею, это писать на Си, плюс минус хорошо ориентируюсь в дисциплинах связанных с антеннами и радиолокаторами, был небольшой опыт конструирования. Хочется сделать проект, который будет не стыдно показать на собеседовании)). Буду очень благодарен, если поможете определиться с темой!)
    • By Evgenii53
      Здравствуйте.
      Нужна прошивка на микроконтроллер 12F629/675.
      Схема скачана в интернете и предназначена для освещения курятника лампами накаливания 220 вольт с имитацией «восхода и заката».
       Временные интервалы «восхода и заката» выбраны 6 утра и 21 час вечера.
      Длительность «восхода и заката» по 20 минут (лампы медленно загораются или гаснут под управлением симистора).
      Если в дневное время срабатывает датчик освещённости (фоторезистор HER –  GL5528), лампы не включаются и включаются, когда он разрешит, в ночное время фоторезистор бездействует. Фоторезистор можно (или нужно?) переключить на 5 ногу.
      Нужно установить программное ограничение на срабатывание датчика освещения от кратковременного изменения освещённости (например падение света фар движущегося автомобиля на датчик и т.д). Фоторезистор устанавливается на кабеле длинной около 2 метра.
      Логика работы кнопки: длительное нажатие (больше 3 секунд), устанавливает внутренние часы на полдень.  Время синхронизируется от сети 50Гц.
      Светодиод отображает наличие питания сети. Если сеть есть, он всё время светится и раз в 2 секунды кратко моргает. Если сети нет и устройство питается от батарей, светодиод погашен и раз в 2 секунды вспыхивает. При установке времени полдня светодиод несколько раз моргает.
      Схема рабочая, я проверял в работе (без фоторезистора) на тестовой прошивке, работает нормально.
      По оплате, думаю договоримся.

    • By HHHIII
      Сломался пульт управления беговой дорожки. Теперь хочу с помощью Ардуино управлять мотором, но не понятно как происходит управление. к панели идёт 4 контакта: чёрный красный белый зелёный. на плате 5 контактов, но 1 не используется. Как происходит управление скоростью?

×
×
  • Create New...