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-пин. Его делитель частоты не трогает ситемный таймер.