Arduino для велосипеда

alex286
Offline
Зарегистрирован: 16.07.2012

Занимаюсь электротраспортом,  точне электровелосипедом ... Есть проблема в контрольно-измерительных приборах ... Хотелось бы видеть что-то одно,  а не кучу различных... Набрел случайно на интересный  проект  www.avdweb.nl/arduino/hardware-interfacing/nokia-5110-lcd.html.

Купил, Arduino Nano + указанный LCD. Установил программу, драйвера, попробовал примеры, все работает.. Загрузил в папку /Librates  библиотеку  с сайта (подправленную автором).   Cоединил по предложенной схеме, загрузил проект, пытаюсь компилировать....

 

#include <PCD8544.h>
#include <Streaming.h>
#include 

PCD8544 nokia = PCD8544(9, 10, 11); // 3 pin LCD control, SCLK, DN, D/C (CS, RST)

void setup(void) 
{ Serial.begin(9600);
Serial << F("Hello!\n");

nokia.init(49); // contrast = 49
nokia.clear();
nokia << "Hello!\n"; // without using F
nokia << F("Save RAM with the Flash library\n"); // use F to save RAM space
nokia.display();

//findBestContrast(45, 60);
}

Ругается....  

alex286
Offline
Зарегистрирован: 16.07.2012

Непосредственно страничка про  стенд для велосипеда http://www.avdweb.nl/solar-bike/hub-motor/motor-test-bench.html    и непосредственно ваттметр для контроля расхода емкости  аккумулятора   www.avdweb.nl/arduino/hardware-interfacing/e-bike-watt-meter.html

 

Zaliv
Offline
Зарегистрирован: 05.03.2011

 А саму библиотеку Streaming Вы положили в папку библиотек? скачать можно тут http://arduiniana.org/Streaming/Streaming5.zip

alex286
Offline
Зарегистрирован: 16.07.2012

Блин, как красиво все  это представленго.... А я так смогу?

По делу: Скачал, положил... теперь другое... Слушай, как мне это "взять" и положить в форум? 

<a><img src="http://i43.fastpic.ru/big/2012/0716/69/765e18d131ffaf32f7ef6106901dcb69.png"</a>  

Zaliv
Offline
Зарегистрирован: 05.03.2011
carduino.ru
Offline
Зарегистрирован: 06.12.2011

alex286 пишет:

Блин, как красиво все  это представленго.... А я так смогу?

По делу: Скачал, положил... теперь другое...  

А где главный цикл Loop ? 

maksim
Offline
Зарегистрирован: 12.02.2012

carduino.ru пишет:
А где главный цикл Loop ?

Нету, сп..здили )

 

Просто добавьте в конце строку 

void loop() {}

И будет вам счастье

 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

maksim пишет:

carduino.ru пишет:
А где главный цикл Loop ?

Нету, сп..здили )

 

Во первых, я не тебе отвечал. Во вторых, непонятно что ты хотел этим ответом сказать или показать?

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

alex286
Offline
Зарегистрирован: 16.07.2012

 Бинго... Скомпилировалось... И даже загрузилось...

НО на экране ничего нет, даже после нажатия кнопки "резет". А как  я понимаю, должна выскочить надпись, указанная в строке программе...

Выручайте, "есть мнение", что я не правильно припаял выходы...Смотрите, - на схеме используются ТРИ  "сигнальных" провода... , а вот куда они заводятся не указано  написано просто  "Arduino out"   

Принципиальная схема

Я предположил, что согласнно строки программы  PCD8544 nokia = PCD8544(9, 10, 11); // 3 pin LCD control, SCLK, DN, D/C (CS, RST), я должен соединить выводы  9,10,и 11 с  контактами LCD5110    с маркировкой  SCLK, DN, D/C (CS, RST)  соотвественно, то есть на плате Arduino Nano это контакты  D9,D10 и D11. Верно? 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

alex286 пишет:

 

Я предположил, что согласнно строки программы  PCD8544 nokia = PCD8544(9, 10, 11); // 3 pin LCD control, SCLK, DN, D/C (CS, RST), я должен соединить выводы  9,10,и 11 с  контактами LCD5110    с маркировкой  SCLK, DN, D/C (CS, RST)  соотвественно, то есть на плате Arduino Nano это контакты  D9,D10 и D11. Верно? 

Верно.
 

alex286
Offline
Зарегистрирован: 16.07.2012

 Мда... понятно...Будем думать...

Кстати  попробовал терминалом знаки "позагонять" подключаясь к СОМ-порту   ... ничего "не показывает"... экран "пуст"...что-то не так...

 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Скорость порта в терминале 9600? 

maksim
Offline
Зарегистрирован: 12.02.2012

carduino.ru пишет:

maksim пишет:

carduino.ru пишет:
А где главный цикл Loop ?

Нету, сп..здили )

 

Во первых, я не тебе отвечал. Во вторых, непонятно что ты хотел этим ответом сказать или показать?

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

Это была шутка - это раз. 

Попрошу не ТЫкать - это два.

Если понятно, то зачем спрашивать??? - это три.

А подсказка была адресована топик-стартеру - это 4.

Вопросы?

leshak
Offline
Зарегистрирован: 29.09.2011

Диклаймер: жуткий offtop

maksim пишет:

Вопросы?

В чем смысл жизни? ;)

Если чуть серьезней, то IMHO совершенно не нужно вам двоим собачится. Оба вы, судя по форуму, адекватные люди, оба не жалеете своего времени на помощь другим. Так что от выяснения "кто первый начал" - никто не выиграет.

Просто нужно учитывать что общение на форуме отсекает кучу невербальной информации (интонацию, выражения лица и т.п.), а это 80% информации при общении. И то что в обычной жизни было "легкой иронией", либо "чуть раздраженным ответом" тут может быть воспринято как "грубость офигительная". Да и к клавиатуре мы садимся все в разном настроении (но этого не видно), кто-то в раздаженном/занятом, кто-то в "чувтсво юмора пронизало меня от головы до пят". Но этого не видно другим.

Так что лучше, оба, спишите недопонимание друг-другу, на "не идеальный канал общения" да и дело с концом.

 

maksim
Offline
Зарегистрирован: 12.02.2012

leshak пишет:
В чем смысл жизни? ;)

В самой жизни )

leshak
Offline
Зарегистрирован: 29.09.2011

maksim пишет:

leshak пишет:
В чем смысл жизни? ;)

В самой жизни )

Что-бы понять рекурсию нужно понять рекурсию ;)

alex286
Offline
Зарегистрирован: 16.07.2012

 Да ладно вам "собачиться"... по делу-то что скажете? Где посмотреть?

P.S. Оттого, что "не работает" начинают мучить разные сомнения, в том числе и это замечание в конце статьи,- 

"3. Notes The PCD8544 LCD driver may be damaged if not properly reset."

leshak
Offline
Зарегистрирован: 29.09.2011

На всяк случай, а остальные выходы, которые не "Arudino Out" (VCC,GND, SCE,LED) подключили как на схеме?

alex286
Offline
Зарегистрирован: 16.07.2012

 Ну, дык естессссттвеннно!!! Индикатор сияет белым светом (именно стакой подсветкой заказал)...

Но все равно мне кажется, что что-то не так... Я хоть и "электронщик" (именно в кавычках), но с языками программирования скорее на бумаге, нежели на самом деле..С ассемблером как-то общался, вполне удачно.. Но там как мне кажется проще..   

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

alex286
Offline
Зарегистрирован: 16.07.2012

 Есть реакция... При подключенном терминале, по нажатию кнонки "Reset" на экран выводится сообщение "Hello!" :)

Правда это все прописано в программе... :(

И еще попробовал пример с библиотекой по ссылкам, то есть  с Adafruit-PCD8544-Nokia-5110-LCD-library

Тав вот библиотека не грузится вообще со словами.... И что это????? 

 

leshak
Offline
Зарегистрирован: 29.09.2011

 

alex286 пишет:

Ну, дык естессссттвеннно!!! Индикатор сияет белым светом (именно стакой подсветкой заказал)...

Вы не представляете какие глупые ошибки бывают. Причем даже у опытных. А когда 12-ть часов бьешься над какоим-то заглюком, найдешь кучу нетривиальных "подводных камне", то совсем не сложно учудить что-то что самому потом на голову не налазит.

По поводу "другого подключения", а смысл (если ноги камня не попалены)?

Я бы еще попробовал оригинальную библиотеку упоминаему в статье, а не "поправленную" автором статьи (на нее там тоже есть ссылка, на github). По крайней мере, лично мне, она больше доверия внушает. Так как у нее "дергание пинами" сделанно напрямую через порт, а значит выше "сихронность" дергание пинами.

И еще, возможно (совсем не уверен), погуглить что-то на тему PullUp резисторов для SPI. Но это уже скорее из серии "что-бы что-то посоветовать".

leshak
Offline
Зарегистрирован: 29.09.2011

alex286 пишет:

 

Тав вот библиотека не грузится вообще со словами.... И что это????? 

 

ну ровно то что написанно. Не нравится ему дефисы в имени папки куда положели библиотеку.

В ридми кстати, написано rename the uncompressed folder Adafruit_PCD8544  

Так что просто переименуйте папку в что-то более удобоваримое.

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

alex286
Offline
Зарегистрирован: 16.07.2012

Ну это собственно понятно... переименовывал...закачивал снова... у меня Ubuntu + Virtualbox c "виндой"...думал может кодировка лажает при монтировании дисков...нет.. тажа лажа...

P.S. Я вот попробовал, вместо версии 1.0.1, запусить все в  23-ей (последней)... так не компилится пример-то..вообще... Пишет "'F' was not declared in this scope!"  В этой версии поменялось что-то??

Копаю еще в основной схеме ваттметра программа несколько другая, но прри объявлении портов картина немного не та... может действительно ошибка посмотрите...

#include <PCD8544.h>
#include <Streaming.h>
#include <PString.h>
#include <FreqPeriodCounter.h>
#include <Albert.h>
#include "WattMeter.h"
 
// PINS
const byte Upin = 0;
const byte Ipin = 1;
const byte wheelSpeedPin = 2;
const byte wheelInterrupt = 0; // = pin 2
 
#include <PCD8544.h>
#include <Streaming.h>
#include <PString.h>
#include <FreqPeriodCounter.h>
#include <Albert.h>
#include "WattMeter.h"
 
// PINS
const byte Upin = 0;
const byte Ipin = 1;
const byte wheelSpeedPin = 2;
const byte wheelInterrupt = 0; // = pin 2
 
// DEFINITIONS
#define wheelCircumference 2.16
#define debounceTime_ms 1 // pulse > 3ms
#define msPerSec 1023 // calibration for ATtiny
#define numberOfMagnetsPerWheel 1
#define wheelTimeOut_ms 2000
#define PiezoBuzzerFreq 2400
#define LCDupdate_ms 500 
#define LCDmaxChar 100 
// Compile time calculations
const float k = (float)3600 * wheelCircumference / numberOfMagnetsPerWheel; // kmh = k / period
 
char LCDbuffer[LCDmaxChar];
PString pString(LCDbuffer, sizeof(LCDbuffer));
 
PCD8544 lcd = PCD8544(10, 11, 12); // 3 pin LCD control, SCLK, DN, D/C
FreqPeriodCounter wheelSpeed(wheelSpeedPin, millis, debounceTime_ms);
WattMeter wattMeter;
 
void setup(void) 
{ Serial.begin(9600);
  lcd.init(49); // contrast
  lcd.clear(); 
  attachInterrupt(wheelInterrupt, wheelISR, CHANGE);
}
 
void loop(void) 
{ static unsigned long lastLCDms;
  wattMeter.movingAverage();
  if(millis() - lastLCDms > LCDupdate_ms)
  { lastLCDms = millis();
    wheelSpeed.poll();
    displayLCDandScreen(); 
  }
}
 
void wheelISR()
{ wheelSpeed.poll();
}

 

leshak
Offline
Зарегистрирован: 29.09.2011

alex286 пишет:

Ну это собственно понятно... переименовывал...закачивал снова... у меня Ubuntu + Virtualbox c "виндой"...думал может кодировка лажает при монтировании дисков...нет.. тажа лажа...

Ну на скришоте что вы дали переименовывания явно нет. Попробуйте переименовать во что-то где вообще ничего кроме букв и цифр нет. Ни дефисов, ни пробелов. 

Иногда еще бывают проблемы когда само arduinoIDE установленно в папку с русскими именами в пути (не только папка ардуины, и "что-то повыше" может помешать).

 

alex286 пишет:

 

P.S. Я вот попробовал, вместо версии 1.0.1, запусить все в 23-ей (последней)... так не компилится пример-то..вообще... Пишет "'F' was not declared in this scope!" В этой версии поменялось что-то??

Да. Это только в свежих появилось. Вообще весь синтаксис типа <<

"По старому", нужно писать типа nokia.Print("Hello");, а при выводе строк "из флеша" тоже отдельно нужно выкаблучиватся (не готов сразу сказать "как", пусть вначале хоть обычный строки в памяти заработают).

leshak
Offline
Зарегистрирован: 29.09.2011

 

alex286 пишет:

Копаю еще в основной схеме ваттметра программа несколько другая, но прри объявлении портов картина немного не та... может действительно ошибка посмотрите...


Да собственно вроде та же картина. Просто на чуть другие пины повесили 10,11,12 вместо 9,10,11   

Можете, конечно и вы так попробовать  (раз ничего другое не помогает) но я разницы не улавливаю.

И вообще, я как-то не понял у вас же оно вроде заработало.

alex286 пишет:

"по нажатию кнонки "Reset" на экран выводится сообщение "Hello!"

alex286
Offline
Зарегистрирован: 16.07.2012

да нет... Это самое "Hello" пишет программа в ТЕРМИНАЛЕ! В соответствии с первой строкой программы... Serial << F("Hello!\n"); и только. "Нокиевская либра" не хочет работать... P.S. Перепаял выводы, "не пашет", поменял коды в программе, все равно не пашет... :(

Добавление... Хе-хе ... есть новости... Скомпилировал полностью сам ваттметр....

На экране по прежнему нет ничего, а вот в терминал исправно сыпет данные.... (privet - это я написал)

И еще: Судя по этому www.sparkfun.com/tutorials/300   мануалу, то я его просто спалил...  

alex286
Offline
Зарегистрирован: 16.07.2012

 Собственно видимо этого надо было ожидать... после смены индикатора (купил не один) получил вот такую картину.. радости не было предела... НО не долго... после загрузки скетча  ваттметра... уже ничего не увидел, только "грязный" экран... Полез разбираться тестером, что там на ногах... то-ли замкнул, то-ли перемкнул...короче напруга упала до 2,7 вольт, вместо 4,4 которые были до этого...питание "тусклое"... Даигрался?  Ардуиина ёёк?  

 

usr-bin
Offline
Зарегистрирован: 04.09.2012

Здравствуйте.

Имею дисплей 5110, использую библиотеку PCD8544-1.4. Тестирую на Arduino Nano v.3.0, подключаю проводочками типа "мама" на контакты типа "папа". (Собственно, думаю, дело не в МК, не в библиотеке, а в подключении.)

При выводе текста на дисплей, фон заливается черным и текст вывода можно только угадывать (еле-еле-видно)

Питание подключаю 5 В, т.к. на обороте дисплея указано "3 ~ 5 v".  При подключении контата + экрана к +3,3В, вместо 5В на Ардуине - темность фона снижается, позволяя уверенно читать текст при наклонах экрана вверх и вниз (под малым углом взгляда к плоскости экрана).

 

Когда месяца два тестил вывод информации на этот же дисплей, но подключал к ардуине (там контаткы типа "мама") обычными одножильными проводами от UTP - контакт был очень плохой. Но что удивительно, тщательно перешевилив все контакты, у меня получалось получить изображение практически без фонового зачернения.

 

Предпологаю, что дело в неком электрическом перекосе уровней напряжения. А в чем именно, сообразить не могу.

Подскажите пожалуйста в чем дело и как избежать черности фона ?

usr-bin
Offline
Зарегистрирован: 04.09.2012

Посчитал что такого качества для тестового вывода мне хватит. Переделал  устройство на чип atmega8a. Экран совсем темный и буквы не просвечивают.

Но: во время экспериментов с добавлением резисторов в разрыв плюса питания (150,300 Ом ничего не дают, от 1кОм питания не хватает), при замыкании-размыкании плюса питания на плюс питания atmeg'и - заметил, что при подключении - сперва появляется текст и лишь потом, через долю секунды черный экран.

Ошибок в коде не вижу, на всякий случай привожу листинг. (жаль тут нет тега спойлер)

(устройство выдает меандр нужной частоты  на одну из ног МК в зависимости от положения переменного резистора. Нужно для радиолюбительских тестов с частотами).

/*
  Blink
 Turns on an LED on for one second, then off for one second, repeatedly.
 
 This example code is in the public domain.
 */

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
#define led  13
#define pin_meandr 4
unsigned long  meandr;
#define analogPin A0





#include <PCD8544.h>


// A custom glyph (a smiley)...
static const byte glyph[] = { 
  B00010000, B00110100, B00110000, B00110100, B00010000 };


static PCD8544 lcd;


//unsigned long time_opros;
// the setup routine runs once when you press reset:
void setup() {  
  Serial.begin(9600);  

  // PCD8544-compatible displays may have a different resolution...
  lcd.begin(84, 48);

  // Add the smiley to position "0" of the ASCII table...
  lcd.createChar(0, glyph);

  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);
  pinMode(pin_meandr, OUTPUT);     
  //meandr=2^analogRead(pin_opros); 
  //    meandr = analogRead(analogPin);     // считываем значение
  int ap=map(analogRead(analogPin),13,931,1,25000); 
  meandr = 1000000/map(analogRead(analogPin),13,931,1,25000);     // считываем значение
  Serial.print("    ap= ");  
  Serial.println(ap); 
  Serial.print("meandr= ");  
  Serial.println(meandr); 

  // Write a piece of text on the first line...
  lcd.setCursor(0, 0);
  lcd.print("ap= ");
  lcd.print(ap, DEC);

  lcd.setCursor(0, 1);
  lcd.print("meandr= ");
  lcd.print(meandr, DEC);
delay(5000);
  // Write the counter on the second line...
  /* 
   lcd.setCursor(0, 1);
   lcd.print(counter, DEC);
   lcd.write(' ');
   lcd.write(0);  // write the smiley
   */
}

// the loop routine runs over and over again forever:
void loop() {
  // выводим полученное значение
  //delay(100);
  if (meandr > 4000){
    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
    digitalWrite(pin_meandr, LOW);   // turn the LED on (HIGH is the voltage level)
    delay(meandr/1000);
    //  delay(meandr);               // wait for a second
    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
    digitalWrite(pin_meandr, HIGH);   // turn the LED off by making the voltage LOW
    delay(meandr/1000);           // wait for a second
    //tone(led, meandr);
  }
  else
  {
    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
    digitalWrite(pin_meandr, LOW);   // turn the LED on (HIGH is the voltage level)
    delayMicroseconds(meandr);
    //  delay(meandr);               // wait for a second
    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
    digitalWrite(pin_meandr, HIGH);   // turn the LED off by making the voltage LOW
    delayMicroseconds(meandr);           // wait for a second

  }
}

 

usr-bin
Offline
Зарегистрирован: 04.09.2012

приведу еще подключение дисплея: (MK - atmega8a)

 

RST - PD2 == pin 2

CE  - pin 3

DC - PB5 = pin 13 (SCK) // ну вот и разобрался, я же там в коде 13тым пином подмаргиваю... погляжу. Правда, дисплей кажет только в сетупе, потом 5 сек пауза, а манипуляции с 13 портом только в лупе начинаются. В общем погляжу, уберу лишнее.

Din - PB4 - pin 12 (MISO)

Clk - PB3 - pin 11 (MOSI)

Vcc - +5 через резистор 150 Ом

HL - не подключен (подсветка)

GND - общий провод (минус, GND).

 

кусок кода из библиотеки PCD8544, там , где объявляются порты взаимодействия с дисплеем (моси, мисо, сцк - мои подписи, что бы не запутатся):

        // All the pins can be changed from the default values...
        PCD8544(unsigned char sclk  = 11,   /* clock       (display pin 2)      MOSI    */
                unsigned char sdin  = 12,   /* data-in     (display pin 3)      MISO    */
                unsigned char dc    = 13,   /* data select (display pin 4)      SCK     */
                unsigned char reset = 2,   /* reset       (display pin 8) */
                unsigned char sce   = 3);  /* enable      (display pin 5) */

Пока писал, натолкнулся на мысль на счет 13 светодиода.

--

после перевода индикационного пина с 13 на 5й (ближайший свободный), проблема совсем чёрного экрана (когда совсем ничего не видно, т.к. всё черное) изчезла и вернулась старая знакомая проблема - когда читать сложно, но можно.

И снова заметил эффект (перебирая номиналы резисторов в разрыв +5 питания LCD), изображение иногда работает как надо - чистый текст без фона или с еле-заметным легким потемнением оного, после отключения и подключения провода. Причем эффект проявляется только когда контакт не припаян, а лежит на другом. Эффект может пропадать и появлятся, если шевелить провода.

После припаивания контактов, какие-то изменения фона изчезают и фон экрана становится стабильно темным.

 

И в итоге я снова сомневаюсь, программная проблема или аппаратная.

maksim
Offline
Зарегистрирован: 12.02.2012

Дайте ссылку на библиотеку, те ссылки что выше обе на дисплей.

usr-bin
Offline
Зарегистрирован: 04.09.2012

Исправил. Дублирую: PCD8544-1.4

П.С. На atmega8a уже никаких штырьковых контактов - везде пайка.

maksim
Offline
Зарегистрирован: 12.02.2012

Первое что я бы сделал это попробовал заменить lcd.begin(84, 48); на

lcd.begin(84, 48, CHIP_ST7576); 

 

usr-bin
Offline
Зарегистрирован: 04.09.2012

Вспомнил, что изменял в коде библиотеки .h подобную надпись:

// Chip variants supported...
#define CHIP_PCD8544 0
#define CHIP_ST7576  1

1) вернул как было (а было, как процитированно выше) - не помогло, все осталось так же.

2) с возвращенным как было - добавил строчку "lcd.begin(84, 48, CHIP_ST7576);" в скетч, а старую закомментил - экран LCD стал совсем черным.

3) раскомментил старую запись, закомментил новую (lcd.begin ... ). Сквозь темность фона стали проглядывать буквы текста. Т.е. ситуация вернулась к начальному состоянию.

 

П.С. Ложусь спать, ибо у нас уже 4 утра, а я еще не ложился.

maksim
Offline
Зарегистрирован: 12.02.2012

В файле PCD8544.cpp находите данный кусок кода, комментируете условие if (model == CHIP_ST7576) и добавляете выделенные строки и перебераете значения контроля температуры и контрастности:

    // Set the LCD parameters...
    this->send(PCD8544_CMD, 0x21);  // extended instruction set control (H=1)
    this->send(PCD8544_CMD, 0x13);  // bias system (1:48)

   /* if (model == CHIP_ST7576) {
        this->send(PCD8544_CMD, 0xe0);  // higher Vop, too faint at default
        this->send(PCD8544_CMD, 0x05);  // partial display mode
    } else {
        this->send(PCD8544_CMD, 0xc2);  // default Vop (3.06 + 66 * 0.06 = 7V)
    }*/

	this->send(PCD8544_CMD, 0x05); // температурный контроль, диапазон значений от 0x04 до 0x07
	this->send(PCD8544_CMD, 0xA0); // контрастность, диапазон значений от 0x80 до 0xFF

    this->send(PCD8544_CMD, 0x20);  // extended instruction set control (H=0)
    this->send(PCD8544_CMD, 0x09);  // all display segments on

 

usr-bin
Offline
Зарегистрирован: 04.09.2012

Первое значение начинается не с 04. на этом значении - постоянная ошибка компиляции.

 

Взял "05","06" и "07" для первой строчки и "81" "90" "A0" "B0" "C0" "D0" "E0" "EF" "FF" для второй.

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

 

А что, внутри дисплея еще и термометр есть? А с него температуру можно считывать?

maksim
Offline
Зарегистрирован: 12.02.2012

Вроде как есть какой-то термокомпенсатор, температуру врядли с него можно считать, да и думаю точность у него никакая.

usr-bin
Offline
Зарегистрирован: 04.09.2012

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

Ваши строчки не помогли, с ними в любом из значений (опробовал штук 10 значений из разных ключевых точек (начало, середина, конец и т.п.)). С ними изображения вообще никакого не было. Просто чистый экран.

Перебирая варианты, глаз зацепился за строчку выше в библиотеке. (см.цитату, строка 6). Я между тестами погуглил и наткнулся что у некоторых дисплеев есть ножка Vop, отвечающая за контраст (напряжение, которое надо подстраивать под температуру).

Так вот, в той строчке есть комментарий, содержащий это обозначение.


    if (model == CHIP_ST7576) {
        this->send(PCD8544_CMD, 0xe0);  // higher Vop, too faint at default
        this->send(PCD8544_CMD, 0x05);  // partial display mode
    } else {

        this->send(PCD8544_CMD, 0x9a);  // default Vop (3.06 + 66 * 0.06 = 7V)
        //this->send(PCD8544_CMD, 0xc5);  // default Vop (3.06 + 66 * 0.06 = 7V)
    }

//       this->send(PCD8544_CMD, 0x04);  //888888 температурный контроль, диапазон значений от 0x04 до 0x07
//       this->send(PCD8544_CMD, 0x80);  //999999 контрастность, диапазон значений от 0x80 до 0xFF

Я начал перебирать значения этой строчки в большую... не пошло, в меньшую сторону.. и.. после десятка значений дело сдвинулось с мертвовой точки. Сначала не явно, еле заметно, а потом сильнее фон стал бледнеть. Сейчас я дошел до значения b2 и текст выглядит так, что видно в лоб. Фон примерно в два раза бледнее текста. Еще фон немного подмаргивает, будто не знает к какому значению ему приходить.

Двигаюсь дальше.

 

maksim
Offline
Зарегистрирован: 12.02.2012

Вообще-то это тоже самое и есть, просто закоментировал лишее.

usr-bin
Offline
Зарегистрирован: 04.09.2012

 Благодарю вас за подсказку и наводку, которые привели меня к искомой цели. И приведут кого-нибудь еще.

 

Нашел подходящее значение - aa. Причем до него и после него есть некие "полосы", на протяжении которых экран был просто пустой.

Для a0 текст уже слегка сложно читается. В общем, я свой диапазон "поймал". Надеюсь, приведенная информация поможет кому-то еще. Так просто, доступной информации в инете я не нашел. Доступной физически и по восприятию.

usr-bin
Offline
Зарегистрирован: 04.09.2012

Вставка дисплея куда-либо с применением физической силы нарушает настройку контраста (экран может стать куда темнее). Не повторяйте моей ошибки.

Nixoid
Nixoid аватар
Offline
Зарегистрирован: 16.09.2011

Хех.

Я тоже мучался - при смене платы с 3,3 на 5 вольт.

Черный фон - едва едва видно текст. 

А потом подключил сигнальные ноги через делитель на резисторах (1,0КОм и 1,5КОм) и вуаля.

Сам дисплей питаеться от 3,3 через модуль Kis3R33.

 

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Вообщем пробуя вот эту библиотеку http://http://www.arduino.cc/playground/Code/PCD8544,тоже столкнулся с темным экраном при 5вольтах питания,обошел софтово этот глюк-изменив настройки контрастности 

 LcdWrite(LCD_CMD, 0x21);  // LCD Extended Commands.
  LcdWrite(LCD_CMD, 0xB6);  // Set LCD Vop (Contrast). //B1
  LcdWrite(LCD_CMD, 0x06);  // Set Temp coefficent. //0x04
  LcdWrite(LCD_CMD, 0x14);  // LCD bias mode 1:48. //0x13
  LcdWrite(LCD_CMD, 0x0C);  // LCD in normal mode. 0x0d for inverse