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

Вопросы от начинающих по МК


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

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

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

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

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

  • Ответов 8,9т
  • Создана
  • Последний ответ

Топ авторов темы

Если контроллер во сне, то это другое дело. Поймал переход, выполнил что-то там, разрешил прерывания и опять уснул...

А в простом варианте, без сна - мгновенно отреагировать на нажатие кнопки, затем ждать туеву хучу времени - глупо. Проще и разумнее опрашивать вход кнопки с определённым периодом.

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

Здравствуйте, тут заказал JY-MCU Minimum AVR System Board (ATMEGA32) на DealExtrame и не заметил что на ней стоит ATMEGA32L-8AU.

Как я понимаю суфикс L означает пониженное питание и частоту. Но там (на сайте) почему-то в описании написано Working frequency: 16MHz.

Это опечатка? Или данный МК может работать на 16MHz?

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

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

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

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

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

• Operating Voltages

– 2.7 - 5.5V for ATmega32L

– 4.5 - 5.5V for ATmega32

• Speed Grades

– 0 - 8 MHz for ATmega32L

– 0 - 16 MHz for ATmega32

Вам сюда - http://www.atmel.com/Images/doc2503.pdf страница332

Электроника эта пламя страсти без неё никуда.

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

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

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

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

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

Здравствуйте! Помогите пожалста студенту. Пишу на СИ под модуль на базе 8051. The RF50/1/2/3/4/5 family utilizes proprietary CIP-51 microcontroller core. The CIP-51 is fully compatible with the MCS-51™ instruction set; standard 803x/805x assemblers and compilers can be used to develop software. The CIP-51 core offers all the peripherals included with a standard 8052.

Вопросы:

1) что происходит на низком уровне, когда я в си объявляю глобальную переменную, куда она сохранится? В RAM?

2) что произойдет с переменной после программного ресета контроллера? в даташите сказано: 'The contents of RAM are unaffected during a reset; any previously stored data is preserved as long as power is not lost' значит - ее значение и адрес не изменятся? я так же смогу к ней обращаться, если не объявлю ее повторно(допустим сделаю проверку флага программного ресета перед объявлением)?

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

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

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

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

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

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

Тебя не должен волновать этот вопрос где хранится переменная. Когда ты её объявляешь абсолютно ничего не происходит. В зависимости от оптимизации компилятор может решить что переменной вообще не нужно место в памяти и она может находится исключительно в регистре.

Поэтому если ты хочешь чтобы переменная была ТОЧНО В ПАМЯТИ - прийдется это как-то объявить компилятору при помощи директив, либо использовать ассемблерную вставку.

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

Чтобы этого избежать тебе надо будет как-то сказать компилятору что очищать память в процессе сброса не нужно, а только при первичной подаче питания. Но еще лучше предусмотреть использование для этого EEPROM либо внешней FRAM-памяти, которая хранит содержимое без напряжения как и EEPROM но обладает быстродействием статической памяти и неограниченным количеством циклов записи(что-то около нескольких милиардов в худшем случае), однако ограничивающим фактором все равно будет являться узкое горлышко последовательного интерфейса, хотя это все же раз в 100 быстрее чем EEPROM.

Учение - изучение правил. Опыт - изучение исключений.

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

Вполне вероятно что состояние всех переменных сохраняется во флеше
это вряд ли. И долго и ограниченное количество циклов перезаписи, да и не нужно.
1) что происходит на низком уровне, когда я в си объявляю глобальную переменную, куда она сохранится? В RAM?
Либо в ОЗУ либо в регистр, как компилятору в голову взбредет.
2) что произойдет с переменной после программного ресета контроллера? в даташите сказано: 'The contents of RAM are unaffected during a reset; any previously stored data is preserved as long as power is not lost' значит - ее значение и адрес не изменятся? я так же смогу к ней обращаться, если не объявлю ее повторно(допустим сделаю проверку флага программного ресета перед объявлением)?
Лучше этим не заниматься, ресет на то и ресет чтобы все гарантированно сбросить. В даташите лишь написано что "содержимое ОЗУ не зависит от ресета, вся информация сохраняется пока есть питание", то есть ОЗУ можно очистить либо явно в программе либо убрать питание. В начале программы переменные лучше в любом случае инициализировань явно.

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

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

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

Просто там применена статическая память, по примеру 537РУ10 могу сказать что она может хранить содержимое в нормальных условиях без напряжения - секунд 30, причем за 20 секунд видимых потерь не происходит. А в контроллере инициализации по сигналу сброса подвергаются только специальные регистры, счетчики, предделители и т.п.

Но никто не даст гарантию что в момент подачи питания АЛУ контроллера не даст "конвульсивные" команды на изменение случайных ячеек ОЗУ.

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

Правда что компилятор С будет всячески сопротивлятся таким издевательствам над смыслом программы, будет думать что программист не в трезвом уме, поэтому надо искать пути как его заткнуть. А на ассемблере - даже не поругает за такое.

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

Учение - изучение правил. Опыт - изучение исключений.

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

по примеру 537РУ10 могу сказать что она может хранить содержимое в нормальных условиях без напряжения - секунд 30, причем за 20 секунд видимых потерь не происходит.
Ну еще бы, КМОПу надолго хватит и заряда накопленного на паразитных емкостях.
Правда что компилятор С будет всячески сопротивлятся таким издевательствам
Может и не по теме но напомнило такое решение.

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

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

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

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

Дело в том что по сбросу все специальные регистры сбрасываются, а к ним относятся биты разрешения прерываний, периферия и т.д. в результате, при сбросе периферию надо подымать заново. По прерыванию ничего этого не происходит! Более того прерывание будет обработано после того как отработает активный обработчик прерывания - т.е. не будет такой ситуации что в прерывании что-то было сделано на пол шага и тут мы все прервали и программу начали заново с "зависшей" периферией.

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

На С проделать такое будет довольно сложно с прогнозируемым результатом. Что-то где-то он решит сделать по другому чем при прошлой компиляции и все выстроенные костыли стройными рядами рушатся.

Учение - изучение правил. Опыт - изучение исключений.

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

Задам свой вопрос чайника. Только начал разбираться с МК, копаю литературу. Нашел книгу Ревича "Практическое программирование МК AVR на ассемблере", автор предлагает писать программы в редакторе ASM Editor и компилировать их компилятором из состава AVR studio 4. Насколько удобен такой подход по сравнению, скажем, с 5-й или 6-й студией? По методологии автора надо в папке с самим редактором и компилятором создать .bat-файл с содержанием:

...\avrasm32 -fI %1.asm

Я так понимаю, что в строке прописаны дополнительные параметры запуска компилятора, что они означают? Компиляции не происходит, хочется понять, почему. Либо потому что кривая программа, либо редактор, параметры и компилятор не расчитаны Win 7. Есть цель и желание глубоко разобраться и с ассемблером и с С, поэтому так же буду очень признателен за любые ссылки на литературу или сторонние ресурсы, где толково написано, с чего начать.

У меня нет телевизора, поэтому я ем грибы и смотрю ковер.

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

программы в редакторе ASM Editor и компилировать их компилятором из состава AVR studio 4.
А в той же студии компилировать религия не позволяет?! Там же и ассемблер и си (с подсветкой синтаксиса и переходом к строке с ошибкой) и эмулятор самого контроллера (очень полезная вещь, часто заменяет даташит) и еще что-то.

Бат-файл написан как-то странно. Я не знаю, может это и правильно, но три точки в начале точно нужны? В %1.asm расширение точно нужно? Если это исправить я бы предположил что эта штука ищет в родительской папке (относительно батника) компилятор avrasm32 и запускает его с параметрами -fI и первый аргумент, переданный самому батнику.

Другой вариант, что ... в начале должно быть по задумке Ревича заменено на полный путь к компилятору.

Попробуйте запустить этот батник из консоли и посмотрите что он выдаст.

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

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

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

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

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

Но вообще этот подход несколько странный. Поскольку в реальности компилятору передается масса параметров, может поэтому он и не хочет компилировать - не может найти нужных ему вещей, инклудов например.

Учение - изучение правил. Опыт - изучение исключений.

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

Спасибо откликнувшимся! Надо было понятнее писать, но в 4 утра пути мысли неисповедимы )) Многоточие в начале текста батника - это полный путь к его папке. Насчет вероисповедания Ревича ничего сказать не могу, к сожалению, я с ним не знаком. В целом книга написана хорошо, и мне хотелось бы все делать по учебнику. К сожалению, работа с AVR studio в книге не рассматривается. Короче, для компилирования нужен сам компилятор, который я положил в папку с редактором уже после написания поста *посыпаю голову пеплом*. Инклуд на мой мк лежит в этой же папке. Теперь при запуске компилятора на очень короткое время появляется консольное окно, которое я почти 5 мин ловил принт-скрином. В итоге, там указано, что завершено с 3 ошибками и .hex-файл удален. Тут вопросов нет, надо разбираться в коде. Но как сделать, что бы консоль не закрывалась?

У меня нет телевизора, поэтому я ем грибы и смотрю ковер.

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

Эх... вот оно поколение которое не знает что такое DOS ...

пропиши в батнике команду pause.

или даже нет, пропиши "if errorlevel 1 pause"

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

и вообще, открой сначала консоль (cmd.exe) и в ней выполни свой батник.

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

Учение - изучение правил. Опыт - изучение исключений.

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

Эх... вот оно поколение которое не знает что такое DOS ...

пропиши в батнике команду pause.

и вообще, открой сначала консоль (cmd.exe) и в ней выполни свой батник.

Вот только не надо про поколения, во времена доса я паял всякую хрень на МП42 и КТ315, потому как в нашей глуши о компьютерах тогда никто и не слышал. А по теме спасибо, консоль замерла :D

Из командной строки запускал и до этого, результат был тем же.

У меня нет телевизора, поэтому я ем грибы и смотрю ковер.

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

AVR studio в книге не рассматривается
А вы попробуйте. Код-то это всего-лишь текстовый файл, где его набирать неважно.
и мне хотелось бы все делать по учебнику.
Тоже начинал знакомство с контроллерами с книги Ревича, правда с другой. Но как-то не было желания делать все точь в точь как в книге.

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

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

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

Всем еще раз спасибо, все работает. Поигрался с ASM Edit и решил, что оно того не стоит, хотя все работает. Из консоли нет так удобно искать ошибки, студия четко говорит где и какого рода ошибка. Пока решил остановиться на связке AVR Studio 4 + Proteus, советую всем начинающим.

У меня нет телевизора, поэтому я ем грибы и смотрю ковер.

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

  • 2 недели спустя...

здрасте

делаю плеер по ссылке http://cxem.net/mc/mc51.php ,

тут такой вопрос : как переделать исходный код под другой микроконтроллер ?

есть код на attiny85 а надо на attiny45,

в файле Makefile_st исправил на attiny45, надо ли чтонибудь править в файле main.с?

и можно ли скомпилировать хекс файл программой Dev-C++?

исходные файлы прикрепил ниже

если кто знает подскажите пожалуста.

sd8psrc.zip

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

Мда.... а ты для начала сравни отличие этих двух контроллеров. Особенно такую важную характеристику как объем памяти. По коду и выводам они-то совместимы... но программа может не поместится.

Учение - изучение правил. Опыт - изучение исключений.

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

ну я хз, там у китайца в оригинальной статье вообще написано что можно использовать attiny25/45/85. Но если это не так то зачем было так писать?

нащет памяти знаю что в 45 4 килобайта,а в 85 8 килобайт.

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

да просто там уже ктото собирал эту схему на attiny25 она не заработала, вот и думаю собирать или нет.

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

вот и думаю собирать или нет.

Лучше подумать над тем, какие таймеры и прочая периферия используются, как оно всё инициализируется, есть ли такие же режимы в том контроллере, какой Вы хотите использовать и пр.

Тупо перекомпилить прогу под другой камень - такое не катит, к сожалению.

Я в своё время загонял в спячку ATMega8535 и ATMega162. Режимы сна идентичные, включаются идентично, но соответствующие управляющие биты разбросаны по совершенно разным регистрам :( . И что было бы, если б я тупо перекомпилил прошивку?

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

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

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

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

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

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

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

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

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

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

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

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