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

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


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

UCSRC = ( 1 << URSEL ) | ( 0 << UCSZ2 ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 ); // 8 бит
UCSRC = ( 1 << URSEL ) | ( 0 << UPM1 ) | ( 0 << UPM0 ) ; // контроль четности запрещен
UCSRC = ( 1 << URSEL ) | ( 0 << USBS ); // два стоп бита
UCSRB = ( 1 << TXEN ) | ( 0 << RXEN );

Первой строкой выставлены биты UCSZ1 и UCSZ0.

Второй они уже стерты!!! Третья строка повторяет вторую!

Нужно записывать так:

UCSRC = ( 1 << URSEL ) | ( 0 << UCSZ2 ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 ); // 8 бит

UCSRC  |=  ( 1 << URSEL ) | ( 0 << UPM1 ) | ( 0 << UPM0 ) ; // контроль четности запрещен
UCSRC  |=  ( 1 << URSEL ) | ( 0 << USBS ); // два стоп бита

UCSRB = ( 1 << TXEN ) | ( 0 << RXEN );

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

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

подскажите

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

а можно ли его использовать, как вход? не повлияет ли это на точность и т д?

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Здравствуйте, решил начать изучать программирование МК на Си, умею программировать Ардуино (но это так, для всяких поделок), а вот научиться прогать микроконтроллеры на чистом С считаю для себя полезным делом. Вобщем вопрос, вот есть AVR, PIC а в чём разница, какие плюсы и минусы они противопоставляют друг другу? И какие из них выбрать для изучения новичку. Я вот больше склоняюсь к PIC, так как уже есть программатор для них, а хорошая эта идея или нет, я не знаю.

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

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

Тут дело не в направлении а в том что через общий вывод порта течёт ток нагрузки что меняет его потенциал и приводит к помехам.

Если даже сопротивление дорожки с AGND до общего провода будет иметь сопротивление в 1 Ом то при токе в 1мА это уже будет вносить помеху в младший разряд 10-битного АЦП. И смотреть надо не только статику, а ещё и динамические токи - во время переключения порта по шинам идёт большой импульсный ток, может попасть на момент запоминания напряжения в УВХ. Это касается даже порта работающего на вход - ведь у него есть конкретная ёмкость, и если подключить туда высокоскоростной выход какой-то другой схемы то ток перезаряда входной ёмкости порта будет идти через общую шину с соответствующими последствиями.

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

а можно ли его использовать, как вход? не повлияет ли это на точность и т д?

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

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

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

Alexeyslav,

просто 3 кнопки прицепить хочу, с внешней подтяжкой

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

спасибо за помощь!

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

  • 3 недели спустя...
вот есть AVR, PIC а в чём разница

на сегодняшний день разницы уже никакой

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

Доброго времени суток.

Не понимаю, то ли я туплю, то ли глючит что то..

Вот код, простой, тестовый. Почему после обработки прерывания от таймера, выполнение начинается снова сначала мейна (то есть, функция preset снова запускается) ? Ведь должно возвращаться в цикл while, откуда и запустилось прерывание...

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
ISR(TIMER0_OVF_vect)
{
PORTD=0xff;
asm("nop");
}
void preset ()
{
DDRD |= (1<<0);
PORTD &=~(1<<0);
DDRD |= (1<<1);
PORTD &=~(1<<1);
DDRB |= (1<<3);
PORTB &=~(1<<3);
sei();
TCCR0 &=~ ((1<<WGM00)|(1<<WGM01)|(1<<CS02)|(1<<CS01));
TCCR0 |= ((1<<CS00)|(1<<WGM00)|(1<<WGM01));
TIMSK |= ((1<<TOIE0)|(1<<OCIE0));
TCCR0 |= ((1<<COM01));
OCR0 = 230;
}
int main(void)
{
preset();
   while(1)
   {
 PORTD |= (1<<1);
 _delay_ms(50);
   }
}

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

А точно до бесконечного цикла доходит? Мне показалось, что сброситься должно было после установки TIMSK. Дело в том, что вы разрешили прерывание OCIE0, но не написали его обработчик. А обработчик по умолчанию - сброс.

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

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

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

Я проверил. До цикла оно то доходило, но дело было действительно в прерывании по совпадению.. Отключив его или добавив обработчик, проблема решилась:) Спасибо))

Еще хотел спросить. каким способом лучше ставить флаг прерываний I в SREG? я попробовал сделать двумя способами, и результат был разный: SREG |= (1<<7) и sei();

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

Оно и понятно, первый вариант разворачивается в ряд арифметических операций, которые влияют на тот же SREG вполне определённым образом, а SEI - одна команда которая влияет только на один бит.

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

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

Здравствуйте. Вот такие вопросы еще возникли.. В процессе отладки через simulator, в окне processor пишется не та частота, что я выбрал.. соответственно, и время Stop Watch не верное. можно как то сделать, чтоб оно отображалось правильно? и второй вопрос, можно ли сделать, чтоб оно было показано в процессе отладки через Jtag?

Заранее благодарен.

post-130756-0-86372400-1465916024_thumb.png

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

Симулятор плевать хотел на дефайны, откуда ему знать в какой константе вы определяете частоту процессора?

F_CPU - не больше чем простая константа...

Частота задаётся в настройках симулятора и запросто может не совпадать с той на которой реально работает контроллер.

Поэтому, что в F_CPU что в настройках симулятора вы должны указать частоту на которую НАСТРОИЛИ контроллер, а не частоту на которой ВЫ ХОТИТЕ чтобы работал контроллер.

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

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

Спасибо за ответ. Дело в том, что я уже, в ходе изысканий, успел понять, что F_CPU не отображает реальной частоты..) но непонятно, "в настройках симулятора" - это все же, где? А мне нужно ,всего то, чтоб в Stop Watch было реальное время. Вот, допустим, планирую я работать с реальным контроллером на частоте 8МГц, Как мне в симуляторе время померить?

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

Меряй в тактах, они всегда в безразмерных единицах.

Настройки... а пёс их знает где они там, эти симуляторы в студии малость недоработанные и приводят меня в уныние. Совсем новую студию ещё не пробовал, но в старой каждый запуск симуляции сбрасывает настройки в умолчательные т.е. каждый раз - будет 1Мгц, и после старта симуляции надо идти в настойки симулятора(где-то там через меню, после старта симуляции) и устанавливать необходимые настройки.

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

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

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

что то совсем печально..

ладно. такты ведь верно показывает, хоть для симулятора хоть для jtag? а научите меня их в время переводить? правильно ли я понимаю что один такт это, собственно, один импульс резонатора, а там уже, время = кол-во тактов * (1/f) ?

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

В этом легко убедится сравнив время и такты... считает же время с частотой 1Мгц, т.е. 1 такт = 1мкс.

Да и всё равно, разрядность счетчика ограничена - и это ограничение наступает очень быстро.

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

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

Хаха я только что вызнал, как оно делается..)) все легко, просто выделяем этот самый 1МГц и вписываем туда нужное. таким образом, время пересчитывается правильно)

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

Пытаюсь поработать с датчиком ds18b20. Я вот не понимаю, помогите пожалуйста разобраться. запустил я преобразование. следом, хочу проверить, если преобразование закончено - то вывести результат, если не закончено - то вывести это. Для проверки, я так понял, надо посмотреть, что на шине. если 0, значит не закончено. если 1 - пора выводить результат. Но у меня на шине так получается что 1 висит и в процессе обработки (условие if не срабатывает на 0).

При этом, все в принципе работает, если запускать в бесконечном цикле функцию запуска преобразования и функцию чтения. температуру выводит. но условие проверки не срабатывает..

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

Из описания информация. Только вот, в одном источнике было просто про 0 или 1 на шине, а в другом - после формирования слота чтения смотреть шину. Пробовал всяко - не вышло.

А вот про включить эту функцию, я что то не нашел.. Питание не паразитное. Можно подробнее, пожалуйста?

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

сори перепутал с алармом....

вы должны мастером опустить шину на 1-2мкс , и прочитать состояние шины в течении 15мкс с момента опускания шины с учетом емкости шины, те через 10-13мкс

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

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

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

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

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

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

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

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

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

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

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

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