Arduino Uno режим энергосбережения

Тема в разделе "Arduino & Shields", создана пользователем Serdg, 13 май 2013.

  1. Serdg

    Serdg Нерд

    подскажите кто-нибудь, нужно обязательно все контакты ICSP соединять, и какой mosfet транзистор ставить?
     
  2. roggedhorse

    roggedhorse Гик

    Здесь схема Ethernet Shield:
    http://arduino.cc/en/uploads/Main/arduino-ethernet-shield-06-schematic.pdf

    Здесь описание Ethernet Library:
    http://arduino.cc/en/Reference/Ethernet

    Согласно того и другого:
    "Arduino communicates with the shield using the SPI bus. This is on digital pins 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega. On both boards, pin 10 is used as SS. On the Mega, the hardware SS pin, 53, is not used to select the W5100, but it must be kept as an output or the SPI interface won't work"

    шилд управляется через шину SPI. Поэтому нужно подключить MISO, MOSI, SCK ноги UNO к соответствующим ногам EthShield.
    Судя по схеме разъем J1 шилда втыкается в разъем UNO digital IO 8-13. И ноги Digital 11,12,13 на нем (Eth) не разведены. А стало быть шилд коннектится через ICSP разъем.
    Соответственно на вашей схеме зеленый, фиолетовый и синий провода нужно подключить к разъему ICSP шилда, а не к разъему J1 UNO.
     
  3. Serdg

    Serdg Нерд

    схему подключения смотрел тут http://www.instructables.com/id/Arduino-Nano-with-Ethernet-Shield/step4/Connect-the-wires/
    В каком порядке зеленый, фиолетовый и синий провода нужно подключить к разъему ICSP шилда?

    roggedhorse, я только начинаю разбираться с мк, можно как-нибудь в виде схемы все это, если не затруднит?
     
  4. Serdg

    Serdg Нерд

    никто не поможет?
     
  5. roggedhorse

    roggedhorse Гик

  6. Serdg

    Serdg Нерд

    С поиском разъема я давно и успешно справился. вопросы в другом были.
     
  7. roggedhorse

    roggedhorse Гик

    MISO - Master In Slave Out (ведущий принимает, ведомый отдает. Иногда пишут SDO - Slave Data Output или SO)
    MOSI - Master Out Slave In (ведущий отдает, ведомый принимает. Иногда пишут SDI - Slave Data Input или SI)
    SCK - Serial ClocK (синхронизация)

    соответственно MISO к MISO, MOSI к MOSI, SCK к SCK, GND к GND
     
  8. Viktor880s

    Viktor880s Нуб

    Здравствуйте, проблема в следующем. Ардуинку нужно загонять в сон на весьма длительное время. Пробуждение - по датчику и по времени. Интервал между пробуждениями по времени от 1 часа до 16 часов. Поэтому решил осуществлять пробуждение по часам реального времени. Но беда в том, что я не нашёл ни чего вразумительного как это реализовать, так, чтобы не будить контроллер каждую секунду. Так как нужна максимальная продолжительность работы от аккумулятора. Как то давно, я встречал на форуме подобную тему, и там писалось что можно запрограммировать какой то выход часов так, что он будет "мигать" каждый час. Подскажите, знающие люди, как это можно сделать, или посоветуйте другой вариант. Пожалуйста.
     
  9. rkit

    rkit Гуру

    Надо сесть да прочитать документацию по своим часам. Там всё написано.
     
  10. danya plotnik

    danya plotnik Гик

    Подскажите пожалуйста где взять эти библиотеки!!!
     
  11. parovoZZ

    parovoZZ Гуру

    Какие?
     
  12. danya plotnik

    danya plotnik Гик

    sleep и power
     
  13. Airbus

    Airbus Радиохулиган Модератор

    И Вы реально думаете что запустив библиотеки микроконтроллер будет спать?Или он задействует 90% своих ресурсов (процессора памяти) чтобы спать?Да и абсурдно это
    это два термина (энергоэффективность и Ардуино) взаимоисключающие.
    п.1 Огромное количество бесполезной и жрущей периферии.
    п.2 Неоптимально установленые фьюзы без которых Ардуино не Ардуино.
    п.3 Неоптимальный софт-непрерывно выполняемый цЫкл Void(loop) выполняемый непрерывно и заставляющй МК потреблять электроэнергию на ненужные операции.
     
  14. danya plotnik

    danya plotnik Гик

    А как тогда сделать из активного режима в энергосберегающий, не отключая ардуино?
     
  15. parovoZZ

    parovoZZ Гуру

    Тему полностью читали? Все цепи, по котрым утекает ток, исключили из схемы? Тогда слушайте.
    Первое, что надо сделать, разрешить прерывания:
    Код (C++):
    sei();
    Процессор, ушедший в сон, сам по себе не проснётся. Его надо будить. Либо извне, либо таймером WDT.

    В том месте кода, где планируем заснуть, пишем:
    вырубаем всю периферию
    Код (C++):
    power_all_disable();
    устанавливаем режим сна - самый каматозный из возможных
    Код (C++):
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    разрешаем сон
    Код (C++):
    sleep_enable();
    и уходим в него
    Код (C++):
    sleep_cpu();
    когда проснемся, то вернемся в эту точку и здесь нам надо обязательно запустить проц
    Код (C++):
    sleep_disable();
    Помним, что этот режим самый каматозный и отходняк самый длительный. Впрочем, он задаётся фьюзами SUT1 и SUT0
    Если просыпаемся от ватчдога, то обязательно надо войти в вектор прерывания, чтобы сбросить флаг
    Код (C++):
    ISR(WDT_vect)
    {
    }
     
    danya plotnik нравится это.
  16. danya plotnik

    danya plotnik Гик

    спасибо!
     
  17. danya plotnik

    danya plotnik Гик

    А тут нужна библиотека?
     
  18. parovoZZ

    parovoZZ Гуру

    Библиотеки - нет, заголовочные файлы - да.
    Код (C++):
    #include  <avr/sleep.h>
    #include  <avr/wdt.h>
    #include <avr/power.h>
    #include <avr/interrupt.h>
     
  19. danya plotnik

    danya plotnik Гик

    Все спасибо