Перейти к содержанию
    

AlexKoblov

Свой
  • Постов

    72
  • Зарегистрирован

  • Посещение

Весь контент AlexKoblov


  1. Заменил сжатие по горизонтали более простым алгоритмом, и время обработки сократилось с 56сек до 4сек То что закомментарено, это так было, а ниже как стало: // for (int j = 0; j < 65536; j++) { // if(j<data_in) SumArray[j]+=1; // } for (int j = 0; j < data_in; j++) { SumArray[j]+=1; }
  2. Вот сделал отображение графика как хотел, лишние иголочки не отображаются: Сверху как было, снизу как стало: Для вывода использовал компонент TeeChart - Color Grid - Color Range (у него обнаружилось ограничение в 32768 точек по горизонтали, поэтому мои 500тысяч точек пришлось сжимать под это размер, или в с случае pBitmap до ширины картинки, и именно 890точек) Но предварительно данные подготавливаются, сжимаются по горизонтали и вертикали в массив Map. В принципе можно выводить и в pBitmap->Canvas->Pixels[x][y] = RGB (Map[x][255-y], Map[x][255-y], Map[x][255-y]); а потом PaintBox1->Canvas->Draw(0,0,pBitmap); Вот отладочные куски может кому пригодится: первый это сжатие: второй это вывод на экран в двух видах, в картинку BitmapCanvas и в SeriesTeeChart:
  3. Всем Привет! Есть ли стандартные средства перемещения и масштабирования отдельных графиков в ТеeChart? С масштабированием группы графиков (например графики Series1, Series2, Series3 входящих в один Chart1) , проблем нет, меняются минимумы и максимумы по оси-Y у Chart1, и они и двигаются и масштабируются быстро. Но нужно сдвинуть только один, например красный сдвинуть вверх, но чтобы зеленый остался на месте: Понятно что можно математически: for(int i=0;i<Chart1->Series[1]->Count()-1;i++) Chart1->Series[1]->YValues->Value[i]+=Y; Но при больших графиках, например по оси-X 690тысяч точек, такой алгоритм откровенно тормозит. А если масштабировать, т.е. умножать на какойто коэффициент, то могут начальные данные портится (исходные значения не сохраняются), а очищать Series1 заполнять его из какого-то массива с умножением на коэффициент тоже не быстро будет. Уже два дня копаю TeeChart на эту тему, в нем много всего, но нужное не могу найти. Может типа какая нибудь локальная система координат для каждого отдельного Series? Есть еще один вопрос, по поводу стандартного масштабирования в TeeChart, например есть такой график: он имеет пики 1,2,3, они очень тоненькие, но при отдалении зума они сохраняются, видно на нижнем графике, и изза этого создается впечатление что сигнал на нижнем графике сильно зашумлен, хотя там всего маленькие иголочки были. Это похоже как в осциллографе есть режим PeakDetected, но его в осциллографе можно выключить и эти тонкие пики на отдаленном по зуму сигнале отображаться не будут. Вот вопрос: как в TeeChart тоже отключить этот режим PeakDetected, т.е. чтобы на отдаленном отображении графика эти иголочки вообще не отображались ? Вот еще картинка для примера: Может нестандартными средствами можно такое скрыть (без использования фильтра LowPass) ?
  4. Вообще то он 2017 года Embarcadero® C++Builder 10.2 Version 25.0.26309.314 Copyright © 2017 Embarcadero Technologies, Inc. All Rights Reserved.
  5. Работает. Спасибо! TCursorTool* t = NULL; t = dynamic_cast <TCursorTool*> (Chart1->Tools->Items[0]); t->FollowMouse = true;
  6. Добавил скобки и заработало. Спасибо! ((TCursorTool*)(Chart1->Tools->Items[0]))->FollowMouse = true; Итоговый вариант доступа к графику через Chart1, а не через Series1 и ChartTool1, после импорта из *.tee файла, выглядит так: void __fastcall TForm1::Chart1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { AnsiString str,str2; str=Chart1->Tools->Items[0]->Description(); str2="Cursor"; if((Chart1->Tools->Count>0)&&(CompareText(str, str2)==0)) { str="Х="; str+=(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue); str+=" Y="; str+=(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->YValue); Label20->Caption=str; if(GLOBAL_DATA_LEN>(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue)) { str="VCNL="; str+=Chart1->Series[0]->YValues->Value[(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue)]; Label21->Caption=str; str="ACC X="; str+=Chart1->Series[1]->YValues->Value[(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue)]; Label22->Caption=str; str="ACC Y="; str+=Chart1->Series[2]->YValues->Value[(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue)]; Label23->Caption=str; str="ACC Z="; str+=Chart1->Series[3]->YValues->Value[(int)(((TCursorTool*)(Chart1->Tools->Items[0]))->XValue)]; Label24->Caption=str; } else { Label21->Caption="VCNL= выход за пределы"; Label22->Caption="ACC X= выход за пределы"; Label23->Caption="ACC Y= выход за пределы"; Label24->Caption="ACC Z= выход за пределы"; } } } Выдает ошибку на nullptr, хотя на экране это слово выделено как зарезервированное слово (типа как int или double) [bcc32 Error] bletest1.cpp(1585): E2451 Undefined symbol 'nullptr' Спасибо за подсказку! может тут тоже нужно было немного добавить и заработало бы, но я не понял что Да жив и на разных платформах работает (сайт TeeChart): Даже на iOS, правда еще не пробовал, но хочется :)
  7. Всем Привет! Подскажите плиз, как можно перевести данную строку на C++: (Chart1.Tools.Items[0] as TCursorTool).FollowMouse:=true; Chart1.Tools.Items[0] типа TTeeCustomTool, а обратиться к нему нужно как к TCursorTool Просто назначить тоже не получается ошибку выдает на такое присвоение ChartTool1=Chart1->Tools->Items[0]; [bcc32 Error] bletest1.cpp(1594): E2034 Cannot convert 'TTeeCustomTool *' to 'TCursorTool *' т.е. мне нужно получить координаты ChartTool1->XValue; но после импорта графика из файла *.tee, ChartTool1 пропадает, как и Series1. Как к сериям после импорта обращаться, я уже научился: Chart1->Series[9]->YValues->Value; а вот как к Тулсам обращаться через Chart1 непонятно. Нашел пример на делфи, но как его переделать на C++ не пойму. Вроде есть typeid, typeinfo, но как их переменить непонятно. p.s. Embarcadero® C++Builder 10.2, TeeChart Pro v2017.20.170306 32bit VCL
  8. Эх даже немного стыдно писать :) Прочитал кучу даташитов про АЦП, перепробовал RC цепи на входе АЦП, фронты только загнулись, но проблема со скачками не решилась. Потом начал проверять самое простое, то на что я и подумать не мог. Время свечения светодиода. Оказалось, что оно менялось скачками в какие-то моменты. Оказалось что эпизодически (на определенных задержках) срабатывало прерывание от АЦП именно в моменты свечения светодиода, и увеличивало его, а это прерывание вообще было добавлено только для отладки, чтобы на осциллографе было видно момент окончания работы АЦП. Отключил прерывание, все проблемы пропали :) Извините за беспокойство, Спасибо Всем откликнувшимся! :)
  9. Вообще у меня проблема в том, как мне кажется, что вот этот конденсатор который внутри АЦП, когда он возвращается в цепь, он в нее разряжается и приводит к скачку сигнала. Вот на видео где я увеличиваю длительность импульса подсветки, и происходит скачек, т.е. сначала я плавно меняю длительность импульса подсветки, и так же плавно меняется сигнал на линии АЦП, но потом он резко падает. Я думаю это из-за несогласованности входного сопротивления АЦП и выходного сопротивления усилителя. А может и нет? https://youtu.be/r_fnwDcV5IA
  10. т.е. вообще никакой разницы нет в наборах номиналов (1К и 8.2К) или (24К и 200К) ? хоть в чем то разница есть? понятно что коэффициент усиления одинаковый. Вообще, в принципе, какая-то разница есть используются низкоомные резисторы или высокоомные? А если (при сохранении коэффициента усиления) поставить резисторы (0.48К и 4К) тоже никакой разницы не будет ? или (0.33К и 2.77К) Я хочу понять, как вообще номиналы этих резисторов влияют на выходное сопротивление усилителя. А в принципе можно ли поднять выходное сопротивление усилителя? и нужно ли это делать для правильной работы АЦП, где рекомендуют 2.5К Может ответы на вопросы для кого-то и очевидны, заранее извиняюсь за свое невежество :) Вот из даташита на АЦП микроконтроллера:
  11. Как отразится изменение номиналов резисторов обратной связи с 1К и 8.2К на 24К и 200К, на выходном сопротивлении усилителя? выходное сопротивление усилителя увеличится или уменьшится? т.е. мне нужно сделать выходное сопротивление усилителя в пределах 2.5К В даташите на микроконтроллер написано, что выходное сопротивление источника должно быть 2.5К, но не более 10K. У Хоровица и Хилла: "Таким образом, с помощью обратной связи можно получить нужный выходной импеданс.", но как именно я не могу понять. Подскажите пожалуйста. Это осциллограмма сигналов до усилителя и после, с резисторами ОС 1К и 8.2К:
  12. помогли на сайте поддержки CCS В общем оказывается, что по умалчанию const у них используется для хранения переменных в ROM. А что бы был обычный си нужно было написать: #device ANSI //switch const meaning Так, сделал и все ошибки исчезли :) Вот дословный ответ c их сайта: By default in CCS, a 'const', is a ROM type to which a pointer can't be constructed. In ANSI C, a const is a variable in RAM, that is protected (if the hardware has such protection), against being modified. If ANSI is selected CCS attempts to switch the definition (but personally it is safer just to get rid of const).
  13. Похоже это косяк CCS C PIC Compiler. Установил MPLAB® XC Compiler, скомпилилось все нормально. Блин так неохота перелазить с одного компилятора на другой, когда уже написанна куча кода под CCS C PIC Compiler.
  14. Общение с BLE112 через RS232 с компом помощью BGLIB API наладил, приделал эти библиотеки к C++ Builder 6, с модулем общаюсь, тут все Ок. Но сделать тоже самое на PIC18F46J50 не получается, затык в компиляторе под этот PIC18, а именно CCS C PIC Compiler 5.049. Компилятор не хочет понимать следующую строку: typedef void (* ble_cmd_handler) (const void *); Она используется в исходниках BGLIB API. C++ Builder 6 эту строку воспринял нормально. уже сделал простой пример, он все равно не компилится, выдает такие ошибки: "Expecting an identifier" "Expecting a declaration" вот и вся программа: newmain22.c: ----------------------------------------------------------------------------- #include <18F46J50.h> typedef void (*ble_cmd_handler)(const void*); void main(void) { int a, b, c; a=2; b=2; c=a+b; } ----------------------------------------------------------------------------- "C:\Alex\PROGRAMS\PICC5049\CCSCON.exe" out="build/default/production" newmain22.c +FH +DF +CC +Y=9 +EA +DF +LN +T +A +M +J +EA +Z -P #__18F46J50=1 C:\Alex\MPLAB_PRJ_PCC\test_struct\test_struct.X\newmain22.c:3:59: Error#28 Expecting an identifier C:\Alex\MPLAB_PRJ_PCC\test_struct\test_struct.X\newmain22.c:3:64: Error#43 Expecting a declaration C:\Alex\MPLAB_PRJ_PCC\test_struct\test_struct.X\newmain22.c:3:65: Error#43 Expecting a declaration 3 Errors, 0 Warnings. Build Failed. Может кто знает как этому CCS C PIC компилятору объяснить что это за строка: typedef void (*ble_cmd_handler)(const void*); может ее можно както записать по другому? я честно ее не пойму
  15. Подскажите как нарисовать и поставить реперный знак на плату ? из поиска по форуму понял что для этого используется Fiducial, но как его ставить ? как компонент parts=symbol+cell в схему добавлять ? а в cell нарисовать как Fiducial ? P.S. DC/DV 7.9+EE7.9 Блин понял, Edit->Place, есть Fiducial, ставится так же как и дополнительные via. Спасибо :)
  16. Поставил ментор DC/DV 7.9, EE7.9 на ноутбук, и при попытке редактирования посадочного места - cell, редактор вылетат с ошибкой, "CellEditor wrapper" APPCRASH CellEditor70.exe, имя модуля с ошибкой MSVCR90.dll, причем CellEditor.exe остается в памяти компа, в списке процессов, столько копий сколько раз пытался запустить. Открытый партишн резервировался, помогало только unreserve partition в library manager, но это не главное. Пол дня чего только не делал. Думал и лицензия прокисла или еще что, потом выяснил, что в безопасном режиме винды все работает, а в обычном ошибка. Ноут с Win7, i7. В итоге выяснил, что проблема в масштабировании шрифтов в windows. А именно когда стоит пользовательская настройка, у меня например масштаб 111%. Если поставить из стандартного выбора 100% или 125%, то ошибки нет.
  17. Вроде я понял почему MAC адрес стал ff:ff:ff:ff:ff:ff Потому что я прошивал откомпилированное на ble-1.1.1-71 через SmartRF Flash Programmer от TI, а BlueGiga это запретила в новых версиях компилятора, нужно пользоваться BLEupdate tool от Bluegiga для прошивки, чтобы не затереть важную инфу. Вроде так понял. Сейчас сделал запрос в техподдержку Bluegiga, чтобы прислали мне лицензионные ключи, и подсказали что делать с MAC адресом. Вот цитаты из pdf: " Note: TI Flash tool should NOT be used with the Bluegiga Bluetooth Smart SDK v.1.1 or newer , but BLE Update tool should be used instead. The BLE112 and BLED112 devices contain a security key, which is needed for the firmware to operate and if the device is programmed with TI flash tool, this security key will be erased. Note: Final 1.1.0 SW release will require the Bluegiga license key at the module and this will need to be entered to the modules through the programming pins. " ------update-------- Вроде не так. MAC адрес стерся по какой то другой причине. Изменить его можно в SmartRF Flash Programmer от TI IEEE Secondary это и есть MAC адрес и он почемуто стал ff:ff:ff:ff:ff:ff IEEE Primary это Serial number он остался целый Из Bluegiga прислали длинные лицензионные ключи для BLE Update tool. Еще написали что если вы вдруг стерли свой MAC, то если его помните или записали, то можете его восстановить в SmartRF Flash Programmer от TI. А если потеряли то они могут прислать новый. Я запросил чтобы прислали. И они прислали. Причем все так быстро, каждый ответ меньше 5 минут. И лицензионные ключи и новый MAC. :) Так что советую записывать куда нибудь в надежное место MAC адреса купленных модулей и на всякий случай серийные номера.
  18. 1. А на компе на чем пишете ? С++ Builder ? У меня с помощью GCC_MinGW получилось откомпилить исходники примеров, "scan_example" и "thermometer-demo", они работают, датчик температуры данные выдает. Правда там в скрипте не температура, а просто цикл от 0 до 100 с частотой 2раза в секунду. см картинку. А в С++ Builder их пока не получается прикрутить, не хватает "unistd.h", а при добавлении его и других нужных хэдеров из GCC_MinGW, куча ошибок лезет. 2. Может есть у кого исходники blegui2.exe ? Или другой пример ? или как вообще начать работать с Bluegiga API на C++ Builder ? 3. Почему то у всех моих прошивок девайсов MAC адрес в blegui2.exe ff:ff:ff:ff:ff:ff Вообще этот адрес где можно задать? в скрипте или в hardware.xml ? и нужно ли его задавать или пусть такой будет? конфликтов не будет? 4. Можно ли используя скриптовый язык делать короткие задержки например 200мкс? Это нужно чтобы включить ИК светодиод на 200мкс, далее получить данные от АЦП с фототранзистора, и выключить светодиод. Короткие задержки нужны для уменьшения энергопотребления. Ток на светодиод идет большой 50mA, через полевик, так что подсветить он успевает на таком импульсе. Спасибо! :)
  19. Итоги: После хорошего начала выяснилось, что плата не двухслойная, как предполагалось, а многослойная, 3 или 4 слоя. Сообщил об этом хозяину устройства. Сказал ему, что нужно стачивать слои, чтобы увидеть разводку внутренних слоев. Он сказал, что хочет сохранить устройство в рабочем виде. Пришлось все запаять обратно. Запаял, проверил, вроде все работает. В общем, схемы пока не будет. Может, когда еще желанием загорюсь куплю себе такое устройство и доковыряю его до схемы. Попутно можно сколку платы сделать, чтобы изготовить взамен запорченной. Но пока сильного желания нет. Поживем, дальше видно будет. Фотоотчет разборки тут: http://ezoelectro.narod.ru/stopsleep/stops...isassembly.html
  20. Да специалисты наверное все серьезными делами занимаются, а вот устройстро которое я делаю тоже на PICe, и программу для него пишу, но вот схемотехнику снятия сигналов с кожи пока не освоил поэтому и интересно, и схемотехнику литиевого аккумулятора только на ltc4054 на макетке сделал, интересно как тут энергосбережение реализованно, как операционный усилитель выключают. Такчто постоянно приходится учиться в том числе и на примерах других игрушек. В детстве тоже любил разобрать и посмотреть как что устроенно :) А может на таких примерах и своих новых специалистов вырастим, а дальше как говориться догоним и перегоним :)
  21. ledum Спасибо Большое! за подсказки, буду дальше в схеме разбираться! :)
  22. Помогите определить название SMD радиодеталей по сокращенным наименованиям Интересует схемное решение прибора STOPSLEEP, разобрал его но не могу идентифицировать радиодетальки, прошу помощи. 1. "PFK" (5выводов) 2. "PES" (5выводов) 3. "10 44 V1" (3 вывода) 4. "A5 U" (3 вывода) 5. "KE55" (5выводов) 6. "12W 06" (3 вывода) 7. "AYJ TI W 9BZF" (12 выводов) http://ezoelectro.narod.ru/stopsleep/stops...isassembly.html
  23. Защищенное обновление прошивки в модуле BLE112. Вроде бы прошивку можно обновить и без программатора cc-debugger. Через подключение модуля BLE112 к USB порту. Вопрос: можно ли организовать защиту в таком обновлении? т.е. чтобы таким обновлением можно было бы обновить не любой новый модуль, а модуль конкретного изделия. Это нужно для защиты от клонирования изделия. Хотелось бы так: 1. Запрограммировать модуль BLE112 через CC-debugger, с каким нибудь загрузчиком, с ключом. 2. Прошить по USB. 2. Передать изделие с модулем клиенту. 3. Обновление прошивки выкладывать в интернете. 4. Клиент сам обновляет прошивку по USB. Прошивка особо важна, потому что изделие состоит практически из одного модуля и пары простых датчиков.
  24. Сделал еще один донгл, уже со своим стабилизатором питания на 3.3В. В blegui модули видят друг друга. Буду дальше разбираться. Фото:
  25. Спасибо за помощь и поддержку!!! :)
×
×
  • Создать...