Atmega 328 и энергоэффективность

Обсуждаем контроллеры компании Atmel.
Ответить
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

эээ... я немного запутался :)
так внешняя частота , та на которой мы работаем, исполняем код равно или не равна внутреней частоте на которой работают обслуживающие МК процессы ? я понял 128kHz это внутреняя а внешняя будет 8MHz ?
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1407
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Не советую понижать частоту до 128 кгц, потому что можно не реанимировать МК (если нечем). Частота определяется допустимым максимальным током от батарейки. Обычно хватает 8, в крайнем случае 1 мгц. Важно загнать МК в power down, в котором минимальное потребление порядка 5-10 мка. При отключении ненужной периферии.
Внутренний генератор работает на 8 мгц, а частоту тактирования МК вы устанавливаете делителем.
Реклама
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

OKF, так 128kHz Interanal Oscilator режим это 128kHz внешняя частота , на которой мы работает ?
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

Я использовал частоту 128KHz, для моих нужд в то время было самое оно, но программатор чтобы потом обновить прошивку нужен будет ну очень медленный иначе камень не читается или параллельный но он мало у кого есть и проводов паять кучу.
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1363
Зарегистрирован: Чт апр 04, 2013 22:22:57
Откуда: Белгород, РФ

Сообщение SIM31 »

[uquote="OKF",url="/forum/viewtopic.php?p=3615537#p3615537"]Обычно хватает 8, в крайнем случае 1 мгц.[/uquote]

Кварц на 1 МГц сложно найти и они дорогие, это некоторая проблема. Распространенные на 4 МГц и на 3.ххх от телевизоров.
Реклама
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Для ориентира. Плата с ATmega168P с примитивной программой отключения WDT, зависания в задержке и инвертирования пары выводов.
CKDIV8 отключен
-встроенный 8МГц 3,2мА
-встроенный 128кГц 0,8мА
-внешний 14,7456МГц 5мА
Реклама
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

плата 168P 3.3V 8000 кварц на плате

плиз , объясните !
режим CKSEL3..0 = 0011 SUT1..0 = 00 это режим 128 kHz Internal Oscillator
на какой частоте будет выполняться мой скетч ? на 8мГц на 1мГц или на 128кГц
и если на 128кгц внешняя частота , используя допополнительные биты/регистры могу повысить хотябы до 1 мГц оставаясь на этот режиме CKSEL(0011) ?
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

[uquote="alex68md",url="/forum/viewtopic.php?p=3616924#p3616924"]... 8000 кварц на плате... режим CKSEL3..0 = 0011 SUT1..0 = 00 это режим 128 kHz Internal Oscillator
на какой частоте будет выполняться мой скетч ? на 8мГц на 1мГц или на 128кГц
и если на 128кгц внешняя частота , используя допополнительные биты/регистры могу повысить хотябы до 1 мГц оставаясь на этот режиме CKSEL(0011) ?[/uquote]Нет, камень будет выполнять программу с частотой 128кГц.
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

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

значит тспользуя стандартную обвязку придется остаться на режиме Internal RC и внутрение часы на 1МГ через делитель 8. а есть смысл увеличивать или уменьшать частоту внутриненного таймера ? точнее вот что я имею ввиду

например (я не тестировал) если частота внутрених часов будет тоже 8МГЦ и это не повлияет на энергопотребление но повлияет на скорость пробуждения из сна ИЛИ повлияет на скорость работы с SERIAL или чтото в таком духе. т.е я бы предпочел поднять внутрений таймер до 8МГЦ

ну ИЛИ на оборот опустив частоту внутринего таймера через делитель 64 , мы ничего не потеряем в функционале но уменьшим энерго потребление то я бы предпочел уменьшить её
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

внутренние часы влияют на ВСЕ синхронные процессы (на сериал в т.ч.)

Добавлено after 2 minutes 50 seconds:
притом, если количество выполненных действий не зависит от частоты (выполнил конкретный код и вырубился - больше частота = раньше выполнил и раньше вырубился) то частота практически не влияет на энергопотребление.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
OKF
Это не хвост, это антенна
Сообщения: 1407
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[uquote="SIM31",url="/forum/viewtopic.php?p=3615713#p3615713"]Кварц на 1 МГц сложно найти и они дорогие, это некоторая проблема. Распространенные на 4 МГц и на 3.ххх от телевизоров.[/uquote]
А кто говорил про кварц?)

Добавлено after 1 minute 24 seconds:
[uquote="alex_",url="/forum/viewtopic.php?p=3615666#p3615666"]Я использовал частоту 128KHz, для моих нужд в то время было самое оно, но программатор чтобы потом обновить прошивку нужен будет ну очень медленный иначе камень не читается или параллельный но он мало у кого есть и проводов паять кучу.[/uquote]
И я про это же.)
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

если хочешь низкую частоту - используй делитель тактовой, который настраивается в коде (надеюсь он в этом мк есть) он и частоту убавит и прошивать не помешает
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

[uquote="Baltazar66",url="/forum/viewtopic.php?p=3489176#p3489176"]В общем есть желание собрать небольшую компактную девайсину на atmega 328, с парой кнопок, светодиодов и гироскопом[/uquote]Ни знаю сколько гороскоп кушает, но светодиод порядком кушает 10-20мА, как вам уже сказали
akl писал(а):CKDIV8 отключен
-встроенный 8МГц 3,2мА
всяко больше чем сам контроллер.
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3616960#p3616960"]внутренние часы влияют на ВСЕ синхронные процессы (на сериал в т.ч.)

.[/uquote]

а подскажите , сейчас вот например во время отладки , я добавил прерывание для отладки когда чтот приходит в сериал.
Так вот когда нет прерывания то все что приходит в сериал я все прекрасно вижу. ничего не пропускается.
КОгда я добавил прерывание , причем очень быстрое просто зажечь диод, причем через запись в порт , а не через digitalWrite(); ТО я пропускаю первые 5 символов и не вижу их в мониторе. если я уменьшу частоту внутрених часов, делитель 64 или 128, чтоб сериал работал медленее, поможет это успеть поймать все символы ? если нет то как можно поймать все символы при работающем прерывании ?
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

если ты понизишь тактирование, то пропорционально замедлится всё, в т.ч. и запись в порт, но можно отдельно твой сериал притормозить...
ПС запись в порт намного быстрее чем приход 5 символов по UART даже на максимальной скорости... темболее там стоит аппаратный буфер т.ч. ищи косяк в другом месте...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

Код: Выделить всё

//леонардо соеденен с модемом и отправляет на комп все что посылает модем

volatile byte flag = 0;

void setup(){
pinMode(13, OUTPUT);
pinMode(3, INPUT); //в модем
  while(!Serial); // for leonardo
  Serial.begin(115200);
  Serial1.begin(115200);
  attachInterrupt(0, blink, LOW);

  }

void loop(){
  // Копируем Serial1 --> Serial
  if(Serial1.available()) Serial.write(Serial1.read());
  // Копируем Serial --> Serial1
  if(Serial.available()) Serial1.write(Serial.read());
  if (flag) {
	  PORTC |= (1 << 7);
	  flag = 0;
  }

}

void blink() {
	flag = 1;
}
без прерывания все что отправляется в сериал читается без пропусков. а с прерыванием первые 5 символов в сериал не приходят. не подскажите где косяк ?
Друг Кота
Аватара пользователя
Сообщения: 15599
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Матчасть АРДУИНЫ - на время работы прерываний работа UART может иметь проблемы (т.к. также есть прерывание).
УВЫ - или планировать исполнение задачи или "лезть в дебри чистого СИ" и соответствующего даташита со схемотехникой.
8)
OKF
Это не хвост, это антенна
Сообщения: 1407
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Причём тут быстрый порт вообще! Измерьте время обработки прерывания. И что мешает поиграться скоростью UART. Всяко быстрее чем тыкаться по форумам.
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

скорость 115200 не меняется. а даже еслиб менялась это костыль. прерывание то быстрое а digitalWrite не очень так что запись в порт очень даже при чём... но всёравно спасибо всем.
пофиксил обработкой прерываний
Грызет канифоль
Сообщения: 275
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

[uquote="SIM31",url="/forum/viewtopic.php?p=3498324#p3498324"]
на готовых ардуинах
Если из Arduino IDE программировать, там нужно учесть что таймер 0 будет примерно 1000 раз в секунду будить микроконтроллер, для подсчета текущего времени. Нужно в прерывании ISR0 дописать чтобы в сон уходил или в основной программе этот момент ловить.[/uquote]
можно вот этот момент поподробнее пожалуйста

даже когда SLEEP_MODE_PWR_DOWN + power_all_disable() 0_o ? то таймер всеравно будет будить МК ????

(я не профи если что, задаю вопросы не ради спора а чтобы расширить свои знания)
Ответить

Вернуться в «AVR»