не - юмором является ваша тема, а я дело предлагаю - наращивайте количество пинов, пока не добъётесь стабильного результата, а потом посмеётесь и поставите транзисторный ключ на управление питанием отпина.
Нет, на самом деле как один из вариантов снизить риски. Но это, опять-таки когда точно знаем сколько модуль жрет в пике (а вы этого не знаете. тестером это не промеряешь).
Только нужно что-бы оба пина были на одном порту и включать их не через digitalWrite, а через прямую запись в регистры. Что-бы они включались/выключались действительно синхронно. Иначе выпалите их еще быстрее и вернее. И даже помощь модуля для этого не потребуется.
P.S. Но все равно, питатся от пинов - зло.
Вот ведь... Век живи - век учись... Теперь буду знать. Запись в регистры - это я так понимаю из области asm? Последний раз на нем пытался что сделать году так в 96-м и, надо заметить, далеко я тогда не ушел :) Теперь буду стараться лучше!
не - юмором является ваша тема, а я дело предлагаю - наращивайте количество пинов, пока не добъётесь стабильного результата, а потом посмеётесь и поставите транзисторный ключ на управление питанием отпина.
Я уже понял... Приношу извинения за неуместный сарказм...
не - юмором является ваша тема, а я дело предлагаю - наращивайте количество пинов, пока не добъётесь стабильного результата, а потом посмеётесь и поставите транзисторный ключ на управление питанием отпина.
Ну вообще-то вроде заработало уже .
А советовать такое новичкам ну мягко говоря.... лучше не нужно.
Вы уверены, что новичок обратит внимание на то что вы использовали "диоды" во множественном числе? Что понял их предназначение "избежать корочения пинов между собой", а не "для сброса 5v до 3v" (раньше-то для этого диод использовал). Или не решит, что "у меня уже есть стабилизатор, заведу на его IN питание с двух пинов". И что потом? Имеем два порта на выход. На один подали digitalWrite(HIGH), какое-то время, пока успеем сделать digitalWrite(HIGH) на второй пин, да пройдет в любом случае. И все это время у нас будет тупо два закороченных пина на одном HIGH, на другом LOW.
Можно конечно сказать, потом, что невнимательно прочитали то что вы советовали. Только зачем же провоцировать потенциально опасное.
Вот ведь... Век живи - век учись... Теперь буду знать. Запись в регистры - это я так понимаю из области asm? Последний раз на нем пытался что сделать году так в 96-м и, надо заметить, далеко я тогда не ушел :) Теперь буду стараться лучше!
не нужно этим заморачиваться - резисторы токоограничительные ставьте да и всё.
Я вчера смотрел заказ оптовый на чипы nrf24l01+ Лучшее что нашел от 4000 шт. по 1.8$ А китайцы продают модули на них за 32 рубля - наводит на мысли. Правда сам использовал штук 20 китайских модулей и все сразу работали и работают до сих пор.
Ну не весь а только то что настраивает работу модуля. При отключения питания все настройки скидываются. еще не плохо было бы проверку добавить "а включался ли модуль?"
Ну как-бы да... Только не все, а то что отностися к инициализации модуля. И можно не переносить в loop(), а "вынести в отдельную функцию" и вызвать ее из loop(). Когда нужно. Только еще одно... включать питание нужно когда оно выключено. А то сейчас ваши действия выглядят так:
1. Пытаемся настроить ОБЕСТОЧЕННЫЙ модуль (естественно это "крик в пустоту").
2. Подаем питание на НЕ НАСТРОЕННЫЙ МОДУЛЬ и пытаем что-то отослать (естественно без результатно, так как модуль сконфигугурирвон.
3. Повторяем пункт (2) до потери пульса.
Так как нигде питание не выключается, то логично что и снижения потребления вы не наблюдаете.
А еще, учитывая все вышесказанное, у меня закрались сомнения, что
>В библиотеке mirf есть режим powerdown, но кушать продолжает...
Покажите как вы пытались использовать этот режим powerdown. Возможно все эти "тразисторы", "обесточивания и т.п." - мы не ищем легкий путей ;)
Не, ну тут нужно или крестик снять или трусы надеть ;)
Что-же вы сразу и внешние питание дергаете и встроенный powerDown мучаете. Намешали все в одну тарелку.
Пошагово идите.... разбивайте задачу. Вначале убедитесь что модуль действительно засыпает по powerDown (как "разбудить" - потом отдельно будете разбиратся).
Запитайте его, через регулятор, от VCC. И амперметр воткните между регулятором и модулем. Что-бы мерять потребление именно модуля.
Потом возьмите оригинальный пример библиотеки. И в начало (или конец - не важно), loop() добавте что-то такое:
if(millis()>10000){ // через 10-ть секунд от включения
Mirf.powerDown(); // выключаем модуль
while(true){}; // и уходим в бесконечный цикл. больше ничего и никогда делать не будем
}
И смотрите на амперметр. Первый 10-ть секунд - смотрите сколько модуль потребляет в активном состоянии, все остальное время - сколько он потребляет в режиме сна.
Имеем два порта на выход. На один подали digitalWrite(HIGH), какое-то время, пока успеем сделать digitalWrite(HIGH) на второй пин, да пройдет в любом случае. И все это время у нас будет тупо два закороченных пина на одном HIGH, на другом LOW.
Можно конечно сказать, потом, что невнимательно прочитали то что вы советовали. Только зачем же провоцировать потенциально опасное.
Уточняем.....
1. Имеем два порта на вход. ( дефолт при подаче питания)
Способов избежать КЗ может быть несколько. Вопрос состоял в том, нужно ли такие потенциально опасные решения предлагать новичку (который с ненулевой вероятностью даже прямые инструкции может выполнить с ошибкой). Предлагать даже без предупреждение ВНИМАНИЕ... и описанием что может случится. Вообщем тут скорее вопрос в отношении к тезису "не навреди". Кто-то старается его предерживатся, а кто-то считает "все взрослые люди, пусть каждый сам думает что делает". Доля истины есть и в одном и втором подходе. Кто-то ребенка старается уберечь от любых опастностей, а кто-то считает что "небольшая травма" - не страшна. Пусть лучше один раз обожжется и поплачет, чем 100 раз словами объяснять что это больно.
The pullup resistors are controlled by the same registers (internal chip memory locations) that control whether a pin is HIGH or LOW.
Consequently, a pin that is configured to have pullup resistors turned on when the pin is an INPUT, will have the pin configured as HIGH if the pin is then switched to an OUTPUT with pinMode().
This works in the other direction as well, and an output pin that is left in a HIGH state will have the pullup resistors set if switched to an input with pinMode().
Вот, я же говорил "стремно". Ходьба по лезвию. Вот и вы промахнулись и попали на КЗ.
Что будет если вызвать poweOn(), ПОСЛЕ powerOff()? Порты включены "на выход", а вы им digitalWrite.... Вернулись к тому с чего начинали. Можно конечно, и в powerOn() делать pinMode(INPUT). Да только.... КЗ-то мы уже получили ;)
Не надолго:
Но все-таки получили. Может и выживет пин за эти три микросекунды. Но вот если мы пиханцли эти powerUp,powerDown в loop(), то эти микросекунды у нас начнут складываться. Мы получим КЗ-ШИМ :) И тут шансы умереть у пина (или камня, или USB) - уже гораздо выше. По крайней мере, я не хочу на своей дуинке пробовать и реально их коротить ;)
Да, заметили всё-таки, недосмотр вышел, ошибку исправил:
А камень-то уже тю-тю... (тьфу, тьфу). Да еще удаленно, у новичка. Которые еще и не сразу поймет что писец уже пробежался....
Так что "ну его нафиг". Все ошибаются, в том числе и опытные (я сам бы так запросто мог ошибится). Поэтому чем дальше от "края" тем спокойней.
P.S. Я если еще подумать каковы шансы что новичок сообразит вначале digitalWrite, а потом pinMode делать? Ему-то изначально сказали просто "питайся с двух ног".
P.S. Я если еще подумать каковы шансы что новичок сообразит вначале digitalWrite, а потом pinMode делать? Ему-то изначально сказали просто "питайся с двух ног".
Может быть на таком "грубом" примере поймёт что всё в мире взаимосвязано.
Не, ну тут нужно или крестик снять или трусы надеть ;)
В основном работаю в трусах, а с крестиком - так и не надевал, религия не позволяет :)
leshak пишет:
Что-же вы сразу и внешние питание дергаете и встроенный powerDown мучаете. Намешали все в одну тарелку.
Пошагово идите.... разбивайте задачу. Вначале убедитесь что модуль действительно засыпает по powerDown (как "разбудить" - потом отдельно будете разбиратся).
Запитайте его, через регулятор, от VCC. И амперметр воткните между регулятором и модулем. Что-бы мерять потребление именно модуля.
Потом возьмите оригинальный пример библиотеки. И в начало (или конец - не важно), loop() добавте что-то такое:
if(millis()>10000){ // через 10-ть секунд от включения
Mirf.powerDown(); // выключаем модуль
while(true){}; // и уходим в бесконечный цикл. больше ничего и никогда делать не будем
}
И смотрите на амперметр. Первый 10-ть секунд - смотрите сколько модуль потребляет в активном состоянии, все остальное время - сколько он потребляет в режиме сна.
Сделано! Воткнул на замер беспроводного модуля, вставил код.
Первые 10 секунд - потребление 30мА;
После 10 секунд - потребление 10мА. Многовато в-общем для powerDown...
trembo пишет:
Может быть на таком "грубом" примере поймёт что всё в мире взаимосвязано.
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
long previousMillis = 0;
long interval = 5000;
const int SuperPin = 5;
void setup(){
Serial.begin(9600);
pinMode(SuperPin, OUTPUT);
/*
* Set the SPI Driver.
*/
Serial.println("Listening...");
}
void newinit(){
Mirf.spi = &MirfHardwareSpi;
/*
* Setup pins / SPI.
*/
Mirf.init();
/*
* Configure reciving address.
*/
Mirf.setRADDR((byte *)"serv1");
/*
* Set the payload length to sizeof(unsigned long) the
* return type of millis().
*
* NB: payload on client and server must be the same.
*/
Mirf.payload = sizeof(unsigned long);
/*
* Write channel and payload config then power up reciver.
*/
Mirf.config();
delay(500);
byte data[Mirf.payload];
/*
* If a packet has been recived.
*
* isSending also restores listening mode when it
* transitions from true to false.
*/
if(!Mirf.isSending() && Mirf.dataReady()){
Serial.println("Got packet");
/*
* Get load the packet into the buffer.
*/
Mirf.getData(data);
/*
* Set the send address.
*/
Mirf.setTADDR((byte *)"clie1");
/*
* Send the data back to the client.
*/
Mirf.send(data);
/*
* Wait untill sending has finished
*
* NB: isSending returns the chip to receving after returning true.
*/
Serial.println("Reply sent.");
}
}
void loop(){
digitalWrite(5, HIGH);
newinit();
unsigned long currentMillis = millis();
/*
* A buffer to store the data.
*/
if (currentMillis - previousMillis > interval) {
digitalWrite(5, LOW);
while(millis() - currentMillis < interval) {
Mirf.powerDown(); // выключаем модуль
}
previousMillis = currentMillis+interval;
}
}
Теперь 5 секунд потребление беспроводного модуля - 30мА,
следующие 5 секунд потребление - 0мА.
Ткните носом в нефеншуйную часть... Исключая то, что это питание от ноги пина...
Вы рубанули ему питание, а потом многократно, судорожно пытаетесь послать команду "выключись..." Он все равно уже никого и ничего не слышит. Да и смысла в это while() - нет. Получился блокирующий кусок в котором ничего полезного не делается. А значит вполне можно просто заменитье го на
Вот еще какая проблема вылезла (надоел уже, наверное):
Если Mirf.powerDown () убрать - вся система потребляет в спящем режиме около 5мА, если поставить Mirf.powerDown () - система потребляет в спящем режиме около 4мА.
Я так понимаю это кушают пины, которые идут в беспроводной модуль - 7,8 - если их выдернуть - кушает 2,5мА. Так вот - можно их тоже гасить?
Ну да, это классический случай запитывания цифровой микросхемы от входного сигнала, ещё со времён 155 серии,когда она получала питание от высокого уровня на одном из входов (через защитный диод).
Правда напряжение питания было немного просажено, но этого хватало чтобы успешно работать до той поры пока все входы не уходили в низкий уровень.
Я думаю вам ещё надо померять ток при отключенном модуле. Они должны совпадать.
И ещё, после повердауна модуля перейти на другой генератор тактовой частоты, например на 8/8 внутреннего или даже на генератор ватчдога, но как это сделать не смогу подсказать.
Только осторожно, там со стандартным бутлодером и вачдогом была проблемма.
Я для проверки ставил 8 секунд, чтобы можно было потом кое-как его отменить.
от двух пинов питай - через диоды, естественно.
Это, видимо, тонкий английский humor?
не - юмором является ваша тема, а я дело предлагаю - наращивайте количество пинов, пока не добъётесь стабильного результата, а потом посмеётесь и поставите транзисторный ключ на управление питанием отпина.
Нет, на самом деле как один из вариантов снизить риски. Но это, опять-таки когда точно знаем сколько модуль жрет в пике (а вы этого не знаете. тестером это не промеряешь).
Только нужно что-бы оба пина были на одном порту и включать их не через digitalWrite, а через прямую запись в регистры. Что-бы они включались/выключались действительно синхронно. Иначе выпалите их еще быстрее и вернее. И даже помощь модуля для этого не потребуется.
P.S. Но все равно, питатся от пинов - зло.
Вот ведь... Век живи - век учись... Теперь буду знать. Запись в регистры - это я так понимаю из области asm? Последний раз на нем пытался что сделать году так в 96-м и, надо заметить, далеко я тогда не ушел :) Теперь буду стараться лучше!
от двух пинов питай - через диоды, естественно.
Это, видимо, тонкий английский humor?
не - юмором является ваша тема, а я дело предлагаю - наращивайте количество пинов, пока не добъётесь стабильного результата, а потом посмеётесь и поставите транзисторный ключ на управление питанием отпина.
Я уже понял... Приношу извинения за неуместный сарказм...
не - юмором является ваша тема, а я дело предлагаю - наращивайте количество пинов, пока не добъётесь стабильного результата, а потом посмеётесь и поставите транзисторный ключ на управление питанием отпина.
Ну вообще-то вроде заработало уже .
А советовать такое новичкам ну мягко говоря.... лучше не нужно.
Вы уверены, что новичок обратит внимание на то что вы использовали "диоды" во множественном числе? Что понял их предназначение "избежать корочения пинов между собой", а не "для сброса 5v до 3v" (раньше-то для этого диод использовал). Или не решит, что "у меня уже есть стабилизатор, заведу на его IN питание с двух пинов". И что потом? Имеем два порта на выход. На один подали digitalWrite(HIGH), какое-то время, пока успеем сделать digitalWrite(HIGH) на второй пин, да пройдет в любом случае. И все это время у нас будет тупо два закороченных пина на одном HIGH, на другом LOW.
Можно конечно сказать, потом, что невнимательно прочитали то что вы советовали. Только зачем же провоцировать потенциально опасное.
Вот ведь... Век живи - век учись... Теперь буду знать. Запись в регистры - это я так понимаю из области asm? Последний раз на нем пытался что сделать году так в 96-м и, надо заметить, далеко я тогда не ушел :) Теперь буду стараться лучше!
не нужно этим заморачиваться - резисторы токоограничительные ставьте да и всё.
век учись... Теперь буду знать. Запись в регистры - это я так понимаю из области asm?
Не так страшно :) В разделе програмирование описано.
Прямое управления выходами через регистры микроконтроллера Atmega
Вы уверены, что новичок обратит внимание на то что вы использовали "диоды" во множественном числе?
лешак, а вы уверены хоть в чём то?
не смешите меня - если решили снова доебаться, то так и спросите "почему в шапке?".
чел не может понять как транзисторный ключ подключить - как я ему могу дать понять, что "диоды" - это больше одного диода?
как я могу челу объяснить, что всю халабуду нужно токоограничивать?
может человек таблицы умножения не знает - а, я тут странное советую.
может человек таблицы умножения не знает - а, я тут странное советую.
А где можно почитать про эту таблицу? :)
А где можно почитать про эту таблицу? :)
у меня в школьных тетрадках на задней обложке была напечатана - не сохранилось древнее знание, к сожалению. :D
у меня в школьных тетрадках на задней обложке была напечатана - не сохранилось древнее знание, к сожалению. :D
Мы только на бересте писали... Потому, видать, и не довелось мне познать сей труд...
свободу питанию отпина!
а кто такой отпин?
свободу питанию отпина!
а кто такой отпин?
Как кто? Тот кого отпинали.
Я вчера смотрел заказ оптовый на чипы nrf24l01+ Лучшее что нашел от 4000 шт. по 1.8$ А китайцы продают модули на них за 32 рубля - наводит на мысли. Правда сам использовал штук 20 китайских модулей и все сразу работали и работают до сих пор.
Опять не работает...
Точнее работает, но не так как я хотел :(
Это питание от пина задумывалось с целью отрубать пин на время сна. Что имею сейчас:
Это работает - пинги летят... Жрет в районе 45мА.
Переношу часть сюда:
Не работает... Жрет в районе 28мА.
Тоже самое со светодиодом - работает... Такой вредный этот nrf24l01+
После включения питания полную инициализацию делаете? После нее надо еще подождать 20 мс.
Также важна последовательность операндов при инициализации. Смотрите как в примере.
После включения питания полную инициализацию делаете? После нее надо еще подождать 20 мс.
Также важна последовательность операндов при инициализации. Смотрите как в примере.
так... с этого места поподробнее...
вот код:
Это что же, мне весь setup надо в loop перенести?
Ну не весь а только то что настраивает работу модуля. При отключения питания все настройки скидываются. еще не плохо было бы проверку добавить "а включался ли модуль?"
Это что же, мне весь setup надо в loop перенести?
Ну как-бы да... Только не все, а то что отностися к инициализации модуля. И можно не переносить в loop(), а "вынести в отдельную функцию" и вызвать ее из loop(). Когда нужно. Только еще одно... включать питание нужно когда оно выключено. А то сейчас ваши действия выглядят так:
1. Пытаемся настроить ОБЕСТОЧЕННЫЙ модуль (естественно это "крик в пустоту").
2. Подаем питание на НЕ НАСТРОЕННЫЙ МОДУЛЬ и пытаем что-то отослать (естественно без результатно, так как модуль сконфигугурирвон.
3. Повторяем пункт (2) до потери пульса.
Так как нигде питание не выключается, то логично что и снижения потребления вы не наблюдаете.
А еще, учитывая все вышесказанное, у меня закрались сомнения, что
>В библиотеке mirf есть режим powerdown, но кушать продолжает...
Покажите как вы пытались использовать этот режим powerdown. Возможно все эти "тразисторы", "обесточивания и т.п." - мы не ищем легкий путей ;)
Вывел инициализацию в отдельную функцию, поставил delay, воткнул Mirf.powerDown(), вот код:
И... Не работает... Потребление скачет от 21мА до 41мА.
Работает вот так:
Попытка вставить Mirf.powerDown() приводит к тому что пинги перестают работать...
И еще странные пинги: сначала 11-12 следующий 193-194, затем опять 11-12 следующий 193-194
Не, ну тут нужно или крестик снять или трусы надеть ;)
Что-же вы сразу и внешние питание дергаете и встроенный powerDown мучаете. Намешали все в одну тарелку.
Пошагово идите.... разбивайте задачу. Вначале убедитесь что модуль действительно засыпает по powerDown (как "разбудить" - потом отдельно будете разбиратся).
Запитайте его, через регулятор, от VCC. И амперметр воткните между регулятором и модулем. Что-бы мерять потребление именно модуля.
Потом возьмите оригинальный пример библиотеки. И в начало (или конец - не важно), loop() добавте что-то такое:
И смотрите на амперметр. Первый 10-ть секунд - смотрите сколько модуль потребляет в активном состоянии, все остальное время - сколько он потребляет в режиме сна.
а кто такой отпин?
да, так - решил закрепить в массах новый анархо-технический мем.
Как кто? Тот кого отпинали.
о! ну, расскажи мне, кто кого отпинал. страницы на две воспитательну поэму в прозе мне выдай, пожалуйста.
Имеем два порта на выход. На один подали digitalWrite(HIGH), какое-то время, пока успеем сделать digitalWrite(HIGH) на второй пин, да пройдет в любом случае. И все это время у нас будет тупо два закороченных пина на одном HIGH, на другом LOW.
Можно конечно сказать, потом, что невнимательно прочитали то что вы советовали. Только зачем же провоцировать потенциально опасное.
Уточняем.....
1. Имеем два порта на вход. ( дефолт при подаче питания)
2. Пишем
digitalWrite(Port1 , HIGH);
digitalWrite(Port2, HIGH);
Включились резисторы привязки к питанию.
3. Пишем
pinMode(
Port1
, OUTPUT);Port1 переключился на выход и подал питание(
HIGH)
.В это время
... да и чёрт с ним....Port2 ОСТАЛСЯ ВХОДОМ с привязкой
4. Пишем
pinMode(
Port2
, OUTPUT);Port2 стал выходом и тоже подал питание.
А где коза? Нету!
То есть диоды особенно то и не нужны.
И вообще я теперь привык только в таком порядке:
digitalWrite(Port1 , HIGH);
pinMode(
Port1
, OUTPUT);А не наоборот...
В это время
... да и чёрт с ним....Port2 ОСТАЛСЯ ВХОДОМ с привязкой
4. Пишем
pinMode(
Port2
, OUTPUT);Port2 стал выходом и тоже подал питание.
А где коза? Нету! То есть диоды особенно то и не нужны.
Дефолтовое состояние OUTPUT -LOW, козочка неизбежна)
А где коза? Нету!
Способов избежать КЗ может быть несколько. Вопрос состоял в том, нужно ли такие потенциально опасные решения предлагать новичку (который с ненулевой вероятностью даже прямые инструкции может выполнить с ошибкой). Предлагать даже без предупреждение ВНИМАНИЕ... и описанием что может случится. Вообщем тут скорее вопрос в отношении к тезису "не навреди". Кто-то старается его предерживатся, а кто-то считает "все взрослые люди, пусть каждый сам думает что делает". Доля истины есть и в одном и втором подходе. Кто-то ребенка старается уберечь от любых опастностей, а кто-то считает что "небольшая травма" - не страшна. Пусть лучше один раз обожжется и поплачет, чем 100 раз словами объяснять что это больно.
Дефолтовое состояние OUTPUT -LOW, козочка неизбежна)
Прочтите внимательно пункт 2.
http://arduino.ru/forum/apparatnye-voprosy/pitanie-ot-pina-arduino-pro-mini?page=1#comment-61938
Сходите в даташит или на первоисточник. http://arduino.cc/en/Tutorial/DigitalPins
Найдите следующий текст:
The pullup resistors are controlled by the same registers (internal chip memory locations) that control whether a pin is HIGH or LOW.
Consequently, a pin that is configured to have pullup resistors turned on when the pin is an INPUT, will have the pin configured as HIGH if the pin is then switched to an OUTPUT with pinMode().
This works in the other direction as well, and an output pin that is left in a HIGH state will have the pullup resistors set if switched to an input with pinMode().
http://translate.google.com/#en/ru/The%20pullup%20resistors%20are%20controlled%20by%20the%20same%20registers%20%28internal%20chip%20memory%20locations%29%20that%20control%20whether%20a%20pin%20is%20HIGH%20or%20LOW.%20Consequently%2C%20a%20pin%20that%20is%20configured%20to%20have%20pullup%20resistors%20turned%20on%20when%20the%20pin%20is%20an%20INPUT%2C%20will%20have%20the%20pin%20configured%20as%20HIGH%20if%20the%20pin%20is%20then%20switched%20to%20an%20OUTPUT%20with%20pinMode%28%29.%20This%20works%20in%20the%20other%20direction%20as%20well%2C%20and%20an%20output%20pin%20that%20is%20left%20in%20a%20HIGH%20state%20will%20have%20the%20pullup%20resistors%20set%20if%20switched%20to%20an%20input%20with%20pinMode%28%29.
А не наоборот...
Вот, я же говорил "стремно". Ходьба по лезвию. Вот и вы промахнулись и попали на КЗ.
Что будет если вызвать poweOn(), ПОСЛЕ powerOff()? Порты включены "на выход", а вы им digitalWrite.... Вернулись к тому с чего начинали. Можно конечно, и в powerOn() делать pinMode(INPUT). Да только.... КЗ-то мы уже получили ;)
Не надолго:
Но все-таки получили. Может и выживет пин за эти три микросекунды. Но вот если мы пиханцли эти powerUp,powerDown в loop(), то эти микросекунды у нас начнут складываться. Мы получим КЗ-ШИМ :) И тут шансы умереть у пина (или камня, или USB) - уже гораздо выше. По крайней мере, я не хочу на своей дуинке пробовать и реально их коротить ;)
trembo, не знал про наследование состояний. Вы мануал наузусть что ли учили ? :)
TO: leshak
Да, заметили всё-таки, недосмотр вышел, ошибку исправил:
Козы не будет!
trembo, не знал про наследование состояний. Вы мануал наузусть что ли учили ? :)
Просто там один регистр (PORTx - Port X Data Register)включает резисторы и выдаёт LOW-HIGH
в зависимости от режима пина (DDRx - Port X Data Direction Register)
trembo, не знал про наследование состояний. Вы мануал наузусть что ли учили ? :)
Я к примеру просто полез в исходник pinMode что-бы для себя это прояснить :) OpenSource же ;)
TO: leshak
Да, заметили всё-таки, недосмотр вышел, ошибку исправил:
А камень-то уже тю-тю... (тьфу, тьфу). Да еще удаленно, у новичка. Которые еще и не сразу поймет что писец уже пробежался....
Так что "ну его нафиг". Все ошибаются, в том числе и опытные (я сам бы так запросто мог ошибится). Поэтому чем дальше от "края" тем спокойней.
P.S. Я если еще подумать каковы шансы что новичок сообразит вначале digitalWrite, а потом pinMode делать? Ему-то изначально сказали просто "питайся с двух ног".
P.S. Я если еще подумать каковы шансы что новичок сообразит вначале digitalWrite, а потом pinMode делать? Ему-то изначально сказали просто "питайся с двух ног".
Может быть на таком "грубом" примере поймёт что всё в мире взаимосвязано.
Заодно услышал что есть какие-то регистры.... :)
http://www.avr-tutorials.com/digital/about-avr-8-bit-microcontrollers-di...
Заодно услышал что есть какие-то регистры.... :)
http://www.avr-tutorials.com/digital/about-avr-8-bit-microcontrollers-digital-io-ports
Я выше ссылку давал, на их описание по русски. На этом сайте.Прямое управления выходами через регистры микроконтроллера Atmega
Ну а если хочется "вкиснуть". Понимать что будет с входами когда камень обесточен, а на нее приходят какие-нибудь импульсы, что это за фигня "подтягивающий резистор и т.п." то... AVR. Учебный курс. Устройство и работа портов ввода-вывода | Электроника для всех
Не, ну тут нужно или крестик снять или трусы надеть ;)
В основном работаю в трусах, а с крестиком - так и не надевал, религия не позволяет :)
Что-же вы сразу и внешние питание дергаете и встроенный powerDown мучаете. Намешали все в одну тарелку.
Пошагово идите.... разбивайте задачу. Вначале убедитесь что модуль действительно засыпает по powerDown (как "разбудить" - потом отдельно будете разбиратся).
Запитайте его, через регулятор, от VCC. И амперметр воткните между регулятором и модулем. Что-бы мерять потребление именно модуля.
Потом возьмите оригинальный пример библиотеки. И в начало (или конец - не важно), loop() добавте что-то такое:
И смотрите на амперметр. Первый 10-ть секунд - смотрите сколько модуль потребляет в активном состоянии, все остальное время - сколько он потребляет в режиме сна.
Сделано! Воткнул на замер беспроводного модуля, вставил код.
Первые 10 секунд - потребление 30мА;
После 10 секунд - потребление 10мА. Многовато в-общем для powerDown...
Может быть на таком "грубом" примере поймёт что всё в мире взаимосвязано.
Заодно услышал что есть какие-то регистры.... :)
http://www.avr-tutorials.com/digital/about-avr-8-bit-microcontrollers-di...
Не, ну мы тоже не лаптем щи хлебаем... про регистры-то я слыхал :) Просто внимательно к этому не относился... Простите великодушно ;)
Заработала вот такая махинация:
Теперь 5 секунд потребление беспроводного модуля - 30мА,
следующие 5 секунд потребление - 0мА.
Ткните носом в нефеншуйную часть... Исключая то, что это питание от ноги пина...
Не по феншую
const
int
SuperPin = 5; и
digitalWrite(5, LOW);
А потребление "0" потому-что
если 5 (SuperPin) это питание
я бы тоже отказался что-либо потреблять после
digitalWrite(5, LOW);
Не по феншую
const
int
SuperPin = 5; и
digitalWrite(5, LOW);
А потребление "0" потому-чтоесли 5 (SuperPin) это питание
я бы тоже отказался что-либо потреблять после
digitalWrite(5, LOW);
Тупанул... Не отрицаю...
БЛАГОДАРЮ ВСЕХ, принимавших участие в моём обучении! Пошел учить регистры и порты...
special thanx to Leshak!
А в чем смысл делать:
Вы рубанули ему питание, а потом многократно, судорожно пытаетесь послать команду "выключись..." Он все равно уже никого и ничего не слышит. Да и смысла в это while() - нет. Получился блокирующий кусок в котором ничего полезного не делается. А значит вполне можно просто заменитье го на
Да и смысла в это while() - нет. Получился блокирующий кусок в котором ничего полезного не делается.
Не, не получается.... вы же знак на меньше поменяли...
Вообщем не понимаю я этого while вообще целиком. Зачем он там нужен, и че вообще от него хотели...
Вообщем не понимаю я этого while вообще целиком. Зачем он там нужен, и че вообще от него хотели...
Я сам не совсем понимаю зачем он, но без него не работает :(
Я сейчас изменил loop, теперь он выглядит вот так:
Вот еще какая проблема вылезла (надоел уже, наверное):
Если Mirf.powerDown () убрать - вся система потребляет в спящем режиме около 5мА, если поставить Mirf.powerDown () - система потребляет в спящем режиме около 4мА.
Я так понимаю это кушают пины, которые идут в беспроводной модуль - 7,8 - если их выдернуть - кушает 2,5мА. Так вот - можно их тоже гасить?
Вставил вот это:
Теперь потребление 2,5мА. Почему не 0,3мА?
1. Для надёжности:
pinMode ( 7 , INPUT ) ;
pinMode ( 8 , INPUT ) ;
digitalWrite ( 7 , LOW ) ;
digitalWrite ( 8 , LOW )
2. Я думаю если модуль без питания - надо ВСЕ идущие к нему сигналы опустить в LOW:
MOSI , MISO, SCK, CE, CS
Потому что у вас фьюзы в проце прошиты не для минимального энергопотребления 5.8 мка во сне
Вот пример - не копируйте его без понимания - там проц на внутреннем генераторе
http://arduino.ru/forum/proekty/bolshie-chasy-pogodnaya-stantsiya#comment-31370
Поменял "Крону" в мультиметре - потребление стало 1,4мА :) Но сломалась одна секция у последней цифры мультиметра :(
Потому что у вас фьюзы в проце прошиты не для минимального энергопотребления 5.8 мка во сне
Вот пример - не копируйте его без понимания - там проц на внутреннем генераторе
http://arduino.ru/forum/proekty/bolshie-chasy-pogodnaya-stantsiya#comment-31370
нет-нет... у меня было потребление 0,3мА без всяких прошиваний...
Значит не все отключаете, если используете стабилизатор на постоянку (не на отключаемых пинах) - от тоже кушает.
1. Для надёжности:
pinMode ( 7 , INPUT ) ;
pinMode ( 8 , INPUT ) ;
digitalWrite ( 7 , LOW ) ;
digitalWrite ( 8 , LOW )
2. Я думаю если модуль без питания - надо ВСЕ идущие к нему сигналы опустить в LOW:
MOSI , MISO, SCK, CE, CS
СДЕЛАНО! РАБОТАЕТ! потребление 198мкА!!!
вот код:
СПАСИБО!!!
Ну да, это классический случай запитывания цифровой микросхемы от входного сигнала, ещё со времён 155 серии,когда она получала питание от высокого уровня на одном из входов (через защитный диод).
Правда напряжение питания было немного просажено, но этого хватало чтобы успешно работать до той поры пока все входы не уходили в низкий уровень.
Я думаю вам ещё надо померять ток при отключенном модуле. Они должны совпадать.
И ещё, после повердауна модуля перейти на другой генератор тактовой частоты, например на 8/8 внутреннего или даже на генератор ватчдога, но как это сделать не смогу подсказать.
Только осторожно, там со стандартным бутлодером и вачдогом была проблемма.
Я для проверки ставил 8 секунд, чтобы можно было потом кое-как его отменить.
http://www.fiz-ix.com/2012/11/low-power-arduino-using-the-watchdog-timer/