реклама на сайте
подробности

 
 
10 страниц V  « < 7 8 9 10 >  
Reply to this topicStart new topic
> Помогите определиться с камнем, дисплеем и пр.
011119xx
сообщение Nov 19 2012, 09:56
Сообщение #121


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544



Хотелось бы оживить тему. Вопрос остается в силе. Что показали испытания камня и дисплея? Как никак уже скоро год будет, очень интересно ознакомиться с полученными данными.
Go to the top of the page
 
+Quote Post
Falkon_99
сообщение Nov 20 2012, 17:36
Сообщение #122


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 26-03-12
Из: Харьков
Пользователь №: 71 010



Дисплей от Nokia6300 можно легко прикрутить к STM, там тот же интерфейс 8080. И модель телефона популярная, не пропадет через 5 лет, и цена дисплея удовлетворительная 4$
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Apr 9 2014, 07:48
Сообщение #123


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Че-то я не понимаю =). камень STM32F103VET6
CODE
fsmcTiming.FSMC_AddressSetupTime = 0x00;
fsmcTiming.FSMC_AddressHoldTime = 0x00;
fsmcTiming.FSMC_DataSetupTime = 0x01;
fsmcTiming.FSMC_BusTurnAroundDuration = 0x00;
fsmcTiming.FSMC_CLKDivision = 0x01;
fsmcTiming.FSMC_DataLatency = 0x00;
fsmcTiming.FSMC_AccessMode = FSMC_AccessMode_A;

fsmc.FSMC_Bank = FSMC_Bank1_NORSRAM1;
fsmc.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
fsmc.FSMC_MemoryType = FSMC_MemoryType_SRAM;
fsmc.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
fsmc.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
fsmc.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
fsmc.FSMC_WrapMode = FSMC_WrapMode_Disable;
fsmc.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
fsmc.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
fsmc.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
fsmc.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
fsmc.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
fsmc.FSMC_ReadWriteTimingStruct = &fsmcTiming;
fsmc.FSMC_WriteTimingStruct = &fsmcTiming;

FSMC_NORSRAMInit(&fsmc);
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);

Такая вот инициализация. Порты на 50МГц. Дисплей 320х240. 12 бит на пиксель. Если кручу в main'е такой код:
Код
  
while(1)
{
      
for (max=0;max<76800;max++)
{
*(uint16_t *) (LCD_DATA)=y;
}
y++;
}

То частота кадров равна примерно 21 кадр в секунду.Частоту кадров смотрю по осциллографу: на один кадр приходится 1 цвет, и по этому смотрю поведение младшего бита. Он "тикает" с частотой кадров.
Если вызываю из прерывания по таймеру (настроен на сколько-то там мегагерц, что бы получить 25гц кадровую), то частота кадров становится еще ниже.

Вопрос: это с чего это вдруг так сильно пыжится процессор? Как повысить частоту кадров?

Сообщение отредактировал Lost_Viking - Apr 9 2014, 07:54
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 9 2014, 08:28
Сообщение #124


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Lost_Viking @ Apr 9 2014, 11:48) *
Если вызываю из прерывания по таймеру (настроен на сколько-то там мегагерц, что бы получить 25гц кадровую), то частота кадров становится еще ниже.

Сколько-то там - это сколько? И что получится, если разделить частоту ядра на эти мегагерцы?

Цитата(Lost_Viking @ Apr 9 2014, 11:48) *
Вопрос: это с чего это вдруг так сильно пыжится процессор? Как повысить частоту кадров?

Листинг ассемблерный прежде всего посмотрите.
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Apr 9 2014, 09:03
Сообщение #125


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(aaarrr @ Apr 9 2014, 12:28) *
Сколько-то там - это сколько? И что получится, если разделить частоту ядра на эти мегагерцы?

biggrin.gif Да я уже не помню сколько там миллионов... 320*240*25 = пикселей/сек . Реально работает не быстрее... около 8.33 кадров в секунду если включать цикл for, и около 10 кадров в секунду, если просто перебирать цвета по каждой точке.
Цитата(aaarrr @ Apr 9 2014, 12:28) *
Листинг ассемблерный прежде всего посмотрите.

Код
   554:     while(1)
   555:     {
   556:            
0x0800142C E016      B        0x0800145C
   557: for (max=0;max<76800;max++)
   558: {
0x0800142E 2000      MOVS     r0,#0x00
0x08001430 4911      LDR      r1,[pc,#68]; @0x08001478
0x08001432 6008      STR      r0,[r1,#0x00]
0x08001434 E008      B        0x08001448
   559: *(uint16_t *) (LCD_DATA)=y;
   560: }
0x08001436 4811      LDR      r0,[pc,#68]; @0x0800147C
0x08001438 8800      LDRH     r0,[r0,#0x00]
0x0800143A 4909      LDR      r1,[pc,#36]; @0x08001460
0x0800143C 8008      STRH     r0,[r1,#0x00]
0x0800143E 480E      LDR      r0,[pc,#56]; @0x08001478
0x08001440 6800      LDR      r0,[r0,#0x00]
0x08001442 1C40      ADDS     r0,r0,#1
0x08001444 490C      LDR      r1,[pc,#48]; @0x08001478
0x08001446 6008      STR      r0,[r1,#0x00]
0x08001448 480B      LDR      r0,[pc,#44]; @0x08001478
0x0800144A 6800      LDR      r0,[r0,#0x00]
0x0800144C F5B03F96  CMP      r0,#0x12C00
0x08001450 DBF1      BLT      0x08001436
   561:         y++;
0x08001452 480A      LDR      r0,[pc,#40]; @0x0800147C
0x08001454 6800      LDR      r0,[r0,#0x00]
0x08001456 1C40      ADDS     r0,r0,#1
0x08001458 4908      LDR      r1,[pc,#32]; @0x0800147C
0x0800145A 6008      STR      r0,[r1,#0x00]

Далее идет отсыл по условию while(1)
Если работа по прерыванию, то добавляется еще несколько команд. Сброс флага - как минимум одна команда.
p.s. кварц на 8МГц, в stm32f10x.h раздевайнена строка для HD линии, и собственно выставлен кварц на 8МГц.
p.p.s как я понимаю, процессорное время тратится на выполнение этих команд. Но как же тогда люди добиваются 25 кадров в секунду, при этом проц работает на частоте 72МГц , и разрешенка у них не ниже моей? Или я чего-то упустил в форуме?

Сообщение отредактировал Lost_Viking - Apr 9 2014, 09:08
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 9 2014, 09:22
Сообщение #126


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Оптимизацию включите. И добавьте volatile к uint16_t в строке
Код
*(uint16_t *) (LCD_DATA)=y;


Цитата(Lost_Viking @ Apr 9 2014, 13:03) *
biggrin.gif Да я уже не помню сколько там миллионов... 320*240*25 = пикселей/сек .

Много успеет процессор, если у него между прерываниями 72M/(320*240*25)=37.5 тактов?
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Apr 9 2014, 09:50
Сообщение #127


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(aaarrr @ Apr 9 2014, 13:22) *
Оптимизацию включите. И добавьте volatile к uint16_t в строке
Код
*(uint16_t *) (LCD_DATA)=y;



Много успеет процессор, если у него между прерываниями 72M/(320*240*25)=37.5 тактов?


Да о том и речь. Или мне показалось, что тут на форуме на 72МГц делали для 320х240 развертку в 25Гц , и даже более ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 9 2014, 10:11
Сообщение #128


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Сделать можно, но уж точно не прерываясь на каждый пиксель. Делайте прерывание с периодом строки, в нем загружайте одну строку с максимально допустимой скоростью.
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Apr 9 2014, 10:26
Сообщение #129


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(aaarrr @ Apr 9 2014, 14:11) *
Сделать можно, но уж точно не прерываясь на каждый пиксель. Делайте прерывание с периодом строки, в нем загружайте одну строку с максимально допустимой скоростью.

Так я и так не использую прерывание . Точки рисую в основном цикле программы . Выше 21 кадра в сек не было .
Я понимаю, что работать надо с DMA. Но опять же: скорость обновления информации в памяти будет на уровне 20кадров в сек. А то и меньше, если будут промежуточные расчеты. Как быть?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 9 2014, 11:18
Сообщение #130


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Оптимизацию включили?
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Apr 9 2014, 13:21
Сообщение #131


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(aaarrr @ Apr 9 2014, 15:18) *
Оптимизацию включили?

Не успел. Завтра гляну.В Keil вроде бы по дефолту стоит оптимизация. Да и что она даст? 1920000 пикселей в сек все равно придется через процессор перелопачивать, а это как минимум 1920000 операций в секунду, не думаю что как-то можно что-то сделать, если , допустим я хочу еще читать данные из ацп, фильтровать их через фильтр ЭСС (а там коэффициент либо вещественный, либо как минимум делается сдвигом ). Как-то печально всё. Не сделать мне хитрый осциллограф-интегратор с фильтром на входе. Ведь хочу еще сетку рисовать. Думал на пиксель использовать два бита. Один бит на сетку (есть/нет), другой - на сигнал (есть/нет). Тогда можно было бы в озу держать буфер размером в 320*2/8 байт на 240*2/8 , то есть 4800 байт. Но фишка в том,что для "декодирования" буфера потребуется как минимум 4 операции сравнения , содержащие в себе хитрые условия. Кажется, что я слишком размечтался sm.gif)

Сообщение отредактировал Lost_Viking - Apr 9 2014, 13:39
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 9 2014, 13:47
Сообщение #132


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Lost_Viking @ Apr 9 2014, 17:21) *
В Keil вроде бы по дефолту стоит оптимизация.

Не стоит.
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Apr 9 2014, 13:56
Сообщение #133


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(aaarrr @ Apr 9 2014, 17:47) *
Не стоит.

Эммм.. 05.gif
Ок. Гляну завтра что получится. Спасибо. Но все же не думаю, что смогу реализовать то, что я хочу
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 9 2014, 14:21
Сообщение #134


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Lost_Viking @ Apr 9 2014, 17:56) *
Эммм.. 05.gif
Ок. Гляну завтра что получится. Спасибо. Но все же не думаю, что смогу реализовать то, что я хочу

Могу показать сейчас:
Код
>>> MAIN\#19         while(1)
>>> MAIN\#20         {
>>> MAIN\#21                 for (max=0;max<76800;max++)
   00008528     2100  MOVS     r1,#0
>>> MAIN\#22                 {
>>> MAIN\#23                         *(volatile uint16_t *) (LCD_DATA)=y;
   0000852A     8010  STRH     r0,[r2,#0]
   0000852C     8010  STRH     r0,[r2,#0]
--- MAIN\#22                 {
--- MAIN\#23                         *(volatile uint16_t *) (LCD_DATA)=y;
   0000852E     1C89  ADDS     r1,r1,#2
   00008530 F5B13F96  CMP      r1,#0x12c00
   00008534     D3F9  BCC      0x852a                     <MAIN\#23>
>>> MAIN\#24                 }
>>> MAIN\#25                 y++;
   00008536     1C40  ADDS     r0,r0,#1
--- MAIN\#24                 }
--- MAIN\#25                 y++;
   00008538     B280  UXTH     r0,r0
   0000853A     E7F5  B        0x8528                     <MAIN\#21>


Сравните длину цикла с предыдущим листингом.
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Apr 9 2014, 14:38
Сообщение #135


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(aaarrr @ Apr 9 2014, 18:21) *
Сравните длину цикла с предыдущим листингом.


да Вы волшебник ! =))

Сейчас стоит "Level 0"
Как я понимаю, надо повысить уровень.
Optimize for Time сделать
Что еще посоветуете?

Сообщение отредактировал Lost_Viking - Apr 9 2014, 14:42
Go to the top of the page
 
+Quote Post

10 страниц V  « < 7 8 9 10 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016