Карманный осциллограф на STM32

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
GFX
Поставщик валерьянки для Кота
Сообщения: 2040
Зарегистрирован: Вт окт 23, 2012 18:36:14
Откуда: Ростов-на-Дону

Re: Карманный осциллограф на STM32

Сообщение GFX »

[uquote="240265",url="/forum/viewtopic.php?p=3319045#p3319045"]вывод через порт, не fsmc . экран не шумит.[/uquote] Так, сделал вывод через порт, очень медленно, так как все раскидано абы как по портам, нужно бы объединять хоть кусками, но пока побитно вывожу, чтобы наверняка. Можете проверить будет ли В шуметь, GFXscope3_1_25_test. Тип вывода быстрый ставьте.

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

Код: Выделить всё

#define LCD_RST1  HAL_GPIO_WritePin(TFT_RST_PORT, TFT_RST_PIN, GPIO_PIN_SET)
#define LCD_RST0  HAL_GPIO_WritePin(TFT_RST_PORT, TFT_RST_PIN, GPIO_PIN_RESET)

#define LCD_DC1   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET)
#define LCD_DC0   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET)

#define LCD_CS1   HAL_GPIO_WritePin(TFT_CS_PORT, TFT_CS_PIN, GPIO_PIN_SET)
#define LCD_CS0   HAL_GPIO_WritePin(TFT_CS_PORT, TFT_CS_PIN, GPIO_PIN_RESET)

#define LCD_WR1   HAL_GPIO_WritePin(TFT_WR_PORT, TFT_WR_PIN, GPIO_PIN_SET)
#define LCD_WR0   HAL_GPIO_WritePin(TFT_WR_PORT, TFT_WR_PIN, GPIO_PIN_RESET)

#define LCD_RD1   HAL_GPIO_WritePin(TFT_RD_PORT, TFT_RD_PIN, GPIO_PIN_SET)
#define LCD_RD0   HAL_GPIO_WritePin(TFT_RD_PORT, TFT_RD_PIN, GPIO_PIN_RESET)

#define WR_STROBE { LCD_WR0; LCD_WR1; }
#define RD_STROBE { LCD_RD0; LCD_RD1; }


#define FSMC_D0 GPIO_PIN_14 // PORTD				
#define FSMC_D1 GPIO_PIN_15 // PORTD			
#define FSMC_D2 GPIO_PIN_0 // PORTD			
#define FSMC_D3 GPIO_PIN_1 // PORTD		
	
#define FSMC_D4 GPIO_PIN_7 // PORTE
#define FSMC_D5 GPIO_PIN_8 // PORTE	
#define FSMC_D6 GPIO_PIN_9 // PORTE	
#define FSMC_D7 GPIO_PIN_10 // PORTE	
#define FSMC_D8 GPIO_PIN_11 // PORTE	
#define FSMC_D9 GPIO_PIN_12 // PORTE	
#define FSMC_D10 GPIO_PIN_13 // PORTE	
#define FSMC_D11 GPIO_PIN_14 // PORTE		
#define FSMC_D12 GPIO_PIN_15 // PORTE		
		
#define FSMC_D13 GPIO_PIN_8 // PORTD			
#define FSMC_D14 GPIO_PIN_9 // PORTD				
#define FSMC_D15 GPIO_PIN_10 // PORTD		

void WriteData(uint16_t byteToSend)
{
		  if (byteToSend&(1<<0)) HAL_GPIO_WritePin(GPIOD, FSMC_D0, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D0, GPIO_PIN_RESET);
	
		  if (byteToSend&(1<<1)) HAL_GPIO_WritePin(GPIOD, FSMC_D1, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D1, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<2)) HAL_GPIO_WritePin(GPIOD, FSMC_D2, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D2, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<3)) HAL_GPIO_WritePin(GPIOD, FSMC_D3, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D3, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<4)) HAL_GPIO_WritePin(GPIOE, FSMC_D4, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D4, GPIO_PIN_RESET);			
				
		  if (byteToSend&(1<<5)) HAL_GPIO_WritePin(GPIOE, FSMC_D5, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D5, GPIO_PIN_RESET);	
	
		  if (byteToSend&(1<<6)) HAL_GPIO_WritePin(GPIOE, FSMC_D6, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D6, GPIO_PIN_RESET);
	
		  if (byteToSend&(1<<7)) HAL_GPIO_WritePin(GPIOE, FSMC_D7, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D7, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<8)) HAL_GPIO_WritePin(GPIOE, FSMC_D8, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D8, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<9)) HAL_GPIO_WritePin(GPIOE, FSMC_D9, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D9, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<10)) HAL_GPIO_WritePin(GPIOE, FSMC_D10, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D10, GPIO_PIN_RESET);			
				
		  if (byteToSend&(1<<11)) HAL_GPIO_WritePin(GPIOE, FSMC_D11, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D11, GPIO_PIN_RESET);	
	
		  if (byteToSend&(1<<12)) HAL_GPIO_WritePin(GPIOE, FSMC_D12, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D12, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<13)) HAL_GPIO_WritePin(GPIOD, FSMC_D13, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D13, GPIO_PIN_RESET);			
				
		  if (byteToSend&(1<<14)) HAL_GPIO_WritePin(GPIOD, FSMC_D14, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D14, GPIO_PIN_RESET);		

		  if (byteToSend&(1<<15)) HAL_GPIO_WritePin(GPIOD, FSMC_D15, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D15, GPIO_PIN_RESET);		

	    LCD_CS0;		
    	LCD_DC1;	    
  	  WR_STROBE
	    LCD_CS1;
}
void WriteComm(uint16_t byteToSend)
{
		  if (byteToSend&(1<<0)) HAL_GPIO_WritePin(GPIOD, FSMC_D0, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D0, GPIO_PIN_RESET);
	
		  if (byteToSend&(1<<1)) HAL_GPIO_WritePin(GPIOD, FSMC_D1, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D1, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<2)) HAL_GPIO_WritePin(GPIOD, FSMC_D2, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D2, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<3)) HAL_GPIO_WritePin(GPIOD, FSMC_D3, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D3, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<4)) HAL_GPIO_WritePin(GPIOE, FSMC_D4, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D4, GPIO_PIN_RESET);			
				
		  if (byteToSend&(1<<5)) HAL_GPIO_WritePin(GPIOE, FSMC_D5, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D5, GPIO_PIN_RESET);	
	
		  if (byteToSend&(1<<6)) HAL_GPIO_WritePin(GPIOE, FSMC_D6, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D6, GPIO_PIN_RESET);
	
		  if (byteToSend&(1<<7)) HAL_GPIO_WritePin(GPIOE, FSMC_D7, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D7, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<8)) HAL_GPIO_WritePin(GPIOE, FSMC_D8, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D8, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<9)) HAL_GPIO_WritePin(GPIOE, FSMC_D9, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D9, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<10)) HAL_GPIO_WritePin(GPIOE, FSMC_D10, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D10, GPIO_PIN_RESET);			
				
		  if (byteToSend&(1<<11)) HAL_GPIO_WritePin(GPIOE, FSMC_D11, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D11, GPIO_PIN_RESET);	
	
		  if (byteToSend&(1<<12)) HAL_GPIO_WritePin(GPIOE, FSMC_D12, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOE, FSMC_D12, GPIO_PIN_RESET);		
	
		  if (byteToSend&(1<<13)) HAL_GPIO_WritePin(GPIOD, FSMC_D13, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D13, GPIO_PIN_RESET);			
				
		  if (byteToSend&(1<<14)) HAL_GPIO_WritePin(GPIOD, FSMC_D14, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D14, GPIO_PIN_RESET);		

		  if (byteToSend&(1<<15)) HAL_GPIO_WritePin(GPIOD, FSMC_D15, GPIO_PIN_SET);
	    else HAL_GPIO_WritePin(GPIOD, FSMC_D15, GPIO_PIN_RESET);		
			
	  LCD_CS0;      		
	  LCD_DC0;		
	  WR_STROBE; 	  
  	LCD_DC1;
	  LCD_CS1;
}

maks740
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Чт авг 18, 2016 12:02:08
Откуда: Харьков

Re: Карманный осциллограф на STM32

Сообщение maks740 »

Павел, у меня на прошивке 60МГц при скорости в порту 6666666 к скопу не подключается ни прог. ПК, на прог. Андроид. При скорости 7272727 подключается (но связь изредка рвется). Вроде должно быть наоборот?
Аватара пользователя
GFX
Поставщик валерьянки для Кота
Сообщения: 2040
Зарегистрирован: Вт окт 23, 2012 18:36:14
Откуда: Ростов-на-Дону

Re: Карманный осциллограф на STM32

Сообщение GFX »

maks740, должно быть наоборот, проверю
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Карманный осциллограф на STM32

Сообщение 240265 »

FFFE.jpg
(195.78 КБ) 402 скачивания
FFFF.jpg
(152.08 КБ) 607 скачиваний
GFX , попробовал Вашу инициализацию, визуально разнийы нет. Но выяснил что есть зависимость от цвета , вернеее от битов цвета.
При GPIO_InitStructure.GPIO_Pin =GPIO_Pin_All ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);

и #define WHITE 0xFFFF - корёжит
при #define WHITE 0xFFFE или 0x3FFF - нормально

Добавлено after 4 minutes 25 seconds:
Два старших и 1 младший биты как то влияют на адрес при больших скоростях. если это обойти может и в ослике шум уйдет.

Добавлено after 3 minutes:
Забыл сказать, если выставить скорость порта GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; или 2MHz то все ровно.
IVL ex UA6PJ
Аватара пользователя
GFX
Поставщик валерьянки для Кота
Сообщения: 2040
Зарегистрирован: Вт окт 23, 2012 18:36:14
Откуда: Ростов-на-Дону

Re: Карманный осциллограф на STM32

Сообщение GFX »

240265, спасибо за анализ. Цвета обходить это костыль какой-то, цвет 16 бит вот пусть и отрабатывает... Сейчас подождем что там с выводом через порт, есть ли шум. Если не будет, то буду fsmc настраивать пытаться под экран, хотя медленно я его настраивал, не помогает. Тут что-то другое, ладно, результат нужен, что при выводе через порт. На крайняк и через порт можно выводить только вывод оптимизировать, побитно медленно дюже.
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Карманный осциллограф на STM32

Сообщение 240265 »

Мне кажется что вывод через порт не поможет, " звенит " в контроллере экрана.

Добавлено after 3 minutes 10 seconds:
Причем пробовал задержку подкидывать в разные места при записи в порт, управляющие сигналы. Ни фига не помогает, да и тормозит здорово.
IVL ex UA6PJ
Аватара пользователя
GFX
Поставщик валерьянки для Кота
Сообщения: 2040
Зарегистрирован: Вт окт 23, 2012 18:36:14
Откуда: Ростов-на-Дону

Re: Карманный осциллограф на STM32

Сообщение GFX »

240265 ты сам себе противоречишь. Ты сказал, что шума и помех у тебя нет на этом экране в статике при выводе части изображения. Суть проблемы -выводим на экран картинку и больше не трогаем, но рисуем что то еще маленькое, этот экран начинает кидать пиксели в разнобой на картинку в том числе. Вот это и интересует, если у тебя шума нет, инициализация не при чем, то омтается только несовместимость с fsmc. Ну а если он и у тебя глючит то только выбросить или терпеть шум.
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Карманный осциллограф на STM32

Сообщение 240265 »

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

Добавлено after 2 minutes 27 seconds:
Вообщем если два старших или один младший бит сделать "0" то все ровно.

Добавлено after 2 minutes 56 seconds:
#define WHITE 0xFFFE
или
DrawString(" IVL ", 400, 284, CYAN&0xFFFE, BLACK);
все ровно
IVL ex UA6PJ
Аватара пользователя
Alex2
Сверлит текстолит когтями
Сообщения: 1131
Зарегистрирован: Вс авг 21, 2011 21:11:56
Откуда: Харьков

Re: Карманный осциллограф на STM32

Сообщение Alex2 »

Мораль сей басни такова- из аппаратной какашки не получится сделать конфетку программными средствами...
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Карманный осциллограф на STM32

Сообщение 240265 »

Ну почему, мне кажется можно пожертвовать младшим разрядом цвета (В) если не будет артефактов . На глаз это не различимо.
IVL ex UA6PJ
Аватара пользователя
GFX
Поставщик валерьянки для Кота
Сообщения: 2040
Зарегистрирован: Вт окт 23, 2012 18:36:14
Откуда: Ростов-на-Дону

Re: Карманный осциллограф на STM32

Сообщение GFX »

240265, а 2 старших красного?
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Карманный осциллограф на STM32

Сообщение 240265 »

Я же писал " Вообщем если два старших ИЛИ один младший бит сделать "0" то все ровно. "

Добавлено after 4 minutes 25 seconds:
У меня сейчас #define WHITE 0xFFFE.
Так же сделал PLLMULL15.
Погоняю расскажу.
Стартует чисто.
IVL ex UA6PJ
Аватара пользователя
GFX
Поставщик валерьянки для Кота
Сообщения: 2040
Зарегистрирован: Вт окт 23, 2012 18:36:14
Откуда: Ростов-на-Дону

Re: Карманный осциллограф на STM32

Сообщение GFX »

240265, извиняюсь, или не заметил. Так то да, только как это вдиять может уму не постижимо. А если статичная картинка белая а та что обновляется "хорошего" цвета то нормально будет или нет?
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Карманный осциллограф на STM32

Сообщение 240265 »

У меня весь белый "хороший" #define WHITE 0xFFFE.

Добавлено after 38 seconds:
Оно на глаз не заметно.

Добавлено after 2 minutes 8 seconds:
Везде в дефайнах цвета младший разряд сделать 0 и всё.
IVL ex UA6PJ
Аватара пользователя
GFX
Поставщик валерьянки для Кота
Сообщения: 2040
Зарегистрирован: Вт окт 23, 2012 18:36:14
Откуда: Ростов-на-Дону

Re: Карманный осциллограф на STM32

Сообщение GFX »

240265, понятно, мне не так просто сменить дефайны,тем более что многие цвета не в дефайнах и для нормальных экранов не хочется цвета ломать. Да и из спортивного интереса интересно.

У кого экран HX с индексом B есть, цвет лучей с зеленого уберите, что-то изменится?

Добавлено after 1 hour 37 minutes 50 seconds:
В прошивке GFXscope3_1_26 сделал проще, отредактировал функцию передачи цвета, теперь режет все &0xFFFE, но это только для глючного экрана(режет для глючного, шить ее всем можно, были правки). Проверьте, пожалуйста, помогло ли.

Добавлено after 11 minutes 7 seconds:
[uquote="GFX",url="/forum/viewtopic.php?p=3319476#p3319476"]maks740, должно быть наоборот, проверю[/uquote] Исправил, наверное, не заливал себе, GFXscope3_1_26_60MGz
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Карманный осциллограф на STM32

Сообщение 240265 »

Сделал секунды тоже шрифтом 100х60 , бегут нормально, проц 120МГц, чисто, 20 минут артефактов нет.
IVL ex UA6PJ
maks740
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Чт авг 18, 2016 12:02:08
Откуда: Харьков

Re: Карманный осциллограф на STM32

Сообщение maks740 »

После обрыва, связь не восстанавливается (к роутеру не подключается, хотя к точке ослика подключаюсь без проблем, но при этом андроид программа не подключается к ослику)
Но модуль у меня хреновый, с антенной на плате (esp8266-12E, помоему)
Изображение
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Re: Карманный осциллограф на STM32

Сообщение amv2000 »

IP адрес 0.0.0.0 это почему? и статус установить GOT_IP.
maks740
Нашел транзистор. Понюхал.
Сообщения: 156
Зарегистрирован: Чт авг 18, 2016 12:02:08
Откуда: Харьков

Re: Карманный осциллограф на STM32

Сообщение maks740 »

[uquote="amv2000",url="/forum/viewtopic.php?p=3320258#p3320258"]IP адрес 0.0.0.0 это почему? и статус установить GOT_IP.[/uquote]
Ну, дык, так после обрыва связи. И уже не подключается.
Аватара пользователя
GFX
Поставщик валерьянки для Кота
Сообщения: 2040
Зарегистрирован: Вт окт 23, 2012 18:36:14
Откуда: Ростов-на-Дону

Re: Карманный осциллограф на STM32

Сообщение GFX »

[uquote="maks740",url="/forum/viewtopic.php?p=3320261#p3320261"][uquote="amv2000",url="/forum/viewtopic.php?p=3320258#p3320258"]IP адрес 0.0.0.0 это почему? и статус установить GOT_IP.[/uquote]
Ну, дык, так после обрыва связи. И уже не подключается.[/uquote] По прошивке мк, скорость 6666666 заработала? Что с вайфаем непонятно, статус должен быть годip и сам ip должен быть. Ты руками нули не писал туда?
Ответить

Вернуться в «ARM»