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

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


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

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

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

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

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

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

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

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

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

4 hours ago, Alex said:

МК не может просто взять и остановиться, он всегда будет выполнять команды

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

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

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

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

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

4 часа назад, Delfin сказал:

МК выполнил все команды в асме, прошелся от "org 0" до "end", а потом что? 

В МК нет асма, как нет "org 0" и  "end" это команды компилятору.
В МК есть память команд, где хранятся машинные команды и счетчик адреса команд.
Счетчик адреса команд обычно имеет разрядность превышающую размер памяти команд доступной пользователю.
Поведение МК при достижении счетчиком максимального адреса команд пользователя зависит от реализации алгоритма поведения в самом МК.
В большинстве случаев счетчик попадает в зарезервированную область памяти не доступную физически, что эквивалентно зависанию МК.
В другом случае по максимальному адресу реализуется вектор сброса МК. и МК продолжает  работу с нулевого адреса  , к примеру такой алгоритм реализован в МК PIC10F2хx или  PIC12F50x
 

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

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

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

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

24 минуты назад, Адвансед сказал:

Для чего нужен тут стабилитрон

Не стесняйтесь пользоваться поиском, найдёте ответы на все вопросы.

Цитата

Вывод Rx нельзя подключать напрямую, так как цифровой вывод Arduino Uno использует 5В, а модуль SIM800L использует 3,3В. Необходимо сигнал Tx, поступающий от Arduino UNO, понизить до 3,3В

Источник. А почему 2,4 вольта, так это у разработчиков спросить надо.

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

18 минут назад, Адвансед сказал:

Для чего нужен

ну это же очевидно, ограничивает напряжение  на входе ресивера ЮАРТа  , 2,4в  потомушта это напряжение в дым разряженного АКБ  или нет?
и в этой схеме, это самый последний вопрос который должен Вас беспокоить...

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

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

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

  • 5 недель спустя...

Желаю всем доброго здравия! 

Тема МК совсем не освещена в моей голове, поэтому прошу совета:

в устройстве вышла из строя atmega8 (разрушение корпуса). 

Исходной прошивки нет, но есть обновление этой прошивки. 

Полагаю что это обновление полностью меняет прошивку и исходная прошивка в принципе будет не нужна. Или я ошибаюсь? 

Не хотелось бы провозиться в пустую. Заранее благодарен за помощь. 

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

В пустую Вы не провозитесь. По крайнер мере в теме МК, в Вашей голове, станет чуть-чуть светлее. А помочь Вам больше не чем, т.к. ни имя устройства, ни способа обновления прошивки Вы не озвучили.

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

  • 2 месяца спустя...

Добрый день. Делаю фонарик на Attiny13. Не могу разобраться с PowerDown.  При OCR0A = 255 - 7мА, при OCR0A = 0  - 0,9мА, что в режиме сон, что без него. Подскажите, где моя ошибка

#define F_CPU 1200000UL
#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/power.h>

///////////////////////////////////////
#define PWM PB0 // OC0A
#define BUTTONPWM PB3 // PCINT3
#define BUTTONPWM_PRESSED  (!((PINB >> BUTTONPWM) & 1))

volatile uint8_t state = 0; // зафиксированное состояние
volatile uint8_t counter = 0; // счётчик для обработки нажатия кнопки

////////////////////////////////////////////
byte myFlags = 0; // все флаги в false

#define flagFullLight   0 // ШИМ = 100%
#define flagHalfLight   1 // ШИМ = 60%
#define flagMoonLight   2 // ШИМ = 10%
#define flagOffLight    3 // ШИМ = 0% - фонарик выключен
#define flagFullBat     4 // Батарея заряжена >3.5-4.2В
#define flagLowBat      5 // Батарея почти разряжена 3-3.5В
#define flagZeroBat     6 // Батарея разряжена <3В        
#define flagClick       7 //           

int main(void)
{
  // Выход ШИМ:
  DDRB  |=  (1 << PWM);
  PORTB &= ~(1 << PWM);

  // Вход кнопки:
  DDRB  &= ~(1 << BUTTONPWM);
  PORTB |=  (1 << BUTTONPWM);

  DDRB  &= ~(1 << PB4);
  PORTB |=  (1 << PB4);
  DDRB  &= ~(1 << PB2);
  PORTB |=  (1 << PB2);
  DDRB  &= ~(1 << PB1);
  PORTB |=  (1 << PB1);


  // Настройка таймера T0 для ШИМ и обработки нажатий кнопок:
  TCCR0A  = 0b10000001; // режим коррекции фазы ШИМ, неинверсный сигнал на выходе OC0A
  TCCR0B  = 0b00000010; // предделитель тактовой частоты CLK/8
  TCNT0 = 0; // начальное значение счётчика
  OCR0A = 0; // начальное значение регистра сравнения A (для формирования ШИМ сигнала на выходе)
  TIMSK0  = 0b00000010; // разрешаем прерывания по переполнению счётчика

  // Настройка внешних прерываний
  GIMSK |= (1 << PCIE); // Разрешаем внешние прерывания PCINT0.
  PCMSK |= (1 << BUTTONPWM); // Разрешаем по маске прерывания на ногак кнопок

  // Настройка режима сна
  ACSR |= (1 << ACD); // отключение аналогового компаратора
  ADCSRA &= ~(1 << ADEN); //  Отключение АЦП
  MCUCR = 0x30; //Sleep enable, mode: power-down

  sei(); //разрешаем глобально прерывания

  // Основной цикл
  while (1)
  {
    if (bitRead(myFlags, flagOffLight))
      sleep_mode(); // Переводим МК в сон
  }
}

// Обработчик прерывания PCINT0
ISR(PCINT0_vect)
{
  if ( state == 0 )
  {
    if ( BUTTONPWM_PRESSED) // если нажата кнопка
      state = 1;
  }
}

ISR(TIM0_OVF_vect)
{
  if ( state != 0 )
  {
    if (counter < 29)
      counter++; // отсчитываем ~100мс
    else
    {
      if (state == 1)
      {
        if ( !BUTTONPWM_PRESSED ) // если кнопка была отпущена, короткое нажатие
        {
          if (bitRead(myFlags, flagFullLight)) {
            myFlags |= bit(3);
            myFlags &= ~(bit(0));
            OCR0A = 0;
          } else {
            myFlags |= bit(0);
            myFlags &= ~(bit(3));
            OCR0A = 255;
          }
          state = 0; // сбрасываем состояние
        }
      }
      counter = 0; // сбрасываем счётчик
    }
  }
}

 

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

18 часов назад, Siemenstim сказал:

Если флаг = 1, то шим = 0

Что ж Вы его так через опу пишите, что хрен поймешь что нужно в итоге...
вот этот треш:

Спойлер
////////////////////////////////////////////
byte myFlags = 0; // все флаги в false

#define flagFullLight   0 // ШИМ = 100%
#define flagHalfLight   1 // ШИМ = 60%
#define flagMoonLight   2 // ШИМ = 10%
#define flagOffLight    3 // ШИМ = 0% - фонарик выключен
#define flagFullBat     4 // Батарея заряжена >3.5-4.2В
#define flagLowBat      5 // Батарея почти разряжена 3-3.5В
#define flagZeroBat     6 // Батарея разряжена <3В        
#define flagClick       7 // 

 if (bitRead(myFlags, flagFullLight)) {
            myFlags |= bit(3);
            myFlags &= ~(bit(0));
            OCR0A = 0;

 

благополучно меняется на :
 

Спойлер
typedef struct
{
    unsigned char   FullLight    :1; // ШИМ = 100%
    unsigned char   HalfLight    :1; // ШИМ = 60%
    unsigned char   MoonLight    :1; // ШИМ = 10%
    unsigned char   OffLight     :1; // ШИМ = 0% - фонарик выключен
    unsigned char   FullBat      :1; // Батарея заряжена >3.5-4.2В
    unsigned char   LowBat       :1; // Батарея почти разряжена 3-3.5В
    unsigned char   ZeroBat      :1; // Батарея разряжена <3В 
    unsigned char                :1;
} TypeFLAG;
volatile TypeFLAG    myFlags;

// 
// 

// обращение:

  if (myFlags.flagFullLight) {
            myFlags.OffLight=1;
            myFlags.FullLight=0;
            OCR0A = 0;
            } 

 

ну и перед тем как отправить в сон вроде нужно отключить всю периферию и  принудительно очистить флаг ногодрыга.

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

с работающей программы на 13-й

;+++++++++++++режим сна++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
anabioz:
; Выключение выходов
out TCCR0A,zero cbi PortB,OUT_A cbi PortB,OUT_B  cbi PortB,ON_DC cbi DDRB,Vbat cbi PortB,Vbat
 ; Отключение АЦП
out	ADCSRA,zero                                   
; Отключение компаратора  
ldi temp,(1<<ACD)out ACSR,temp                     
; длительность одного цикла сторожевого таймера
ldi temp,(1<<WDTIE)+(0<<WDP3)+(1<<WDP2)+(1<<WDP1)+(0<<WDP0)
                                           
; Режим сна с пробуждение от сторожевого таймера +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
WDR_ON: wdr ldi temp_L,(1<<WDCE)+(1<<WDE) out WDTCR,temp_L out WDTCR,temp ; Включение WDT

SLEEP_MODE:wdr sei sleep  sbis pinB,SW rjmp reset dec n_pause brne  SLEEP_MODE 

;---------------------------------------------------------------------
ldi temp,(1<<WDCE)+(1<<WDE)out WDTCR, temp   ; Предварительная запись 
ldi temp,(0<<WDE) out WDTCR,temp   ret       ; Выключение WDT                           
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

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

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

к тому же смысл в коде на асме , если ТС пишет на Си...

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

В моем случае есть , по пробуждении проверяется тумблер "вкл/откл" . и если "откл."  опять уходит в сон. 

Тут показано отключение периферии , на Си почти также .   

 

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

Так, а на входе компаратора от источника питания сигнал то наверное через делитель идет... вот он тоже потребляет. Если есть - его надо от источника питания отключать.

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

10 минут назад, IMXO сказал:

собака здесь зачем???

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

sbic pinB,SW rjmp ON 

 OFF:
ldi temp,(0<<INT0)+(1<<PCIE)     out GIMSK,temp    ; Внешние прерывания
; Выключение выходов
out TCCR0A,zero cbi PortB,OUT_A cbi PortB,OUT_B  cbi PortB,ON_DC cbi DDRB,Vbat cbi PortB,Vbat
 ; Отключение АЦП
out	ADCSRA,zero                                   
; Отключение компаратора  
ldi temp,(1<<ACD)out ACSR,temp  

SLEEP_OFF:wdr sei sleep   rjmp reset   
on:

 

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Вот любительская конструкция в которой можно подглядеть интересную систему замера сопротивления и в целом возможную топологию.   Так же советую заценить мануалы на В7-38, В7-84 и особенно В7-87. Последние два весьма современные приборы, и из В7-87 по сути весь "фронтэнд" можно взять как базу. Однако, прежде чем начать разрабатывать конкретную схему, стоит уточнить требования к итоговому прибору, да и его конструктив в том числе. Настольный/переносной? Какая у прибора будет разрядность? Какой будет использоваться АЦП? На тему встроенных АЦП МК есть отличная статья от Леонида Ивановича, где описана проблема, которая возникнет при работе с ними, и метод её решения. https://leoniv.livejournal.com/194681.html С диапазонами непонятка. В параметре "10мВ-1В" что имеется в виду? Не понятно, почему все пределы не кратны по десятке (например, 1/10/100 или 5/50/500). С токовыми пределами тот же вопрос, 1мА-100мА что означает, и почему пределы 1А и 5А не кратны друг другу, скажем как 1А и 10А (ну или обратно, 5А и 500мА)?   Касательно входного делителя. Не обязательно делать его на все пределы индивидуально, поставьте туда перед АЦП усилитель-буфер с переключаемым усилением между х1 и х10, например, ведь в любом случае, от схемы требуется измерять ток, а для этого нужен будет усилитель сигнала с шунта. Поэтому можно использовать этот усилитель для добавления в делитель некоторых пределов. Делитель будет делать "шаг" в сто раз - х1 х100, а после него стоит усилитель, добавляющий, в данном случае, предел х10 и х0.1 Так, например, построен В7-38, разве что х10 усилителя там нет, это "усиление" реализовано за счёт переключения предела АЦП с 2В до 0,2В. Коммутаторов, в таком случае, в цепи напряжения будет два - реле переключающее х1 и х100 делитель, поскольку оно работает с возможными +/-500В по входу, и ключ на полевиках типа DG419/DG411/4052/4053/etc, переключающий усиление буфера между х1 и х10, работающий с +/-5В максимум. Обычно делители ставят по принципу R+9R+90R+... и тд, таким образом мы в любой точке включения получаем делитель, дающий одну десятую/сотую и тд от входного напряжения. От этого метод с усилителем в 10 раз и кажется мне более логичным - нужно реализовать всего один делитель 99:1 (например из двух резисторов МРХ 10 МОм и 100кОм, параллельно 100кОм прицепить цепочку настройки, которая собьёт его сопротивление до 90к), после чего уже индивидуально подстраивать х10 усилитель и входной делитель. Плюс, получаем узел, который можно использовать для усиления сигнала с шунта. В целом, так же можно снизить и число шунтов, в "крутых" приборах я видел их от силы два, на "много ампер" и на "всё остальное", что реализуется усилителями после них. Тут уже вопрос стоит в том, какое падение напряжения на шунте максимально допустимо для конструкции. Я в своих мыслях по измерителю на ICL7135 пришёл к выводу, что пожертвовать 0,1В...0,2В на амперметр это максимум, который можно себе позволить.   PS На всякий случай, а то может кто прицепится Я не предлагаю использовать такие экзотические вещи, как сборки согласованных резисторов, а так же сильно запариваться над эффектами, которые по-хорошему надо бы учесть при финальном проектировании - навроде дрейфа коэффициентов деления/усиления от температуры, потому что не тот уровень конструкции. Исходя из скромного ТЗ, как я понял, задачи получить какой-либо серьезный измеритель не стоит, чисто прибор уровня детешки +/-, с возможностью вывода значений во внешний мир через USB. PPS Мануалы на вышеназванные мультиметры со схемами: v7-87.pdf v7-84-тпг.pdfВ7-38 - ТОИЭ (вариант 1).djvu
    • Не совсем вас понял, я предложил пересчитать резисторы в делителе и оптрон запитать от ваших 12 В, что не так?
    • Прощу высказать мнение насчет схемы управления, в части регулировки тока, . Схема собрана автором и лежит в интернете.  LM358 universal.rar
    • @VIT13 установил конденсаторы как в вашей схеме, стало лучше. Шум есть еле слышимый, но это от самого микрофона. Так что результата которого я хотел достичь получилось, спасибо) Если сильно дунуть  в микрофон то появляется шуршание  в наушниках, это нормально?
    • Есть крошечный фонарик Fenix E-01, под ААА батарейки. У него включение реализовано доворотом "головы" - при этом сжимается пружина под минусом, и плюс начинает контачить с залуженной дорожкой на плате.  У меня отвалился этот пятачок, теперь там только текстолит и оборванная дорожка.  Чем максимально надëжно его восстановить? Есть медная фольга, но она самоклеящаяся, боюсь через десяток включений точно также оторвëтся.
    • Если даже здесь, в редакторе окна ответа, попробовать что-то добавить к "שלום" справа, оно будет написано слева от этого слова, причём курсор будет оставаться справа. Можете сами попробовать. Видимо это Unicode, направление письма справа налево. Как видите, и в отлаженных движках это криво работает. А вы хотите этого от sPlan. Так как выбора направления письма в sPlan нет (по крайней мере я не нашёл), то вряд ли можно что-то настроить. Разве что к авторам обратиться.
    • прикрутите изолентой и будет счастье (про АРУ ещё почитать придётся)  https://ozon.ru/t/3PqkQz
  • Похожий контент

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