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

MementoMori

Свой
  • Постов

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

  • Посещение

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


  1. Во втором внутреннем слое - питание сплошным полигоном? Или толстым проводником? Если второе, то нужно ли оставшееся место заливать землей? Землю во всех слоях, как обычно, прошить множественными переходными? Ну и так, вдогонку - где-то здесь писали про трассировку подобных комбинаций, что работать будет и в двух слоях, но не пройдет по электромагнитным помехам, а потому надо 4 слоя. Вот я и подумал, что дополнительные слои нужны, чтобы упрятать звенящие сигнальные линии внутрь. А получается они снаружи. Так в чем же тогда эффект дополнительных слоев? В большей площади цепей питания?
  2. Коллеги, у кого есть опыт трассировки? Можете в общих чертах рассказать, каких принципов следует придерживаться? Я так понимаю, что внешние слои должны быть с максимальной по площади землей, а во внутренние лучше упрятать сигнальные линии? То есть мне нужно возле каждого сигнального пина памяти делать переходное отверстие, пускать во внутреннем слое линию, которая так же через переходное отверстие вынырнет у контроллера? А во внешних слоях все оставшееся место залить землей? Как лучше сделать - чип рядом со sdram, или же расположить их на противоположных сторонах платы друг под другом, чтобы линии были короче? Нужно ли на таких частотах выравнивать линии? Поделитесь хотя бы мыслями общего плана. P.$. Это дисплейный проект, если что. Ну и с ходу еще вопрос - по аппноуту ST если использовать 32 бита на 16 битный цвет и rgb интерфейс, то pixelclock растет раза в полтора. А реальный прирост быстродействия?
  3. Спасибо за советы, но формально я уже проблему решил - я написал как. Просто при выводе пиксела используется больше тактов, нежели при потоковой записи данных. Ваши способы не являются быстродействующими по сравнению с мерещущимся мне вариантом с пропуском записи. Его и пытаюсь реализовать.
  4. в памяти процессора определять что именно в данном случае оказывается на месте прозрачных пикселей этой картинки, подставлять туда и выводить всё быстрым способом; но посмотрите код вывода там есть функция LCD_WriteRAM_Prepare() , после которой возможен только вывод пикселей. я вклинивал туда функцию чтения пиксела - получалась лажа. Пиксель менял свой цвет, а закономерность мне так и не удалось вычислить.
  5. хм... давайте уточним - у вас в горизонтальном положении где неходится шлейф тачскрина? у меня в правом нижнем углу. То есть в координатах 319,239.
  6. Ничего не пойму.... у меня по всякому получалось поворачивать экран, но все время отсчет координат идет снизу вверх. То есть внизу 0, вверху 240 (ориентация горизонтальная). Как сделать по-человечески? LCD_WriteReg(0x00E3, 0x3008); // Set internal timing LCD_WriteReg(0x00E7, 0x0012); // Set internal timing LCD_WriteReg(0x00EF, 0x1231); // Set internal timing LCD_WriteReg(0x0001, 0x0100); // set SS and SM bit LCD_WriteReg(0x0002, 0x0700); // set 1 line inversion LCD_WriteReg(0x0003, 0x1028); // set GRAM write direction and BGR=1. LCD_WriteReg(0x0004, 0x0000); // Resize register LCD_WriteReg(0x0008, 0x0207); // set the back porch and front porch LCD_WriteReg(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0] LCD_WriteReg(0x000A, 0x0000); // FMARK function LCD_WriteReg(0x000C, 0x0000); // RGB interface setting //// LCD_WriteReg(0x000D, 0x0000); // Frame marker Position LCD_WriteReg(0x000F, 0x0000); // RGB interface polarity //*************Power On sequence ****************// LCD_WriteReg(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB LCD_WriteReg(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0] LCD_WriteReg(0x0012, 0x0000); // VREG1OUT voltage LCD_WriteReg(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude guiDelay_ms(200); LCD_WriteReg(0x0010, 0x1290); // SAP, BT[3:0], AP, DSTB, SLP, STB LCD_WriteReg(0x0011, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0] guiDelay_ms(50); LCD_WriteReg(0x0012, 0x001A); // Internal reference voltage= Vci; guiDelay_ms(50); LCD_WriteReg(0x0013, 0x1800); // Set VDV[4:0] for VCOM amplitude LCD_WriteReg(0x0029, 0x0028); // Set VCM[5:0] for VCOMH LCD_WriteReg(0x002B, 0x000C); // Set Frame Rate guiDelay_ms(50); LCD_WriteReg(0x0020, 0x0000); // GRAM horizontal Address LCD_WriteReg(0x0021, 0x0000); // GRAM Vertical Address // ----------- Adjust the Gamma Curve ----------// LCD_WriteReg(0x0030, 0x0000); LCD_WriteReg(0x0031, 0x0305); LCD_WriteReg(0x0032, 0x0003); LCD_WriteReg(0x0035, 0x0304); LCD_WriteReg(0x0036, 0x000F); LCD_WriteReg(0x0037, 0x0407); LCD_WriteReg(0x0038, 0x0204); LCD_WriteReg(0x0039, 0x0707); LCD_WriteReg(0x003C, 0x0403); LCD_WriteReg(0x003D, 0x1604); //------------------ Set GRAM area ---------------// LCD_WriteReg(0x0050, 0x0000); // Horizontal GRAM Start Address LCD_WriteReg(0x0051, 0x00EF); // Horizontal GRAM End Address LCD_WriteReg(0x0052, 0x0000); // Vertical GRAM Start Address LCD_WriteReg(0x0053, 0x013F); // Vertical GRAM Start Address LCD_WriteReg(0x0060, 0xA700); // Gate Scan Line a700 LCD_WriteReg(0x0061, 0x0001); // NDL,VLE, REV LCD_WriteReg(0x006A, 0x0000); // set scrolling line //-------------- Partial Display Control ---------// LCD_WriteReg(0x0080, 0x0000); LCD_WriteReg(0x0081, 0x0000); LCD_WriteReg(0x0082, 0x0000); LCD_WriteReg(0x0083, 0x0000); LCD_WriteReg(0x0084, 0x0000); LCD_WriteReg(0x0085, 0x0000); //-------------- Panel Control -------------------// LCD_WriteReg(0x0090, 0x0010); LCD_WriteReg(0x0092, 0x0600); //LCD_WriteReg(0x90, 0x0010); // LCD_WriteReg(0x92, 0x0000); // LCD_WriteReg(0x93, 0x0003); // LCD_WriteReg(0x95, 0x0110); // LCD_WriteReg(0x97, 0x0000); // LCD_WriteReg(0x98, 0x0000); LCD_WriteReg(0x0007, 0x0133); // 262K color and display ON
  7. Добрый вечер. Переделываю функцию вывода картинки. Хочу выводить картинку с прозрачными участками. То есть в фотошопе прозрачные участки закрашиваю чистым зеленым цветом, а затем при выводе на экран анализирую цвет и, если он равен заданному значению (чистому зеленому), не зарисовываю этот пиксель. Пока получилось так: void LCD_WriteTransparentBitmap_ILI9320(unsigned int * data, uint16_t Xpos, uint16_t Ypos, unsigned int TransparentColor) { uint32_t num, x,y; num=1; for(y = 0; y < data[1]; y++) { for(x = 0; x < data[0]; x++) { num++; if (data[num]==TransparentColor) continue; else { TextColor=data[num]; LCD_PutPixel_ILI9320(x+Xpos-1,y+Ypos-1); } } } } Но медленно если попиксельно. Изначально функция вывода картинки на экран выглядит так: void LCD_WriteBitmap_ILI9320(unsigned int * data, uint16_t Xpos, uint16_t Ypos) { uint32_t num, i; (Xpos, Ypos, Xpos+data[0]-1, Ypos+data[1]-1); LCD_WriteRAM_Prepare(); num = (uint32_t)data[0]*(uint32_t)data[1]; for(i = 2; i < num; i++) { LCD_WriteRAM(data[i]); } } Но в ней не указываются коориднаты пиксела, идет последовательная запись в память. Выход один - для прозрачного участка анализироваь то, что в данный момент находится на экране и писать пиксел этого же цвета. Но это корежит процесс записи в память и не работает. ПОэтому как временный вариант, выбран попиксельный способ. А в данный момент пытаюсь понять, как не писать в пиксел, а просто увеличить адрес записи. Есть мысли?
  8. Да я уже переделал все по старому образцу. Но хоть убей, интересно, как нужно написать, чтобы работало со структурой?
  9. Воюю с дисплеем на ILI9325. Решил сменить библиотеку и дисплей перестал работать. Это связано с тем, что библиотека была на FSMC 144 ногого камня, а у меня 100-ногий. Видимо я неправильно поправил код. Библиотеки отличались синтаксисом работы с FSMC. Старая, рабочая: #define Bank1_LCD_D ((uint32_t)0x60020000) //disp Data ADDR #define Bank1_LCD_C ((uint32_t)0x60000000) //disp Reg ADDR void LCD_WR_REG(unsigned int index) { *(__IO uint16_t *) (Bank1_LCD_C)= index; } void LCD_WR_CMD(unsigned int index,unsigned int val) { *(__IO uint16_t *) (Bank1_LCD_C)= index; *(__IO uint16_t *) (Bank1_LCD_D)= val; } unsigned int LCD_RD_data(void){ unsigned int a=0; a=*(__IO uint16_t *) (Bank1_LCD_D); //L return(a); } void LCD_WR_Data(unsigned int val) { *(__IO uint16_t *) (Bank1_LCD_D)= val; } void LCD_WR_Data_8(unsigned int val) { *(__IO uint16_t *) (Bank1_LCD_D)= val; } Новая, с которой проблемы: Библиотека была рассчинатана на 144 ногие корпуса // for ~RS on address line a19 //#define LCD_BASE ((uint32_t)(0x60000000 | 0x0001fffe)) // for ~RS on address line a0 //#define LCD_BASE ((uint32_t)(0x60000000 | 0x00000000)) // А вот тут уже я подправил на адрес А16 - у меня корпус 100 ногий #define LCD_BASE ((uint32_t)(0x60020000 | 0x00000000)) #define LCD ((LCD_TypeDef *)LCD_BASE) void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue) { /* Write 16-bit Index, then Write Reg */ LCD->LCD_REG = LCD_Reg; /* Write 16-bit Reg */ LCD->LCD_RAM = LCD_RegValue; } uint16_t LCD_ReadReg(uint8_t LCD_Reg) { volatile uint16_t i = 5; /* Write 16-bit Index (then Read Reg) */ LCD->LCD_REG = LCD_Reg; while(i--); /* Read 16-bit Reg */ return (LCD->LCD_RAM); } void LCD_WriteRAM_Prepare(void) { LCD->LCD_REG = 0x0022;; } void LCD_WriteRAM(uint16_t RGB_Code) { /* Write 16-bit GRAM Reg */ LCD->LCD_RAM = RGB_Code; } Покопавшись, я пришел к выводу, что какой бы адрес регистра не задавался при чтении, всегда читается содержимое регистра по адресу 0x0000. Где ошибка в программе?
  10. В этом случае ошибка была бы другая, согласитесь? Надо думать, что это просто опечатка здесь, на форуме. А в действительности все правильно (я проверил). библиотека в файле - там все в одной папке. Если кого не затруднит - попробуйте подключить к любому проекту в KEIL
  11. Господа, помогите собрать проект. Это библиотека GUI написанная на чистом C. АРхив прилагаю. Подключаю к проекту файл из библиотеки - lcdHAL.h Компилятор выдает ошибку: FSMC_GUI\driver\src\lcdHAL.c(15): error: #20: identifier "COLOR_RED_MASK" is undefined Пользуюсь поиском и нахожу, что COLOR_RED_MASK объявлен в файле guicolor.h Но в то же время строка #include "guiColor.h" есть в файле gui.h. А строка #include "gui.h" есть в файле lcdHAL.c. Казалось бы все прозрачно.... Или может быть в основной проект нужно не lcdHAL подключать, а другой файл. Помогите пожалуйста. AFGUI_master.rar
  12. Провод без разницы - одножильный или многожильный? Длина провода насколько может отклоняться от расчетной?
  13. Снял кожух одного из модулей - а там, в усилителе мощности - по всей видимости какая-то жидкость ранее попадала - налет каких-то желтых крупиц. Чертов китаец с ебая.... ЧТо я сделал - отпаял переключатель приема передачи. Хочу подпаять туда антенну как мне советовали. Погуглил насчет антенн для 433 МГц - все-какие-то хитромудрые.... Мне сейчас не нужен КПД и прочее - мне главное, чтобы она нагрузила выход, так чтобы не сгорел чип. Можно ли для этой цели взять обычный тонкий монтажный провод четвертьволновой длины (17.3 см)? Есть ли разница - брать одножильный или многожильный?
  14. Не видит несущую.... Что я делаю не так? ПОвторюсь - я мигрирую с СС2500 - взял с того проекта рабочую конфигурацию и поменял только частоту. Надо что-то еще менять? У меня 433 МГц платка. Передатчик: TI_CC_SPISetup(); // Initialize SPI port TI_CC_PowerupResetCCxxxx(); // Reset CCxxxx writeRFSettings(); // Write RF settings to config reg TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);//Write PATABLE TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); TI_CC_SPIStrobe(TI_CCxxx0_SFRX); TI_CC_SPIStrobe(TI_CCxxx0_SFTX); TI_CC_SPIStrobe(TI_CCxxx0_SRX); RX_OFF; // ЭТО вход RX_EN while (1) { RF_TX_Buffer[0]=22; for (i=1;i<64;i++) { RF_TX_Buffer[i]=i+F;} // TI_CC_SPIWriteBurstReg(TI_CCxxx0_TXFIFO, RF_TX_Buffer, 23); // TX_ON; TI_CC_SPIStrobe(TI_CCxxx0_STX); // while (!(CCxx00_GD0)); while (CCxx00_GD0); TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); TI_CC_SPIStrobe(TI_CCxxx0_SFTX); // TX_OFF; } приемник: TX_OFF; RX_ON; TI_CC_SPISetup(); TI_CC_PowerupResetCCxxxx(); writeRFSettings(); // Write RF settings to config reg TI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);//Write PATABLE TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); TI_CC_SPIStrobe(TI_CCxxx0_SFRX); TI_CC_SPIStrobe(TI_CCxxx0_SFTX); TI_CC_SPIStrobe(TI_CCxxx0_SRX); Регистры: void writeRFSettings(void) { TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL1,0x0c); // ??? 0x06 TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL0,0x00); //OK TI_CC_SPIWriteReg(TI_CCxxx0_FREQ2,0x10); //OK TI_CC_SPIWriteReg(TI_CCxxx0_FREQ1,0xA7); //OK TI_CC_SPIWriteReg(TI_CCxxx0_FREQ0,0x62); //OK TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG4,0x2d); //OK TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG3,0x3B); //OK TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG2,0x13); //OK TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG1,0x22); //OK TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG0,0xF8);//OK TI_CC_SPIWriteReg(TI_CCxxx0_CHANNR,0x00); //OK TI_CC_SPIWriteReg(TI_CCxxx0_DEVIATN,0x62); //OK TI_CC_SPIWriteReg(TI_CCxxx0_FREND1,0x56);//OK TI_CC_SPIWriteReg(TI_CCxxx0_FREND0,0x10); //OK TI_CC_SPIWriteReg(TI_CCxxx0_MCSM2,0x07); //OK TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1,0x30); //OK TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0,0x18); //OK TI_CC_SPIWriteReg(TI_CCxxx0_FOCCFG,0x16); //OK TI_CC_SPIWriteReg(TI_CCxxx0_BSCFG,0x6C); //OK TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2,0x03); //OK TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL1,0x40); //OK TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL0,0x91); //OK TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL3,0xEA);//OK TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL2,0x2A); //OK TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL1,0x00); //OK TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL0,0x1F); //OK TI_CC_SPIWriteReg(TI_CCxxx0_FSTEST,0x59); //OK TI_CC_SPIWriteReg(TI_CCxxx0_TEST2,0x88);//OK TI_CC_SPIWriteReg(TI_CCxxx0_TEST1,0x31);//OK TI_CC_SPIWriteReg(TI_CCxxx0_TEST0,0x09);//OK TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2,0x0E);//OK TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0,0x06);//OK TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL1,0x0C);//OK TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0,0x0D);//OK TI_CC_SPIWriteReg(TI_CCxxx0_ADDR,0x01); //OK TI_CC_SPIWriteReg(TI_CCxxx0_PKTLEN,0x00); //OK TI_CC_SPIWriteReg(TI_CCxxx0_FIFOTHR,0x07); //OK } А если с усилителем? Там +30 dbm
  15. во блин... я антенну не подключал, боясь что приемник спалю... За совет спасибо, но даже если я спалил PA, чип и его обвязка должны излучать? Мне не лень паять резисторы, антенну, просто когда-что-то не работает, в поисках ошибки приходится бороться за чистоту эксперимента.
  16. Господа, пытаюсь победить радиомодули CC1101-PA-LNA. CC1101-PA-LNA До этого имел успешный опыт работы с сс2500. А вот эти модули не поддаются. По идее при переходе на сс1101 нужно только настройки частоты поменять. То есть все делаю как раньше, в рабочем проекте на сс2500. Приемник не видит несущую. Передающий модуль кстати, несильно, но греется. То есть вроде бы работает. Я любитель, аппаратуры на эти частоты никакой нет чтобы проверить, да я и без нее раньше справлялся. Хочу проверить исправны ли модули вообще. Может быть чип неисправен, а может быть усилитель мощности. У меня возникла мысль - отпаять металлический кожух и попробовать поработать без антенны на максимальной мощности на ближайшем расстоянии. Вот и хочу спросить, чтобы зря не париться - если чипы исправны, то обнаружит ли при этих условиях приемник несущую?
  17. Какой практический смысл в том, что флаги прерывания в SMT32 не сбрасываются автоматически? Если его нужно сбрасывать вручную, то предполагается, что кому-то понадобится этого не делать. И что дальше - обработчик прерывания будет до бесконечности вызываться?
  18. Тогда зачем сменная память? МОжет стоило микросхему напаять, а для заливки данных какой-нибудь интерфейс предусмотреть?
  19. Перерыл всю сеть, и только в одном месте нашел, что нужно еще вот это RCC_APB2Periph_AFIO, ENABLE Заработало.
  20. Как в STM32F103RE использовать PA15 ? На нем же висит JTDI. Светодиод, подключенный к нему постоянно тускловато горит и не поддается управлению. ПРограммирую через SWD, и JTDI не касаюсь. Откопал на просторах рунета команду GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); Не помогло. Надо что-то еще? Имеет ли значение, когда давать эту команду?
  21. Поковырялся, почитал форум. Нашел некоторые прошивки, в основном 8 версия, на которые KEIL не ругается. Но - они к моему клону не совсем подходят - не работает SWD, и лажа со светодиодной индикацией. Раньше при включении моргал светодиод, подключенный к PA1, теперь моргает подключенный к PA0.
  22. Слетела вчера прошивка с http://www.mcutool.ru/products/debug/arm2.aspx программатора. Перепрошил. KEIL теперь пишет через некоторе время, что у меня клон. Переустановил KEIL и драйвера, предварительно почистив весь реестр. Даже поставил KEIL и драйвера на другую копию windows у которой заведомо чистый реестр - все равно отрубается. ПРи этом после перепрошивки винда автоматически качала откуда-то драйвера -Jlink Что делать?
  23. Опять слетела прошивка. Все делал по той же инструкции, но http://dl.dropbox.com/u/40556751/j-link/JLINK_____SAMBA.pdf Ответил да на вопрос "Do you want to lock involved lock region..." Теперь у меня после замыкания перемычки ERASE появляется неизвестное устройство. После замыкания TST - опять появляется - JLink. Обновить прошивку не получаетя. Я что, залочил чип? Что делать?
  24. да для начала штук 5. А зачем вам чертеж? Напильником выпилить хотите? Я параметры указал, производитель - любой.
  25. кто подскажет, где взять FPC 1mm 37 pin разъемы? На ебае полно дисплеев с контроллером ILI9320, заточенных под такие разъемы, а вот самих разъемов нет. В РФ нашел лишь одного поставщика, который шлет 3 месяца упаковками по 1000 штук. МНе бы поменьше и побыстрее.
×
×
  • Создать...