LCD 128x64 и MEGA2560. Зажгём?

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Клапауций пишет:
При каком раскладе?

При любом раскладе  SUT - 01, 00, 10, 11, на скрине выделил.

Клапауций пишет:
фьюзы писать напамять вкуда угодно в HEX-формате,

Можете немного посмеятся, но я не знаю что такое НЕХ-формат

Клапауций пишет:
Откуда я знаю, если вы сами не помните, фьюзы

В последнем скрине я выделил в рамку все возможные варианты при CKSEL = 1000. Это внешняя RC цепь.

А что такое внешняя RC цепь? если это то что я думаю, то, как я понимаю, ввиду моих последних достижения я смогу оживить атмегу16 подав 8,0 от атмеги32 т.к. атмега32прошита под внутренний на 8,0?

Клапауций
Offline
Зарегистрирован: 10.02.2013

Я выдал все рекомендации ещё здесь http://arduino.ru/forum/programmirovanie/lcd-128x64-i-mega2560-zazhgem#comment-29357 - далее идут бессмысленные препирательства.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Пробую залить простой скетчь на мегу32. Компелирует без проблем. При попытке загрузить пишет:

 avrdude: stk500_getsync(): not in sync: resp=0x00.

?????

hugoboss317
Offline
Зарегистрирован: 21.03.2013

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








#include <glcd.h>
#include "The16/allThe16x64.h"
#include "fixednums15x31.h"
#include "new_Font.h"
#include <OneWire.h>

byte degree[8] = 
{
  B00110,
  B01001,
  B01001,
  B00110,
  B00000,
  B00000,
  B00000,
  B00000
};

const int sensor_1Pin = 25;
const int sensor_2Pin = 17;

   float tc_saved; 
   boolean f_saved = false;
   
 float tc2_saved;  //для второго датчика
 boolean t_saved = false;
 
void setup() { 
  
  GLCD.Init();
  GLCD.ClearScreen();

}
 void loop() {
   
   GLCD.SelectFont(fixednums15x31);
   OneWire ds1(sensor_1Pin);
   
   
  byte data[12];
  byte addr[8];
  if(!ds1.search(addr)) {
    ds1.reset_search();
    delay(500);
    return;
  }
  ds1.reset();
  ds1.select(addr);
  ds1.write(0x44, 1);
  delay(1000);
  ds1.reset();
  ds1.select(addr);
  ds1.write(0xBE);
  for(byte i = 0; i < 9; i++)
    data[i] = ds1.read();
    unsigned int raw = 
    (data[1] << 8) | data[0];
  byte cfg = (data[4] & 0x60);
  if (cfg == 0x00) raw <<= 3; 
  else if (cfg == 0x20) raw <<= 2; 
  else if (cfg == 0x40) raw <<= 1;
  float tc = (float)raw / 16.0;
  
   GLCD.CursorToXY(24, 8);
  if(tc < 0.0) GLCD.print(tc, 1);
  else {
     GLCD.print('+');
     GLCD.print(tc, 1);
  }     
    f_saved = true;
  tc_saved = tc; 
   
}

вот для второго





#include <glcd.h>

#include "new_Font.h"
#include <OneWire.h>
const char celsius[] =
  { 39, 'C', };
byte degree[8] = 
{
  B00110,
  B01001,
  B01001,
  B00110,
  B00000,
  B00000,
  B00000,
  B00000
};


const int sensor_2Pin = 17;

   float tc2_saved; 
   boolean t_saved = false;
 
void setup() { 
  
  GLCD.Init();
  GLCD.ClearScreen();

}
 void loop() {
   
   OneWire ds2(sensor_2Pin);
   GLCD.SelectFont(new_Font);
  
   byte data[12];
  byte addr[8];
   if(!ds2.search(addr)) {
    ds2.reset_search();
    delay(500);
    return;
  }
  ds2.reset();
  ds2.select(addr);
  ds2.write(0x44, 1);
  delay(1000);
  ds2.reset();
  ds2.select(addr);
  ds2.write(0xBE);
  for(byte i = 0; i < 9; i++)
    data[i] = ds2.read();
    unsigned int raw = 
    (data[1] << 8) | data[0];
  byte cfg = (data[4] & 0x60);
  if (cfg == 0x00) raw <<= 3; 
  else if (cfg == 0x20) raw <<= 2; 
  else if (cfg == 0x40) raw <<= 1;
  float tc2 = (float)raw / 16.0;
   GLCD.ClearScreen();
   GLCD.CursorToXY(55, 48);
  if(tc2 < 0.0) GLCD.print(tc2, 1);
  else {
     GLCD.print('+');
     GLCD.print(tc2, 1);
  } 
  GLCD.CursorToXY(110, 48);
  GLCD.print(celsius);
    t_saved = true;
  tc2_saved = tc2; 
  
 

}

 

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Вопрос снимаю, справился!

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Нужна помощь в паре проблем по ЖКИ128х64 на ST7920.

Пока что занимаюсь его тестированием. На первых прарах поражён принципиальной разницей в использовании библиотеки U8G в ставнении с GLCD. 

1.Для начала пытаюсь найти команду эквивелентную GLCD.ClearScreen(); в одноимённой библиотеке. 

Устраивает то, что подключение конфигурируется прямо в скетче но не до конца понятно... Вот как получается:

 при конфигурации 

U8GLIB_ST7920_128X64_4X u8g(28, 26, 24); //ключевое тут Х4

если при такой комбинации вывести показания ниже 32-й строки то получается :

выводит только верхнюю половину.(((

Если оставить вверху но Х4 заменить на Х1, получается 

а если спустить ниже строки 32 при Х1 то:

2. Что это за Х4 и Х1? от них как то уйти можно. Я просматривал тему по шрифту к такому дисплею. Там есть пример, включается без этих иксов, но у меня не получается, пустой экран.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

hugoboss317
Offline
Зарегистрирован: 21.03.2013

в описании вроде как контроллер ST7920, да и сэмплы отображаются правельно, всё чётко и красиво и при любых Х1 или Х4

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Нужна, очень нужна любая библиотека для ST7920 кроме u8glib. Я с такой тормознутой ничего не могу сделать, такой приметив. Выдел вроде как получалось перевести glcd под такой контроллер, не могу найти.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

ещё вопрсик:

  if (e>1) {e = 0; c = 4;}  //"1" включение, остальное "0", выключено
    if(t_diff >= 4 && e == 1) c = 3;  //максимальная разница
    if(t_diff >=1.6 && t_diff < 4 && e == 1) c = 2; //средняя разница
    if(t_diff < 1.6 && e == 1) c = 1; //минимальная разница
    if(t_diff <= 0.0 && e == 1) c = 0;  // нулевое значение

почему переменная "с"типа float (сначала был int )принимает значение "0" усли "t_diff" не меньше и не равна "0"

Geronimo
Offline
Зарегистрирован: 06.05.2013

могу предположить,что e = 0;

c не инициализирована до ифов

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Так и не разобрался, "с" вводил вначале кода, "е" была еденичка (она на экране между стрелками). Вобщем переписал большую часть кода и эту тоже (е заменил на on)

if(on == 1){
    if(t_diff >= 3) c = 3;                 //максимальная разница
    if(t_diff < 3 && t_diff >= 1.5) c = 2; //средняя разница
    if(t_diff < 1.5  && t_diff >= 0.9) c = 1; //минимальная разница
    if(t_diff <=0) c = 0;              //Достигнуто заданое значение Т
      }