Arduino + LCD 128x64 - Виснет при загрузке скетча.

jeka664
Offline
Зарегистрирован: 18.09.2014

Доброго времени суток!

Решил сделать небольшой велокомпьютер на Arduino и столкнулся со следующей проблемой:

Arduino зависает на 90% при загрузке скетча. Очень похоже на нехватку памяти, так как при закоментировании любых функций, скетч загружается. Но компилятор при этом выдает, что размер скетча 9 270 байт (из 258 048 байт максимум). Видимо я не совсем понимаю работу Arduino. Подскажите, пожалуйста, что я делаю не так?

P.S. При всем этом, прекрасно загружается и работает Demo от GLCD объемом 16Кб.

#include <glcd.h>

static uint8_t Display[] PROGMEM = {128, 64,
0x00, 0x2C, 0x2A, 0x1A, 0x00, 0x3E, 0x0A, 0x04, 0x00, 0x3E, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x3E, 0x08, 0x3E, 0x00, 0x3E, 0x0A, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFA, 0x06, 0x06, 0x06, 0x06, 0xFA, 0xFC, 0x00, 0x00, 0xFC, 0xFA, 0x06, 0x06, 0x06, 0x06, 0xFA, 0xFC, 0x00, 0x00, 0x00, 0xBC, 0x42, 0x42, 0x42, 0xBC, 0x00, 0xBC, 0x42, 0x42, 0x42, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFA, 0x06, 0x06, 0x06, 0x06, 0xFA, 0xFC, 0x00, 0x00, 0xFC, 0xFA, 0x06, 0x06, 0x06, 0x06, 0xFA, 0xFC, 0x00, 0x00, 0xFC, 0xFA, 0x06, 0x06, 0x06, 0x06, 0xFA, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xEB, 0x1C, 0x1C, 0x1C, 0x1C, 0xEB, 0xF7, 0x00, 0x00, 0xF7, 0xEB, 0x1C, 0x1C, 0x1C, 0x1C, 0xEB, 0xF7, 0x00, 0x10,
0x00, 0x07, 0x08, 0x08, 0x08, 0x07, 0x00, 0x07, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xEB, 0x1C, 0x1C, 0x1C, 0x1C, 0xEB, 0xF7, 0x00, 0x00, 0xF7, 0xEB, 0x1C, 0x1C, 0x1C, 0x1C, 0xEB, 0xF7, 0x00, 0x00, 0xF7, 0xEB, 0x1C, 0x1C, 0x1C, 0x1C, 0xEB, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x2F, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x1F, 0x00, 0x00, 0x1F, 0x2F, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x2F, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x1F, 0x00, 0x00, 0x1F, 0x2F, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x1F, 0x00, 0x00, 0x1F, 0x2F, 0x30, 0x30, 0x30, 0x30, 0x2F, 0x1F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x80, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x80, 0xC0, 0x00, 0x80, 0x40, 0x80, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40,
0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x80, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x80, 0xC0, 0x00, 0x80, 0x40, 0x80, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x62, 0x92, 0x92, 0x62, 0x02, 0x62, 0x92, 0x92, 0x62, 0x00, 0x03, 0x01, 0x63, 0x90, 0x91, 0x62, 0x01, 0x60, 0x93, 0x91, 0x62, 0x00, 0x02, 0xFE, 0x02, 0x02, 0x02, 0x62, 0x92,
0x92, 0x62, 0x02, 0x62, 0x92, 0x92, 0x62, 0x00, 0x03, 0x00, 0x63, 0x90, 0x93, 0x61, 0x03, 0x60, 0x92, 0x91, 0x62, 0x00, 0x02, 0x02, 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x63, 0x93, 0x92, 0x62, 0x00, 0x02, 0xFE, 0x02, 0x02, 0x62, 0x92, 0x90, 0x63, 0x01, 0x63, 0x90, 0x91, 0x62, 0x01, 0x60, 0x93, 0x91, 0x62, 0x00, 0x02, 0xFE, 0x02, 0x02, 0x02, 0x02, 0x62, 0x92, 0x90, 0x63, 0x00, 0x63, 0x90, 0x93, 0x61, 0x03, 0x60, 0x92, 0x91, 0x62, 0x00, 0x02, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x20, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x24, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x24, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x20, 0x20, 0xFF, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x23, 0x24, 0x24, 0x23,
0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x23, 0x24, 0x24, 0x23, 0x20, 0x20, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x41, 0x3E, 0x00, 0x46, 0x49, 0x31, 0x00, 0x01, 0x7F, 0x01, 0x00, 0x14, 0x00, 0x00, 0x36, 0x49, 0x49, 0x36, 0x00, 0x36, 0x49, 0x49, 0x36, 0x00, 0x36, 0x49, 0x49, 0x36, 0x00, 0x36, 0x49, 0x49, 0x36, 0x00, 0x36, 0x49, 0x49, 0x36, 0x00, 0x40, 0x00, 0x36, 0x49, 0x49, 0x36, 0x00, 0x36, 0x49, 0x49, 0x36, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

static uint8_t B_0[] = {8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xFB, 0xF1, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_1[] = {8, 24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_2[] = {8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xF8, 0xF4, 0x0E, 0x0E, 0x0E, 0x0E, 0x05, 0x03, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_3[] = {8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x00, 0x04, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_4[] = {8, 24, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_5[] = {8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF4, 0xF8, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_6[] = {8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0xFB, 0xF5, 0x0E, 0x0E, 0x0E, 0x0E, 0xF4, 0xF8, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_7[] = {8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_8[] = {8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xFB, 0xF5, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_9[] = {8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

static uint8_t S_0[] = {4, 8, 0x36, 0x41, 0x41, 0x36, };

static uint8_t M_0[] = {5, 16, 0xDE, 0x01, 0x01, 0x01, 0xDE, 0x03, 0x04, 0x04, 0x04, 0x03, };
static uint8_t M_1[] = {5, 16, 0x00, 0x00, 0x00, 0x00, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x07, };
static uint8_t M_2[] = {5, 16, 0xC0, 0x21, 0x21, 0x21, 0x1E, 0x03, 0x04, 0x04, 0x04, 0x00, };
static uint8_t M_3[] = {5, 16, 0x02, 0x21, 0x21, 0x21, 0xDE, 0x02, 0x04, 0x04, 0x04, 0x03, };
static uint8_t M_4[] = {5, 16, 0x1F, 0x20, 0x20, 0x20, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x07, };
static uint8_t M_5[] = {5, 16, 0x1E, 0x21, 0x21, 0x21, 0xC0, 0x00, 0x04, 0x04, 0x04, 0x03, };
static uint8_t M_6[] = {5, 16, 0xDE, 0x21, 0x21, 0x21, 0xC0, 0x03, 0x04, 0x04, 0x04, 0x03, };
static uint8_t M_7[] = {5, 16, 0x00, 0x01, 0x01, 0x01, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x07, };
static uint8_t M_8[] = {5, 16, 0xDE, 0x21, 0x21, 0x21, 0xDE, 0x03, 0x04, 0x04, 0x04, 0x03, };
static uint8_t M_9[] = {5, 16, 0x1E, 0x21, 0x21, 0x21, 0xDE, 0x00, 0x04, 0x04, 0x04, 0x03, };

void setup()
  {
    GLCD.Init();
    GLCD.ClearScreen();   
    GLCD.DrawBitmap(Display, 0,0); //Вывод основного экрана.
    SpeedPrint(73.28); //Вывод скорости.
  }

void DigitBigPrint(int digit, int x, int y)    //функия отрисовки больших цифр
  {
    if (digit == 0) GLCD.DrawBitmap(B_0, x,y);
    if (digit == 1) GLCD.DrawBitmap(B_1, x,y);    
    if (digit == 2) GLCD.DrawBitmap(B_2, x,y);    
    if (digit == 3) GLCD.DrawBitmap(B_3, x,y);    
    if (digit == 4) GLCD.DrawBitmap(B_4, x,y);    
    if (digit == 5) GLCD.DrawBitmap(B_5, x,y);    
    if (digit == 6) GLCD.DrawBitmap(B_6, x,y);    
    if (digit == 7) GLCD.DrawBitmap(B_7, x,y);    
    if (digit == 8) GLCD.DrawBitmap(B_8, x,y);    
    if (digit == 9) GLCD.DrawBitmap(B_9, x,y);
  }
  
void DigitMedPrint(int digit, int x, int y) //функия отрисовки средних цифр
  {
    if (digit == 0) GLCD.DrawBitmap(M_0, x,y);
    if (digit == 1) GLCD.DrawBitmap(M_1, x,y);    
    if (digit == 2) GLCD.DrawBitmap(M_2, x,y);    
    if (digit == 3) GLCD.DrawBitmap(M_3, x,y);    
    if (digit == 4) GLCD.DrawBitmap(M_4, x,y);    
    if (digit == 5) GLCD.DrawBitmap(M_5, x,y);    
    if (digit == 6) GLCD.DrawBitmap(M_6, x,y);    
    if (digit == 7) GLCD.DrawBitmap(M_7, x,y);    
    if (digit == 8) GLCD.DrawBitmap(M_8, x,y);    
    if (digit == 9) GLCD.DrawBitmap(M_9, x,y);     
  }  

void DigitPrint(int type, int digit, int x, int y) //Вывод цифры по заданным координатам.
  {
    switch (type) 
      {
        case 0:
          DigitBigPrint(digit,x,y);    //Большие цифры
          break;
        case 1:
          DigitMedPrint(digit,x,y);    //Средние цифры
          break;          
      }     
  }

void SpeedPrint(float S) //функция вывода текущей скорости.
  {
    int s1, s2, s3, s4, s5;
    s5 = S*100;
    s4 = s5 - ((s5/10)*10);
    s3 = (s5/10) - ((s5/100)*10);
    s2 = (s5/100) - ((s5/1000)*10);
    s1 = (s5/1000) - ((s5/10000)*10);    

    DigitPrint(1, s4, 39, 9);
    DigitPrint(1, s3, 33, 9);
    DigitPrint(0, s2, 22, 9);
    DigitPrint(0, s1, 12, 9);
  }

void loop()
  {
  }

 

jeka664
Offline
Зарегистрирован: 18.09.2014

Забыл указать - Arduino Mega 2560

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

)) а зачем константы держать в оперативной памяти?

используй библиотеку pgmspace

#include <avr/pgmspace.h>

данные в нее загонять так

static const byte mass[100] PROGMEM ={
}

считывать так

ch=pgm_read_byte(&(mass[i]));

 

 

jeka664
Offline
Зарегистрирован: 18.09.2014

Где будут размещены данные при закидывании их через PROGMEM? (Увы не могу найти информацию по организации памяти на Arduino.)

Исправил, но не могу понять как передать в GLCD.DrawBitmap масив. Он требует uint8_t.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
static const uint8_t mass[100] PROGMEM ={

данные будут хранится во флеше. они и так хранятся там, но при запуске загружаются в оперативную память. но зачем тратить опертивку если много данных которые не меняются

теперь работает или нет? в смысле загружается?

 

jeka664
Offline
Зарегистрирован: 18.09.2014

Нет.

Для теста, убрал один большой массив. Все равно не загружается. 

Но если закомментировать все функции которые обращаются к заданным массивам, то все нормально загружается.

#include <glcd.h>
#include <avr/pgmspace.h>

static uint8_t B_0[] PROGMEM = {8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xFB, 0xF1, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_1[] PROGMEM = {8, 24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_2[] PROGMEM = {8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xF8, 0xF4, 0x0E, 0x0E, 0x0E, 0x0E, 0x05, 0x03, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_3[] PROGMEM = {8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x00, 0x04, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_4[] PROGMEM = {8, 24, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_5[] PROGMEM = {8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF4, 0xF8, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_6[] PROGMEM = {8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0xFB, 0xF5, 0x0E, 0x0E, 0x0E, 0x0E, 0xF4, 0xF8, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_7[] PROGMEM = {8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_8[] PROGMEM = {8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xFB, 0xF5, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
static uint8_t B_9[] PROGMEM = {8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

static uint8_t S_0[] PROGMEM = {4, 8, 0x36, 0x41, 0x41, 0x36, };

static uint8_t M_0[] PROGMEM = {5, 16, 0xDE, 0x01, 0x01, 0x01, 0xDE, 0x03, 0x04, 0x04, 0x04, 0x03, };
static uint8_t M_1[] PROGMEM = {5, 16, 0x00, 0x00, 0x00, 0x00, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x07, };
static uint8_t M_2[] PROGMEM = {5, 16, 0xC0, 0x21, 0x21, 0x21, 0x1E, 0x03, 0x04, 0x04, 0x04, 0x00, };
static uint8_t M_3[] PROGMEM = {5, 16, 0x02, 0x21, 0x21, 0x21, 0xDE, 0x02, 0x04, 0x04, 0x04, 0x03, };
static uint8_t M_4[] PROGMEM = {5, 16, 0x1F, 0x20, 0x20, 0x20, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x07, };
static uint8_t M_5[] PROGMEM = {5, 16, 0x1E, 0x21, 0x21, 0x21, 0xC0, 0x00, 0x04, 0x04, 0x04, 0x03, };
static uint8_t M_6[] PROGMEM = {5, 16, 0xDE, 0x21, 0x21, 0x21, 0xC0, 0x03, 0x04, 0x04, 0x04, 0x03, };
static uint8_t M_7[] PROGMEM = {5, 16, 0x00, 0x01, 0x01, 0x01, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x07, };
static uint8_t M_8[] PROGMEM = {5, 16, 0xDE, 0x21, 0x21, 0x21, 0xDE, 0x03, 0x04, 0x04, 0x04, 0x03, };
static uint8_t M_9[] PROGMEM = {5, 16, 0x1E, 0x21, 0x21, 0x21, 0xDE, 0x00, 0x04, 0x04, 0x04, 0x03, };

void setup()
  {
    GLCD.Init();
    GLCD.ClearScreen();   
    //GLCD.DrawBitmap(Display, 0,0); //Вывод основного экрана.
    SpeedPrint(73.28); //Вывод скорости.
  }

void DigitBigPrint(int digit, int x, int y)    //функия отрисовки больших цифр
  {
    if (digit == 0) GLCD.DrawBitmap(B_0, x,y);
    if (digit == 1) GLCD.DrawBitmap(B_1, x,y);    
    if (digit == 2) GLCD.DrawBitmap(B_2, x,y);    
    if (digit == 3) GLCD.DrawBitmap(B_3, x,y);    
    if (digit == 4) GLCD.DrawBitmap(B_4, x,y);    
    if (digit == 5) GLCD.DrawBitmap(B_5, x,y);    
    if (digit == 6) GLCD.DrawBitmap(B_6, x,y);    
    if (digit == 7) GLCD.DrawBitmap(B_7, x,y);    
    if (digit == 8) GLCD.DrawBitmap(B_8, x,y);    
    if (digit == 9) GLCD.DrawBitmap(B_9, x,y);
  }
  
void DigitMedPrint(int digit, int x, int y) //функия отрисовки средних цифр
  {
    if (digit == 0) GLCD.DrawBitmap(M_0, x,y);
    if (digit == 1) GLCD.DrawBitmap(M_1, x,y);    
    if (digit == 2) GLCD.DrawBitmap(M_2, x,y);    
    if (digit == 3) GLCD.DrawBitmap(M_3, x,y);    
    if (digit == 4) GLCD.DrawBitmap(M_4, x,y);    
    if (digit == 5) GLCD.DrawBitmap(M_5, x,y);    
    if (digit == 6) GLCD.DrawBitmap(M_6, x,y);    
    if (digit == 7) GLCD.DrawBitmap(M_7, x,y);    
    if (digit == 8) GLCD.DrawBitmap(M_8, x,y);    
    if (digit == 9) GLCD.DrawBitmap(M_9, x,y);     
  }  

void DigitPrint(int type, int digit, int x, int y) //Вывод цифры по заданным координатам.
  {
    switch (type) 
      {
        case 0:
          DigitBigPrint(digit,x,y);    //Большие цифры
          break;
        case 1:
          DigitMedPrint(digit,x,y);    //Средние цифры
          break;          
      }     
  }

void SpeedPrint(float S) //функция вывода текущей скорости.
  {
    int s1, s2, s3, s4, s5;
    s5 = S*100;
    s4 = s5 - ((s5/10)*10);
    s3 = (s5/10) - ((s5/100)*10);
    s2 = (s5/100) - ((s5/1000)*10);
    s1 = (s5/1000) - ((s5/10000)*10);    

    DigitPrint(1, s4, 39, 9);
    DigitPrint(1, s3, 33, 9);
    DigitPrint(0, s2, 22, 9);
    DigitPrint(0, s1, 12, 9);
  }

void loop()
  {
  }

 

jeka664
Offline
Зарегистрирован: 18.09.2014

Если из программы убрать только функцию void DigitMedPrint(int digit, int x, int y), то также все загружается и работает. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

когда выкладываешь код ставь галочку сворачивать код по умолчанию. 

а почему неправильно пишешь?

у тебя

static uint8_t B_0[] PROGMEM

а я писал

static const uint8_t B_0[] PROGMEM

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да и еще. зачем делать кучу однотипных одномерных массивов? сделай двумерный))

к тому же упростит твою программу

jeka664
Offline
Зарегистрирован: 18.09.2014

Моя вина. Посчитал static и const за одно и то же. Но ничего не поменялось. Не загружает.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

какие ошибки выдает?

jeka664
Offline
Зарегистрирован: 18.09.2014
avrdude: Recv: 
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [11] . [00] . [01] . [0e] . [01] . [04] 
avrdude: Recv: 
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: Send: . [1b] . [11] . [00] . [01] . [0e] . [01] . [04]
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

на пинах 0 и 1 ничего не висит?

если нет просто замкни их открой терминал и отправь что нибудь. должно возвращаться

jeka664
Offline
Зарегистрирован: 18.09.2014

Замкнул, подключился через putty. В терминале пусто. При нажатии любой клавиши на Arduino мигает RX. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

в ардуино иде есть свой терминал. кнопочка справа сверху. проверьте им

значит ничего не висит?

jeka664
Offline
Зарегистрирован: 18.09.2014

Да. Ничего не висит. Отправл через терминал. Ответ приходит.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хорошо. есть другая ардуина проверить для теста что у этой кристал не сдох?

а вообще если скетчи и больше пишутся значит пролема не в этом. попробуй скетч еще больше отправить

jeka664
Offline
Зарегистрирован: 18.09.2014

К сожалению, другой Arduino нет. :(

Сейчас залил скетч GLCDDemo  15 190 байт (из 258 048 байт максимум).  Заливается, работает.

P.S. Но в логах пишет: 

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0066
         0x00 != 0x4c
avrdude: verification error; content mismatch
avrdude done.  Thank you.
 
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

похоже чип подыхать изволил, завещание пора писать

jeka664
Offline
Зарегистрирован: 18.09.2014

Печально. :(

Буду пробовать выжимать из него что можно.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

попробуй снова залить большой скетч. тоже выдаст или нет

jeka664
Offline
Зарегистрирован: 18.09.2014

Тоже самое, но количество checksum error всегда разное. Возможно влияет виртуальная машина на которой запущена среда разработки. Вечером/утром попробую на физической ПК повторить.

avrdude: stk500v2_recv(): checksum error
avrdude: stk500v2_recv(): checksum error
avrdude: stk500v2_recv(): checksum error
avrdude: stk500v2_recv(): checksum error
avrdude: stk500v2_recv(): checksum error
avrdude: stk500v2_recv(): checksum error
avrdude: stk500v2_recv(): checksum error
avrdude: stk500v2_recv(): checksum error
avrdude: stk500v2_recv(): checksum error
avrdude: stk500v2_recv(): checksum error
avrdude: verification error, first mismatch at byte 0x0332
         0x10 != 0x00
avrdude: verification error; content mismatch
jeka664
Offline
Зарегистрирован: 18.09.2014

Проверил на физическом ПК. 

Все скетчи которые у меня есть (и большие и маленькие) заливаются без ошибок (без checksum error).

Но с моим скетчем какие-то проблемы.

Вот этот загружается нормально:

Размер скетча в двоичном коде: 7 834 байт (из 258 048 байт максимум)

#include <glcd.h>
//#include <avr/pgmspace.h>

static const uint8_t B[10][34] PROGMEM = {
{8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xFB, 0xF1, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xF8, 0xF4, 0x0E, 0x0E, 0x0E, 0x0E, 0x05, 0x03, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x00, 0x04, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF4, 0xF8, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0xFB, 0xF5, 0x0E, 0x0E, 0x0E, 0x0E, 0xF4, 0xF8, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xFB, 0xF5, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }};

static const uint8_t M[10][16] PROGMEM = {
{5, 16, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF},
{5, 16, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF},
{5, 16, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF},
{5, 16, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF},
{5, 16, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF},
{5, 16, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF},
{5, 16, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF},
{5, 16, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF},
{5, 16, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF},
{5, 16, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF}};

void DigitPrint(int type, int digit, int x, int y) //Вывод цифры по заданным координатам.
  {
    if (type == 0) GLCD.DrawBitmap(B[digit], x,y);    //Большие цифры
    if (type == 1) GLCD.DrawBitmap(M[digit], x,y);    //Большие цифры      {
  }

void SpeedPrint(float S) //функция вывода текущей скорости.
  {
    int s1, s2, s3, s4, s5;
    s5 = S*100;
    s4 = s5 - ((s5/10)*10);
    s3 = (s5/10) - ((s5/100)*10);
    s2 = (s5/100) - ((s5/1000)*10);
    s1 = (s5/1000) - ((s5/10000)*10);    

    DigitPrint(1, s4, 39, 9);
    DigitPrint(1, s3, 33, 9);
    DigitPrint(0, s2, 22, 9);
    DigitPrint(0, s1, 12, 9);
  }
  
void setup()
  {
    GLCD.Init();
    GLCD.ClearScreen();   
    SpeedPrint(36.12); //Вывод скорости.
  }

void loop()
  {
  }

А этот зависает:

Размер скетча в двоичном коде: 7 834 байт (из 258 048 байт максимум)

#include <glcd.h>
//#include <avr/pgmspace.h>

static const uint8_t B[10][34] PROGMEM = {
{8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xFB, 0xF1, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xF8, 0xF4, 0x0E, 0x0E, 0x0E, 0x0E, 0x05, 0x03, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x00, 0x04, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF4, 0xF8, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0xFB, 0xF5, 0x0E, 0x0E, 0x0E, 0x0E, 0xF4, 0xF8, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0xFB, 0xF5, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x0F, 0x17, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
{8, 24, 0xFE, 0xFD, 0x03, 0x03, 0x03, 0x03, 0xFD, 0xFE, 0x03, 0x05, 0x0E, 0x0E, 0x0E, 0x0E, 0xF5, 0xFB, 0x00, 0x10, 0x18, 0x18, 0x18, 0x18, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }};

static const uint8_t M[10][16] PROGMEM = {
{5, 16, 0xDE, 0x01, 0x01, 0x01, 0xDE, 0x03, 0x04, 0x04, 0x04, 0x03, 0xFF, 0xFF, 0xFF},
{5, 16, 0x00, 0x00, 0x00, 0x00, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF},
{5, 16, 0xC0, 0x21, 0x21, 0x21, 0x1E, 0x03, 0x04, 0x04, 0x04, 0x00, 0xFF, 0xFF, 0xFF},
{5, 16, 0x02, 0x21, 0x21, 0x21, 0xDE, 0x02, 0x04, 0x04, 0x04, 0x03, 0xFF, 0xFF, 0xFF},
{5, 16, 0x1F, 0x20, 0x20, 0x20, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF},
{5, 16, 0x1E, 0x21, 0x21, 0x21, 0xC0, 0x00, 0x04, 0x04, 0x04, 0x03, 0xFF, 0xFF, 0xFF},
{5, 16, 0xDE, 0x21, 0x21, 0x21, 0xC0, 0x03, 0x04, 0x04, 0x04, 0x03, 0xFF, 0xFF, 0xFF},
{5, 16, 0x00, 0x01, 0x01, 0x01, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF},
{5, 16, 0xDE, 0x21, 0x21, 0x21, 0xDE, 0x03, 0x04, 0x04, 0x04, 0x03, 0xFF, 0xFF, 0xFF},
{5, 16, 0x1E, 0x21, 0x21, 0x21, 0xDE, 0x00, 0x04, 0x04, 0x04, 0x03, 0xFF, 0xFF, 0xFF}};

void DigitPrint(int type, int digit, int x, int y) //Вывод цифры по заданным координатам.
  {
    if (type == 0) GLCD.DrawBitmap(B[digit], x,y);    //Большие цифры
    if (type == 1) GLCD.DrawBitmap(M[digit], x,y);    //Большие цифры      {
  }

void SpeedPrint(float S) //функция вывода текущей скорости.
  {
    int s1, s2, s3, s4, s5;
    s5 = S*100;
    s4 = s5 - ((s5/10)*10);
    s3 = (s5/10) - ((s5/100)*10);
    s2 = (s5/100) - ((s5/1000)*10);
    s1 = (s5/1000) - ((s5/10000)*10);    

    DigitPrint(1, s4, 39, 9);
    DigitPrint(1, s3, 33, 9);
    DigitPrint(0, s2, 22, 9);
    DigitPrint(0, s1, 12, 9);
  }
  
void setup()
  {
    GLCD.Init();
    GLCD.ClearScreen();   
    SpeedPrint(36.12); //Вывод скорости.
  }

void loop()
  {
  }

Разница между ними только в массиве M[][]. В первом случае залил в него фиктивные данные, во втором правильные. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

почему во втором массиве не 16 данных в строке а 15??? объявил же 16

jeka664
Offline
Зарегистрирован: 18.09.2014

Это моя невнимательность. Слишком много изменений и экспериментов :) 

Да. Там должно быть 16. Исправил. Но на результат это не повлияло.

Но! Нашел закономерность. Arduino не навиться последовательность 0x21, 0x21, 0x21 в массиве. Исправил на  0x21, 0x21, 0x11 все забегало. 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а ты в курсе что массив например на 16 элементов, а нумерация элементов от 0 до 15 а не от 1 до 16

jeka664
Offline
Зарегистрирован: 18.09.2014

Да. Это мы знаем.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

то что ардуине не нравится хз. как могут данные влиять на загрузку. 21 или 11 в массиве. бред честно сказать

глючное железо

jeka664
Offline
Зарегистрирован: 18.09.2014

Видимо да, глючит. Главное что сейчас все запустилось. Будем делать на том что есть. Спасибо за помощь!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

купи еще одну плату. пусть будет. а если уже железо глючит значит надо его выбрасывать, а то будешь искать черную кошку в черной комнате, особенно если ее там нет

MaksMS
Offline
Зарегистрирован: 11.03.2013

Мне попадалась китайская 328 с глючным флешем , на каком-то размере выдавало ошибку , ща на этом м/к зашит фьюз доктор и работает- там не требуется большой размер.. Тут похоже тоже на битый флеш микроконтроллера.. причем очень близко к началу..