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

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


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

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

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

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

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

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

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

Вот сам вопрос:

Есть ли разница в pullUP для PIN1 и PIN2? Развел схему как для PIN2 и вот думаю теперь - заработает или нет?

да есть, для PIN2 помехозащищенность выше...

post-124881-0-36480400-1455856569_thumb.jpg

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

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

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

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

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

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

да есть, для PIN2 помехозащищенность выше...

Ни на грош не выше.

Разницы по помехозащищенности вообще никакой не будет.

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

На приведенных картинках речь идет не о порядке включения резисторов, а вообще о назначении последовательного резистора.

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

戦う前に相手のベルトの色に注目

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

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

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

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

Всем доброго дня !

Что то у меня не получается присвоить переменной значение бита порта ? Делаю так Ok_Flag = (PINC & (1 << PINC5)); , но ни фига не выходит , переменная всегда равна 0 , хотя в симуляторе студии 7 , выставляю пятый пин в высокое состояние , т.е. в 1 , следовательно и переменная должна быть равнв 1 , но не получается , Ok_Flag = 0 Саму эту конструкцию я не выдумывал подглядел в одном чужом проекте , и надо сказать , там она работает , а у меня фигушки .

Сейчас добавил nop-ов , перед этим присвоениеме , поднимаю пин 5 в одном из них , симулятор заходит в Ok_Flag = (PINC & (1 << PINC5));

и на выходе переменная равна почему то 32 , у пина всего два состояния 0 и 1 ?

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

Viktor26

Но мне нужно не значение порта 32 , а нужа 1 или 0. Мне нужен не байт , а бит , пятый бит ?

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

Потому что операция PINC & (1<<5) выдает не булевское значение, а битовую маску, у которой 5-й бит равен 5-му биту PINC, а остальные равны 0 (см. описание побитового И).

Если хотите получить именно булевское значение, так и приведите к нему var = (PINC & (1<<5))!=0;

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

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

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

Битовое поле для меня наверное слишком сложно , Сделал вот так

OK_Flag = OK_Flag<<2;

OK_Flag = OK_Flag>>7;

Потому что операция PINC & (1<<5) выдает не булевское значение, а битовую маску, у которой 5-й бит равен 5-му биту PINC, а остальные равны 0 (см. описание побитового И).

Если хотите получить именно булевское значение, так и приведите к нему var = (PINC & (1<<5))!=0;

Теперь я понял , почему в чужом коде это работало :D , там датчик DS18B20 был подключен к нулевому пину , и там это работало , а я перенес датчик на 5 пин , потому у меня и 32 вместо 1 . Вааще это опрос датчика , 1 датчика нет , 0 датчик присутствует .

Всем сасибо .

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

Viktor26

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

Работает , спасибо . Пишет как и задумано - Err0

post-187724-0-32602600-1456077756_thumb.jpg

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

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

Всем привет!

Делаю таймер для временной паузы при включении на ATtiny13A, считает от 0 до 5с, шаг 0.1с. Выбор времени производится потенциометром. При окончании отсчёта загорается светодиод.

Вылезла проблемка - "мёртвая зона" в начале отсчёта, от 0с до 0.3с (примерно) считает по максимуму - 5с. Так же происходит, когда просто посадить землю на вход АЦП.

Проблема решается добавлением резистора между нижней ножкой потенца и землёй (стрелка на схеме), чем меньше номинал, тем лучше, пока поставил 100 Ом.

Вопрос в том, почему такая ерунда происходит около нуля и резистор если поставить 50 Ом, не будет ли превышения тока, мало ли?

post-187141-0-35835200-1457293371_thumb.jpg

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

Или потенциометр неисправен, или проблема в коде. Особенно забывают отключать аналоговые входы как цифровые выходы, или подтяжку - и начинают соревноваться выход МК и потенциометр, а АЦП себе как ни в чем не бывало оцифровывает.

Да и код тоже выкладывайте, скорей всего проблема именно там.

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

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

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

Потенц пробовал другой, то же самое происходит. Код сейчас выложу

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

Напряжение на входе от 0 до 5В меняется, без резистора 100Ом.

;FREQUENCY 1.2MHz
.include "tn13adef.inc"
.def temp=r16
.def delay=r17
.def count=r18
.def flag=r19
.def cycle=r20
.org 0x0000
rjmp Reset
.org 0x0003
rjmp TIM0_OVF ;
.org 0x0006
rjmp TIM0_COMPA
.org 0x0009
rjmp ADC_CC
.org 0x000A


Reset:
ldi temp, low(RAMEND);
out SPL,temp

ldi temp,0b00000100 ;разрешение прерывания по совпадению
out TIMSK0,temp ;compare match A
ldi temp,233
out OCR0A,temp
ldi temp,0b00000010 ;CTC mode
out TCCR0A,temp
ldi temp, 0b00000001 ;запуск таймера0,
out TCCR0B, temp ;без предделения
ldi temp, 0b00100010 ;задействуем ADC2(PB4), ADLAR=1
out ADMUX, temp ;Vсс used as analog reference
sbi ADCSRA, 7 ;ADC ON
sbi ADCSRA, 3 ;ADC interrupt enable
sbi ADCSRA, 2 ; ADC frequency=75kHz
sei

clr cycle
clr count
clr flag
clr delay
sbi DDRB,3
cbi PORTB,3


Main_cycle:

rjmp Main_cycle

TIM0_COMPA:
inc count
sbrc flag,0
rjmp time_delay
sbi ADCSRA,6 ;start single convertion
sbr flag,0b00000001 ;пока произв одну конверсию
reti
time_delay:
cpi count,101 ;мин. деление(точность отсчёта)
breq next_cycle
reti
next_cycle:
clr count
inc cycle
cp delay,cycle
breq on_relay
reti
on_relay:
sbi PORTB,3
reti


ADC_CC:
in delay,ADCH
reti

Код под спойлером

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

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

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

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

Производится одна конверсия АЦП и считается столько циклов, какое значение считало АЦП от 0 до 255. Используется 8 бит из 10.

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

Числа подобраны для частоты 1.2МГц, в регистре сравнения 233, 101 цикл и число циклов из результата измерения АЦП, эти 3 числа как бы перемножаются, чтобы получить нужный отрезок времени задержки. При перемножении получится число отсчитываемых тактов, так как предделитель =0.

Перемножаются не арифметически, а циклами, конечно :)

Минимальное "деление" 233*101 = 23533 тактов, это 1/51я доля секунды. (хотя достаточно для этой задачи 0.1с) и оно "умножается" на значение, считанное АЦП от 0 до 255

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

отключение цифрового выхода в DIDR0 уменьшает потребление.

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

Слишком чего-то сложно, помоему.

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

Делаем преобразование АЦП синхронно, ожидая его окончание(буквально 100...200мкс).

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

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

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

Таймер в 13й тиньке один восьмибитный, на 100мс при частоте 1.2 МГц не получится прерывание настроить.

Минимум 1172 такта будет, а нам надо не больше 255

Да, можно было запустить АЦП при инициализации МК, но проблема, скорее всего не в этом )

В моем варианте конверсия происходит после ~250 тактов после инициализации МК, может какие то процессы при этом устаканятся после запуска МК.

А вообще то единица отсчёта то не 100мс а 20

Поэтому можно упростить, поставив предделитель таймера, и совпадение по нужному числу, и отсчитать этот интервал 0-255 раз (значение АЦП).

Но проблема остаётся)

То есть, в принципе, проблема решена схематически, просто интересно, откуда ноги растут :)

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

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

У таймера есть предделитель, вплоть до 1024 если память мне не изменяет. Можешь и по 20мс считать, делов то.

Если использовать предделитель таймера 1024, при тактовой частоте 1.2Мгц таймер будет считать практически миллисекунды, т.е. до 250мс он сосчитать до переполнения всяко сумеет.

таймер настроить надо в режим CTC, в регистр сравнения внести значение 20 и приготовится отслеживать прерывания по сравнению. В программе останется только считать эти прерывания(без разрешения и обработчика), и сбрасывать флаг.

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

Если меньше 5 - сразу выходим(100мс у нас уже отработало до запуска АЦП)

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

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

Да, тут я ошибся, точно, считает почти миллисекунды.

Но без прерываний вроде как не будет проще, тогда надо будет сбрасывать флаг программно.

Но попробую так сделать)

Синхронно, это имеется ввиду один раз запустить конверсию АЦП?

Или запускать периодически, чтобы отслеживалось текущее состояние потенца?

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

Нет, синхронно это значит запустить и ждать пока не закончит. АЦП отработает раньше чем таймер насчитает единицу...

И вообще какой смысл высчитывать такты если абсолютная точность выдержки не нужна? Вообще можно плюнуть на таймер и использовать тупо функцию DELAY_MS() - грубо, надёжно и абсолютно наглядно.

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

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • На Али полно всяких наборов из широко применяемых транзисторов, резисторов и конденсаторов разных номиналов, стабилизаторов напряжения, светодиодов и т.п. Удобно и недорого. Беспаечные и под пайку макетки.
    • А монтажные провода? А набор отверток? А бокорезы, в конце концов, пинцеты? Забыли посоветовать?
    • Monica Хорошие вопрос для начинающего! Вот несколько основных радиокомпонентов, которые я бы рекомендовал новичку: Резисторы - это базовый пассивный компонент, который используется для регулировки тока и напряжения в цепи. Выберите набор резисторов с разными номиналами сопротивления. Конденсаторы - еще один основной пассивный компонент, используемый для фильтрации, развязки и других применений. Рассмотрите электролитические, керамические и пленочные конденсаторы. Светодиоды - это простые и полезные активные компоненты, которые можно использовать для индикации и простых схем. Транзисторы - эти активные компоненты являются основой многих электронных схем. Я бы посоветовал начать с биполярных транзисторов. Микроконтроллеры - миниатюрные программируемые компьютеры, которые дают начинающим большие возможности для творчества и экспериментов. Также очень полезно иметь базовые инструменты, такие как мультиметр, паяльник и припой. Начните с этих основных компонентов и постепенно расширяйте свою коллекцию по мере роста знаний и интересов. Желаю успехов в ваших электронных проектах!
    • А, вы такую штуку пытались в спять обернуть ))  
    • Как озвучили выше - мультиметр (это как глаза и уши) , паяльник или паяльная станция - ее конечно для серьёзного применения, осциллограф. А все там резисторы, конденсаторы, диоды, транзисторы, микросхемы - всё это по мере необходимости, а то будут лежать" мертвым грузом" - много лет без применения. 
    • Обычный кольцевой ...этот ещё с хорошим распределением ! У меня есть ещё один который реально способен ЭДС вырабатывать ... (типа с одного полюса) ;-)   Перекошенный насмерть! Когда их ставят в динамики то провалы не имеют большого значения т.к. в центре такой конструкции расположен керн из магнитомягкой стали , что и выравнивает общую характеристику МП . А вообще какая разница что крутить ?  ;-)  Диск куда безопаснее , а надёжность сьёма - индукционной катухой ...тогда и щйётки сами по себе не нужны ... Вообщем с этим "униполяром " - сплошная лапша с макаронами на ушах студентов ....;-) Вот вырезка из учебника : Как мотор - устройство работает за счёт взаимодействия магнитным полей (на рисунке , конечно - никак не указано) Как генератор - таки нет !  Но утверждается , что таки-ДА ...опятьже никаких доказательств не приводится ... ;-) Ну и ляд с ним! Мне хватило одного разрыва ! ;-) На втором снимке - амплитуда от работы такого шума около 0,3вольт,  сигнал положительный , однако к практике такие уровни и нах никому не нужны ....а так в теории конечно -ДА !  Но есть одна загигулина - применялось ПОЛНОЕ покрытие полюса магнита диском. В таком эксе полно всяких интересных проявлений индукции и одно самое главное - это НЕ униполяр по Фарадею , а работа ИНДУКЦИИ при неполном покрытии диска магнитным полем.... Другая песня !  Однако - НЕ НУНО крутить магнит!! Вон у людей обычный диск из камня разрывало!  Я когдато накие диски пропитывал эпоксидкой и они работали вплоть по почти полного износа камня (конечно и бытовка была обычная -1200 об/мин)
    • Для этого хоть бы знать что за датчик. А так из Wireshark выгрузить в CSV а потом Exel уже.
  • Похожий контент

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