|
|
  |
SED1335,PIC18F4550 и LCD320x240, разбираем по косточкам модуль SED1335.c |
|
|
|
Feb 17 2008, 22:31
|

Знающий
   
Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143

|
Попытки записи массива типа 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[i]); }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));// мелкая сетка } } }//-------- Подскажите где я напортачил
--------------------
|
|
|
|
|
Feb 25 2008, 22:22
|

Знающий
   
Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143

|
Ура !!! Удалось засинхронизироать картинку //##################################################################### 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 //####################################################################
--------------------
|
|
|
|
|
Feb 26 2008, 17:54
|

Знающий
   
Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143

|
Цитата(Илья @ Feb 26 2008, 08:52)  Поздравляю, картинка, конечно красивая, но меня волнует следующий вопрос:
Насколько я помню, при рисовании динамически изменяющихся картинок на SED1335 должны возникать флики на экране. Как у вас обстоят дела, с такими глюками? Если флики - это когда в разных кадрах есть места по-разному освещенные, то на тёмном фоне их практически не видно, линии-то тонкие и все эти мелькания происходят как бы за экраном, так что с фликами пока всё ОК.
--------------------
|
|
|
|
|
Mar 2 2008, 13:44
|

Знающий
   
Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143

|
Прошу помощи по теме Дело такое, надо мне от шифратора кнопок , кот. я зашил в ПЛИСе передать в ПИК значение нажатой кнопки.То есть , если нажата кнопка 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 //######################################################################
--------------------
|
|
|
|
|
Mar 3 2008, 03:27
|
Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 1-12-05
Из: Иркутск
Пользователь №: 11 630

|
Насколько я понимаю нужно дождаться перехода из низкого в высокий уровень на 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 и т.д. тогда для дешифровки делаем следующим образом: настраиваем прерывание по фронту. в обработчике прерывания стартуем таймер, и ждем в цикле спада. Стопорим таймер и смотрим: сколько натикало - такой и код
|
|
|
|
|
Mar 4 2008, 18:56
|

Знающий
   
Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143

|
вот такое у меня ещё пожелание(чувствую, что без посторонней помощи не обойдусь) касательно кнопок управления. каждый раз ,при нажатии кнопки со значением переменной puls==12, нужно, чтобы значение другой переменной (хх напр.)однократно увеличивалось на единицу и оставалось таким, а при нажатии кнопки со значением puls==13 уменьшалось на единицу и оставалось таким. Я сам пробовал,фигня у меня получается-если держать кнопку и не отпускать, то хх всё время увеличивается или соотв. уменьшается, а это недопустимо.Если с этим поможете, то тогда влпрос с управлением будет закрыт.Спасибо заранее
--------------------
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|