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

Wano

Свой
  • Постов

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

  • Посещение

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


  1. Аналогичная проблема, шарю форум,хотя сразу хотел спросить у aaarrr )))))) . Дизассемблер перед глазами в µVision4, но это не совсем удобно, смотреть какой регистр участвует в операции и потом его просматривать в окне Registers. Как-то в 3-й версии было лучше. Оптимизация стоит на дефолте и в 3-й это решало вопрос. Может какая галочка где-то есть :) p.s. а может это стимул к освоению асма
  2. LPC2478+EL320.240.36HB

    В точку... STN - mono 1bpp конечно лучше. Нюансы настройки видеоконтроллера: 1)режим STN, 4-bit mono , 1bpp. 2)PPL-Pixels-per-line как aaarrr и сказал 19 3)а вот CPL-Clocks per line как раз 80 Спасибо за помощь aaarrr-у,особенно за слова "1bpp обязан работать".Если кого интересуют настройки под этот экран, могу выложить. На форуме упоминалось, что можно использовать режим grayscale STN для получения оттенков свечения даже в монохромном режиме. Видеоконтроллер во время сканирования экрана делает пропуски в свечении пикселей, в результате для глаза кажется , что яркость их меняется. Так ли это? Если бы не цена в шесть листов за пять дюймов, экран неплохой. Прямая солнечная засветка не так ухудшает контраст, как у TFT, плюс хороший "самообогрев".
  3. LPC2478+EL320.240.36HB

    Так как за один клок передаются сразу четыре пикселя в ряд. Если долго мучиться.... Поправил полярность всех клоков и ошибку в количествах сдвигов. Вариант с STN что-то не прошел, так как вместо одной точки получаются две на расстоянии 16-ти, как бы не крутил. Заново попробовал режим TFT 24бита. 80 точек по горизонтали ; 240 по вертикали; нулевые "порчи"; линии данных подключил к старшим красным линиям TFT интерфейса; Всё пашет нормально, но почему-то слева есть постоянный отступ в 8 точек. На форуме есть упоминание о том, что можно использовать S1D13705 , но чем его режим STN отличается от режима STN видеоконтроллера в LPC не понимаю.
  4. LPC2478+EL320.240.36HB

    День добрый. Из-за большой цены EL экраны не так уж распространены. Только что -40 -50 гарантируют. Интерфейс передачи состоит в том, что за один клок передаётся информация о четырёх пикселях. Рисование обычным ногодрыганьем элементарно. Но что-то никак не получается настроить видеоконтроллер LPC. Предполагаю, что каждый бит цвета одного пикселя будет отвечать за свечение одного пикселя на дисплее. Никогда не пробовал STN дисплеи, подскажите так ли всё делаю: PINSEL11 = 0x00000001;//4-bit mono STN single panel LCD_CTRL|=(2<<CTRL_LcdBpp);//LCD bits per pixel: 010 = 4 bpp. LCD_CTRL|=(1<<CTRL_LcdBW);//1 = STN LCD is monochrome. настройку размеров производил : H_SIZE 80 // размер по горизонтали в 4 раза меньше реального H_PULSE 1 // число тактовых в одном горизонтального H_FRONT_PORCH 0 // пустые тактовых перед данными H_BACK_PORCH 0 // пустые тактовых после данных V_SIZE 240//количество строк V_PULSE 1//число горизонтальных в одном вертикальном V_FRONT_PORCH 0 V_BACK_PORCH 0 подключение производил, как указано в первом столбце Table 276. LCD panel connections for STN single panel mode: P2[9] UD[3] - VID3 P2[8] UD[2] - VID2 P2[7] UD[1] - VID1 P2[6] UD[0] - VID0 P2[5] LCDLP- строковый синхр. P2[3] LCDFP- вертикальный синхр. P2[2] LCDDCLK - тактовые Судя по всему включается палитра, поэтому заполняю её чтобы хоть что-то нарисовать: pPal = (tU32*)LCD_PAL_ADDR; *pPal = 0x00FF0000; *pPal++; for(i = 1; i < 128; i++) { *pPal = 0x0; pPal++; } Строчка на экране рисуется не отрезками, сначала небольшой кусок ,а потом до конца. Если по вертикали ещё как-то можно позицию выставить, то по горизонтали либо вся строка заполняется, либо ничего. Подскажите , кто работал с STN панелями, будет ли при такой настройке видеоконтроллер выдавать 4 бита цвета на 4 выхода. С другой стороны настраивал как монохромный режим STN по логике ыыыы какие тут цвета..... Пробовал TFT режим вообще ничего не получается дельного.
  5. Если кошелёк позволяет, можно что-то у SICK посмотреть типа "фотоэлектрические датчики" их можно "научить" где тёмная метка , где светлая. Также можно взять подешевле детальку у Honeywell из серии HOAХХХ "инфракрасный датчики положения отражательного типа", но схемку для запитки, триггер Шмитта ставить наверно придётся.
  6. Параллельная EEPOM

    День добрый. Привезли пару девайсов. После проверки осциллом разобрался, что в одном приборе слетела прошивка с EEPROM-ки. Поднял и нормальную и испорченную микросхемы, и подцепил к отладочной EA2478. Нормальную прошивку считываю без проблем, начинаю зашивать в испорченную микросхему и не пишется выше адреса 0х3FF. Сколько не пытался обнулить Protect Register так ничего и не выходит. Записываю всё как по шиту: [AA] -> 0x0555 [55] -> 0x0AAA [A0] -> 0x0555 [AA] -> 0x0555 [C0] -> 0x0AAA [00] -> 0x0000 или [AA] -> 0x1555 [55] -> 0x1AAA [A0] -> 0x1555 [AA] -> 0x1555 [C0] -> 0x1AAA [00] -> 0x0000 и хоть тресни, закрыта вся память выше 0х3FF, ничего не меняется.Читаются 0хFF. Память 98-го года выпуска, может протёрлась? X88C64S.pdf
  7. porch-и это пустые горизонтальные и вертикальные клоки до и после информативных. От их неверного значения картинка просто не будет стоять в центре.
  8. Может также моргать и из-за того, что вы сменили адрес буфера на новый, а отрисовка идёт всё ещё по старому адресу. Если туда в этот момент начать чего-то катать, мишура обеспечена. Поэтому лучше подождать LNBURIS: while(!(LCD_INTRAW & 4)); может это очевидно, но всё же....
  9. как работать с IAP?

    Подскажите всё ли правильно делаю,чтобы зашить в LPC2134 число: 1) в кейле Options for Target задаю два раздела IROM1 от 0х0 до 0x17FFF IROM2 от 0х18000 до 0x20000, тоесть планирую писать в последний сектор,для этого создаю раздел IROM2. 2) в прогу определяю переменную как const unsigned int i __attribute__((at(0x18000))); 3) следующей функцией стираю последний сектор и записываю туда какой-то массив, в первом элементе которого хранится будущее значение i typedef void (*IAP)(unsigned int *in, unsigned int *result); #define iap_entry ((IAP) 0x7FFFFFF1) unsigned int program (unsigned int * data) { unsigned int command[5]; unsigned int result[5]; unsigned int save_VicInt; save_VicInt = VICIntEnable; VICIntEnClr = 0xFFFFFFFF; //запрет прерываний command[0] = 50;//подготовка command[1] = 10; command[2] = 10; iap_entry (command, result); if (result[0])goto exit; command[0] = 52;//стирание command[1] = 10; // начало command[2] = 10;// конец command[3] = 60000;// частота проца iap_entry (command, result); if (result[0])goto exit; command[0] = 50;//подготовка command[1] = 10; command[2] = 10; iap_entry (command, result); if (result[0])goto exit; command[0] = 51;//запись command[1] = (unsigned int) 0x0018000; // куда пишется command[2] = (unsigned int) data;//что пишется command[3] = 256;// число байт command[4] = 60000; iap_entry (command, result); if (result[0])goto exit; exit: VICIntEnable = save_VicInt; return (result[0]); } Проблема состоит в том, что в таком случае на команде стирания проц вылетает в PAbt_Handler. Если не объявлять раздел IROM2,тогда всё нормально проходит,но тогда как проконтролировать не залезет ли прога в область,где предполагается перезапись.
  10. Вроде как для забивания частоты дескритизации тоже нужно(или полезно) ставить фильтры.
  11. Дабы прояснить: 1)Первый вариант, со сглаживанием верхушек, есть тут http://electronix.ru/forum/index.php?showtopic=62769 Но цепь формирования синусоиды должна быть забита под частоту меандра и получить (к примеру) диапазон 10кГц-100кГц будет сложно,или ошибаюсь? Надо будет ставить что-то типа MAX7418-MAX7425 2)В аппликухе http://www.gaw.ru/html.cgi/txt/app/micros/msp430/slaa116.htm - "следует выбирать частоту среза выше границы полосы сигнала, но намного ниже частоты ШИМ-сигнала" Советуют дискретизацию брать не менее 16.
  12. а что до англоязычных аппликух от атмэля жизни не было? Особенно запись An additional output filter will help to achieve a good sinusoid. полностью отвечает на вопрос о номиналах RC цепи.
  13. Всё же если без пантов, так как раздел "В помощь начинающему": в гугле "Интегрирующие цепи" высыпает груду инфы и не сразу незнающему разобраться, а какой собснно предельной частоты синусоиду можно получить с данной элементарной RC цепочки и какой частоты должен быть ШИМ для заданной пульсации? Несомненно, метод тыка, предыдущий опыт и гора симуляторов, но всё-таки если ручкой на бумажке: 1) напряжение на кондёре Uc=Uвходное*(1-e^(-t/(R*C))), если прикинуть Uc как 90% от входного, значит требуемое для заряда время равно 2.3RC и столько же требуется для разряда со 100% до 10%.Выходит максимальная частота чего-то далёкого от синусоиды(пилы), но ещё с размахом от 0.1 до 0.9 от входного напряжения для RC цепочки будет F=1/(4.6RC) . 2) частоту ШИМ-а я так понимаю должна определять требуемая пульсация относительного идеального сигнала. Есть у кого-нибудь обоснованный ответ или ссылка, как выбрать частоту?
  14. Почти из шита :) , но с подписями. Только вот в UM23ХХ ещё нарисованы странные повёрнутые трапеции, в которые входит как входной сигнал так и сигнал из ГУН-а. Что это может быть? Может это тож как-то участвует в синхронности? или просто переключатель.
  15. Если не секрет, расскажите где нужна синхронность с тактовой частотой? Я держал в руках девайс в котором две AVR-ки тактировались одним генератором. Разработчики сказали, что это максимально увеличивает скорость обмена по SPI между процами. AVR и LPC конечно не одно и тоже, но раз нет никаких задержек по фазе, можно было бы затактировав два проца, использовать это для того же ускорения передачи по SPI(к примеру)? Или бред?
  16. гы, а в LPC23 случаем нету тоже каких пару байт энергонезависимой и чтобы без IAP и батареек? мечты :)
  17. Ну не знаю по поводу механики, такого вот зверя в руках держал и подключал. Паром можно пропаривать и лить всё что угодно, вертушка с какого-то сплава с титаном. Конечно не для 3куб/час, но у них есть и проще. Ценник правдо кусается. TUR_1502_NF00009_0702B.pdf
  18. Да о Великий.... По устройству в EEPROM стирание происходит путём стекания заряда с плавающего затвора. Эффект работает на мизерных расстояниях между управляющим/плавающим затворами и истоком. Выходит стереть EEPROM внешним воздействием не реально? Наверно быстрее стереть бросками высокого напряжения на выводах.
  19. Как ни странно: девайс на AT24C64N читает из него LPC , но без указания свыше не пишет. Девайс стоит на машине к нему идёт много кабелей. Говорят,что массу отключали. Однако после сварки еепромка стёрлась. Нога записи разрешена. Развязку от бортового питания делал. Ещё была подобная проблема с кублеровским счётчиком, корпус не ломал, но думаю там стоит FRAM. Сам бы не поверил, но после сварки на машине происходят сбои, даже если нет питания. Может кто сталкивался с таким чудом? Начальство шуметь начало,рядовым инженерам не верят. И поможет ли перемычка на ножку разрешения записи,правда мало верится.
  20. Ладно шариться по массиву можно хорошо и так: void func(char *temp,char x,char y){ int i,j; for(i=0;i<y;i++)//по столбцам for(j=0;j<x;j++){//по строкам *(temp+i*y+j)=1; } } и ещё кучей способов. мне хотелось именно квадратные скобки, дабы повысить наглядность коэффициентов при расчёте определителей матрицы. Определитель матрицы 5х5 , выполненный сначало на индексах - и начинает рябить.И чем больше, тем труднее ошибку в индексе найти. А огород из void , & и [0][0] начал городить из-за того, что uint8_t array[5][5]; void func(uint8_t *temp, uint8_t x, uint8_t y){.......} func(array ,sizeof(array[0]) / sizeof(array[0][0]),sizeof(array) / sizeof(array[0])); вызывает ошибку компилера RV: main.c(28): error: #167: argument of type "char (*)[5]" is incompatible with parameter of type "char *" вот и пошла фонтазия художника :)
  21. как посоветовали, образно прикинул начала строк, присвоил их адреса к элементам массива указателей, в котором есть уже одна размерность. Что не так? Ясно что нужно ещё передавать размерность в функцию и грамотно расписать. char array[5][5]; void func(void *temp,char x,char y){ char * c_Uk[20];//заранее больше одной размерности char i; c_Uk[0]= (char *)temp; for(i=1;i<y;i++){ c_Uk=c_Uk[i-1]+x; } c_Uk[1][2]=5; } int main (void) { func(&array[0][0],5,5); return 0; }
  22. void func(void *temp){//для массива 5х5 char * c_Uk[20]; c_Uk[0]= (char *)temp; c_Uk[1]= c_Uk[0]+5; c_Uk[2]= c_Uk[1]+5; c_Uk[3]= c_Uk[2]+5; c_Uk[4]= c_Uk[3]+5; c_Uk[2][2]=5; } если забить на лишние указатели,то не плохо. Всем спасибо.
  23. Конкретней : получаем в функции указатель: void func(void *temp) создаём указатель на нужный объект, char : char * c_Uk; связываем: c_Uk= (char *)temp; Вопрос: почему, если : *(c_Uk+2)=5; и c_Uk[2]=5; синонимы, то не проходят коснтрукции типа c_Uk[1][1]=5;
  24. не рычите люди. С тем, что через void* можно бросить указатель в функцию хоть слона это ясно, искать маркер конца строк массива тоже ясно(один чёрт оно и так всё в ряд). Дайте ответ на вопрос: Можно ли элементарно преобразовать указатель чего угодно, переданный в функцию, к виду [][] , а не работать со сдвигами? Зная размерность. И не трогать при это с++. С чего угодно малость загнул, хотябы разобраться с char.
  25. void func( unsigned size_y, unsigned size_x, char array[size_y][size_x] ) { array[2][1] = 'a'; } в RealView как то не очень прошло,если только size_y не забить статично. вообще не трогая указатели и typedef пашет и char array[5][5]; void func(char temp[5][5]){ temp[1][0]=5; } int main (void) { func(array); return 0; } Просто массив может быть разной размерности как и способ расчёт их определителя(матрицы), а раз верхний пример не катит, дабы не зацикливаться как на размерности массив так и на размере элементов в функцию кидаю адрес первого элемента : char array[5][5]; void func(char *temp,char x,char y){ temp[1*x+1]=5;//[1][1] } int main (void) { func(&array[0][0],5,5); return 0; } Но никак не получается красивая конструкция типа temp[1][1] . Собственно если отбросить красоту,как помимо (начало+1*x+1) может произойти обращение с помощью скобок к элементам двумерного массива? Конструкция [][] скрывает тот же расчёт, и вроде даже сложнее.Смотрел на: char array[5][5]; char i=2,j=1;//позиция void func(char *temp,char x,char y){//x,y размерность temp[i*x+j]=5; } int main (void) { func(&array[0][0],5,5); array[i][j]=15; return 0; }
×
×
  • Создать...