24 января 2018 г.

Как перезагрузить Arduino (программный рестарт)

После нажатия на кнопку RESET, а также по сигналу DTR микросхемы FT232R на плате Arduino Duemilanove или по сигналу на выводе D7 микросхемы ATmega8U2 платы Arduino Uno, управление передаётся загрузчику (bootloader) Arduino, расположенному в верхних 2 КБ памяти программ (Flash) (адрес 0x7800 для микроконтроллера ATmega328p). Загрузчик проверяет, есть ли связь с Arduino IDE, а затем передаёт управление по адресу 0x0000 памяти программ, где расположен код скетча.
Таким образом, чтобы перезагрузить Arduino программным способом (теплый рестарт или soft reset), достаточно добавить в скетч функцию программного сброса:
void softReset()
{
    asm volatile ("jmp 0");
}
Вызов этой функции приведёт к программному рестарту скетча Arduino.

24 февраля 2016 г.

Исправление косяков ethernet shield w5100



Купил у китайцев Ethernet shield w5100.
Подключаю к плате Arduino MEGA 2560, прошиваю скетч Web Server из примеров.
Иду по адресу 192.168.1.177 . Не работает.
Светодиоды LINK, 100M светятся. Передачи данных нет.
Меняю Arduino MEGA на Arduino UNO. Не работает.
Меняю версию IDE. Не работает.
Нахожу еще один такой-же Ethernet шилд, но заведомо рабочий (снят с рабочего макета). Подключаю к своей плате. Не работает.

Лезу в интернет. Нахожу информацию о том, что Ethernet shield w5100 не дружит с оборудованием D-Link.
У меня как раз свитч D-Link DES-1008D. Проверяю на доступных TP-LINK WR841ND, Asus RT-N13U - не работает!

Нашел свитч, в котором этот капризный шилд заработал.

Опять сходил в интернет. Нашел совет, проверить резистор (сборку) у входа Ethernet.
Китайцы могут впаять вместо 510 (51 Ом) сборку 511 (510 Ом). Они-же похожи :-)
У меня оказалось впаяно неверное сопротивление.
не работает ethernet shield w5100 ? проверяй резистор.
Перепаял. Все сразу-же заработало!

PS. Резисторы 510 можно искать на старых материнках. У меня все работает с 560 резистором (56 Ом).
Чем такого микроба паять? Термовоздушная паяльная станция.
Паяльником - я бы не совался. Кто сумеет - молодец. Научи.



12 марта 2015 г.

Фокус с приведением типов данных

Рассмотрим умножение двух чисел int и long

int  i = 0;      
long L = 0;  
  
  i=40    ;
  L=i*1000;                  // умножаю int=40 на 1000 и ложу его в переменную long
  Serial.println(L);

Результат будет 40000 ? Нет!!!
В результате получаю       -25536 !!! Все потому, что 40000 не влазит в диапазон типа данных int (от -32768 до 32767).

Для получения желаемого результата 40000 нужно применять такой код:

  L=long(i)*1000  ;         // првожу число i к типу данных long
  Serial.println(L);

Получаем результат 40000.

11 марта 2015 г.

Распиновка ATMEGA328

Часто приходится подсматривать в даташит к ATMEGA328 где какой пин находится.
Нашел для себя отличную диаграмму распиновки контроллера.
Взято отсюда http://www.pighixxx.com/

Русские буквы LCD Nokia 5110

Краткая инструкция по "русификации" LCD Nokia 5110.


  1. Скачать файл шрифта русский шрифт
  2. Обозвать скачаный файл glcdfont-rus.c и положить его в папку ...libraries\Adafruit_GFX\
  3. Изменить в файле Adafruit_GFX.cpp строку #include "glcdfont.c" на #include "glcdfont-rus.c"
  4. Кодировка редактора IDE Arduino utf-8, для корректной работы с кириллицей на LCD нужно настроить перекодирование в cp1251. Для этого в файле preferences установить preproc.substitute_unicode=false


Теперь можно писать прямо в IDE на кириллице и видеть символы кирилицы экране.

ps. файл preferences редактировать только когда IDE не запущен. Иначе внесенные изменения перетрутся.

Информация взята из http://habrahabr.ru/post/242957/

Изменение частоты ШИМ.

Стандартная частота ШИМ в плате ардуино на 5 и 6 пинах 976 Гц.
Для изменения частоты ШИМ  на пинах 5 и 6 в ардуино, используется следующая команда:


TCCR0B = TCCR0B & 0b11111000 | 5;     // константа 5 это делитель 1024, получаем частоту 61 Гц.

Другие частоты ШИМ можно выставить делителями согласно табличке.
Константа   Делитель          Частота(Гц)
   0x01           1              62500
   0x02           8              7812.5
   0x03          64              976.5625
   0x04         256              244.140625
   0x05        1024              61.03515625

Ок, поставил частоту 61 гц. Вгружаю скетч. 
На екране (использую LCD Nokia 5110) вижу ненормальное поведение программы.  Все "замерло".
Оказывается - установленный мною делитель, действует также на системный таймер. Функции delay(), milis(), micros() и работает тоже с измененным делителем частоты. Delay(1000) - сделает задержку не на 1 секунду!!! Моя программа выполняется намного дольше, чем задумано.
Пришлось ШИМ-у пересаживатся на 3-пин. Его делитель частоты не трогает ситемный таймер.