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

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


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

Например решили удалить существующее прерывание, а в каком-то место оно снова разрешается при каком-то хитром событии (ну хотя бы в качестве костыля, что тоже не лучшая идея). Скажем прерывание от сторожевой собаки или компаратора. И при случайном (раз удалили обработчик прерывания то и основные пути его возникновения тоже) его появлении происходит прыжок куда-то в начало основной программы, причем, вполне возможно, после инициализации стека. Что будет происходить дальше не известно. Так что лучше заполнять либо rjmp'ами (прерывание просто не будет обрабатываться) либо nop'ами (тогда выполнится ближайшее "вниз" прерывание что вообще говоря менее опасно).

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

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

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

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

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

Лучше ставить команду возврата из прерывания - максимум из последствий - будет потеряно 12 тактов(до 4 тактов на реакцию на прерывание + 4 такта на вход в прерывание и 4 такта на немедленный выход).

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

Если задавать не все прерывания а только нужные, ничего страшного - все будет работать. Но это неудобно с точки зрения поддержки кода, если ты сам же или кто-то другой залезет в исходник - высока вероятность попутать адреса прерываний и не заметить этого, а потом долго удивляться почему это все не работает. И только после доскональной сверки листинга скомпилированного исходника обнаружится что прерывание сидит не на своем месте. Причем - оно некоторое время может остаться незамеченным, свободная область заполняется $3FF что равносильно команде NOP, и просто будет осуществляться переход на следующее описанное прерывание, но когда определишь соседнее прерывание - вот тогда и начнутся грабли, прежнее прерывание перестанет работать а вместо него будет вызываться совсем другой обработчик.

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

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

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

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

Всем привет.

Решил заниматься МК, выбор пал на AVR. Дома есть ATtiny2313, но я думаю купить ATmega16. Собственно вопрос в чем: с чего лучше начать, AVR или PIC? И с какого чипа?

Сам склоняюсь к AVR, думаю начать с этого учебника: proavr.narod.ru, насмотрел программатор USBasp. Немного почитал про языки программирования на AVR, больше тянет к С или bascom.

З.Ы теоретических познаний в электронике практически нет, есть только практические умения в пайке, чтении схем, понимании даташитов и т.п

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

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

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

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

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

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

свободная область заполняется $3FF что равносильно команде NOP

свободная область заполняется полутора байтами: 0b0011 1111 1111 ? Скорее всего имелось в виду все же 0xFF или 0xFFFF, что соответствует истине так как команды двухбайтные.

Еще Atmel считает кодом nop'а не 0x3FF а 0x0000. Впрочем 0xFFFF контроллер видимо просто не может декодировать (или считает эквивалентным nop'у) и пропускает.

Логичнее начать с того что уже есть а еще логичнее с того по чему есть знакомые специалисты. Насчет холивара PIC vs AVR говорить ничего не буду, в PIC'ах не разбираюсь. По AVR же посоветую. Система команд и общая архитектура у конроллеров AVR одинаковая, могут отличаться объем памяти, допустимые параметры питающего напряжения и частоты а так же доступная переферия. Сейчас самым пожалуй популярным контроллером является ATmega8, также нередко используются ATtiny2313, ATtiny13, ATtiny45, ATtiny85 (они проще, меньше и дешевле) и ATmega16, ATmega128, ATmega161 (эти мощнее но дороже и зачастую в SMD-корпусе, что для начинающего плохо). Про корпус: лучше всего использовать DIP + панелька, и паять проще и заменить если что.

Язык программирования - однозначно ассемблер. Не потому что на нем все пишут или придется часто писать самому а потому что дает представление о работе контроллера. Потом можно перейти на ЯВУ, те же Си, Паскаль или там Бейсик.

Из справочников кроме даташитов очень хороши книги Евстифеева "Микроконтроллеры AVR семейства (mega/tiny/classic)", я начинал с Ревича, основы и начальные конструкции у него неплохо написаны. Ну и на сайте/форуме обучающие курсы можно посмотреть, впрочем на этом я с ходу ничего не нашел кроме двух групп статей, первая про совсем основы, программатор и cvavr (скорее всего она бесполезна) и про ATtiny13 (дурацкий выбор: 8 ног из которых 3 системные, простейшие спрсобы залочить, недостаток памяти: 1к флеша 128 байт ОЗУ) и BASCOM (начинать надо с ассемблера, я это уже упоминал, сам Бейсик мне тоже не по душе но это дело вкуса).

Про USBAsp могу сказать что особо на него не жаловались, схема похожа на Prottoss'овскую и avrdoper'овскую (в работоспособности которых я не сомневаюсь) так что в случае чего можно перепрошить, но это уже в отдаленном будущем.

Так что я бы советовал начать с ATtiny2313 (потому что она есть и на ней немало готовых схем), AVRStudio (потому что отладчик, впоследствии можно прикрутить avrgcc который лучше соответствует стандарту Си чем cvavr, подсказка по командам опять же) и Proteus впрочем начинать как раз лучше с макетки, в живую оно гораздо интереснее.

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

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

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

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

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

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

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

моё мнение:

avr

ассм для начала, потом что угодно

только в железе (никаких Симуляторов! задолбался читать: ой, в протеусе работает, а спаял - не работает. Это мне плохой МК продали!аааа!!!)

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

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

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

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

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

Спасибо большое за такой развернутый ответ.

Тогда остаются 2 вопроса:

ATtiny2313 или все же ATmega16? Просто я так почитал в том курсе, мол что хорошо начать с мощного мк и постепенно его изучить, или это ни к чему?

И все таки, именно ассемблер? Никакого С? Я к тому что С чем то напоминает паскаль (не кидайте камнями за такое сравнение) и он как то более человекопонятный в отличие от этого страшного ассемблера :).

Да и еще, ассемблер тогда будет только как ступенька, или все же можно на нем "идти до конца"?

За книги спасибо, скачаю.

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

Человекопонятный он только в области алгоритмов, более высокоуровневых чем работа с переферией. А часто стается так что программа контроллера это чисто работа с переферией... и C тут только мешать будет, раздувать прошивку и не давать сделать "как надо". Используя активно макроподстановки и дефайны можно и на ассемблере писать почти так же как и на С.

Если есть возможность - бери мегу 16-ю в корпусе DIP-40 - контактов хватит с головой для изучения. Да даже мега8515 и 8535 вроде даже подешевле будет.

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

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

я бы рекомендовал с Мега8 всё таки начать

во-первых, купить не проблема

во-вторых, во многих описаниях он идет как контроллер, на котором примеры и строятся

в-третьих, в сети масса примеров на нём

я свой стенд именно под мега8 затачивал из-за этих причин

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

ATmega8 конечно хорош но SPIEN и RSTDisable довольно опасны. Начинать все-таки лучше с того что есть под рукой там более что отличаются они только переферией и памятью. Ну какая разница новичку два таймера или три, 2К флеша или 8К если программа мигания светодиодом занимает байт 20 (считая таблицу прерываний). Если есть возможность купите и ATmega16 и ATmega8 (как раз потренируетесь лечить фузы) и, например ATtiny85 (это пожалуй самая мощная из восьминожек атмела). Я начинал с ATmega8515.

И все таки, именно ассемблер? Никакого С? Я к тому что С чем то напоминает паскаль (не кидайте камнями за такое сравнение) и он как то более человекопонятный в отличие от этого страшного ассемблера
Да Си и Паскаль чем-то похожи, точно так же начинал со второго и видел явную аналогию :-) На самом деле ассемблер это самый простой язык: каждый оператор однозначно транслируется в команду процессора, компиляторы не умничают и камень делает именно то что ему говорят с предсказуемыми задержками и порядком операций. С ЯВУ сложнее: у того же Си сотня ключей компилирования, шаманский оптимизатор и иногда неочевидные подводные камни. Да написать на Си программу можно быстрее и правильнее (в смысле ближе к алгоритму, меньше подробностей об архитектуре) но без понимания работы процессора она будет тормозить и творить непредсказуемые вещи. Раньше я сказал что учить ассемблер стоит уже ради обучения. Это верно но помимо этого ассемблер - самый быстрый и компактный язык потому что когда программист видит сколько усилий надо приложить для создания одной переменной когда можно использовать регистр он трижды подумает а надо ли ему оно. С математикой еще показательнее: посмотрите на листинг процедуры деления или там синуса. Захочется ли это пихать в какой-нибудь ATtiny13? Так что Си - для математики (потому что лень ручками да и отвлекает), нескоростной обработки интерфейсов (даже vusb который вроде Сишный содержит ассемблерный файл потому что обработать за 4 такта прием бита (тут гарантировать точность не буду только общий смысл) все-таки непросто). А ассемблер для изучения и сильного колдунства над тактами и байтами. Так что в любом случае лишним он не будет. Но и изучать только его все-таки маловато: он менее переносимый даже с одной AVR на другую.

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

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

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

Это микросхема памяти. 27 серия 512к. 64к/8. Ищите даташит и программатор по слову 27c512.

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

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

Я сначала погуглил, но когда прочел про программатор - засомневался что это не МК. (думал программаторы предназначены только для МК)

Я пока слаб знаниями в таких вопросах...(

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

Решил повторить конструкцию часов http://radiomaster.com.ua/1650-chasy-s-termometrom-svyazannye-s-kompyuterom-na.html и появились несколько вопросов. Какого номинала поставить конденсаторы в обвязке кварца?

Какой генератор выставить при программировании PIC16F887? (rc,lp,xt,hc) pic16f877a подойдёт? (не пинайте я по аврам соображаю пикушки на халяву достались)

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

предложу несколько вариантов, выбирите лучший): Кондеры - 1) можно не ставить 2) поставить 47 пФ (наверняка) 3) посмотреть диапазон по даташиту. Генератор - 1) Поставить ХТ 2) Поставить HS (на худой конец).

Ну а вообще это база МК (биты конфигурации, номиналы кондеров обвес такта и портов). Всё прозрачно, ответ : Даташит на МК или отдельные пдф по разделам.

В поисках работы..

Looking for job

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

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

И как побочный эффект - генерация быстрее выходит в установившийся режим.

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

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

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

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

всем доброе время суток, это форум наверное моя последняя надежда,

недавно начал осваивать мк AVR,

остановился на меге8, дошёл до работы с ацп и тут ступор

настраиваю работу ацп(код будет ниже), запускаю преобразование, читаю регистры ADCH:ADCL дам все 1, если преобразование не запускаю то там все 0, использую вход ADC7 , считываю регистры в обработчике прерывания переполнения таймера0. на ножку ацп приходит напряжение через переменный резистор.

мучаюсь 3 день, может проблема с мультиплексором или я что-то упустил? жду вашей помощи, заранее благодарен.

код:

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


#define F_CPU 8000000
#define nop asm ("PUSH R0": ;asm ("POP R0": 
volatile int y = 0;z = 0;i = 0;A = 0x7A;l = 0;
int MAS[] = {0xFC,0xDA,0x10,0x10,0x10,0xEE,0xCE,0x1C,0x9E,0x3A,0x10,0x10};//
void ispout(y) // работа с регистром сдвига, вывод информации "наружу"
{
for (l = 0; l<y; l++)
{
A = MAS[l];
for (i = 0; i < 8;i++)
{
z = ((A>>i)&(0x01));
PORTB |= ((z<<2)&(1<<PB2));nop;
PORTB &= ~_BV(PB0);nop;
PORTB |= _BV(PB0);nop;
PORTB &= ~(0x06);nop;
}
PORTB &= ~(0x07);nop;
PORTB |= _BV(PB1);nop;
PORTB &= ~(0x07);nop;
A = 0;nop;
if(((l+2)%2) == 1) {PORTD = _BV(PD5);_delay_ms(3000);} else {PORTD &= ~_BV(1<<PD5);}
}
PORTD |= _BV(PD5);
}

ISR(ADC_vect)
{

}

ISR(TIMER0_OVF_vect)
{
MAS[0] = ADCL;
MAS[1] = ADCL > 128? (MAS[1] = 0x6E) : (MAS[1] = 0x1C);
ADCSRA &= ~_BV(ADIE);
}

int main(void)
{
DDRB = 0xFF;
PORTB = 0x00;
DDRD = (1<<DDD5);
PORTD = (1<<PD5);
DDRC = 0x00;

ADCSRA |= _BV(ADEN)
|_BV(ADPS2)|_BV(ADPS1)|_BV(ADPS0)
|_BV(ADIE);
ADMUX |= _BV(REFS1)|_BV(REFS0)
|_BV(MUX2)|_BV(MUX1)|_BV(MUX0);
_delay_ms(50);
ADCSRA &= ~(1<<ADIF);
SFIOR |= 0x10000100// попытка настроить преобразование АЦП по переполнению таймера0
sei();
TCNT0 = 0;
TIMSK = _BV(TOIE0);
TCCR0 = _BV(CS02);

while(1)
{

ADCSRA |= _BV(ADSC)
nop;
cli();
ispout(4);
nop;
sei();
_delay_ms(400);
}
}

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

Ничерта непонятно из кода. Но повидимому даташит Вы не читали... Где настройка частоты работы АЦП?

Где старт преобразования и ожидание окончания преобразования? Или хотябы обработка по прерыванию от АЦП...

; Настройка АЦП (стр.200 даташита)
set_io ADMUX,  0b11000000 ; Опорное напряжение - внутренний, 2.56В
set_io ADCSRA, 0b10000110 ; ADC Enable, single-conversion mode, Fadc = 7,3728Мгц/64 = 115200


Получение измеренного значения с АЦП на заданном канале.
ANDI   ACCUM, 0x0F	   ; Ограничим входной параметр значением 0-15
ORI    ACCUM, 0b11000000
OUT    ADMUX, ACCUM	  ; Выбор канала АЦП, опорное = встроен. 2.56В
SBI ADCSRA, ADSC	  ; Старт преобразования
SBIC   ADCSRA, ADSC  ; Ожидание готовности данных
RJMP   PC-0x0001

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

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

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

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

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

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

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

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

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

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

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

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

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