Jump to content
admin

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

Recommended Posts

Александр да Вы правы конечно, но курс все же для новечков которые имеют определенные знания по электронике и хотят перейти на изучение именно микроконтролеров.А если ориентироваться на таких мужичков которым ни какие уроки не помогут,можно до конца века клепать уроки и все будет безрезультатно.

Share this post


Link to post
Share on other sites

Александр да Вы правы конечно, но курс все же для новечков которые имеют определенные знания по электронике и хотят перейти на изучение именно микроконтролеров.А если ориентироваться на таких мужичков которым ни какие уроки не помогут,можно до конца века клепать уроки и все будет безрезультатно.

А почему по электронике? У нас допустим препод был в универе прожил на мк, а его коллега хорошо разбирался в железе. Вот и я допустим учил когда то Си и кое чего помню, но вот электроники не было. Поэтому давайте не будем рассказывать нашему лектору, как и что ему делать. А если хотите то велком новую тему на форуме и давайте людям Си. ;)

Share this post


Link to post
Share on other sites

Я, конечно, могу ошибаться, но по моему мнению видеоуроки (любые) популярны по одной причине - желании обучаемого получить какие-либо знания на халяву, то бишь не затрачивая труда или затрачивая самый минимум. В то же время давно известно, что получить любые устойчивые знания, навыки и умения можно одним единственным образом - собственным трудом, любой учитель при этом - посредник между учеником и знаниями. Роль учителя преуменьшать не стоит, но и преувеличивать тоже. На форуме уже была тема посвященная видеокурсам, их полезности в частности. Следует четко понимать где провести границу между работой с информацией в виде текста и видеоинформацией. Визуальный ряд в обучении должен помогать понять информацию, которую трудно доступно объяснить текстом и рисунками, а не заменять ее. Совершенно очевидно, например, что текст программы или схема такой информацией не является. Видеокурс будет полезен только в комплексе с каким-либо печатным курсом, разъясняя специфическую информацию. Никто не будет спорить, что схему удобно видеть на рисунке, а не перематывать видео чтобы увидеть ее снова. Понятное дело, не только схему. В других случаях, когда неправильно выбрана концепция курса (речь не о программе курса, а глубже),не определены цели и задачи, логически вытекающие из самих преимуществ видеоряда перед текстом, не осознаны недостатки - это потеря времени автором курса и его пользователями. Примеры уже видны здесь.


Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Share this post


Link to post
Share on other sites

Импульсный источник питания - расчет за 10 минут в eDesignSuite

Как ориентироваться в огромном количестве существующих вариантов, чтобы выбрать наиболее подходящий для конкретного случая. «Ручной» перебор всех вариантов может оказаться весьма трудоемким процессом, а полученный результат – далеко не оптимальным. Специализированное программное обеспечение, позволяет уменьшить количество рутинных операций при проектировании.

Подробнее

Тимон автору я ничего не указываю. а даю рекомендации, а он то и решит как быть! Уроки по СИ я вообщето хочу получить и есть такое понятие как СИ для микроконтролеров, а это немного разное.Может быть Вы знаете СИ так Вы тогда програмист, а не радиолюбитель и вам предстоит долгий путь по изучению основ электроники и паяльника.Про преподов пример неудачный Это значит надо в машине ездить вдвоем один хорошо руль крутит и гашетку давит, а другой хорошо знает пдд.Вся проблема разработки устройств на МК как раз и состоит в написании кода,а не в том какой резистор поставить на светодиод 220 или 270 ом.

Share this post


Link to post
Share on other sites
                     

Как упростить выбор ИП для промышленного применения?

Компания Mean Well выпускает широкий перечень встраиваемых источников питания с креплением на шасси, имеющих, на первый взгляд, схожие характеристики. Статья расскажет о ключевых особенностях выпускаемых семейств и упростит выбор источника питания для промышленного применения.

Подробнее

Guest

из личного опыта пед.деятельности: нельзя научить, можно помочь научиться

Ученик - не гусь, который надо нафоршировать, а огонь, который надо зажечь (пишу по памяти)

Share this post


Link to post
Share on other sites
                     

Преимущества новых высоковольтных SOI-драйверов Infineon

При производстве драйверов силовых транзисторов компания Infineon использует различные технологии: JI, SOI, CT. Драйверы, выполненные с применением технологии SOI, имеют целый ряд преимуществ по сравнению с классическими JI-драйверами. В статье рассматриваются эти преимущества на примере новых семейств драйверов 650 В 2ED210x и 2ED218x.

Подробнее

В любом случае Ваши уроки полезны! Моё мнение с позиции новечка!вчера моргал светодиодом с помощью мультивибратора, а сегодня хочу с помощью мк и что такое СИ для меня проблема,а тут вроде для новечков и все просто в видео, но реальный новечек без знания СИ не сможет сделать домашку,а если сможет то ему мигание светиком не интересно и это уже не новечек! В моем случае так и происходит что вроде и читаешь и даже что то понимаешь как работает Цикл но применить и понять до конца не получается.По сути тем кто знает СИ, курс по изучению можно заканчивать на первом уроке,который обясняет что такое мк и что с ним делать.Поэтому считаю небольшие отступления в пользу пояснений по СИ все же необходимы.Лучше меньше уделять время в уроках лишним компиляциям и протеусу, а больше обяснять непосредственно по коду.Хороший урок 4 по операторам но он должен был быть чуть ли не первым.И я этот урок как раз считаю по СИ который вроде к мк отношения не имеет ,но тем не менее он есть этот урок номер 4.На счет схемотехники может быть и перебор так как мк изучает уже мало мальски радиолюбитель,и обяснять что такое светодиод и гасящий резистор конечно нет смысла.Поэтому для новечка является проблемой непосредственно написание кода и понимания его работы, как можно сократить или оптимизировать и вообще применять массивы функции циклы и.т.д.Кстати атмел студия 6 это правильно,а кто хочет ездить на запорожцах пусть ездит не надо нам их навязывать! Почитайте полезная инфа про настройку студии http://www.rukodelie....php?f=13&t=620

Мысль конечно светлая, но все же добавлять в уроки основы программирования я не буду по нескольким причинам:

1. В сети предостаточно курсов по основам программирования на С (и видео тоже) где люди лучше меня подают материал

2. Цель нашего курса - показать общие принципы общения человека с микроконтроллером посредством языка С - а не изучение навыков программирования на этом языке

3. На самом деле во всех языках цыклы счетчики и условия работают одинаково - просто синтаксис разный! Если кому-то тяжело со старта начать писать и понимать как работает цикл - пройдите курс "Программирование на С для чайников" и задавайте вопросы в теме! Ведь для того она и нужна!

4. Предполагается что если вы решили освоить работу с МК то у вас есть (или вы уже активно изучаете ) основы программирования. Как говорили выше - если вы решили научиться водить автомобиль - то подразумевается что вы уже знаете ПДД на достаточно уровне!

В противном случае - сначала мы расширим уроки для подачи основ программирования на С + потом основы схемотехники + потом основы полупроводников и прийдем к тому что появятся сообщения типа:

- Сдраствуйте! Я бухгалтер! Решил сделать волтметр на МК! Паяльник видел только по телевизору! Очень понравились уроки но скажите почему в них нет "как пользоваться паяльником"?

далее идет от 5 до 15 ответов в которых человеку советуют сходить по направлению, почитать для начала гугол и основы схемотехники и так далее...

Как я уже говорил - я специально стараюсь дать домашнее задание что бы оно было по теме и продолжало мысль пройденного материала - но при этом ответа не было на экране! Что бы человек погуглил - поискал решения - попробовал сам написать, накосячить и исправить! После такой работы ему пройденный материал будет проще простого!

Суть в том что у каждого пользователя уровень самостоятельной работы будет зависеть от степени его подготовки на конкретный момент! Например кому-то достаточно будет просто посмотреть хелп по функции rand() а в вашем случае нужно начать с основ программирования на С ! :)

Примеры уже видны здесь.

Где примеры? 0_о


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

Share this post


Link to post
Share on other sites

Александр да Вы правы конечно, но курс все же для новечков которые имеют определенные знания по электронике и хотят перейти на изучение именно микроконтролеров.А если ориентироваться на таких мужичков которым ни какие уроки не помогут,можно до конца века клепать уроки и все будет безрезультатно.

А почему по электронике? У нас допустим препод был в универе прожил на мк, а его коллега хорошо разбирался в железе. Вот и я допустим учил когда то Си и кое чего помню, но вот электроники не было. Поэтому давайте не будем рассказывать нашему лектору, как и что ему делать. А если хотите то велком новую тему на форуме и давайте людям Си. ;)

Да такая тема не помешала бы.Хотя бы по основам.... + построения простых программок.

Share this post


Link to post
Share on other sites

Ребят. С - один из самый распространенных языков программирования!

Интернет просто кишит курсами !

Смысл создавать такую тему на форуме?

Обьясню - программирование на С - и программирование на С микроконтроллеров - ничем не отличается!

Просто во втором случае у нас есть специфические библиотеки и операторы! Но принцип - один!


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

Share this post


Link to post
Share on other sites

Где примеры? 0_о

,а тут вроде для новечков и все просто в видео, но реальный новечек без знания СИ не сможет сделать домашку,а если сможет то ему мигание светиком не интересно и это уже не новечек!

И не только. Уже красной нитью прослеживается проблема - каждый имеет свое видение материала, который должен быть в курсе. Т.е. чего не знаем то и хотим, забываем о том, что сколько людей, столько и пробелов в знаниях. А пользоваться чем то дополнительным желания нет - это же психология, иллюзия полезности видеокурса - "сейчас кино посмотрю и буду уметь контроллеры программировать..". Кино посмотрели, программировать не научились, разочарование, надо бы в курс чего добавить, добавьте Си...нет схемотехнику... понеслось. Повторяю, концепция курса должна естественно следовать из преимуществ видеоряда перед текстом с рисунками. Недостатки тоже надо понимать. Сейчас курс - это попытка по вершкам быстро рассказать как программировать контроллеры, причем имея свое субъективное видение чего надо говорить, а чего нет. И уже сейчас видно, что непонимания гораздо больше чем понимания. Можно научить по видео вышивать крестикам, извлекать звук из струн... - те вещи где главную роль играет моторика, а не высшая мысленная деятельностью. Никогда только по видео нельзя обучить хирурга, но видео может помочь в обучении - если будет правильно использовано. Аналогично и с контроллерами, пока есть сумбурное понимание что есть видеокурс по сути и чем он помочь может, чем помешать - толку не будет.


Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Share this post


Link to post
Share on other sites

В ваших словах есть зерно истины! Только проблема не в видеоматериале - а в его восприятии и ожиданиях! Если рассматривать его со стороны помощи по вхождению в мир МК - как он и ращитан то все ОК! А если со стороны - я ничо не знаю но хочу посмотреть видеуроки и что бы после етого я сразу начал уметь паять, кодить, понимать, проэктировать и так далее - тот ту любого курса не хватит! %)


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

Share this post


Link to post
Share on other sites
Guest

Обьясню - программирование на С - и программирование на С микроконтроллеров - ничем не отличается!

Просто во втором случае у нас есть специфические библиотеки и операторы! Но принцип - один!

ваша главная ошибка

язык используется для описания алгоритма

алгоритм строится под конкретного исполнителя

но программисту "высокого уровня" (для ПК) трудно будет красиво и легко перейти на "низкий уровень" - всё иначе

пример, самый действенный:

классические книжки программистам ПК указывают не использовать Goto и как можно чаще использовать процедуры/функции

да, читается такой код красивее

но вот при компиляции жрёт на 30-70% больше памяти (из личного опыта как программиста с 18-летним стажем :) начиная с ZX-Spectrum, УК-НЦ, 8086, PIC и AVR (немножечко 8051)

а почему? а потому что данные передаются в/из процедуры/функции через стек и/или регистры

ps

моя так и не дописанная книга по введению в программирование МК лежит уже лет 7...

и начал я её именно с "железа"!

вот план: (это написано уже)

От автора.

Введение.

Что такое контроллер?

Контроллеры на «жесткой» и «программируемой» логике.

Одноплатные компьютеры.

Одноплатные контроллеры.

Микроконтроллеры.

Как пользоваться книгой.

Организация материалов книги.

Рекомендации автора.

Глава 1. Теория для «не электронщиков».

Виды величины: аналоговые и дискретные.

Аналоговые величины.

Дискретные величины.

«Язык» систем передачи и преобразования сигналов.

Интерфейс связи и его подуровни.

Методы передачи сигналов.

Параллельный метод передачи информации.

Обмен информацией с использованием дискретных сигналов.

Цифровые сигналы.

Последовательный метод передачи информации.

Скорость обмена данными. Синхронизация.

Режимы связи.

Подведем итоги.

Транзистор.

Транзистор как управляемый выключатель.

Транзистор как усилитель.

Транзистор как основной элемент инвертора.

Сигнальные шины.

Методы формирования сигналов в линии связи.

Схема с открытым коллектором.

Схема передатчика с двумя транзисторами.

Схема передатчика с третьим состоянием.

Адресация. Коллизия.

Групповое использование шины.

Преобразования аналогового сигнала в цифровой сигнал.

Аналогово-цифровой преобразователь (АЦП).

Преобразования цифрового сигнала в аналоговый сигнал.

Цифро-аналоговый преобразователь (ЦАП).

Скважность импульса.

Широтно-импульсная модуляция.

Память и ее типы.

Классификация устройств памяти. ОЗУ и ПЗУ.

Оперативная память.

Энергонезависимая память.

Память с параллельным и последовательным доступом.

Считаем по-иному.

Двоичная система исчисления.

Шестнадцатеричная система исчисления.

Запись значений в двоичной и шестнадцатеричной системах исчисления.

Глава 2. Микроконтроллеры.

Что такое микроконтроллер? Основные узлы микроконтроллера.

Процессор.

Память.

Порты. Режимы работы портов.

Периферийные устройства.

Многофункциональность выводов микроконтроллера.

Тактовый генератор.

Семейства микроконтроллеров.

Разрядность процессора. Методы представления информации.

Система команд процессора.

Специализация микроконтроллеров.

Основные производители микроконтроллеров. Краткое описание микроконтроллеров популярных семейств AVR, PIC и Intel х51-совместимых.

Какой из микроконтроллеров самый-самый…?

Глава 3. Управляем процессором.

Машинные коды.

Алгоритмы и методы его описания.

Команды ветвления: условный и безусловный переходы.

Прерывания и их типы. Приоритеты прерываний.

Ассемблер. Транслятор.

Метки. Переменные. Метакоманды для транслятора.

Комментарии в программе.

Модульность программ. Часто повторяющиеся задачи.

Макросы.

Подпрограммы.

Языки программирования и их функциональное разделение.

Трансляция программы. Методы трансляции программы.

Процесс создания программы. Среды разработки программ.

Интегрированная среда разработки программ.

Несовместимость трансляторов.

Edited by Guest

Share this post


Link to post
Share on other sites

Только проблема не в видеоматериале - а в его восприятии и ожиданиях!

Я бы сказал что это комплексная проблема. С одной стороны, надо было сразу четко обозначить перед учениками, что они должны изучить самостоятельно, а в чем им поможет видеокурс и чего от него ожидать. С другой - понимание (автора, прежде всего), почему эти вещи лучше смотреть в видеокурсе, чем изучать самостоятельно в тех же сторонних источниках. И уже исходя из этого продумывать наполнение курса. Если говорить откровенно, пока курс не видится логически и идеологически выстроенным. На самом деле, сделать его таким очень сложно, по причине обширности материала. Потому могу предложить (чтоб не выглядеть только критикующим) следующее: в курсе показать создание конкретного устройства, не примитивного, но и не слишком сложного и полезного ко всему прочему. Например, измерительного прибора. И последовательно реализовывать этот проект, походу объясняя суть вещей. Ученик увидит всю цепочку рассуждений, действий, решений в процессе проектирования. Поймет что решений всегда несколько, что выбирать ему... увидит сам алгоритм проектирования, поймет что надо думать. Имхо, это будет полезнее


Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Share this post


Link to post
Share on other sites
Guest

скажу проще (сам на этом же споткнулся):

начинать надо с того, что описать входной уровень ученика

что он должен УЖЕ уметь

1. определитесь с уровнем его подготовки

2. опишите план уроков - это вам потом очень поможет

3. продумайте детализацию каждого урока, что новое узнаем, что из старого повторим

Edited by Guest

Share this post


Link to post
Share on other sites

Александр Д.

Нет никакой ошибки! У меня есть два лично знакомых человека которые уже много лет работают и зарабатывают программированием , конкретно на С (и ему подобных)Задал сегодня этот вопрос! Попросил для примера написать моргалку светодиодом! Оба через 15 минут скинули готовый и рабочий код! Опрос показал что время было потрачено только на то что бы глянуть в нете как там у устройства обозначаются порты...

кстати ни один не не второй не радиолюбитель! Один пишет игры второй софт для винды! НЕТ НИКАКОЙ РАЗНИЦЫ в написании программы на С как приложение для винды или прошивки МК со стороны навыка программирования на С!

МЕНЯЮТСЯ только используемые библиотеки и добавляются некоторые встроенные функции на примере того же делея. Не путайте новичков!

А то они решат что программа пишется на каком то специальном языке С для микроконтроллеров и обычные курсы для начинающих по С им не подойдут!

Goodefine

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

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

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

Если наши с вами точки зрения не совпадают - то это не значит что мы не правы - просто у каждого свой вид на мир! Я позиционирую свой курс как помощь начинающему сделать первые шаги - а не вести его за руку до красной площади!

Как вы выразились ранее - уроки ето пища для ума а не инструкция к действию!

Касаемо общих навыков:

Если человек хочет научиться программировать МК - то он уже должен уметь хоть чуть чуть программировать! В противном случае - ему сначала надо освоить первое! А потом уже переходить ко второму!

Если меня попросят научить человека есть ножом и вилкой - то мы же не станем его учить глотать и жевать? Если человек не умеет глотать и жевать - значит к ножу и вилке не готов! Вот научиться - тогда милости просим :)

скажу проще (сам на этом же споткнулся):

начинать надо с того, что описать входной уровень ученика

что он должен УЖЕ уметь

1. определитесь с уровнем его подготовки

2. опишите план уроков - это вам потом очень поможет

3. продумайте детализацию каждого урока, что новое узнаем, что из старого повторим

Саша, не примите за обиду - но может вы для начала почитаете шапку?

Та давно есть и план действий! И что за чем мы учим!

А касаемо что надо знать для того что бы пройти курс - я лично с вами не согласен!

Все зависит от желания и уровня подготовки каждого! По вашему курс расчитан только на тех кто отвечает заданным параметрам? Типа кто не может написать Хеловорд на С ! курс не годиться! ,,,,????

Каждый начиная эти видеоуроки сталкивается с вопросами! Комуто не ясно по С комуто по схемотехнике - то есть каждому нужно самостоятельно почерпнуть недостающих знаний в етом и заключается обучение ! Которое отличается от инструкции к действию!


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

Share this post


Link to post
Share on other sites
Guest

тогда вперёд! ))

Если человек хочет научиться программировать МК - то он уже должен уметь хоть чуть чуть программировать!

сами себе противоречите...

если он умеет программировать, то ему уже курс не надо )))

достаточно глянуть порты ;)

Edited by Guest

Share this post


Link to post
Share on other sites
Сначала мы изучаем кусочки необходимых нам знаний и потом закрепляем их практическими заданиями!

Чтоб не растекаться мыслью по древу - убедите меня новичка, что ему для этого надо смотреть ваш курс а не читать те же источники, к каким его отсылают для всего остального.

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

План есть и я его читал. Ну скажите, где логика - вы отсылаете людей читать про операторы Си в другом месте, а в курсе в то же время рассматриваете операторы поразрядного сдвига. Да и называете еще их ошибочно "регистровыми". Двойные стандарты однако. План есть, но имхо, он не до конца логичен и продуман. Можно конечно сказать - напишите свой, покажите как надо и т.д. Но если тема для критики, полезной или нет - покажет время - то не надо все воспринимать в штыки.


Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Share this post


Link to post
Share on other sites

Господа может вынесем обсуждение как надо учить в другую тему, а то последние 3 страницы, читаешь а по теме ноль.

Спасибо всем за понимание! :-)

Share this post


Link to post
Share on other sites

Надо чистить тему! Уже неоднократно обсуждалось!

А то реально по теме спорят только те ето давно уже ети уроки перерос


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

Share this post


Link to post
Share on other sites

Вопрос по домашке. delay ругается на rand. Если закоментировать строки 21,41 и время задержки (строки 27, 32, 47, 52) выставить цифрами то все работает. :wall:?

// attiny2313
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>

//инициализация портов
void preset () {
DDRA = 0b00000000;//вход
DDRB = 0b11111111;//выход
DDRD = 0b11111111;//выход
PORTA = 0b11111111;//подтягивающие сопротивления
PORTB = 0b00000000;//ноль по умолчанию
PORTD = 0b00000000;//ноль по умолчанию
}
void rnd_function_byte () {
int rnd_port = rand ()% 2+1;// генерируем число от 1 до 2 для выбора порта
int rnd_byte = rand ()% 256;// генерируем число от 0 до 255 для вывода в порт
int rnd_pause = rand ()% 1501+500;//генерируем число от 500 до 2000 для формирования времени задержки

switch (rnd_port)// выбираем порт
{
case 1: // порт B
PORTB = rnd_byte;
_delay_ms(rnd_pause);
PORTB = 0;
break;
case 2: // порт D
PORTD = rnd_byte;
_delay_ms(rnd_pause);
PORTD = 0;
break;
}
}
void rnd_function_bit () {
int rnd_port = rand ()% 2+1;// генерируем число от 1 до 2 для выбора порта
int rnd_bit = rand ()% 8;// генерируем число от 0 до 7 для выбора бита
int rnd_pause = rand ()% 1501+500;//генерируем число от 500 до 2000 для формирования времени задержки

switch (rnd_port)// выбираем порт
{
case 1: // порт B
PORTB = (1<<rnd_bit);
_delay_ms(rnd_pause);
PORTB = 0;
break;
case 2: // порт D
PORTD = (1<<rnd_bit);
_delay_ms(rnd_pause);
PORTD = 0;
break;
}
}
int main(void)
{
preset ();
while(1)
{
if (PINA&(1<<PINA0))
{
rnd_function_byte ();
}
else
{
rnd_function_bit ();
}
}
}

Share this post


Link to post
Share on other sites

Dimka_ibn_Mishka

_delay_ms() не принимает переменные вроде бы, только константы (прочитал это здесь http://autoelectric....layms-i-delayus). Поэтому "_delay_ms(rnd_pause)" нельзя, вместо rnd_pause надо вписывать какое то число, например "_delay_ms(1000)".

И строки пронумеровали бы, если ссылаетесь на номер строки.

А видеокурс мне нравится. :thank_you2:

Edited by Vezd

Share this post


Link to post
Share on other sites

Какая то у меня коротенькая программка получилась:

#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>

// задаем токены, кот. будут использоватся в программе
#define PORT_OUT 0xFF
#define PORT_OFF 0x00
#define PORT_ON 0xFF
#define PORT_B_NUM 0
#define PORT_C_NUM 1
#define PORT_D_NUM 2

// функция для начальной инициализации МК
void preset()
{
// инициализируем PORT B
DDRB = PORT_OUT;
PORTB = PORT_OFF;

// инициализируем PORT C
DDRC = PORT_OUT;
PORTC = PORT_OFF;

// инициализируем PORT D
DDRD = PORT_OUT;
PORTD = PORT_OFF;
}
int main(void)
{
preset();
while(1)
{
int port_num = rand() % 3; // случайным образом выбираем один из портов
int led_num = port_num == PORT_C_NUM ? rand() % 7 : rand() % 8; // выбираем диод кот. будет зажигатся (поскольку PORT C имеет только 7 ножек, то берем остаток от деления на 7)

// на выбранном порту зажигаем, выбранный диод
switch(port_num){
case PORT_B_NUM:
PORTB = 1 << led_num;
break;

case PORT_C_NUM:
PORTC = 1 << led_num;
break;

case PORT_D_NUM:
PORTD = 1 << led_num;
break;
}

_delay_ms(500);

// тушим все диоды
PORTB = PORT_OFF;
PORTC = PORT_OFF;
PORTD = PORT_OFF;
_delay_ms(100);
}
}

Но главное что работает =)

Edited by timon_ad

Share this post


Link to post
Share on other sites

Ребята - вы молодцы что стараетесь и творите!

Написанная самим программа радует и окрыляет!

Вот только ваш код сильно сложный для новичков!

Прокоментируйте строки ! :)


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

Share this post


Link to post
Share on other sites

Следующий у нас подключение бибилиоткек и работа с ЛЦД! Если все пойдет по плану - то на выходных!


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

Share this post


Link to post
Share on other sites

Следующий у нас подключение бибилиоткек и работа с ЛЦД! Если все пойдет по плану - то на выходных!

Гуд! :buba:

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

  • Сообщения

    • Попробую зайти с другого конца. Пока забудьте о программировании и Си. Пусть имеется следующее арифметическое выражение:  (A+B)/B, где A=6, B=2 Чему равно это выражение?  Очевидно, что 4. Так же очевидно, что ни А, ни В  не равны 4. Тогда кто равен 4? ... ВЫРАЖЕНИЕ. Был получен результат, который просто у нас в уме. А вот если мы запишем Х=(A+B)/B, тогда мы то, что у нас в уме присвоим Х. Таким образом, получение некоего результата выражения - это возврат значения этим выражением. И это возвращенное значение мы присвоили конкретной переменной Х. А теперь вернемся к Си. Одиночный знак = является оператором присвоения значения возвращенного правым от этого оператора выражением переменной расположенной слева от этого оператора. Всё. Другого способа присвоения в Си нет. Только через одиночный знак =. Обратное так же справедливо - если вы где то написали одиночное =, значит вы произвели присвоение. Все остальные арифметические и логические операции способны только возвращать значение. Физически - возврат значения - это получение результата выражения в некоем временном регистре. Обычно регистре общего назначения (РОН). РОНы отличаются от остальной памяти тем, что доступ к ним не требует занятия шины данных/адреса ОЗУ. Потому что РОНы - это часть арифметико-логического устройства процессора. Так называемая СВЕРХОПЕРАТИВНАЯ память - СОЗУ. При обращении к РОНам адрес РОНа очень короткий (3...5  бит) и содержится прямо за кодом операции инструкции процессора.
    • Я плохо знаком с электронными регуляторами.Когда-то совсем давно использовал наш 174УН...(не помню какой)Не очень хорошие воспоминания.По мне,так лучше качественный переменник.У меня есть ползунковые с хранения.На записи поменял-все ОК!
    • Плавная раскрутка - легко. Обрыв или неисправность датчика - обороты на максимум. А никакой самодиагностики и в схеме на МК нет. Реализован ровно функционал 555 таймера.   Вот прям в условиях нахождения под капотом, где температура легко приблизится к 100 градусам?   Вот именно, умный и инженер, а еще прекрасно знаю, что такое климатические испытания устройств, когда плата спокойно работает лежа на столе, а стоит ее нагреть или заморозить - отказывает. Я и для себя всегда делаю устройства с запасом прочности, дабы потом не бояться их использовать и создавать подобные темы на форумах.   Не поправили. Во-первых, создавать соединения на плате внешними железками - бред идиота, во-вторых, это ВИНТОВОЕ соединение с АЛЮМИНИЕМ. Очень скоро появится такой неприятный сюрприз, как окислы и возрастание сопротивления в месте контакта платы и рамки. Как думаете, что при это сделает МК?   Я даже не знаю, кто это. И перестаньте нести ахинею. Особенно в ответ на конструктивную критику.   Ваша задача вообще без контроллера решается. Причем схема будет намного надежнее.
    • Рекламы и не будет. Вопрос - крик души. Только что закончил ставить 6 шнайдеров. Начал в 7 после работы, закончил в 9. Шесть! Из всего времени на розетку добрая половина уходит на борьбу с косяками конструкторов, которые, похоже за всю жизнь ни одной розетки сами не поставили. Я, конечно, могу погуглить отзывы, но все это будут опять же отзывы обывателей - "ах, классные розетки... красивые!" Рекламы и не будет. Вопрос - крик души. Только что закончил ставить 6 шнайдеров. Начал в 7 после работы, закончил в 9. Шесть! Из всего времени на розетку добрая половина уходит на борьбу с косяками конструкторов, которые, похоже за всю жизнь ни одной розетки сами не поставили. Я, конечно, могу погуглить отзывы, но все это будут опять же отзывы обывателей - "ах, классные розетки... красивые!" Да, и вот ещё - предложение идти и щупать самому не сработает. Щупать ее сквозь пакет - это одно, а попробовать поставить - другое.
    • За ответы на вопросы спасибо. Понял все. Вот только почему просто нельзя ответить на вопрос, без оскорблений и этой брезгливости? Я к электронике отношения не имею, и знания поверхносные. Поэтому и пошел искать помощи на форумы, но тут же сидят одни умники с 50ти летним стажем, которые всех считают тупыми... Вы родились с этими знаниями что ли?  Ужас просто
    • На ЛСД  напряжение показывает, ток  по нолям,  температуру показывает,   при нажатии на Zar-d.  Разница команд у меня 1 строчка у вас 4 строчки это важно. Проверка.docx
  • Similar Content

    • By Rad TV
      Скетч простой и кислий. Сделан автором RadTV канал:https://www.youtube.com/channel/UC1k5elIKErFnmwTzIsRgQrA?view_as=subscriber
      Буду рад рокомендациях и помощи!Сделал сам проект должен бить простим и  что би влезло в ATtini85!
      Есть защита акб и просто парения (!!!Кнопка на розмикания!!!)
      Обновления будут!!!!
       
       
      RadMOD ver1.0.txt
    • By Prozac
      Здравствуйте, уважаемые форумчане! Вообще говоря, не имею такой привычки - донимать людей вопросами, и до всего стараюсь доходить самостоятельно. Но в данном случае без "помощи зала" совсем никак: перепробовал уже все, что только смог придумать - а "воз и ныне там! Поэтому и обращаюсь сюда - возможно, кто-то уже сталкивался с чем-то подобным, и сумел найти решение...
      Суть проблемы в следующем: решил построить ШИМ-контроллер для автомобильного вентилятора охлаждения ("карлсона"), но никак не могу заставить его работать - как только открываются VT2 и VT3, подключая нагрузку, МК уходит в резет или виснет (чаше - первое)!.. Сбросившись, опять пытается подключить нагрузку, и опять резетится, и так - без конца! Причем, изначально решил испытать схему не на индуктивной нагрузке (электромоторе), а на вполне себе пассивной 60Вт (около 3A по току) лампочке из фары - и та же фигня: МК пытается запуститься, сбрасывается, лампа моргает, дергается... Даже не ШИМ, а обычное мигание лампой с частотой 1Гц через несколько вспышек или вешает МК, или резетит его (что видно по сбою ритма моргания). При этом без нагрузки - по осциллографу, подключенному к ноге 5 МК или к нижнему (по схеме) выводу R7 - все отлично: наблюдается ровный и чистенький ШИМ-сигнал, изменяющийся согласно тестовой программе! Однако, стоит подать нагрузку, как осциллограмма начинает прыгать: появляются ШИМ-импульсы, затем ровная линия, затем снова импульсы с тем заполнением, которое должно быть в самом начале программы... Собственно, это наблюдение и позволило сделать вывод о том, что МК перезагружается.
      Естественно, первая мысль - слабый лабораторник (он у меня импульсный, самодельный, где-то на 3А - действительно слабый; но та же петрушка наблюдалась и при попытках питать устройство от трансформаторного ЗУ на 10А). Ну, пригнал машину, снял с нее аккум (100% свежий и не дающий просадок!), запитал от него - однако проблема повторилась... Значит, дело не в питании!.. Пробовал много различных танцев с бубном: отключал внешнюю цепочку сброса R2-C2 (результат - ноль), включал BOD микроконтроллера (стало еще хуже), подвешивал вместо C4 и C6 электролиты большей емкости (не помогло)... Думал, что, возможно, кондеи C4 и C6 разряжаются через R7 - экспериментировал с его сопротивлением (от 100 до 960 Ом), перекидывал его верхний вывод на анод VD1 (чтобы отсечь резистор от фильтрующих C4 и C6) - тщетно... Грешил даже на то, что какие-то проблемы вносит емкость затворов VT2 и VT3 - уменьшал сопротивление R10 и R12, дабы затвор быстрее "разряжался" - безрезультатно...
      Игрался с частотой МК и ШИМ - перебрал частоты ШИМ от 18 до 4687 Гц; пытался запускать нагрузку с разным заполнением ШИМ, от 10 до 40% - как глючило, так и глючит... Т.е., перелопатил, практически, всю схему!
      Удалось заставить устройство нормально работать на лампу, и даже на пару спаралеленных электродвигателей МЭ218 (от "печки") следующим образом: R8 был исключен (вместо него - перемычка), а C7 (изначально - К73-17В всего на 0,47мкФ) был заменен на пару электролитов по 1500мкФ, включенных плюс к плюсу последовательно (для устранения полярности кондеев). Нагрузка стала нормально подключаться, отрабатывать как на повышение, так и на убывание заполнения ШИМ. Двигатели отлично работали как при ступенчатом изменении ШИМ-заполнения, так и при плавном. Единственное, что при попытке подать на двигатели ШИМ с заполнением менее 20%, МК опять начинал дергаться и резетить, а так же резетил при резком отключении движков: если раскрутить их до 100%, а потом снять сигнал, то МК перезагружался; однако, если после 100% плавно понижать обороты где-то до 40%, и лишь потом снимать сигнал, то схема работала нормально. Плюс, очень сильно нагревались электролиты C7...
      Однако, когда принес схему в машину - для отладки непосредственно в "боевых условиях", и подключил мощный двигатель вентилятора, началась старая песня с резетами...
      Сейчас, вроде бы, "осенило" - поменял VD2 на Шоттки 1N5822 - лампочка запустилась на "ура" даже без С7; так же отлично и мягко стартовала спарка из МЭ218 - радостный побежал к машине... Но с "карлсоном" - опять мимо: МК вновь ушел в перезагрузку... Все: я не знаю, что тут делать - каждую деталь уже перелопатил, и кучу вариантов испробовал!!! Но ничего не понятно(( Вот и прошу помочь: может быть, кто-то уже был в такой ситуации, и как-то решил подобную проблему?
      VT2 и VT3 стоят "фирменные", IR-овские (не Китай) - из "Чип и Дипа". ATtiny13 - с Алиэкспресс; чтобы исключить возможность брака конкретной микросхемы, пробовал ставить в схему несколько разных экземпляров МК (из одной посылки). DS18B20 пока еще не подключал (нужно разобраться с ШИМ!). IRF3205 каскадированны для уменьшения нагрева (хотя его и так практически нет), и для дополнительной надежности (чтобы в случае выхода из строя одного транзистора не перегреть машину). Тестовую программу специально написал "китайским стилем", без циклов и т.п. - чтобы она была максимально простой, наглядной и линейной - для уверенности, что не в ней дело.
      Подскажите пожалуйста - откуда эти резеты, и как с ними бороться? Как заставить схему отрабатывать на мощную нагрузку? Заранее благодарю!!!
       
       
      ;*************ТЕСТОВАЯ ПРОГРАММА************* ;============ДИРЕКТИВЫ ТРАНСЛЯТОРУ=========== .device ATtiny13 .include "tn13def.inc" .list ;Обзывательство регистров .def Temp = R16 .cseg .org 0x00 ;=========ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЙ======== rjmp Begin //Начальный сброс reti //Внешнее прерывание INT0 reti //Изменение состояния любой линии reti //Переполнение T0 reti //Готовность EEPROM reti //Срабатывание компаратора reti //Совпадение в канале A таймера T0 reti //Совпадение в канале B таймера T0 reti //Переполнение сторожевого таймера reti //Завершение преобразования в АЦП ;============МОДУЛЬ ИНИЦИАЛИЗАЦИИ============ Begin: ;-----Инициализация стека ldi Temp, RAMEND out SPL, Temp ;-----Отключение компаратора ldi Temp, 0x80 out ACSR, Temp ;-----Настройка портов ldi Temp, 0b00000111 out DDRB, Temp //PB0 - на вывод ;-----Настройка ШИМ ldi Temp, 0b11000001 out TCCR0A, Temp //Режим - быстрый ШИМ с инверсией ldi Temp, 0b00000010 out TCCR0B, Temp //Делим тактирование таймера на 8 rjmp Start //При старте пропускаем 5-секундную задержку ;===============ТЕСТОВЫЙ ЦИКЛ================ PWM: ldi Temp, 0b00000000 out OCR0A, Temp //ШИМ=0% rcall Delay5sec //Ждем 5 сек ;-----Повышаем скорость Start: ldi Temp, 77 out OCR0A, Temp //ШИМ=30% rcall Delay2sec ldi Temp, 102 out OCR0A, Temp //ШИМ=40% rcall Delay2sec ldi Temp, 128 out OCR0A, Temp //ШИМ=50% rcall Delay2sec ldi Temp, 154 out OCR0A, Temp //ШИМ=60% rcall Delay2sec ldi Temp, 179 out OCR0A, Temp //ШИМ=70% rcall Delay2sec ldi Temp, 205 out OCR0A, Temp //ШИМ=80% rcall Delay2sec ldi Temp, 230 out OCR0A, Temp //ШИМ=90% rcall Delay2sec ldi Temp, 255 out OCR0A, Temp //ШИМ=100% rcall Delay2sec ;-----Понижаем скорость ldi Temp, 230 out OCR0A, Temp //ШИМ=90% rcall Delay2sec ldi Temp, 205 out OCR0A, Temp //ШИМ=80% rcall Delay2sec ldi Temp, 179 out OCR0A, Temp //ШИМ=70% rcall Delay2sec ldi Temp, 154 out OCR0A, Temp //ШИМ=60% rcall Delay2sec ldi Temp, 128 out OCR0A, Temp //ШИМ=50% rcall Delay2sec ldi Temp, 102 out OCR0A, Temp //ШИМ=40% rcall Delay2sec ldi Temp, 77 out OCR0A, Temp //ШИМ=30% rcall Delay2sec rjmp PWM //Возвращаемся, и начинаем с 5 сек "молчания" ;===========ПОДПРОГРАММЫ ЗАДЕРЖКИ============ ;-----Задержка в 2 секунды Delay2sec: ldi R17, 253 ldi R18, 75 ldi R19, 29 L1: subi R17, 1 sbci R18, 0 sbci R19, 0 brcc L1 nop ret ;-----Задержка в 5 секунд Delay5sec: ldi R17, 253 ldi R18, 61 ldi R19, 73 L2: subi R17, 1 sbci R18, 0 sbci R19, 0 brcc L2 nop ret  

    • By Дмитрий Чуков
      Необходимо составить программу, которая формирует сигнал с частотой 1 кГц и скважностью 4 при помощи таймера. В CodeVision AVR написать программу и после в протеусе проверить, целый день уже бьюсь, не могу разобраться с таймерами. Вроде задача не трудная, если бы увидел, как это должно выглядеть в коде... Как настроить таймер для ATMega8A и решить эту задачу?
    • By Стас73
      Доброй ночи, уважаемые.
      Прошу Вашего совета по следующей куче проблем для меня, т.к. не соображаю в электронике, схемах, резисторах и подобному, но дружу с компом и есть желание сделать определенный механизм, но пока нет наставления на путь истинный от специалистов)
      Задача состоит в следующем - хочу мотор стеклоочистителя подключить к Ардуино, но управлять им необходимо с кнопки. Шилд, например, который обрабатывает сигнал нажатия на кнопку (допустим кнопка записи), при ее активации, нажимаю на другую кнопку, которая дает команду движку вращаться по часовой стрелке. Отпускают ее, моторчик останавливается. Другая кнопка, вращение в противоположную сторону. Т.е. записал последовательность и продолжительность вращений,  нажимаю вновь на кнопку запись и мои действия сохраняются. Далее на 4 кнопку жму и моя игра с моторчиком автоматически воспроизводится. Если такое выполнимо с помощью плат и шилдов без доп программирования логики, то буду ОЧЕНЬ  признателен если расскажете как вкратце это осуществить или кинете ссылки к примеру на Али с нужными товарами. Если легковыполнимо, то в будущем наверное уже разберусь,  как обойтись без нажатия на 4 кнопку (воспроизведения записанных действий) и запускать этот процесс, подключив датчик движения или звука.
      Если необходимо описывать логику или создавать типа какого-то протокола, что шилд (?) умел понимать, что я от него хочу, то подскажите среду разработки для неба, что б там по минимуму было наворотов) В принципе с основами c++ для Ардуино скорее всего придется ознакомиться. 
      Заранее спасибо!
    • By Ilya Gray
      Доброго времени суток!
      В целом, имеется опыт разработки малых устройств, что-то понимаю, в общем, старательно читаю даташиты, даже понимаю их, но на звание серьёзного инженера (пока что) не претендую.
      Я пытаюсь использовать I2C на 8-битном PIC16F18326. Сижу в даташитах. Всё понимаю, всё делаю, на мой неопытный взгляд, правильно. Даже копирую полностью рабочие примеры (я даже купил такой же микроконтроллер, как в примере, скопировал код, контролируя, что он делает. Но всё равно не работает - SCL/SDA на 5в и всё тут).
      Так вот: PIC16F18326 on breadboard (прошу прощения, я хз как это по-русски) на внутреннем 32мгц кристалле. Чип пашет, без проблем моргаю LEDкой. Ну, думаю, щас быстренько подниму I2C. В итоге SCL SDA сидят на 5в без движения. Я использую LED для отладки. Судя по LED, код заloopливается в месте, где проверяется while PIR1bits.SSP1IF==0. Я уже везде был, кучу форумов перерыл. Уже попробовал всё, что мог представить. Я довольно новый в мире PIC, хотел попробовать их, а они ужасно сопротивляются. Уже 2 недели долблюсь безуспешно.
      Подтяжки 10к, проблем с ними никогда не было.
      Собственно, вот код (я уже там попробовал повыключать ADC, вычитал про баг, что сначала I2C пины надо делать OUTPUT LOW, а потом уже INPUT из-за бага MSSP, но ничего не помогло).
      // PIC16F18326 Configuration Bit Settings // 'C' source line config statements // CONFIG1 #pragma config FEXTOSC = OFF // FEXTOSC External Oscillator mode Selection bits (Oscillator not enabled) #pragma config RSTOSC = HFINT32 // Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz)) #pragma config CLKOUTEN = OFF // Clock Out Enable bit (CLKOUT function is disabled; I/O or oscillator function on OSC2) #pragma config CSWEN = ON // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed) #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled) // CONFIG2 #pragma config MCLRE = ON // Master Clear Enable bit (MCLR/VPP pin function is MCLR; Weak pull-up enabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config WDTE = OFF // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored) #pragma config LPBOREN = OFF // Low-power BOR enable bit (ULPBOR disabled) #pragma config BOREN = ON // Brown-out Reset Enable bits (Brown-out Reset enabled, SBOREN bit ignored) #pragma config BORV = LOW // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V) #pragma config PPS1WAY = ON // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle) #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will cause a Reset) #pragma config DEBUG = OFF // Debugger enable bit (Background debugger disabled) // CONFIG3 #pragma config WRT = OFF // User NVM self-write protection bits (Write protection off) #pragma config LVP = ON // Low Voltage Programming Enable bit (Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored.) // CONFIG4 #pragma config CP = OFF // User NVM Program Memory Code Protection bit (User NVM code protection disabled) #pragma config CPD = OFF // Data NVM Memory Code Protection bit (Data NVM code protection disabled) // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. #include <xc.h> #include <htc.h> #include <stdio.h> #include <stdint.h> #define _XTAL_FREQ 32000000 void i2c_is_idle(void){ //while(!PIR1bits.SSP1IF); //while(SSPCON2bits.SEN==1 || SSPCON2bits.RSEN==1 || SSPCON2bits.PEN==1 || SSPCON2bits.RCEN==1 || SSPCON2bits.ACKEN==1 || SSPSTATbits.R_nW==1){}; while(PIR1bits.SSP1IF == 0){ PORTCbits.RC2=1; }; // SSP1IF is set when operation complete PORTCbits.RC2=0; PIR1bits.SSP1IF = 0; // clear interrupt flag } void i2c_start(void){ i2c_is_idle(); SSPCON2bits.SEN = 1; } void i2c_rep_start(void){ i2c_is_idle(); SSPCON2bits.RSEN = 1; } void i2c_stop(void){ i2c_is_idle(); SSPCON2bits.PEN = 1; } void i2c_write(uint8_t i2c_data){ i2c_is_idle(); SSPBUF = i2c_data; while(SSPSTATbits.BF != 0); while(SSPCON2bits.ACKSTAT != 0); } uint8_t i2c_read(uint8_t ack){ uint8_t recieve =0; i2c_is_idle(); SSPCON2bits.RCEN = 1; while(SSPSTATbits.BF != 1); recieve = SSPBUF; SSPCON2bits.ACKEN = ack; return recieve; } void i2c_init(void){ TRISCbits.TRISC0 = 1; TRISCbits.TRISC1 = 1; SSPSTATbits.SMP = 1; SSPSTATbits.CKE = 0; SSPCONbits.SSPM = 0x08; SSPADD = 79; SSPCONbits.SSPEN = 1; } void main(void) { ANSELCbits.ANSC0 = 0; //ADC RC0 OFF ANSELCbits.ANSC1 = 0; //ADC RC1 OFF TRISCbits.TRISC2=0; //LED PIN TRISCbits.TRISC0=0; //MSSP bug counter TRISCbits.TRISC1=0; //MSSP bug counter //__delay_ms(5); LATCbits.LATC1=0; //MSSP bug counter LATCbits.LATC0=0; //MSSP bug counter //__delay_ms(5); INTCONbits.GIE=1; //global interrupt en INTCONbits.PEIE=1; //peripheral interrupt en ADCON0bits.ADON=0; //unpower adc just in case i2c_init(); //THIS SETS TRISC BITS FOR SCL SDA while(1){ i2c_start(); i2c_write(0x3C); i2c_stop(); } return; } Задача: просто увидеть коммуникацию на SCL SDA, я уже потом по даташитам таргет девайсов без проблем напишу дрова. Не получается именно осуществлять коммуникацию.
      Подскажите, пожалуйста, я не понимаю, где я дурак, а между тем волос на голове становится всё меньше, а те, что остались, стремительно приобретают серый окрас, ибо 2 недели я долбаюсь с одной проблемой. Благодарю за ваши советы. Спасибо.
       
×
×
  • Create New...