Здравствуйте, гость ( Вход | Регистрация )

Форум » Сайт и форум » Разработки и Статьи на сайте » Все вопросы касающиеся Neil Scope (Ваши замечания, предложения и т.д.)
Все вопросы касающиеся Neil Scope
LeftRadio Пятница, 26.03.2010, 21:41 | Сообщение # 1
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Шапка темы.

--
NEIL SCOPE 2



--------------------------------------------------------------------------------------

--
NEIL SCOPE 3

Схема ревизия 3.2 - NS_3.0_rev_3.2.pdf
Схема соединения ЖК с 16-ти битной шиной(только для ревизий ниже 3.2, в 3.2 HC573 уже есть на основной плате) - NS_3.0_HC573.pdf
BOM(список компонентов) - BOM_NS3_rev3_2.htm

-------------------------------------------------------------------

-------------------------------------------------------------------

Прошивка ПЛИС --- 19/05/15

MCU Bootloader (загрузчик МК) --- 17/10/13
Прошивка МК (ЖК с 8бит, 65к цветов) --- 2015_17_15
Прошивка МК (ЖК с 8 бит, 262к цветов) --- 2015_17_15
Прошивка МК для (ЖК с 16бит, HC573, 262к цветов) --- 2015_12_17

Исходники ПЛИС (github) --- 11_12_13
Исходники МК (github) --- 12/02/15
Архивные прошивки МК

Краткое описание осциллографа
Протокол обмена NeilScope3 с ПК

//----------------------------------------------------------------------------------------------------------
Прошивальщик МК (автор Ильдар) - NSFlashLoader2.
Утилита для перепрошивки СР2102 VID/PID под NeilScope3 (автор Ильдар) - NSCP2102Utilite2.rar.
Использование данных VID/PID для перепрошивки СР2102 под другие устройства категорически запрещено, они были получены по запросу у Silicon Laboratories Inc. и предназначены для использования только с NeilScope3 или другими версиями NeilScope.

Утилита для теста осциллографа - ns_test_util.
Для запуска нужно скачать и установить Python 3.4 и PyQt5, при установке добавляем переменные окружения. Распаковать архив куда нибудь и набрать из этой папки в консоли - "python main.py"

Драйвера для NeilScope3 (под перепрошитые VID/PID) - NeilScopeDriver.zip

Процедура прошивки МК(обновлено 23.08.2015) - FirmwareManual.pdf

Для последующих обновлений просто запускаем NSFlashLoader, и обновляемся. Джампер при этом трогать уже не нужно.

//----------------------------------------------------------------------------------------------------------
.
.
.
Важные замечания по сборке

На плате не указана перемычка с 10-го вывода(INTRL) 74НС4052(U15) на вывод SWDIO МК, можно и просто подпаять пока на +3.3В в любое удобное переходное отверстие.

//----------------------------------------------------------------------------------------------------------

Фото платы ревизии 3:



Демо видео работы осциллографа, ревизия 1.9

----------------------------------------------------------------------------------------
Схема и плата ByteBlusterMV для программирования EPM570, оригинал здесь. Эту плату делал сам, проверена, работает.
.
.
//----------------------------------------------------------------------------------------------------------

Любое коммерческое использование данного проекта категорически запрещено. По всем вопросам обращаться wladkam(гав)mail.com
Прикрепления: 5561811.jpg (244.1 Kb) · 2201731.jpg (212.8 Kb)


---

Нет войне!


Сообщение отредактировал LeftRadio - Четверг, 17.12.2015, 04:59  
 
LeftRadio Воскресенье, 19.12.2010, 18:46 | Сообщение # 721
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Вот примерно так.. на ключи в обр. связи ОРА656 не обращайте внимания.
Прикрепления: 2.1M.pdf (19.1 Kb)


---

Нет войне!
 
LazyCat Воскресенье, 19.12.2010, 18:53 | Сообщение # 722
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (LeftRadio)
И того 2 мкА...

Ой, это я тупанул, даже не знаю куда смотрел sad Значит делаем интерлив на них ! У меня их тоже много ! Только правильно включить надо, чтобы Ron ни на что не влиял.


Сообщение отредактировал LazyCat - Воскресенье, 19.12.2010, 18:54  
 
LeftRadio Воскресенье, 19.12.2010, 19:01 | Сообщение # 723
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (LazyCat)
чтобы Ron ни на что не влиял.

Ну наверно совсем чтобы не влиял не получится, сейчас будет влиять но практически одинаково на оба канала, так как все ключи в одном корпусе и по идее более менее одинаковы.


---

Нет войне!
 
Муха Воскресенье, 19.12.2010, 19:11 | Сообщение # 724
Почетный Гражданин
Группа: Модераторы
Сообщений: 579
Статус: Offline
Quote (LeftRadio)
Вот примерно так.. на ключи в обр. связи ОРА656 не обращайте внимания.

Нада буфер с коэффициентом 1 и еще один с изменяемым коэффициентом.
DG413 выкинуть бы и поставить max4546 один на оба канала, что скажете?
 
LeftRadio Воскресенье, 19.12.2010, 19:23 | Сообщение # 725
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Предлагаю как то вот так... Либо можно сделать так как здесь - http://www.soudez.be/joomla/content/view/12/27/lang,en/ , делитель примерно 1/40, буфер, а затем уже ОУ с изм. к.у.

Блин посмотрел сколько жрет AD8132, так лучше уже МАХ4212, бог уже с ним что не диф.

Прикрепления: 2.1_a.pdf (6.4 Kb)


---

Нет войне!


Сообщение отредактировал LeftRadio - Воскресенье, 19.12.2010, 19:53  
 
LazyCat Понедельник, 20.12.2010, 01:40 | Сообщение # 726
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (LeftRadio)
Ну наверно совсем чтобы не влиял не получится

Это плохо, ведь не зря же в прототипе даже точность резисторов в обвязке AD8132 0.1%, а тут последовательно с ними включены сопротивления ключей !
Как вариант, можно их перенести на вход ОУ, но это не совсем красиво. Но если еще добавить буфер, то будет гораздо лучше, хотя всеравно не то sad

Quote (LeftRadio)
Предлагаю как то вот так...

Жаль только, что у max4546 ограничительные диоды smile

Quote (LeftRadio)
Блин посмотрел сколько жрет AD8132, так лучше уже МАХ4212

Если учесть, что в адэшке по сути 2 ОУ, то выходит даже меньше чем у макса sad
 
LeftRadio Понедельник, 20.12.2010, 11:12 | Сообщение # 727
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (LazyCat)
даже точность резисторов в обвязке AD8132 0.1%

Ну 0.1% я считаю что уже перебор, да и по термостабильности неизвестно какие... Можно конечно оставить переключение в интерлив на строенном ОУ от ЛТ, но они Current Feedback что тоже не добавляет счастья при построении каскада с изм. к. у. на них smile , может надуманная проблема?

Quote (LazyCat)
Жаль только, что у max4546 ограничительные диоды smile

Да жаль, но если иметь внешний щуп 1/10, то это не так актуально и даже можно снизить коэфициенты деления например до 1/40 и 1/20, что даст диапазон 400Vp-p при 1/20 и щупе 1/10.

Quote (LazyCat)
Если учесть, что в адэшке по сути 2 ОУ, то выходит даже меньше чем у макса

Так может ну их эти АД smile поставим МАХ4212 и бог с ним с диф. сигналом. Кстати есть предложение сделать на выбор источник реф. джампером, внутр. АЦП или внешний типа MAX6126AASA21 smile ?


---

Нет войне!
 
Муха Вторник, 21.12.2010, 05:36 | Сообщение # 728
Почетный Гражданин
Группа: Модераторы
Сообщений: 579
Статус: Offline
Quote (LeftRadio)
Да жаль, но если иметь внешний щуп 1/10, то это не так актуально и даже можно снизить коэфициенты деления например до 1/40 и 1/20, что даст диапазон 400Vp-p при 1/20 и щупе 1/10.

Внешний делитель на щупе - это зло... dry
Quote (LeftRadio)
Кстати есть предложение сделать на выбор источник реф. джампером, внутр. АЦП или внешний типа MAX6126AASA21 ?

А зачем нам внешний ИОН? Чем плох тот, что в АЦП?


Сообщение отредактировал Муха - Вторник, 21.12.2010, 05:37  
 
LazyCat Вторник, 21.12.2010, 09:56 | Сообщение # 729
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Появилась шальная мысль biggrin
Ставим AD8065 в качестве буфера, затем AD603 в качестве управляемого делителя, сюда же на вывод FDBK заводим сигнал коррекции нуля, а потом ставим MAX4546 для интерлива и дальше сразу АЦП в недифференциальном включении. И это ВСЕ !!!

P.S. совсем забыл сказать, что на входе в каждом канале я бы поставил один делитель 1:20 и один на оба канала MAX4546 !

Сообщение отредактировал LazyCat - Вторник, 21.12.2010, 12:22  
 
LeftRadio Вторник, 21.12.2010, 18:29 | Сообщение # 730
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (Муха)
А зачем нам внешний ИОН? Чем плох тот, что в АЦП?

Так я же говорю на выбор, джампером.

Quote (LazyCat)
Появилась шальная мысль biggrin

Действительно шальная biggrin . Мне все же кажется что оставлять АЦП без драйвера не есть хорошо и я считаю наиболее приемлемым такой вариант. Номиналы нужно будет еще уточнять.
Прикрепления: 2.1_analog.pdf (19.0 Kb)


---

Нет войне!
 
LazyCat Вторник, 21.12.2010, 21:24 | Сообщение # 731
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (LeftRadio)
Мне все же кажется что оставлять АЦП без драйвера не есть хорошо

В недифференциальном включении это абсолютно излишне. Тем более в этом смысле оба варианта эквивалентны (U31 находится внутри AD603, а R93 - это сопротивление открытого ключа) biggrin
Неустранимые недостатки все те же (самое интересное можно найти в табл.1 доки на MAX4212). К тому же я подсчитал, что Ваш вариант жрет на 12mA больше и стоит на 22$ больше по дижикеевским ценам sad
Но, Вы автор - Вам виднее !


Сообщение отредактировал LazyCat - Среда, 22.12.2010, 10:07  
 
alan Среда, 22.12.2010, 16:48 | Сообщение # 732
Новичок
Группа: Проверенные
Сообщений: 16
Статус: Offline
Quote (LazyCat)
CY22394(можно CY22393 или CY22395) - 5 программируемых выходов, можно элементарно получить парафазный выход, не более 100ma потребления и стоит на дижикее около $8.

А на Кипариске итого 2,40$.
Но как тогда с прошивкой? Ведь её подправить под Кипарис трэба? А я в програмировании дуб дубом fool .
А вариант 2.1_analog мну нравица (потому, что почти усё иость tongue ).
Quote (LazyCat)
самое интересное можно найти в табл.1 доки на MAX4212

Ммм...дааа... badmood Но кто нынче не без грехА? Тем более, если получил даром (дарённому коню в зубы не смотрят). Так я же следовал авторским рекомендациям и потихоньку клянчил детали. apple
 
LeftRadio Среда, 22.12.2010, 18:34 | Сообщение # 733
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (LazyCat)
самое интересное можно найти в табл.1 доки на MAX4212

Ничего там такого криминального нет smile У всех ОУ уменьшается полоса при увеличении к.у.

Quote (LazyCat)
Но, Вы автор - Вам виднее !

Да не в этом дело! AD603 заменить будет проблематично, а МАХ4212 без проблем тем что смогли достать.


---

Нет войне!
 
alan Среда, 22.12.2010, 18:56 | Сообщение # 734
Новичок
Группа: Проверенные
Сообщений: 16
Статус: Offline
Quote (LeftRadio)
Ничего там такого криминального нет smile У всех ОУ уменьшается полоса при увеличении к.у.

А и вправду - не так страшен чёрт... Да я потом подумал: ну а уж очень кто будет рассматривать столь высокие частоты, на коие тянет верхний предел девайса. Единицы. Так шо для простого смертного (то бишь - мну smile ) - переживу. Да и проценту эдак 90 данного населения форума - тоже (IMHO, я так предпологаю) столь высокие частоты не больно нужны.
Но мне понятна и озабоченность LazyCat. Может в будущем попробую и по LazyCat настаиваемому варианту собирать smile .
 
LeftRadio Среда, 22.12.2010, 19:19 | Сообщение # 735
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (alan)
Да я потом подумал: ну а уж очень кто будет рассматривать столь высокие частоты, на коие тянет верхний предел девайса.

Не такие они и сверхвысокие smile , смотрите, чтобы норм. рассмотреть сигнал нам нужно хотя бы 20-25т. на период исследуемого сигнала, то есть при 100Мвыборок/сек. это всего 4-5Мгц.

Данного ОУ нам вполне хватит, кстати говоря очень неплохой ОУ smile , жаль только нет вх. SHDN.


---

Нет войне!
 
LazyCat Среда, 22.12.2010, 20:33 | Сообщение # 736
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (LeftRadio)
У всех ОУ уменьшается полоса при увеличении к.у.

Так разговор ведь идет не об ОУ, а об осциллографе. Если можно без существенных затрат сделать аналоговый тракт с приличной полосой, то зачем умышленно ее обрезать и при этом еще оправдываться ? И это ведь только один из всех недостатков предложенной схемы.

Quote (LeftRadio)
чтобы норм. рассмотреть сигнал нам нужно хотя бы 20-25т. на период исследуемого сигнала

Опять Вы про линейную интерполяцию ? А про sin(x)/x забыли ? А ведь она есть уже даже в самых примитивных осциллах !

Quote (LeftRadio)
AD603 заменить будет проблематично

Значит я опять неправильно понял основные критерии при разработке данного проекта sad


Сообщение отредактировал LazyCat - Среда, 22.12.2010, 20:36  
 
LeftRadio Четверг, 23.12.2010, 08:27 | Сообщение # 737
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (LazyCat)
Если можно без существенных затрат сделать аналоговый тракт с приличной полосой, то зачем умышленно ее обрезать и при этом еще оправдываться ?

Я и не оправдываюсь, Вы не правильно поняли smile .

Поразмышляв smile и правда склоняюсь к вашему решению(почти smile ), но думаю вместо 603-го уж лучше AD8330, да и несколько дешевле...

Quote (LazyCat)
А про sin(x)/x забыли ?

Нет не забыли smile , но осциллограф нужен не только для наблюдения почти идеального синуса, а как раз наоборот..
Хотя я и не отрицаю полезности данной функции.


---

Нет войне!
 
LazyCat Четверг, 23.12.2010, 10:36 | Сообщение # 738
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (LeftRadio)
но думаю вместо 603-го уж лучше AD8330, да и несколько дешевле...

Это я не понял. AD8330 стоит на дижикее $9.22 да и жрет 20mA, к тому же ей в пару надо еще AD8132(стоит $3.85 и жрет 12mA). В сумме эта парочка проигрывает по всем показателям.

P.S. sin(x)/x - это из теоремы Котельникова-Найквиста и к идеальному синусу отношения не имеет.

Сообщение отредактировал LazyCat - Четверг, 23.12.2010, 10:36  
 
LeftRadio Четверг, 23.12.2010, 15:54 | Сообщение # 739
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (LazyCat)
Это я не понял. AD8330 стоит на дижикее $9.22 да и жрет 20mA

На дижикее возможно, жрет не намного больше AD603...

Quote (LazyCat)
к тому же ей в пару надо еще AD8132

Зачем?

Quote (LazyCat)
P.S. sin(x)/x - это из теоремы Котельникова-Найквиста и к идеальному синусу отношения не имеет.

Не буду спорить, просто можете посмотреть что будет происходить с меандром при включении данной интерполяции.


---

Нет войне!
 
LazyCat Четверг, 23.12.2010, 21:34 | Сообщение # 740
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (LeftRadio)
На дижикее возможно, жрет не намного больше AD603...

Так дижикей я использую как удобный сравнительный справочник и доставать микросхемы лучше другим способом(дешевле будет)
А схему включения AD8330 я представляю с трудом. Можно использовать недифференциальный вход(другой через кондер на массу) и при этом для подачи напряжения коррекции нуля использовать дополнительный ОУ или нестандартный резистивный сумматор на входе AD8330(но у нее низкое входное сопротивление). Но не пойму зачем такой огород ?

Quote (LeftRadio)
Не буду спорить, просто можете посмотреть что будет происходить с меандром при включении данной интерполяции.

Это я прекрасно знаю, у меня была курсовая работа по теореме Котельникова !!! Максимум, что может произойти, это феномен Гиббса - программно наведенные выбросы на резких перепадах. Но это только при наличии в сигнале частотных компонент выше частоты Найквиста(половина от частоты дискретизации). В любом случае визуально сигнал после sin(x)/x выглядит значительно лучше, чем при линейной интерполяции при малом числе точек.
 
LeftRadio Суббота, 25.12.2010, 07:21 | Сообщение # 741
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Зачем другой вход на массу? На него можно и подать смещение, а вообще у AD8330 для смещения есть еще специальный вход.
В принципе я не против AD603, только лично мне проще и дешевле было бы достать AD8330, я ее и предложил на замену только исходя из этих соображений.

Кстати наконец сделал пару фото ЖК, качество правда не очень...

Сразу после инициализации:

Просто заливка одним цветом:

Вывод шрифта 16х8:

Примитивы(точки, линии, прямоугольник):

Ну и напоследок небольшое видео :), правда на ЖК это смотрится лучше, видимо так из-за несовпадения кадров...


---

Нет войне!
 
kazimirius Суббота, 25.12.2010, 07:22 | Сообщение # 742
Освоился
Группа: Проверенные
Сообщений: 45
Статус: Offline
Quote
у меня была курсовая работа по теореме Котельникова !!!

А у меня мужики, была курсовая по разделению спирто-водной смеси, химиком был я. (вот и мучаюсь уже 30 лет) sad
 
LeftRadio Четверг, 30.12.2010, 15:56 | Сообщение # 743
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Всех с наступающим!

К сожалению у меня несколько плохие новости относительно 2.0 и ЖК, не успевает МК и все sad при двух вкл. каналах выдает на экран 2-3 кадра/сек...Можно конечно попробовать оптимизировать, но в ассемблере я профан :). Вот код считывания и вывода на экран:

Code

void Read_Fifo_Massive(uchar Chanel)
{
           xdata ushort data_fifo;

           /* FIFO Start*/
    EX0 = 1;          
    CTRL = 0;

    /* Wait for FIFO FF Interupt */
    while(INT_FIFO == 0);
              
           INT_FIFO = 0;
           EX0 = 0;    
           CTRL = 1;
           READ_A_FIFO = 1;
           READ_B_FIFO = 1;

    /* Read FIFO */
           if( (Chanel == Chanel_A) || (Chanel == Both) )
           {                    
             counter = 399;
             do
             {
                LCD_DataPort_to_IN();
                READ_A_FIFO = 0;
                data_fifo = P2;
                READ_A_FIFO = 1;
                   
                LCD_DataPort_to_OUT();
                   
                graf_color = BkColor;
                Draw_point( 70 + OUT_BUFER_A[counter], counter);                             
                   
                graf_color = RED;
                data_fifo = reverse_bit(data_fifo);    
                Draw_point( 70 + data_fifo, counter);
                OUT_BUFER_A[counter] = data_fifo;                
             }
             while(counter--);                       
           }

            /*Chanel B read*/
           if( (Chanel == Chanel_B) || (Chanel == Both) )
           {             
             counter = 399;
             do
             {
                LCD_DataPort_to_IN();
                READ_B_FIFO = 0;
                data_fifo = P2;
                READ_B_FIFO = 1;
                   
                LCD_DataPort_to_OUT();
                   
                graf_color = BkColor;
                Draw_point( OUT_BUFER_B[counter] - 30, counter);    
                   
                graf_color = YELLOW;
                data_fifo = reverse_bit(data_fifo);
                Draw_point(  data_fifo - 30, counter);
                OUT_BUFER_B[counter] = data_fifo;
             }
             while(counter--);                   
           }
       
           RESET_FIFO();
}

void Draw_point(uchar x0, ushort y0)
{
     LCD_SetCursor(x0,y0);     
     LCD_16B_Write_Data(graf_color);
}

void LCD_16B_Write_Data(ushort data_lcd)
{
    CS_LCD = 1;    
    LCD_Write_Data(data_lcd >> 8);
    LCD_Write_Data(data_lcd);     
    CS_LCD = 0;    
}

void LCD_Write_Data(uchar data_lcd)
{    
    LCD_DATA = data_lcd;        //    
    WR_LCD = 0;    
    WR_LCD = 1;    
}

И отдельно функция reverse_bit

Code

uchar reverse_bit(uchar word)
{
       xdata uchar reverse[]  =    
               {
                   0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
                   0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
                   0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
                   0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
                   0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
                   0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
                   0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
                   0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
                   0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
                   0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
                   0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
                   0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
                   0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
                   0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
                   0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
                   0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
                   0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
                   0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
                   0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
                   0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
                   0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
                   0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
                   0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
                   0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
                   0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
                   0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
                   0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
                   0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
                   0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
                   0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
                   0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
                   0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF,
               };

       return (reverse[word]);      
}



---

Нет войне!
 
Муха Четверг, 30.12.2010, 18:00 | Сообщение # 744
Почетный Гражданин
Группа: Модераторы
Сообщений: 579
Статус: Offline
Quote (LeftRadio)
graf_color = BkColor;
Draw_point( OUT_BUFER_B[counter] - 30, counter);
graf_color = YELLOW;
Draw_point( data_fifo - 30, counter);

это мне совсем не нравится, стираем старую, рисуем новую... sad А нельзя ли как-то использовать буфер самого диспа для восстановления экрана, а то мы получается 4 раза рисуем точку, когда 2 канала. И потом ты рисуешь, получается, прямо в цикле чтения фифо, тут надо подумать...


Сообщение отредактировал Муха - Четверг, 30.12.2010, 21:29  
 
LazyCat Четверг, 30.12.2010, 23:01 | Сообщение # 745
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Всех с наступающим Новым Годом booze Привет Вашей печени biggrin

Вот, в качестве подарка, вытащил из своего старого проекта и соптимизировал много раз упомянутый алгоритм sin(x)/x

Code
// S[] - массив выборок
// N - число реальных выборок
// n - число интерполируемых точек (max=10)

#define N 512
const float PI = 3.14159265358979f;
     
int i,j,n1,N1,t;
float x,S[(N-1)*11];

n1 = n + 1; N1 = (N-1)*n1;

for(i=0; i<=N1; i+=n1) S[i] = getUSB(channel);

if(n) {
    for(i=0;;i++) {
      t = (i/n)*n1 + (i%n) + 1;
      if(t >= N1) break;
      S[t] = 0.0f;
      for(j=0; j<=N1; j+=n1) {
        x = PI*(j-t)/n1;
        S[t] += S[j]*sin(x)/x;
      }
    }
}

draw(S);

Так как сейчас идет период сильного потребления спирто-водной смеси, то я не готов сейчас обсуждать работу с ЖК, но в Новом Году, надеюсь, начнем именно с этого....


Сообщение отредактировал LazyCat - Четверг, 30.12.2010, 23:09  
 
LeftRadio Четверг, 30.12.2010, 23:03 | Сообщение # 746
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (LazyCat)
Всех с наступающим Новым Годом booze Привет Вашей печени biggrin

И твою печень от всей души с наступающим!!!

Quote (Муха)
Надо как-то использовать буфер самого диспа для восстановления экрана

А он есть? Я в даташите ничего про буфер не видел...

Quote (Муха)
И потом ты рисуешь, получается, прямо в цикле чтения фифо, тут надо подумать...

Это оказалось быстрее чем вычитка фифо в массив, а потом из массива в ЖК.


---

Нет войне!
 
LeftRadio Пятница, 31.12.2010, 00:08 | Сообщение # 747
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Чуть ускорил вывод переделав обращение к массивам через указатели, но все равно медленно... cry

Code

void Read_Fifo_Massive(void)
{
           data uchar data_fifo;
           data uchar *pa0, *pa1;

           pa0 = &OUT_BUFER_A[399];
           pa1 = &OUT_BUFER_B[399];

           /* FIFO Start*/
     EX0 = 1;          
        CTRL = 0;

     /* Wait for FIFO FF Interupt */
     while(INT_FIFO == 0);
           INT_FIFO = 0;
           EX0 = 0;    
     CTRL = 1;
           READ_A_FIFO = 1;
           READ_B_FIFO = 1;

     /* Read FIFO */
           if( (Chanel == Chanel_A) || (Chanel == Both) )
           {                    
             counter = 399;
             do
             {
                LCD_DataPort_to_IN();
                READ_A_FIFO = 0;
       data_fifo = P2;
       READ_A_FIFO = 1;
                   
                LCD_DataPort_to_OUT();
                   
                graf_color = BkColor;
                Draw_point( *(pa0 - counter) , counter);                             
                   
                graf_color = LIGHT_RED;
                data_fifo = (reverse_bit(data_fifo)+70);    
                Draw_point(data_fifo, counter);
                *(pa0 - counter) = data_fifo;                
             }
             while(counter--);                       
           }

           if( (Chanel == Chanel_B) || (Chanel == Both) )
           {
              /*Chanel B read & transive*/
             counter = 399;
       do
             {
                LCD_DataPort_to_IN();
                READ_B_FIFO = 0;
       data_fifo = P2;
       READ_B_FIFO = 1;
                   
                LCD_DataPort_to_OUT();
                   
                graf_color = BkColor;
                Draw_point( *(pa1 - counter) , counter);    
                   
                graf_color = LL_GREEN;
                data_fifo = reverse_bit(data_fifo)- 30;
                Draw_point( data_fifo , counter);
                *(pa1 - counter) = data_fifo;
             }
             while(counter--);                   
           }
     RESET_FIFO();
}

Кстати написал маленькую утилиту для представления цвета в формате 5-6-5

Прикрепления: RGB_to_16bit-5-.exe (10.0 Kb)


---

Нет войне!
 
Муха Пятница, 31.12.2010, 06:59 | Сообщение # 748
Почетный Гражданин
Группа: Модераторы
Сообщений: 579
Статус: Offline
Мельком глянул код, возникли следующие мысли:
LCD_DataPort_to_IN();
LCD_DataPort_to_OUT();
выполняем по два раза при прорисовке обоих каналов, предложение следующее - между IN и OUT читать оба канала FIFO сразу, а потом писать в дисплей, на пару операций будет меньше.

И еще Internal oscillator frequency adjust, default is 7.5MHz.
В МЭЛТовской инициализации стоит Internal Oscillator Frequency 85%
Попробуй поставить не Set_LCD_8B_REG(0x17,0xC1); а Set_LCD_8B_REG(0x17,0x91);
И вообще поиграйся с осциллятором

Сообщение отредактировал Муха - Пятница, 31.12.2010, 07:14  
 
Девятый Пятница, 31.12.2010, 14:28 | Сообщение # 749
Почетный Гражданин
Группа: Друзья
Сообщений: 181
Статус: Offline
Всех С НОВЫМ ГОДОМ !!!! newyear beer
 
LeftRadio Пятница, 31.12.2010, 18:10 | Сообщение # 750
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Всех еще раз с уже таким близким Новым годом beer :beer: beer

Разобрался со скоростью обновления smile А началось все с того что меня до ужаса задрал Keil со своими глюками, особенно если в проекте несколько си файлов, то можно сразу вешаться death В общем установил IAR 7.6 переписал синтаксис и началось... то стек переполняется при добавлении одного массива в XData размером 400 байт, то программа не добирается до main(), а вечно крутится в инициализации по непонятным мне причинам, в общем снес нафиг и совсем отчаялся... Отчаивался, отчаивался smile а дай думаю поставлю IAR 7.51 которым раньше пользовался... Ну тоже мне немного мозги пополоскал по поводу стека biggrin однако потом программа заработала без проблем, да как заработала! Сейчас на глаз при двух работающих каналах кадров 20 - 30 это точно!!! Правда есть и плохая новость sad сетка под осциллограммами стирается(естественно, ведь осциллограммы очищаются черным цветом), а каждый раз ее перерисовывать представляется крайне не экономно в плане ресурсов...

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

Рисуется сетка точками совершено банальным способом, может у кого будут предложения по оптимизации...

Code

void Draw_grid(void)
{
       ushort i, j;

       graf_color = D_ORANGE;
            
       for(i = 25; i < 399; i = i + 25)
       {          
          for(j = 20; j < 224; j = j + 5)Draw_point(j, i);              
       }
            
       for(i = 20; i < 224; i = i+ 25)
       {
         for(j = 0; j < 399; j = j + 5)Draw_point(i, j);         
       }

       /*draw central lines*/
       Draw_Straight_Line(20, 200, horizontal, 203);
       Draw_Straight_Line(120, 0, vertical, 399);
}

void Draw_Straight_Line(uchar x0, ushort y0, bit direction, ushort length)
{        
        LCD_SetCursor(x0,y0);

        switch(direction)
        {
         case horizontal:
           {                 
              do
              {
                 LCD_16B_Write_Data(graf_color);
              }
              while(length--);
           }
           break;
         case vertical:
           {
              do
              {
                 LCD_16B_Write_Data(graf_color);
                 LCD_SetCursor(x0,y0);
                 y0++;
              }
              while(length--);
           }
        }
}

P.S. Подкорректированный аналог с ключами от LT

Прикрепления: analog2.2.pdf (23.6 Kb)


---

Нет войне!
 
LazyCat Суббота, 01.01.2011, 11:35 | Сообщение # 751
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Привет ! Всех с Наступившим newyear
Пока голова полностью еще не восстановилась задам только один вопрос по схеме(хотя я ее и не собираюсь повторять).
Почему разные пары резиков (R5,R46) (R26,R31) (R35,R39) ?
 
LeftRadio Суббота, 01.01.2011, 16:38 | Сообщение # 752
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (LazyCat)
Почему разные пары резиков (R5,R46) (R26,R31) (R35,R39) ?

Банальные опечатки smile


---

Нет войне!
 
Муха Суббота, 01.01.2011, 19:16 | Сообщение # 753
Почетный Гражданин
Группа: Модераторы
Сообщений: 579
Статус: Offline
Всех с наступившим Новым годом!!! newyear
 
Alex73 Суббота, 01.01.2011, 23:45 | Сообщение # 754
Новичок
Группа: Проверенные
Сообщений: 20
Статус: Offline
С наступившим НОВЫМ ГОДОМ newyear pepsi thumbsanta ok
 
LeftRadio Воскресенье, 02.01.2011, 13:54 | Сообщение # 755
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Переделал алгоритм, теперь сетка не затирается, плюс сделал синхр., пока только по каналу А, скорость обновления практичеески не пострадала, покрайней мере на глаз smile , правда пришлось обьявить еще два массива размером 500байт каждый. Может есть предложения?



---

Нет войне!
 
LazyCat Понедельник, 03.01.2011, 20:50 | Сообщение # 756
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Посмотрел на досуге алгоритм, совсем даже неплохо smile
Но в записи for(counter=8; counter<91; counter++) наверное имелось ввиду <92
И я против массива reverse, но раз уж он есть, то лучше в нем хранить сразу reverse[]>>1
 
LeftRadio Понедельник, 03.01.2011, 21:15 | Сообщение # 757
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (LazyCat)
Но в записи for(counter=8; counter<91; counter++) наверное имелось ввиду <92

Да действительно, спасибо.

Quote (LazyCat)
И я против массива reverse, но раз уж он есть, то лучше в нем хранить сразу reverse[]>>1

Это самый быстрый способ переставить биты местами, а сдвиг не всегда нужен, например при отображении двух каналов сдвиг нужен так как 256 точек для каждого канала просто не влезут в экран smile . В одноканальном режиме можно и не сдвигать что бы получит макс. бит.


---

Нет войне!
 
LazyCat Понедельник, 03.01.2011, 21:29 | Сообщение # 758
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (LeftRadio)
Это самый быстрый способ переставить биты местами

Ну самый быстрый - это дорожки на печатной плате biggrin

P.S. И еще напомню программерский трюк :
if((a == 0) && (b == 0)) всегда выполняется медленнее, чем if(a || b), т.к. в случае логического И всегда нужно проверять ОБА условия !

 
LeftRadio Понедельник, 03.01.2011, 22:21 | Сообщение # 759
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (LazyCat)
Ну самый быстрый - это дорожки на печатной плате biggrin

Это да smile


---

Нет войне!
 
Муха Понедельник, 03.01.2011, 22:34 | Сообщение # 760
Почетный Гражданин
Группа: Модераторы
Сообщений: 579
Статус: Offline
Quote (LeftRadio)
Это самый быстрый способ переставить биты местами

Ага, это самый быстрый алгоритм, сам таким пользуюсь...
Можно и так, но медленнее:
tmp = ((in & 0x0F) << 4) | ((in & 0xF0) >> 4);
tmp = ((tmp & 0x33) << 2) | ((tmp & 0xCC) >> 2);
out = ((tmp & 0x55) << 1) | ((tmp & 0xAA) >> 1);


Сообщение отредактировал Муха - Понедельник, 03.01.2011, 22:53  
 
Форум » Сайт и форум » Разработки и Статьи на сайте » Все вопросы касающиеся Neil Scope (Ваши замечания, предложения и т.д.)
Поиск:
uTmpl.ru Сайт создан в системе uCoz Сейчас: 25.04.2024, 18:24