-
Постов
162 -
Зарегистрирован
-
Посещение
Весь контент M_Andrey
-
Опять вы все смотрите через терминал, одних граблей вам мало, загадочные "*" и "Shift" говорят о том что у вас как минимум 2 промежуточных звена возможных ошибок. У вас есть (судя по схеме) кнопки, дисплей, для проверки больше и мечтать не о чем - заведите команды на кнопки и смотрите ответы на дисплее (если конечно они работают :-) ).
-
Конфликт TFT и SDRAM
M_Andrey ответил M_Andrey тема в ARM, 32bit
До инициализации TFT. После рестарта сначала инициализация SDRAM, тест SDRAM правильный, затем идет инициализация TFT, снова тест SDRAM но уже с ошибками. Похоже что даже при 8- и 16-битном доступе EMC пытается работать с полной шиной. Но когда работает DMA LCD контроллера, EMC экономит шину и тут всплывают мои грабли. -
Конфликт TFT и SDRAM
M_Andrey ответил M_Andrey тема в ARM, 32bit
Разобрался Соврал. Для упрощения разводки поменял местами разряды шины данных и теперь эти грабли всплыли. Надо было хотя-бы при этом соблюсти привязку DQMOUT0-D0..D7, DQMOUT1-D8..D15, DQMOUT2-D16..D23, DQMOUT3-D24..D31. Теперь придется плату переразводить, а пока софтом изголяться. -
Конфликт TFT и SDRAM
M_Andrey ответил M_Andrey тема в ARM, 32bit
Но 32-битный доступ работает без ошибок. Если выводить на дисплей информацию в Int32, то пишется и отображается правильно. -
Конфликт TFT и SDRAM
M_Andrey ответил M_Andrey тема в ARM, 32bit
Это вопрос или ответ? Если вопрос, то плата действительно двухслойная. -
Конфликт TFT и SDRAM
M_Andrey опубликовал тема в ARM, 32bit
Отлаживаю плату. Имеется LPC2478 + SDRAM 32 бита (K4S561632C - 2 шт) + TFT 640x480x(R6-G6-B6) (OSD056TN53). Схема один в один со стартеркитом Olimex, разводка моя. Завелась без проблем, но столкнулся с неприятным эффектом мерцания чет/нечет. строк, особенно если смотреть под углом. Стал повышать частоту LCDDCLK - остановился на 9Мгц (LCD_CFG_bit.CLKDIV = 7), т.к. при дальнейшем увеличении частоты начинается нестабильная работа других узлов - отваливается USB и/или срывается синхронизация изображения. Да и для этой частоты пришлось настраивать AHB: AHBCFG1_bit.SHDL = 0; // Priority scheduling. AHBCFG1_bit.EP1 = 1; // CPU AHBCFG1_bit.EP2 = 5; // GPDMA AHBCFG1_bit.EP3 = 4; // AHB1 AHBCFG1_bit.EP4 = 3; // USB AHBCFG1_bit.EP5 = 2; // LCD Решил попробовать режим 5-6-5 и тут началось самое интересное. При выводе любой информации на дисплей она случайным образом искажается. Смотрю под отладчиком - действительно записываю одно значение - считываю совсем другое. Вывожу черный текст (0x0000) на сером фоне (0xCE9A), а получаю чаще розовый с черными вкраплениями на сером с зелеными вкраплениями: 0x0000 -> 0x081A 0xCE9A -> 0xС098, 0xC680, 0x0E02 Частота LCDDCLK = 18Мгц (LCD_CFG_bit.CLKDIV = 3), кадровая 43Гц. Понижал частоту до 3 МГц - ошибок меньше, но они есть! В 8-8-8 режиме ничего подобного не было. Полноцветная картинка выведенная до включения LCD_CTRL_bit.LcdEn = 1 и LCD_CTRL_bit.LcdPwr = 1 отображается правильно без искажений и практически не мерцает (что и хотел получить). Но после включения вновь записываемые данные искажаются. Написал тест SDRAM с 32, 16 и 8-битным доступом - до включения TFT проходит полностью, после - только для 32-битного доступа, для 16 и 8-битного - ошибки. Кто-нибудь сталкивался с подобным, что я делаю не так? Исходники работы с TFT и SDRAM брал из примеров IAR EWARM 5.50, только подправил для вывода 16-битного цвета. -
А как вы определяете что программа считывает 2 байта - по UART-у? Так может у вас UART неправильно работает - ведь плата другая и могут быть ошибки как минимум в разводке. И вообще как можно доверять симуляциям во всяких протеусах? Выводите считываемые данные сразу на индикатор.
-
Камера 8016E 0.3M pixel
M_Andrey ответил Zigrund тема в В помощь начинающему
Тогда-уж лучше STM32F205/207 там есть готовый интерфейс для камеры, вот только куда данные складывать будете (640*480*3 байта=921600 байта)? -
P0.27 и P0.28 всегда Open-drain output with external pull-up.
-
Фазовый сдвиг зависит от типа трансформатора. Если первичка и вторичка намотаны друг на друга, то меньше. Но сейчас в готовых трансформаторах обмотки разделены - у таких фазовый сдвиг больше. А почему вы так хотите использовать компаратор? Воспользуйтесь входами INT0/INT1 и заведите на них выход каждого оптрона.
-
Если вам нужен детектор фазы и перехода через ноль сетевого напряжения, то трансформатор тут совершенно не подходит, так-как сам вносит фазовый сдвиг! Тут подойдет к примеру схема рис.3.2а или 3.2в (стр.78) упомянутой выше книги (оптрон можно взять один PC814A).
-
ATMEGA32 инициализация USART
M_Andrey ответил lisstret тема в MCS51, AVR, PIC, STM8, 8bit
Попробуйте команды местами поменять: void init_uart(void) { UBRRH = UBRRH_VALUE; UBRRL = UBRRL_VALUE; UCSRC=(1<<URSEL)|(3<<UCSZ0)|(2<<UPM0); #if USE_2X UCSRA |= (1 << U2X); #else UCSRA &= ~(1 << U2X); #endif UCSRB=(1<<RXEN)|(1<<TXEN); } -
LPC2478: Подсчет импульсов с произвольной ноги
M_Andrey ответил yurmala тема в ARM, 32bit
Да GPIO interrupt только для P0[31:0] и P2[31:0]. -
LPC2478: Подсчет импульсов с произвольной ноги
M_Andrey ответил yurmala тема в ARM, 32bit
Нет. Я имел в виду прерывание от GPIO. Настраиваем на фронт (или спад). Сработало прерывание - плюсанули счетчик. А таймер можно использовать для подсчета периода или интервала некоторого количества импульсов (для точности). Или считать импульсы за фиксированное время. Если-же речь зашла о конкретной ножке P1.19, то туда заведен вход CAP1[1], тогда вообще проще некуда. Настраиваете Interrupt on CAP1.1 event и анализируете T1CR1. -
LPC2478: Подсчет импульсов с произвольной ноги
M_Andrey ответил yurmala тема в ARM, 32bit
Лучше всего по прерыванию, но опять-же не все - можно только P0[31:0] и P2[31:0]. -
Все примеры из IAR EW for ARM (IAR-LPC-2478) работают на этом ките. /************************************************************************* * * Used with ICCARM and AARM. * * © Copyright IAR Systems 2007 * * File name : sdram_32M_16bit_drv.c * Description : SDRAM driver K4S561632E-TC(L)75 16MBx16bit * * History : * 1. Date : 6, March 2008 * Author : Stanimir Bonev * Description : Create * * * $Revision: 24636 $ **************************************************************************/ #include <stdio.h> #include "board.h" #include "sdram_32M_16bit_drv.h" extern Int32U SDRAM_BASE_ADDR; #if SYS_FREQ == (72MHZ) #define SDRAM_PERIOD 13.8 // 72MHz #elif SYS_FREQ == (57MHZ) #define SDRAM_PERIOD 17.4 // 57.6MHz #elif SYS_FREQ == (48MHZ) #define SDRAM_PERIOD 20.8 // 48MHz #elif SYS_FREQ == (36MHZ) #define SDRAM_PERIOD 27.8 // 36MHz #elif SYS_FREQ == (24MHZ) #define SDRAM_PERIOD 41.7 // 24MHz #else #error Frequency not defined #endif #define P2C(Period) (((Period<SDRAM_PERIOD)?0:(Int32U)((Flo32)Period/SDRAM_PERIOD))+1) #define SDRAM_REFRESH 7813 #define SDRAM_TRP 20 #define SDRAM_TRAS 45 #define SDRAM_TAPR 1 #define SDRAM_TDAL 3 #define SDRAM_TWR 3 #define SDRAM_TRC 65 #define SDRAM_TRFC 66 #define SDRAM_TXSR 67 #define SDRAM_TRRD 15 #define SDRAM_TMRD 3 /************************************************************************* * Function Name: SDRAM_Init * Parameters: none * * Return: none * * Description: SDRAM controller and memory init * *************************************************************************/ void SDRAM_Init (void) { // Assign pins to SDRAM controller PINSEL5 &= BIN32(11110000,11111100,11111100,11000000); PINSEL5 |= BIN32(00000101,00000001,00000001,00010101); PINMODE5&= BIN32(11110000,11111100,11111100,11000000); PINMODE5|= BIN32(00001010,00000010,00000010,00101010); PINSEL6 = BIN32(01010101,01010101,01010101,01010101); PINMODE6 = BIN32(10101010,10101010,10101010,10101010); PINSEL8 &= BIN32(11000000,00000000,00000000,00000000); PINSEL8 |= BIN32(00010101,01010101,01010101,01010101); PINMODE8&= BIN32(11000000,00000000,00000000,00000000); PINMODE8|= BIN32(00101010,10101010,10101010,10101010); PINSEL9 &= BIN32(11111111,11110011,11111111,11111111); PINSEL9 |= BIN32(00000000,00000100,00000000,00000000); PINMODE9&= BIN32(11111111,11110011,11111111,11111111); PINMODE9|= BIN32(00000000,00001000,00000000,00000000); // Init SDRAM controller // Enable EMC clock PCONP_bit.PCEMC = 1; EMCCONTROL = 1; // enable EMC EMCDINAMICRDCFG = 1; EMCDYNAMICRASCAS0_bit.CAS = 3; EMCDYNAMICRASCAS0_bit.RAS = 3; EMCDYNAMICRP = P2C(SDRAM_TRP); EMCDYNAMICRAS = P2C(SDRAM_TRAS); EMCDYNAMICSREX = P2C(SDRAM_TXSR); EMCDYNAMICAPR = SDRAM_TAPR; EMCDYNAMICDAL = SDRAM_TDAL+P2C(SDRAM_TRP); EMCDYNAMICWR = SDRAM_TWR; EMCDYNAMICRC = P2C(SDRAM_TRC); EMCDYNAMICRFC = P2C(SDRAM_TRFC); EMCDYNAMICXSR = P2C(SDRAM_TXSR); EMCDYNAMICRRD = P2C(SDRAM_TRRD); EMCDYNAMICMRD = SDRAM_TMRD; EMCDYNAMICCFG0 = 0x0000680; // 13 row, 9 - col, SDRAM // JEDEC General SDRAM Initialization Sequence // DELAY to allow power and clocks to stabilize ~100 us // NOP EMCDINAMICCTRL = 0x0183; for(volatile Int32U i = 200*30; i;i--); // PALL EMCDINAMICCTRL_bit.I = 2; EMCDINAMICRFR = 1; for(volatile Int32U i= 128; i; --i); // > 128 clk EMCDINAMICRFR = P2C(SDRAM_REFRESH) >> 4; // COMM EMCDINAMICCTRL_bit.I = 1; // Burst 8, Sequential, CAS-2 volatile unsigned long Dummy = *(volatile unsigned short *) ((Int32U)&SDRAM_BASE_ADDR + (0x33UL << (12))); // NORM EMCDINAMICCTRL = 0x0000; EMCDYNAMICCFG0_bit.B = 1; for(volatile Int32U i = 10000; i;i--); } Boolean SDRAM_Test (void) { // 32 bits access for (Int32U i = 0; i < 0x2000000; i+=sizeof(Int32U)) { *(Int32U*)((Int32U)&SDRAM_BASE_ADDR+i) = i; } for (Int32U i = 0; i < 0x2000000; i+=sizeof(Int32U)) { if (*(Int32U*)((Int32U)&SDRAM_BASE_ADDR+i) != i) { printf("Verification error on address : 0x%x\n",(Int32U)&SDRAM_BASE_ADDR+i); return(FALSE); } } // 16 bits access for (Int32U i = 0; i < 0x10000; i+=sizeof(Int16U)) { *(Int16U*)((Int32U)&SDRAM_BASE_ADDR+i) = i; } for (Int32U i = 0; i < 0x10000; i+=sizeof(Int16U)) { if (*(Int16U*)((Int32U)&SDRAM_BASE_ADDR+i) != i) { printf("Verification error on address : 0x%x\n",(Int32U)&SDRAM_BASE_ADDR+i); return(FALSE); } } // 8 bits access for (Int32U i = 0; i < 0x100; i+=sizeof(Int8U)) { *(Int8U*)((Int32U)&SDRAM_BASE_ADDR+i) = i; } for (Int32U i = 0; i < 0x100; i+=sizeof(Int8U)) { if (*(Int8U*)((Int32U)&SDRAM_BASE_ADDR+i) != i) { printf("Verification error on address : 0x%x\n",(Int32U)&SDRAM_BASE_ADDR+i); return(FALSE); } } return(TRUE); }
-
Не сложный вопрос по FatFS
M_Andrey ответил mrKirill тема в В помощь начинающему
А вы f_close(...); в конце делаете? -
TTL - RS485
M_Andrey ответил rpalaznik тема в В помощь начинающему
Вот именно что бегло, топикстартеру нужно автоматически переключать направление без участия МК. -
TTL - RS485
M_Andrey ответил rpalaznik тема в В помощь начинающему
Давно пользуюсь подобной схемой: ASC24TrevB1.pdf На одновибраторе тоже неплохо. -
Да действительно MAX ненужен, я почему-то подумал что там +-12В, а там питание от VCCIO=1.8...5.25V.
-
Предполагаю, что такая связка понадобилась для прошивки LPC к примеру "Flash Magic"-ом. Для этого кроме RXD/TXD дополнительно потребуются сигналы DTR (выв.2 FT232R) через MAX3232 на Reset (выв.35 LPC2478) и RTS (выв.3 FT232R) через MAX3232 на ISP_E, он-же EINT0 (выв.110 LPC2478), впрочем можно и без них обойтись если ISP_E - замкнуть перемычкой, а Reset - кнопочкой. Для прочих нужд FT232R - никчемная затея.
-
Для тех у кого есть желание освоить STM32
M_Andrey ответил zoddy тема в ARM, 32bit
Это пришло через неделю после регистрации. -
Для тех у кого есть желание освоить STM32
M_Andrey ответил zoddy тема в ARM, 32bit
-
Помогите конвертировать цвет
M_Andrey ответил -=Женек=- тема в Программирование
Меня как-раз напрягает то что вы мне это говорите, говорите топикстартеру, я это и без вас знал.