andreichk 0 17 февраля, 2008 Опубликовано 17 февраля, 2008 · Жалоба Попытки записи массива типа const byte mS_uS[] = { 0,0,0,0,0, 0,7,128,1,224, 0,8,64,2,16, 61,200,1,10,0, 34,40,1,10,0, 34,39,129,9,224, 34,32,65,8,16, 34,32,65,8,16, 34,40,65,26,16, 34,39,129,233,224, 0,0,1,0,0, 0,0,1,0,0, }; не увенчались успехом Написал процедуру void EEPROM_WRITE(long int address) {unsigned int16 i; for (i=0;i<60;i++) { write_ext_eeprom(address, mS_uS); }break; }//-------------------------- во-первых пишет целых 5 минут во-вторых нифига не читает с помошью процедуры long int EEPROM_READ(long int addr) {long int dat; for (addr=0;addr<990;addr++) { dat = read_ext_eeprom(addr); }return dat; }//-------------------------- //##################################################################### void Grid_UpXXX(unsigned int16 y1,unsigned int16 y2,unsigned char setka )// {unsigned int16 addr, x,y,i;i=0; for (y = y1; y < y2; y++) { for (x = 0; x < 264;x=x+8) { addr = 40 * y + x/8 ;//расчитать байт адреса, содержащего пиксель if( setka==1 ) bild( addr,EEPROM_READ(0));// крупная сетка else bild( addr,EEPROM_READ(1));// мелкая сетка } } }//-------- Подскажите где я напортачил Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 20 февраля, 2008 Опубликовано 20 февраля, 2008 · Жалоба да, не густо тут помошников..... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 20 февраля, 2008 Опубликовано 20 февраля, 2008 · Жалоба ещё одно фото для истории. двухканальный вариант,построенный на ADS831 и FIFO IDT7201 .Всем этим хозяйством управляет PLCD XILINX XC9572. Cинус , частота- 20 кГц.Каждый канал имеет свой переключатель развёртки.Почему-то рисует половинкой Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 23 февраля, 2008 Опубликовано 23 февраля, 2008 · Жалоба проблема рисования синусоиды половинками решена добавлением резистора 47к на неинвертирующий вход входного ОУ.Осталось добиться устойчивой синхронизации и максимально возможной частоты сигнала. Первая попытка наблюдения видеосигнала с камеры(сверху) и одновременный синус 20 кГц(снизу) Ну хоть кто-нибудь порадуется вместе со мной :beer: Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 25 февраля, 2008 Опубликовано 25 февраля, 2008 · Жалоба Ура !!! Удалось засинхронизироать картинку :a14: //##################################################################### void pix_A(unsigned int8 y_pos_A,unsigned int8 offset)// рисуем кривую, типа синусоиды и пр. {unsigned int8 x, y , yy ;// unsigned int16 xx; y = y_pos_A; Output_bit(PLCD_FIFO_RES ,0);//PIN_C0// сброс FIFO в "0" Output_bit(PLCD_FIFO_RES ,1);//PIN_C0// и разрешение на считывание Output_bit(READ_FIFO_B ,1); //PIN_C1 запрет канала B do{ // слабая попытка синхронизации Output_bit(READ_FIFO_A ,0);//PIN_C2 adcA=input_b(); Output_bit(READ_FIFO_A ,1);//PIN_C2 }while(input_b()== adcA );//уже лучше,но всё равно плохо //--------------- предварительная запись в буфер --------------------- for(xx=0;xx<512;xx++){// канал A Output_bit(READ_FIFO_A ,0);//PIN_C2. разрешить adcA=input_b(); adcA = (adcA > offset) ? offset : adcA;//ограничитель до 115 adcA = 255 - adcA; Buff_[xx] = adcA;//записываемся в буфер 512 раз Output_bit(READ_FIFO_A ,1);//PIN_C2.запретить } xx=0; for(;;) {//синхронизация буфера по фронту или по спаду if( Buff_[xx++] <= 175) break; //по фронту // if( Buff_[xx++] >= 175) break; //по спаду } sbros(adcA); wert_A(adcA); if( xx >= 255 ) xx = xx - 255; //приводим к int8 //--------------- собственно кривая --------------------------- for(x=1;x<255;x++){ yy = y; y = Buff_[xx++] + y_pos_A; if (yy>y) front(x,yy,y); // Рисуем фронт A if (yy<y) spad(x,yy,y); // Рисуем спад A adcA=y-y_pos_A; pixel(x,y,1); // Рисуем вершину A } }//--------------------------OK //#################################################################### Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flann 0 26 февраля, 2008 Опубликовано 26 февраля, 2008 (изменено) · Жалоба Поздравляю, картинка, конечно красивая, но меня волнует следующий вопрос: Насколько я помню, при рисовании динамически изменяющихся картинок на SED1335 должны возникать флики на экране. Как у вас обстоят дела, с такими глюками? Изменено 26 февраля, 2008 пользователем Илья Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 26 февраля, 2008 Опубликовано 26 февраля, 2008 · Жалоба Поздравляю, картинка, конечно красивая, но меня волнует следующий вопрос: Насколько я помню, при рисовании динамически изменяющихся картинок на SED1335 должны возникать флики на экране. Как у вас обстоят дела, с такими глюками? Если флики - это когда в разных кадрах есть места по-разному освещенные, то на тёмном фоне их практически не видно, линии-то тонкие и все эти мелькания происходят как бы за экраном, так что с фликами пока всё ОК. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 27 февраля, 2008 Опубликовано 27 февраля, 2008 · Жалоба У меня сегодня день рождения. Спасибо всем за поздравления Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 27 февраля, 2008 Опубликовано 27 февраля, 2008 · Жалоба сегодня попробовал подать на вход меандр от кварцевого генератора.Нармально можно рассмотреть частоту в 1 МГц при тактовой частоте ПИКа и FIFO- 40МГц. Но вот незадача- не совпадает меандр с масштабом клеток- получается примерно полторы клетки на 1МГц. Перерисовывать клетки как-то не очень хочется, значит надо подгонять частоту тактирования.Можно ли это сделать программно в ПЛИСе или нет-кто мне подскажет? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 2 марта, 2008 Опубликовано 2 марта, 2008 · Жалоба Прошу помощи по теме Дело такое, надо мне от шифратора кнопок , кот. я зашил в ПЛИСе передать в ПИК значение нажатой кнопки.То есть , если нажата кнопка 1, то вылетает один импульс, если 2, то два импульса и т.д. до 15ти.Длительность импульса прим. 0.5мс без паузы , то есть весь пакет примерно от 0.5 + пауза 0.5мс, до 30ти.Импульсы подаются на вход РА4.также смоделирован признак нажатия кнопки, то есть высокий уровень на весь размер пакета, он подается на порт РА5. Я нарисовал вот такую процедурку, но она почему-то не работает как надо.Может такой способ опознавания вообще не катит? //###### ШИФРАТОР КНОПОК УПРАВЛЕНИЯ. ПОРТ А НА ВХОД ######################## #ifndef Code_Out #define Code_Out PIN_A4// Пакеты импульсов от 1 до 15 #endif //-------------------------- #ifndef TASTE_EN #define TASTE_EN PIN_A5//Признак нажатия кнопки- лог.1 #endif //############################### void Tasten(void)// ОПРОС КНОПОК {unsigned int8 puls; if (input(TASTE_EN))//признак нажатия кнопки лог."1" { while(!input(TASTE_EN));//ждём спад обрезанного импульса rect(265, 80, 269, 86, 1,0); text57(265,80,u ,1,1); puls=0; while(!input(Code_Out));//ждём спад while(input(TASTE_EN))//начинаем отсчёт по фронту { while(input(Code_Out));//ждём фронт while(!input(Code_Out));//ждём спад wert_A(puls++); } puls=0; delay_ms(200); } else{ rect(265, 80, 269, 86, 1,0); text57(265,80,m ,1,1); } } //########################################################################### void wert_A(unsigned int8 wert) { char voltage[9]; sprintf(voltage, "%u",(unsigned int8)( wert)); // преобразуем в текст //voltage[4] = '\0'; //ограничиваем тремя знаками rect(150, 230, 175, 237, 1,0); //стираем старое значение text57(150, 230, voltage, 1, 1); //выводим новое значение }//--------------------------OK //###################################################################### :beer: Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flann 0 3 марта, 2008 Опубликовано 3 марта, 2008 · Жалоба Насколько я понимаю нужно дождаться перехода из низкого в высокий уровень на RA5, а затем посчитать количество импульсов на RA4. Следовательно нужно сделать так: unsigned int8 GetButton(void){ unsigned int8 puls; while(input(TASTE_EN)); // если зашли уже в момент передачи кода кнопки то дождаться окончания передачи puls=0; while(!input(TASTE_EN));//дождаться начала следующей передачи кода кнопки while(input(TASTE_EN)){//пока активно RA5 while(!input(Code_Out)){//ждём фронт if (!input(TASTE_EN)) return puls;//проверяем: если передача законилась то выйти, чтобы не зависнуть } while(input(Code_Out));//ждём спад puls++; } return puls; } А вообще зачем такие сложности, не проще ли сделать так: Передача кода кнопки только по одной ноге, а кодирование длительностью ипульса, например: 0.5 мс - кнопка №1 1 мс - кнопка №2 1.5 мс - кнопка №3 и т.д. тогда для дешифровки делаем следующим образом: настраиваем прерывание по фронту. в обработчике прерывания стартуем таймер, и ждем в цикле спада. Стопорим таймер и смотрим: сколько натикало - такой и код :) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 3 марта, 2008 Опубликовано 3 марта, 2008 · Жалоба Спасибо, я попробую как вы советуете и отпишусь Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 3 марта, 2008 Опубликовано 3 марта, 2008 · Жалоба попробовал предложенный код.Он работает,только не совсем так.А именно- теперь осциллограмма появляется только в момент нажатия любой кнопки, а иначе картинка замирает.Значение кнопки отображается не совсем корректно- или 0 или на одно значение меньше или правильное значение. Наверное нужно уточнять частоту импульсов и настраивать прерывание по нажатию- изменению состояния RA5 ? Только я не знаю как(ещё не изучал этот вопрос).Если укажете правильный путь- буду благодарен Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 3 марта, 2008 Опубликовано 3 марта, 2008 · Жалоба код работает с небольшой доделкой и понижением частоты импульсов опроса кнопок до 150 кГц. думаю, что этим можно и ограничиться :beer: unsigned int8 GetButton(void){ unsigned int8 puls; if (!input(TASTE_EN)) return ;//если кнопка не нажималась- уходим while(input(TASTE_EN)); // если зашли уже в момент передачи кода кнопки то дождаться окончания передачи puls=0; while(!input(TASTE_EN));//дождаться начала следующей передачи кода кнопки while(input(TASTE_EN))//пока активно RA5 { while(!input(Code_Out))//ждём фронт { if (!input(TASTE_EN)) return puls;//проверяем: если передача законилась то выйти, чтобы не зависнуть } while(input(Code_Out));//ждём спад puls++; } return puls; } ................................................................... а вызов делаем так и уходим от нуля x=GetButton(); if(x>0) wert_A(x); Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andreichk 0 4 марта, 2008 Опубликовано 4 марта, 2008 · Жалоба вот такое у меня ещё пожелание(чувствую, что без посторонней помощи не обойдусь) касательно кнопок управления. каждый раз ,при нажатии кнопки со значением переменной puls==12, нужно, чтобы значение другой переменной (хх напр.)однократно увеличивалось на единицу и оставалось таким, а при нажатии кнопки со значением puls==13 уменьшалось на единицу и оставалось таким. Я сам пробовал,фигня у меня получается-если держать кнопку и не отпускать, то хх всё время увеличивается или соотв. уменьшается, а это недопустимо.Если с этим поможете, то тогда влпрос с управлением будет закрыт.Спасибо заранее Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться