Проблемы с дисплеями 128х64

Makkov
Offline
Зарегистрирован: 23.11.2014

Ребята!

Подскажите, в чем может быть проблема. Имеется два дисплея, синий 12864В V2.0 и зеленый 12864ZW. 

Подключаю их поочередно к ардуине мини. Залил простой скетч, с датчиком давления ВМР180, и на обоих дисплеях, периодический, вижу кривые цифры переменных. Пробовал менять библиотеки, шрифты, бесполезно. Подключал и по последовательному, и паралельному, все также. Может кто-то сталкивался с такой проблемой?

Что-то фото всавить не могу.

#include <U8glib.h>
#include <Wire.h>
#include <BMP085.h> 
U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE);
// Инициализируем объект-экран, определяем пины для работы с экраном
BMP085 dps = BMP085();
long Temperature085 = 0, Pressure085 = 0, Altitude085 = 0;
void setup()
{
dps.init();
}
 
void loop (){
  u8g.firstPage();
do 
{ 
dps.getTemperature(&Temperature085);
dps.getPressure (&Pressure085);

 u8g.setFont(u8g_font_fub17);
u8g.setPrintPos(4, 20); 
u8g.print("mm:"); 
u8g.print(Pressure085/133.3); 
u8g.setFont(u8g_font_fub14);
u8g.setPrintPos(4, 40);
u8g.print("t="); 
u8g.print(Temperature085*0.1); 
delay(1000);
}
while(u8g.nextPage());  
}  

 

 

 

 
NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Мне кажется нужно дробные цифры предварительно преобразовать в строку или хотябы приведение типов данных использовать.

Дело в том что язык С не определяет автоматически тип данных. В строках 23 и 27 у вас ерунда полнейшая.

Makkov
Offline
Зарегистрирован: 23.11.2014

А можно поподробней, что в них не правильно?  С дисплеем 1602 это все работает. А тут при обновлении может показать правильно, а может показать половина 4 ки, и половина 5 ки, или вллбще не понятно что.

pav2000
Offline
Зарегистрирован: 15.12.2014

Я использую  аппаратный  SPI и увеличенный буффер для увеличения скорости

U8GLIB_ST7920_128X64_4X u8g(PIN_SPI_SS1);          // Используем аппартный SPI но память минус 370 байт (увеличенный буфер на 4)скорость увеличиваетс

 

Makkov
Offline
Зарегистрирован: 23.11.2014

Спасибо большое за подсказку!

Заработала!

Всего лишь поменял 1 на 4. Я пробовал с еденицей, не работало.

U8GLIB_ST7920_128X64_1X u8g(10,11,12,  U8G_PIN_NONE);

U8GLIB_ST7920_128X64_4X u8g(10,11,12,  U8G_PIN_NONE);

Makkov
Offline
Зарегистрирован: 23.11.2014

Ребята!

Помогите, кто в курсе, с проблемой. Заливаю простой скетч тахометра, с дисплеем 1602, и датчиком холла, все работает. Меняю дисплей, на 12864, не получается. Что-то с прерыванием. Хотя смена дисплея с барометром, все получилось. Подскажите, где ошибка в скетче?

#define RPMpin 2 // датчик Холла
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,6,5,4,3);
long microsold = 0;
int rpm = 0;

void setup() {

lcd.begin(16, 2);
lcd.print("initializing");
delay(1000);
lcd.clear();
digitalWrite(RPMpin, 2);
attachInterrupt(0, RPM, FALLING);
}
void loop() {
delay(100);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(rpm,DEC);

delay (1000);
}
void RPM ()
{
rpm = (1000000.0/(micros() - microsold))*60;
microsold = micros();
}

 Работает

 

  #define RPMpin 2 // датчик Холла
//#include <LiquidCrystal.h>
//LiquidCrystal lcd(12,11,6,5,4,3);
#include "U8glib.h"
U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE);
long microsold = 0;
int rpm = 0;

void setup() {

//lcd.begin(16, 2);
//lcd.print("initializing");
//delay(1000);
//lcd.clear();
digitalWrite(RPMpin, 2);
attachInterrupt(0, RPM, FALLING);
}
void loop() {
   u8g.firstPage();
do
{ 
delay(100);
//lcd.clear();
//lcd.setCursor(0, 0);
u8g.setFont(u8g_font_7x13);
u8g.setPrintPos(2, 22);
u8g.print(rpm,DEC);

delay (1000);
}
void RPM ()
{
rpm = (1000000.0/(micros() - microsold))*60;
microsold = micros();
}
while(u8g.nextPage());  
}  

Не работает