Перейти к содержанию

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


Рекомендуемые сообщения

Здравствуйте! Я попробывал сделать ДЗ к 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

Изменено пользователем vitaliy_glata
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

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

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

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

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

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

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

...Но питание у всего порта С общее (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."

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

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

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

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

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

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

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

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

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

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

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

63771293c95daddbddcdce0a5b9f2f8a.jpg

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

905e946ce192306ff72e98700f1b072e.jpg

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

Изменено пользователем Alex_Andr1
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Изменено пользователем vitaliy_glata
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Спасибо за уроки, по ним начал делать измеритель уровня бензина на свою таврюшку старушку, конечно без лсд, его жалко туда лепить, просто ряд диодов будет стоять :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

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

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

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

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

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

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

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

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

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

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

Изменено пользователем lazudhic
Ссылка на комментарий
Поделиться на другие сайты

А строчку кода подскажите!!!
Строчку ? :blink:

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

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

#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);//пауза
}
}

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

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

Изменено пользователем Alex
Тег CODE
Ссылка на комментарий
Поделиться на другие сайты

#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 раз.

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

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

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

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

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

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

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

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

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

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

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

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

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

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

  Разрешено использовать не более 75 эмодзи.

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

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

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...