Jump to content

    

xxxmatrixxx

Участник
  • Content Count

    95
  • Joined

  • Last visited

Community Reputation

0 Обычный

About xxxmatrixxx

  • Rank
    Частый гость
  • Birthday 05/31/1985

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

1219 profile views
  1. скорее качество фото такое и дисплей бликует, рисует нормально
  2. Отвечу сам на свой вопрос, надеюсь, кому-нибудь пригодится эта информация: библиотека не позволяет в автоматическом режиме устанавливать масштабирование, только возможно сделать масштабирование разметки сетки, но вывод точек на дисплей в нужном масштабе остается за программистом вот мой кусок кода и пояснения к нему: Graph_xSize - размер окна графика по оси Х Graph_ySize - размер окна графика по оси Y max_val - индекс максимального значения элемента массива, т.е. array_adc[max_val] и есть само значение size_array_adc - размер массива float i,j, k_x, k_y; GUI_POINT point; hItem = WM_GetDialogItem(pMsg->hWin, WmGraphic_FindId("Graph_Adc")); //GRAPH_SetBorder(hItem, 0,5,5,5); WmGraphic_Set_Graph_Size(); hDataXY = GRAPH_DATA_XY_Create(GUI_WHITE, Graph_xSize, 0, 0); GRAPH_AttachData(hItem,hDataXY); GRAPH_SetVSizeX(hItem,Graph_xSize); GRAPH_SetVSizeY(hItem,Graph_ySize); // GRAPH_SetAutoScrollbar(hItem,GUI_COORD_X | GUI_COORD_Y,1); k_x = (float)size_array_adc/Graph_xSize; k_y = (float)array_adc[max_val]/Graph_ySize; printf("\r\nPlot Graph:"); printf("\r\nsize_array_adc = %d, max_val = %d",size_array_adc,max_val); printf("\r\nGraph_xSize = %d, Graph_ySize = %d",Graph_xSize,Graph_ySize); printf("\r\nk_x = %f, k_y = %f",k_x,k_y); fflush(stdout); printf("\r\n"); for(i = k_x, j = 0; i < size_array_adc; i += k_x, j++){ point.x = j; point.y = array_adc[(int)i]/k_y; GRAPH_DATA_XY_AddPoint(hDataXY,&point); } fflush(stdout); GRAPH_DATA_XY_SetLineVis(hDataXY, 1); // Create and add vertical scale hScaleV = GRAPH_SCALE_Create(25, GUI_TA_RIGHT, GRAPH_SCALE_CF_VERTICAL, 20); GRAPH_SCALE_SetFactor(hScaleV, (float)array_adc[max_val]/200); // 0.2f GRAPH_SCALE_SetTextColor(hScaleV, GUI_RED); GRAPH_AttachScale(hItem, hScaleV); // Create and add horizontal scale hScaleH = GRAPH_SCALE_Create(4, GUI_TA_HORIZONTAL, GRAPH_SCALE_CF_HORIZONTAL, 30); GRAPH_SCALE_SetFactor(hScaleH, (float)size_array_adc/300); // 0.1f GRAPH_SCALE_SetTextColor(hScaleH, GUI_BLUE); GRAPH_AttachScale(hItem, hScaleH); // Set graph attributes GRAPH_SetGridDistX(hItem, array_adc[max_val]/20); GRAPH_SetGridDistY(hItem, size_array_adc/30); GRAPH_SetGridVis(hItem, 1); GUI_Exec(); static short WmGraphic_Set_Graph_Size(){ U8 i; for(i = 0; i < GUI_COUNTOF(_aDialogCreate);i++) if(strstr(_aDialogCreate[i].pName,"Graph_Adc")){ Graph_xSize = _aDialogCreate[i].xSize - 5; Graph_ySize = _aDialogCreate[i].ySize - 5; return 0; } return -1; } Исходные данные в Excel: отображение на дисплее:
  3. Здравствуйте, уважаемые форумчане Есть задача - отрисовать график на STM32L496 с использованием библиотеки STEmWin на сборке с дисплеем ITDB-28TFT сейчас возникла такая проблема, что все точки графика не влезают, понятное дело, в размеры дисплея 320х240, по горизонтали выводится 2600 точек, по вертикали 490 можно ли инструментами библиотеки STEmWin сделать масштабирование??? т.е. вывести в начале весь график, не задумываясь о масштабе, как в QCustomPlot в Qt (я запихал все точки, а сама библиотека ужала его в размеры окна), а затем сделать приближение, либо уменьшение, не задумываясь о сетке, какие точки выводить при этом... т.е. получаю полностью весь функционал и осуществляю только управление... сейчас получилось вывести все на график и прокручивать с помощью горизонтальной и вертикальной полос прокрутки, но при таком количестве точек это очень неудобно, хочется видеть примерный график на дисплее сразу по всем точкам спасибо, жду вашего ответа
  4. у меня в любом случае до передачи реальных данных не доходит, сразу после глобального разрешения всех прерываний, постоянно попадаю в обработчик TX по SPI
  5. там биты выталкиваются от старшего к младшему, т.е. если я пишу uint8_t, то я должен сдвинуть их на 8 разрядов влево #define SPI_A_DATA_WIDTH 8 вот и выходит SPI_writeDataNonBlocking(SPIA_BASE, spi_data << (16 - SPI_A_DATA_WIDTH)); Test_Dev_SPI(); Test_Dev_I2C(); Test_Dev_CAN(); Test_Dev_LEDS(); у меня до этих функций вообще не доходит, сразу начинает отрабатывать прерывание постоянно
  6. перечитал, спасибо, буду ставить внешнюю физику на CAN и проверять а что с I2C и SPI, сейчас они у меня никуда не подключены и выплевывают пакеты наружу, смотрю их наличие осцилографом?
  7. Здравствуйте, уважаемые форумчане!!! мы приобрели следующий набор отладочных плат: 1. HSEC180 controlCARD Baseboard Docking Station https://www.ti.com/tool/TMDSHSECDOCK https://efind.ru/offer/TMDSHSECDOCK 2. F28388D controlCARD evaluation module https://www.ti.com/tool/TMDSCNCD28388D https://efind.ru/offer/TMDSCNCD28388D сейчас я создал тестовый проект на основе примеров, которые идут с C2000Ware_3_02_00_00 для данного контроллера, в нем я хочу осуществить следующее: 1. передать данные по SPI, увидев, что отрабатывает прерывание и увеличивается счетчик переданных пакетов, встать осцилом на пины и увидеть клок и данные 2. передать данные по I2C, увидев, что отрабатывает прерывание и увеличивается счетчик переданных пакетов, встать осцилом на пины и увидеть клок и данные 3. проинициализировать CAN_A и CAN_B, замкнуть CAN_A_RX на CAN_B_TX, CAN_B_RX на CAN_A_TX, передать пакеты с CAN_A->CAN_B, затем с CAN_B->CAN_A, увидеть, как отрабатывают прерывания void Test_Dev_Init(void){ uint32_t pin = 0; /////////////////// I2C ///////////////////////// //I2C_A pin = 1; // SCL GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_1_SCLA); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); pin = 0; // SDA GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_0_SDAA); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); // Initialize I2C and its FIFO. I2C_disableModule(I2CA_BASE); I2C_initMaster(I2CA_BASE, DEVICE_SYSCLK_FREQ, I2C_A_SPEED, I2C_DUTYCYCLE_33); I2C_setConfig(I2CA_BASE, I2C_MASTER_SEND_MODE); // | I2C_MASTER_RECEIVE_MODE I2C_setDataCount(I2CA_BASE, 2); I2C_setBitCount(I2CA_BASE, I2C_BITCOUNT_8); I2C_setAddressMode(I2CA_BASE, I2C_ADDR_MODE_10BITS); I2C_setSlaveAddress(I2CA_BASE, I2C_A_ADR_SLV); I2C_setEmulationMode(I2CA_BASE, I2C_EMULATION_FREE_RUN); I2C_enableFIFO(I2CA_BASE); I2C_clearInterruptStatus(I2CA_BASE, I2C_INT_TXFF); I2C_setFIFOInterruptLevel(I2CA_BASE, I2C_FIFO_TX2, I2C_FIFO_RX2); I2C_enableInterrupt(I2CA_BASE, I2C_INT_TXFF | I2C_INT_STOP_CONDITION); I2C_enableModule(I2CA_BASE); Interrupt_register(INT_I2CA_FIFO, &I2C_A_FIFO_ISR); Interrupt_enable(INT_I2CA_FIFO); /////////////////// SPI ///////////////////////// //SPI_A pin = 18; // CLK GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_18_SPIA_CLK); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); pin = 16; //SIMO GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_16_SPIA_SIMO); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); pin = 17; //SOMI GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_17_SPIA_SOMI); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); pin = 19; // STE GPIO_setMasterCore(pin, GPIO_CORE_CPU1); GPIO_setPinConfig(GPIO_19_SPIA_STEN); GPIO_setPadConfig(pin, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(pin, GPIO_QUAL_ASYNC); //CONFIGURATION SPI_disableModule(SPIA_BASE); // SPI configuration. Use a 500kHz SPICLK and 16-bit word size. SPI_setConfig(SPIA_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0, SPI_MODE_MASTER, SPI_A_SPEED, SPI_A_DATA_WIDTH); SPI_disableLoopback(SPIA_BASE); SPI_setEmulationMode(SPIA_BASE, SPI_EMULATION_FREE_RUN); // FIFO and interrupt configuration SPI_enableFIFO(SPIA_BASE); SPI_resetTxFIFO(SPIA_BASE); SPI_setFIFOInterruptLevel(SPIA_BASE, SPI_FIFO_TX8, SPI_FIFO_RX8); SPI_clearInterruptStatus(SPIA_BASE, SPI_INT_TXFF); SPI_enableInterrupt(SPIA_BASE, SPI_INT_TXFF); SPI_enableModule(SPIA_BASE); Interrupt_register(INT_SPIA_TX, &SPI_A_FIFO_ISR); Interrupt_enable(INT_SPIA_TX); /////////////////// WDT ///////////////////////// SysCtl_serviceWatchdog(); SysCtl_disableWatchdog(); } /////////////////// TEST SPI ///////////////////////// volatile uint16_t spi_txMsgCount = 0; __interrupt void SPI_A_FIFO_ISR(void){ uint32_t i,status; status = SPI_getInterruptStatus(SPIA_BASE); i = SPI_getTxFIFOStatus(SPIA_BASE); SCIprintf("\r\nSPI_A_FIFO_ISR(int_sts = 0x%x,fifo_sts = 0x%x,)",status,i); spi_txMsgCount++; SPI_clearInterruptStatus(SPIA_BASE, SPI_INT_TXFF); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP6); status = SPI_getInterruptStatus(SPIA_BASE); i = SPI_getTxFIFOStatus(SPIA_BASE); SCIprintf("\r\nSPI_A_FIFO_ISR_AFTER(int_sts = 0x%x,fifo_sts = 0x%x,)",status,i); } void Test_Dev_SPI(void){ uint32_t i; uint16_t spi_data[2] = {0,0}; SCIprintf("\r\nTest_Dev_SPI Start"); while(spi_txMsgCount < 10){ for(i = 0; i < 2; i++) { SPI_writeDataNonBlocking(SPIA_BASE, spi_data[i] << (16 - SPI_A_DATA_WIDTH)); spi_data[i]++; } } SCIprintf("\r\nTest_Dev_SPI End"); } /////////////////// TEST I2C ///////////////////////// volatile uint16_t i2c_data[2] = {0,0}; volatile uint16_t i2c_txMsgCount = 0; __interrupt void I2C_A_FIFO_ISR(void){ uint32_t i,status; status = I2C_getInterruptStatus(I2CA_BASE); i = I2C_getTxFIFOStatus(I2CA_BASE); SCIprintf("\r\nI2C_A_FIFO_ISR(int_sts = 0x%x,fifo_sts = 0x%x,)",status,i); i2c_txMsgCount++; I2C_clearInterruptStatus(I2CA_BASE, I2C_INT_TXFF); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP8); status = I2C_getInterruptStatus(I2CA_BASE); i = I2C_getTxFIFOStatus(I2CA_BASE); SCIprintf("\r\nI2C_A_FIFO_ISR_AFTER(int_sts = 0x%x,fifo_sts = 0x%x,)",status,i); } void Test_Dev_I2C(void){ uint32_t i; SCIprintf("\r\nTest_Dev_I2C Start"); while(i2c_txMsgCount < 10){ for(i = 0; i < 2; i++) { I2C_putData(I2CA_BASE, i2c_data[i]); i2c_data[i]++; } I2C_sendStartCondition(I2CA_BASE); } SCIprintf("\r\nTest_Dev_I2C End"); } void main(void) { // Initialize device clock and peripherals Device_init(); // Boot CM core #ifdef _FLASH Device_bootCM(BOOTMODE_BOOT_TO_FLASH_SECTOR0); #else Device_bootCM(BOOTMODE_BOOT_TO_S0RAM); #endif // Initialize GPIO Device_initGPIO(); // Disable CPU interrupts DINT; // Initialize interrupt controller and vector table. Interrupt_initModule(); Interrupt_initVectorTable(); IER = 0x0000; IFR = 0x0000; //init interface and periphery Test_Dev_Init(); EINT; ERTM; SCIprintf("\033c"); SCIprintf("\r\n|||||||||||||||||||||||||||||||||||||||\n"); Test_Dev_SPI(); Test_Dev_I2C(); Test_Dev_CAN(); Test_Dev_LEDS(); } сейчас я вижу следующее: 1. по SPI как только разрешаю все прерывания, сразу вызывается прерывание по SPI, хотя данные по SPI не передавались, при этом флаг по передаче не сбрасывается, что видно из отладочной печати: SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR_AFTER(int_sts = 0x8,fifo_sts = 0x0,) SPI_A_FIFO_ISR(int_sts = 0x8,fifo_sts = 0x0 2. если прерывания и тест по SPI запретить, а только вкл тест по I2C, то так же сразу вызывается прерывание по I2C, хотя данные по I2C не передавались, при этом флаг по передаче не сбрасывается, что видно из отладочной печати: I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR_AFTER(int_sts = 0x20010,fifo_sts = 0x0,) I2C_A_FIFO_ISR(int_sts = 0x20010,fifo_sts = 0x0 3. по CAN тоже странно отрабатывают прерывания, но я хотел бы сейчас хотя бы разобраться с первыми 2мя пунктами 4. микгание светодиодов отрабатывает корректно как видно по I2C и SPI ситуация очень схожая по отработке прерывания, вероятнее всего дело в настройке самих прерываний, но я пересмотрел там и там, все по примерам сделал верно, да и сами примеры ведут себя так же прошу посмотреть инициализацию, может у вас будут какие идеи, я уже пересмотрел кучу примеров от TI, на github, я не увидел, в чем может быть причина отработки таким образом прерываний по SPI и I2C Также хочу обратить внимание, что питание модуля осуществляется через внешний источник питания +5В, 1,2А, т.е. тока должно хватить спасибо, жду вашего ответа pmu_m_cpu1.zip
  8. я именно его и скачал, переделал wishbone под avalon-mm, сейчас смотрю по коду карту регистров этой коры а насколько верно данная кора отрабатывает? есть ли опыт использования ее?
  9. Может есть у кого Can 2.0B под другую шину(например, AXI от Xilinx) с исходниками, желательно на veriloge? кто-нибудь использовал Can Protocol Controller с OpenCores, насколько верно отрабатывает данный модуль, и есть ли на него описание у кого-нибудь, чтобы по коду не копаться?
  10. Здравствуйте, уважаемые форумчане Возникла необходимость использования Can шины в проекте на Cyclone4, я почему-то был уверен, что есть IP Core Can<->Avalon-MM(Avalon-ST), но такой коры в свободном доступе нет может есть у кого рабочая IP Core Can<->Avalon-MM(Avalon-ST), чтобы можно было ее использовать в QSYS в связке с NIOS2? спасибо, буду рад любой помощи
  11. спасибо большое за ответ посмотрел электрику: на моем узле стоит микросхема KSZ8041TLI и резонатор ABM7-25.000MHZ-D2Y-T на стороннем узле стоит Ethernet switch KSZ8995MAI и резонатор ABM7-25.000MHZ-D2Y-T данное решение было принято до меня, я поднимаю только проект ПЛИС, но вот об этом резонаторе ABM7-25.000MHZ-D2Y-T и фирме, что его производит, слышу впервые, по его техническим характеристикам точность выходит +-30ppm, реально замерить не могу, т.к. сижу на карантине, как и вся страна... так же заметил по электрике, что рекомендовано к резонатору ставить кондеры 18пФ, а стоят 22пФ - может ли это влиять на стабильность клока? использовал ли кто-нибудь резонатор ABM7-25.000MHZ-D2Y-T в своих разработках, какие впечатления?
  12. Здравствуйте, уважаемые форумчане в своем проекте для обмена по Ethernet через оптику была поставлена микросхема KSZ8041TLI, которая работает на скорости 100 Мбит/c, в целом скорость небольшая, но вот при состыковке с другим модулем, на которой стоит другая оптика, скорость передачи существенно режется(если соединять 2 одинаковых моих модуля скорость 80 мбит\с, точно так же и со сторонним модулем, если соединить мой модуль и сторонний, то скорость около 7 мбит\с) из данных диаграмм получается следующее: Input setup time = 40 - 25 = 15ns ???Input hold time = 19ns??? Output setup time = 10ns output hold time = 0ns я не понимаю, как их этих диаграмм мне вычислить Input hold time, я взял пока минимальное Tod я решил поставить констрейны на данную микросхему, получились у меня они вот такие: #*********************** CLOCKS ************************** create_clock -period "25 MHz" -name enet0_rx_clk [get_ports {ETH0_RX_CLK}] create_clock -period "25 MHz" -name enet0_tx_clk [get_ports {ETH0_TX_CLK}] set IMD 15 set ImD 19 set OMD 10 set OmD 0 #************************* INPUT ************************* set_input_delay -add_delay -clock enet0_rx_clk -max $IMD [get_ports {ETH0_RX_DV ETH0_RX_ERR ETH0_RXD*}] set_input_delay -add_delay -clock enet0_rx_clk -min $ImD [get_ports {ETH0_RX_DV ETH0_RX_ERR ETH0_RXD*}] post_message -type info "Input Max Delay = $IMD" post_message -type info "Input Min Delay = $ImD" #************************ OUTPUT ************************* set_output_delay -add_delay -clock enet0_tx_clk -max $OMD [get_ports {ETH0_TX_EN ETH0_TXD*}] set_output_delay -add_delay -clock enet0_tx_clk -min $OmD [get_ports {ETH0_TX_EN ETH0_TXD*}] post_message -type info "Output Max Delay = $OMD" post_message -type info "Output Min Delay = $OmD" set_false_path -from * -to [get_ports {ETH0_RSTN}] у меня следующие вопросы: 1. правильно ли вычислены по данной диаграмме соответствующие задержки? 2. чему равна задержка Input hold time? 3. есть ли у кого пример sdc файла с констрейнами для данной микросхемы KSZ8041TLI ? спасибо, буду рад любой помощи
  13. пробовал сдвинуть фазу на 90 градусов для 2го интерфейса, но не помогло, так же объединяет не могли бы скинуть пример. как запрещать оптимизацию quartus для моего примера, пробовал вот так: wire eth0_pll_clk_2p5/* synthesis keep */; wire eth0_pll_clk_25/* synthesis keep */; wire eth0_pll_clk_125/* synthesis keep */; wire eth1_pll_clk_2p5/* synthesis keep */; wire eth1_pll_clk_25/* synthesis keep */; wire eth1_pll_clk_125/* synthesis keep */; wire eth2_pll_clk_2p5/* synthesis keep */; wire eth2_pll_clk_25/* synthesis keep */; wire eth2_pll_clk_125/* synthesis keep */; не помогло
  14. Ничем не отличаются, я хотел сделать независимые клоки для каждого из них, чтобы влезть по констрейнам для каждого