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

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


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

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

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

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

Реклама: ООО ТД Промэлектроника, ИНН: 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 помехозащищенность выше...

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

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

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

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

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

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

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

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

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

Реклама: АО КОМПЭЛ, ИНН: 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
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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 эмодзи.

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

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

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

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


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