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

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


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

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

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

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

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

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

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

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

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

4 hours ago, Alex said:

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

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

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

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

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

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

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

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

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

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

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 пользователей онлайн

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

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