Помогите пожалуйста подключить дисплей от Siemens A70 к Arduino!

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

Я посмотрел исходник, который, очевыдно, Вы пытаетесь вывесть. Если это из примера

//...
LcdsetFont(font_5x5);
    LcdGotoXY(0, 0);
    LcdPrint("1234567890abcABCD\n", ON, 1);
    LcdsetFont(font_5x8);
    LcdPrint("1234567890abcdабв\n", ON, 1);
    LcdsetFont(font_7x15);
    LcdPrint("1234567890\n", ON, 1);
    LcdsetFont(font_10x16);
    LcdPrint("012345678", ON, 1);
//...

то всё дело, как я и предпологал в адресации банков.

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

Разница у экранов Nokia и Siemens больше чем я думал.

Вывод данных у обоих экранов идёт с права на лево, но у Siemens с верху в низ, а у Nokia, очевидно, в низу вверх.

Придётся немного поколдовать

 

 

Genri5
Offline
Зарегистрирован: 31.05.2016

hugoboss317 пишет:

Я посмотрел исходник, который, очевыдно, Вы пытаетесь вывесть. Если это из примера

//...
LcdsetFont(font_5x5);
    LcdGotoXY(0, 0);
    LcdPrint("1234567890abcABCD\n", ON, 1);
    LcdsetFont(font_5x8);
    LcdPrint("1234567890abcdабв\n", ON, 1);
    LcdsetFont(font_7x15);
    LcdPrint("1234567890\n", ON, 1);
    LcdsetFont(font_10x16);
    LcdPrint("012345678", ON, 1);
//...

то всё дело, как я и предпологал в адресации банков.

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

Разница у экранов Nokia и Siemens больше чем я думал.

Вывод данных у обоих экранов идёт с права на лево, но у Siemens с верху в низ, а у Nokia, очевидно, в низу вверх.

Придётся немного поколдовать

 

 

Да так оно и есть. Я пытался что-то из графики, но похожая ситуация и действительно как- то шиворот на выворот :-). Вот попробовал вывести рамку:

  #include <PCF8812_new.h> 
 void setup(){
  LcdInit(6, 7, 5, 3, 4);  //CS, RESET, D/C, CLK, DATA
}
void loop(){
  LcdPageONE();
  do{
  LcdRect (0, 0, 95, 64, ON);
}
 while(LcdPageTWO());
  delay(1000);
}

напечатало вот так :

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

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

Делаем следующее:

Примерно на строчке 103 в файле .cpp есть такое дело:

		case 3: step = 0; break;       
		case 2: step = 3; break;       
		case 1: step = 6; m = 2; break;

Меняем на 

		case 3: step = 5; break;       
		case 2: step = 2; break;       
		case 1: step = 0; m = 2; break;

Дальше по тексту меняем:

for(b = 0; b < m; b++){

на 

for(b = m; b > 0; b--){    

И опять сюда рамочку

Genri5
Offline
Зарегистрирован: 31.05.2016

Рамки я не увидел:

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

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

Можно из примеров. Можно линии полосочки - неважно.

Genri5
Offline
Зарегистрирован: 31.05.2016

Вот лев - видно, что часть ног вверху:

Вот эта строка повторялась два раза: 1

for(b = 0; b < m; b++){ 

и в обоих я поменял на for(b = m; b > 0; b--){

Помоему 8х8 чередуются не в той последовательности. Низ вверху, а верх внизу.

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

Во втором случаи отчищается массив, там менять ничего не надо.

Такое чувство что Вы сто то не поменяли.

Покажите как теперь выглядит олностью функция в библиотеке

uint8_t LcdPageTWO(void)

 

Genri5
Offline
Зарегистрирован: 31.05.2016

hugoboss317, я извиняюсь , постом выше я выложил фото не редактированную библиотеку. Если отредактирать как Вы написали - вообще пустой экран и ничего не выводит. Фото в посте 154.

Пытался найти даташит на 3410, но безрезультатно.

Только вот это:

https://www.rlocman.ru/shem/shem-cache.html?di=18881

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

hugoboss317 пишет:

Покажите как теперь выглядит полностью функция в библиотеке

uint8_t LcdPageTWO(void)

Genri5
Offline
Зарегистрирован: 31.05.2016
uint8_t LcdPageTWO(void)
{
	uint8_t step, p, b, m = 3;
	switch(page){
		case 3: step = 5; break; 
		case 2: step = 2; break;
		case 1: step = 0; m = 2; break;  
	}		              
    LcdWrite(LCD_C, 0x40 + step );    // установка адреса по Y:   в банк 0...3...6  
    LcdWrite(LCD_C, 0x80);            // установка адреса по X: 
	 for(b = 0; b > 0; b--){
		 for(p = X_RES-1; p < X_RES; p--){
			 LcdWrite(LCD_D, Lcd_page[p][b]);  //выводим сформированый массив
		 }
		 LcdWrite(LCD_D, 0x0);                 //регистр 102 в видеопамяти 
	 }  	
	 for(b = 0;  b < m; b++){
	     for(p = 0; p < X_RES; p++){
		    Lcd_page[p][b] = 0b00000000;        //отчищаем массив
	    }		
	}
	page--;
	return page;
}

 

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

Строка 12 это что?

 for(b = 0; b > 0; b--){

Внимательней.

b =  m;

И строчку 13 наверное нужно заменить

LcdWrite(LCD_D, Lcd_page[p][b-1]);

 

Genri5
Offline
Зарегистрирован: 31.05.2016

Вот уже получше:

 

 

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

Ну в принципе всё. В примерах просто не ваше разрешение.

Genri5
Offline
Зарегистрирован: 31.05.2016

Да, я так и понял. Огромное спасибо. Далее, думаю, разберусь что и как. :-)

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

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

Для этого нужно закоментировать следующим образом строки с 17 по 21

/*for(b = 0; b < m; b++){
	     for(p = 0; p < X_RES; p++){
		    Lcd_page[p][b-1] = 0b00000000;        //отчищаем массив
	    }		
	}*/

а сразу после 13 строчи в тело оператора вставить

Lcd_page[p][b] = 0b00000000;

 

Genri5
Offline
Зарегистрирован: 31.05.2016

hugoboss317 пишет:

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

Для этого нужно закоментировать следующим образом строки с 17 по 21







/*for(b = 0; b < m; b++){
	     for(p = 0; p < X_RES; p++){
		    Lcd_page[p][b-1] = 0b00000000;        //отчищаем массив
	    }		
	}*/

а сразу после 13 строчи в тело оператора вставить







Lcd_page[p][b] = 0b00000000;

 

Вот так я сделал : 

uint8_t LcdPageTWO(void)
{
	uint8_t step, p, b, m = 3;
	switch(page){
		case 3: step = 5; break; 
		case 2: step = 2; break;
		case 1: step = 0; m = 2; break;  
	}		              
    LcdWrite(LCD_C, 0x40 + step );    // установка адреса по Y:   в банк 0...3...6  
    LcdWrite(LCD_C, 0x80);            // установка адреса по X: 
	 for(b = m; b > 0; b--){
		 for(p = X_RES-1; p < X_RES; p--){
			 LcdWrite(LCD_D, Lcd_page[p][b-1]);  //выводим сформированый массив
		 }
		 LcdWrite(LCD_D, 0x0);                 //регистр 102 в видеопамяти
 Lcd_page[p][b] = 0b00000000;
	 } 
 	
	// for(b = 0;  b < m; b++){
	  //   for(p = 0; p < X_RES; p++){
		//    Lcd_page[p][b] = 0b00000000;        //отчищаем массив
//	    }		
//	}
	page--;
	return page;
}

и вот, что получилось:

sfm
Offline
Зарегистрирован: 17.08.2014

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

Genri5
Offline
Зарегистрирован: 31.05.2016

Приветствую. Пока библиотека  еще сыровата. Автор сегодня не выходил на связь. Жду от него ответа по предедущему вопросу.

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

Я же сказал, в тело оператора

uint8_t LcdPageTWO(void)
{
	uint8_t step, p, b, m = 3;
	switch(page){
		case 3: step = 5; break; 
		case 2: step = 2; break;
		case 1: step = 0; m = 2; break;  
	}		              
    LcdWrite(LCD_C, 0x40 + step );    // установка адреса по Y:   в банк 0...3...6  
    LcdWrite(LCD_C, 0x80);            // установка адреса по X: 
	 for(b = m; b > 0; b--){
		 for(p = X_RES-1; p < X_RES; p--){
			 LcdWrite(LCD_D, Lcd_page[p][b-1]);  //выводим сформированый массив
		         Lcd_page[p][b-1] = 0b00000000;
              }
		 LcdWrite(LCD_D, 0x0);                 //регистр 102 в видеопамяти
	 } 
 	
	// for(b = 0;  b < m; b++){
	  //   for(p = 0; p < X_RES; p++){
		//    Lcd_page[p][b] = 0b00000000;        //отчищаем массив
//	    }		
//	}
	page--;
	return page;
}

 

Genri5
Offline
Зарегистрирован: 31.05.2016

Вот получилось, извините за качество:

Genri5
Offline
Зарегистрирован: 31.05.2016

hugoboss317, ище один ньюанс. Взял другой LCD 3410 и не понятно почему, но он ведет себя с Вашей библиотекой иначе.

Вот что он печатает, хотя с библиотекой 8glib, ничего такого не наблюдал:

Несколько раз перепрошивал ардуинку - то с первым, то со вторым  дисплеем. В чем закавыка ?????

 

sfm
Offline
Зарегистрирован: 17.08.2014

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

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

Другое разрешение

 

Genri5
Offline
Зарегистрирован: 31.05.2016

hugoboss317 пишет:

Другое разрешение

 

Да, действительно поменял рарешение и результат :

Оба экрана с Nokia 3410, а разрешения разные.

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

Что то не то всё равно. Надо вертикальную линию вывести на всю высоту.

lsm
Offline
Зарегистрирован: 28.06.2019
ПОМГИТЕ ИСПРАИТЬ СКЕТЧ,СПУСТЯ НЕСКОЛЬКО СЕКУНД ЕКРАН НИЧЕВО НЕПОКАЗЫВАЕТ,А НА ПРИМЕРАХ ВСЕ ХОРОШО.

 

#include "font_16x32.h";
#include <PCF8812_new.h>
int X_234429690_1;
int Y_234429690_1;
String Text_234429690_1;
char * cText_234429690_1;
void setup()
{
    LcdInit(10, 9, 8, 7, 6); //CS, RESET, D/C, CLK, DATA
}
void loop()
{
    //Плата:1
    X_234429690_1 = 0;
    Y_234429690_1 = 0;
    Text_234429690_1 = String("999.99");
    LcdPageONE();
    do
    {
        LcdsetFont(font_16x32);
        LcdGotoXY(X_234429690_1, Y_234429690_1);
        cText_234429690_1 = new char[Text_234429690_1.length()];
        strcpy(cText_234429690_1,Text_234429690_1.c_str());
        LcdPrint(cText_234429690_1, ON, 1);
    }
    while(LcdPageTWO());
}

 

b707
Offline
Зарегистрирован: 26.05.2017

lsm пишет:

ПОМГИТЕ ИСПРАИТЬ СКЕТЧ,СПУСТЯ НЕСКОЛЬКО СЕКУНД ЕКРАН НИЧЕВО НЕПОКАЗЫВАЕТ,А НА ПРИМЕРАХ ВСЕ ХОРОШО.

ну вы сравните примеры с вашим кодом

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

lsm, Вы бы для начала расставили комментарии - для чего каждая строка нужна. Глядишь, в процессе этой работы и сами поняли бы, в чем дело.

Prokst
Offline
Зарегистрирован: 12.04.2021

Любой пример при компилляции выдает ошибку. Жалуется на отсутствие wiring.h. В архиве данного файла нет. Где его брать, мож кто поделится? Спасибо)

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

Prokst пишет:

Любой пример при компилляции выдает ошибку. Жалуется на отсутствие wiring.h. В архиве данного файла нет. Где его брать, мож кто поделится? Спасибо)

В файле PCF8812_new.cpp закомментируйте требуемое в строке №4.

Я ещё нашёл в этом же файле ошибку. Или перезагрузите файл или в строке №120 нужно закомментировать скобку.

было так:

*/    }

надо так:

}    */