Jump to content

    

Kitsok

Свой
  • Content Count

    211
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Kitsok

  • Rank
    Местный
  1. Приятно почитать себя самого через 6 лет. Докладываю: Идея с CPLD был верной, задачка решилась, проект закрылся, зато еще один ребенок свет родился, пока эти годы прошли Спасибо еще раз всем за помощь.
  2. Цитата(VIT_KRAS @ Nov 5 2012, 18:07) Именно так! И не знаю, как где, но я при заказе плат за одну только подготовку отдаю 2...3 т.р. Учитывая, что заказчик готов выставлять 7500 за час простоя оборудования, 10000 за "решение проблемы" выглядят просто издевательством. При этом расчёт верен. Если найдётся человек, не особо занятый на работе, за пару тройку неделек, "на коленке" это ДУ можно "сваять" Удачи в поисках оного! Я вроде как свой вопрос уже решил, поэтому могу и пофлудить. Надеюсь, модераторы поймут и простят. Для начала, небольшой экскурс. Однажды я захотел 3-осевой ЧПУ фрезер (гравер), и я хотел не купить его, а построить. Примерно 8 неторопливых месяцев по вечерам и ночам я его спроектировал. Вернее, я спроектировал сначала нереализуемую конструкцию, сходил к своим знакомым токарям-фрезеровщикам, показал чертежи, и они в один голос сказали, что то, что я хочу, сделать невозможно, а именно - отверстие 25H7 глубиной 150 мм, если память не изменяет. Тогда я углубился в ЕСДП, книжки по металлообработке и тому подобное, и полностью перепроектировал станок "с нуля" с использованием некоторых готовых узлов - ШВП, рельсовых направляющих, подшипниковых блоков. В общем, когда очередная итерация проверок и перепроверок завершилась, я пошел на некий известный форум по металлообработке, и точно так-же разместил объявление о необходимости изготовления деталей. Допуск я указал - +-10 микрон, материал, соосность отверстий, параллельность плоскостей деталей - все было строго. Началось бурное обсуждение, которое продолжалось недели две после того, как станок уже был собран и работал. Про то, что мне надо пойти назад в ПТУ, из которого меня выгнали за тупость, про то, что мне надо обратиться к специалистам, ну и прочее и прочее. Да, кстати. Когда я заказывал кое-какие детали на Тайване, то они с недоуменностью спрашивали меня, что за странные буквы типа 30H7 я указываю, и какая точность мне нужна. Я тогда спросил, мол, друзья мои азиатские, а вот если мне надо такие-то точности в таких-то размерах (и дал им первоначальные невозможные чертежи), то сколько стоить будет? В общем, оказалось, что доставка была бы дороже изготовления, и сумма изготовление + доставка незначительно превысила бы сумму, которую я отдал в Москве молчаливому участнику форума, который не ввязываясь в дискуссию, изготовил то что мне нужно в те сроки, которые мне были нужны, и за те деньги, о которых мы договорились. Это было в 2007 или в 2008 году. Теперь к задаче, которую я поставил в этой теме. Задача решается мной за один рабочий день (если железный пульт) или за три (если с софтом для станции управления). По деталям, как всегда, выходят не существенные совершенно деньги. Более того, за чуть большие деньги (чем 10 тысяч рублей) эту задачу можно решить готовыми изделиями, которых на рынке по крайней мере 4 крупных производителя, и прорва мелких. Однако при использовании готовых изделий возникает совершенно не нужный мне функционал, за который, понятно, мне платить не хочется. Теперь по поводу 7500 в час Vs. 10 тысяч за пульт и интерфейсные платы. Я указал 7500 не с потолка, это наша выручка за час работы снегосверлильной молотилки вертикального взлёта. То есть, это очень и очень по-божески. Про доступность в 99.98 - это нормальная доступность для всех современных ЦОДов. Про вочдоги, WoL и прочие идеи, возникшие в этой ветке (напоминаю, в которой я вроде как достаточно просто и понятно описал, какое изделие мне нужно изготовить). Господа теоретики, не надо меня учить как сделать потребную доступность сервиса, я этим занимался у телекома из Top-10 на протяжении 8 лет. И уж тем более не надо грубить не зная всей задачи целиком, не большого ума это признак. За сим я считаю, что на все вопросы много и не очень уважаемых собеседников ответил, и ветку можно закрывать. Всем спасибо!
  3. Цитата(Elsystems @ Nov 5 2012, 16:59) Такой договор будет не в пользу потенциального исполнителя. Я бы даже сказал, что на него пойдет полный кретин. И дело не только в невозможном соотношении цены/штрафа за единицу времени, а в том, что исполнитель не управляет на 100% тем, за что получает штраф. Вот именно поэтому я разместил объявление о разработке и изготовлении устройства, а не о консультационных услугах
  4. Цитата(@Ark @ Nov 5 2012, 14:11) А вы с производителем или продавцом вашего "программно-аппаратного комплекса" не догадались такой договор заключить? Или сэкономили опять? Ему бы и выставили все эти проценты, сроки и штрафные санкции. А сейчас ищите дурачков, которые возмут на себя отвественность за неизвестное, плохо работающее барахло, которые вы приобрели. Гарантии выдает производитель, вот к нему и обращайтесь. Я так и думал, что вы откажетесь.
  5. Цитата(Dmitron @ Nov 5 2012, 12:10) к каждому ПК подключить микроконтроллер, который собирает данные со светодиодов и нажимает кнопки. Подходит, только не 1PC=1uC, а 1uC=8PC Цитатаинтерфейс пульта с контроллерами - RS485. Согласен. ЦитатаВ качесте пульта проще применить обычный ПК. Подумав, согласен. ЦитатаРазработка ПО ПК+ ПО МК + ППМ = 6 тыр. изготовление печатных плат на заводе - примерно 100 рублей/шт , 3 недели КИ - примерно 120 рублей / плата сборка - 120 рублей/плата. Итого цена: 6тыр + N * 640. т.е. N <= 6. Срок 2 месяца. За исключением 2 месяцев все ОК 2 месяца кажутся оверкиллом по той причине, что плат нужно два типа в количестве трёх штук, что вполне делается за пять дней срочным изготовлением. Учитывая сжатость сроков, готов софт для ПК написать сам, смогу это сделать после утрясания протокола обмена. Беретесь за "железную" часть за 10 т.р.? Цитата(@Ark @ Nov 5 2012, 12:14) ... которое, к сожалению, полностью нивелируется совершенно неграмотной постановкой задачи. Кто сказал топикстартеру, что указанные проблемы нужно решать именно таким способом? Сами придумали, или кто насоветовал? Сам придумал. ЦитатаКак я понимаю, компьютеры находятся в зоне сильных промышленных помех и наводок, и из-за этого периодически "виснут". Вы не правильно понимаете. Прямо скажу, что телепат из вас никакой. ЦитатаИ вы не придумали ничего лучше, как организовать их периодический дистанционный перезапуск с пульта оператора? Вы бы лучше, за предложенную сумму, пригласили соответствующего специалиста для консультации, чтобы он посмотрел на все это, и подсказал правильное решение. А давайте. Предложение такое: мы с вами подписываем договор, в котором будут сроки, оплата ваших услуг (10 т.р.), и конечная метрика успешности вашей работы, которая будет звучать так: "Целью работ по настоящему договору является бесперебойная работа программно-аппаратного комплекса 99.98% времени в году с максимальным простоем на аварийно-восстановительные и регламентные работы в 1 час в год". Результат вашей работы заключается в списке работ, которые нам необходимо будет сделать для достижения цели и акт о выполнении нами этих работ, который вы тоже подпишите. Штрафные санкции мы пропишем так: каждый час простоя сверх 1 часа в год будет вам стоить 7500 рублей. Договор заключается сроком на 1 год. Согласны?
  6. Цитата(psL @ Nov 4 2012, 23:24) А что APC уже перестала управляемые розетки делать? Мне не нужны управляемые розетки, мне нужно то, что я написал в первом сообщении этой темы
  7. Цитата(dkg10 @ Nov 3 2012, 09:27) Боюсь эти лампочки и кнопки есть чисто аппаратные атрибуты материнских плат и манипулировать ими придется на аппаратном уровне, если необходимо выходить за рамки установленной операционной системы Совершенно верно. Опыт подсказал, что виснет абсолютно все в наших электромагнитных условиях, поэтому нужно чисто аппаратное решение. Еще поправка. Я написал, что будет хорошо, если между пультом и интерфейсной платой будет идти одна витая пара. Я имел в виду не 1х2, а 4х2 CAT5e. Цитата(Mihail Gluhowchenko @ Nov 3 2012, 09:20) Доброе время суток. Эти лампочки и кнопочки есть отоброжение работы соответствующих кусков кода. Проще сделать програмный пульт если компьютеры объединины в сеть. Wake UP on LAN ни кто не отменял. И выключается это всё на ура таким же способом, без пультов в железном исполнении. Приведу пример: грузим Linux, после загрузки ядра и initrd (содержащего по случайности только модули и скрипт их загрузки) корневая файловая система не находится. Ядро выпадает в аварийный режим и намертво вешает компьютер (while(1) {}). Я даже при наличии KVMа вынужден лезть в серверную и жать кнопку. Поэтому только аппаратное решение.
  8. Цитата(gerber @ Nov 3 2012, 01:15) Очень приятно видеть чётко и грамотно сформулированное техническое задание. Но пара вопросов всё-таки остались неясными для исполнителя - какого цвета светодиоды должны быть использованы в пульте? И ещё - допускается ли мигание светодиода HDD, или исполнителю предстоит устранить и этот недостаток, распространённый в большинстве персональных компьютеров по сей день? Цвета светодиодов - зеленый для PWR и желтый для HDD. Мигание светодиода допускается, особой щепетильности не требуется, основное назначение - дать понять оператору снегодавильного комплекса , что компьютер не повис, а что-то такое делает, и даже пишет на диск, и жать до упора кнопку не надо.
  9. Добрый день! В наличии имеется N-компьютеров на обычной писюковой платформе. В каждом компьютере имеются интересующие нас светодиоды Pwr(питание включено), HDD(обращение к жесткому диску) и кнопка Power (включение-отключение питания). Задача: вынести светодиоды и кнопку от каждого компьютера на 30 метров на центральный пульт, на котором видно состояние индикаторов и имеется кнопка, с помощью которой можно включить-выключить каждый отдельный компьютер. Облегчающим фактором является группировка компьютеров в кучки, в каждой кучке будем считать по 8 компьютеров. Затрудняющим фактором является наличие в непосредственной близости 6 двигателей с частотным регулятором каждый, моща каждого мотора - 4 кВт. Развязка всего от всего обязательна, т.е. выходы с материнских плат идут на светодиод оптопары, и вход на материнскую плату кнопки Pwr гальванически связан только с транзистором оптопары. Релюшки не приветствуются, однако принимаются в случае чрезвычайно весомых аргументов. Питание централизованное, со стороны пульта, постоянным током напряжением до 24 вольт включительно. Разъем питания - винтовой клеммник. Количество жил между кустом компьютеров и пультом не ограничено, однако лучше, если меж ними будет одна витая пара и все. Пульт в изначальной формулировке должен иметь кнопок и светодиодов на 16 компьютеров, однако и концепция, и разводка платы пульта должна предусматривать возможность практически копи-пастом в Sprint Layout промасштабировать систему до 32 компьютеров. Задача: Разработать архитектуру решения, схемы плат как со стороны PC, так и пульта, если требуется - написать прошивки, развести все на платы, изготовить работающий опытный комплект в составе двух интерфейсных плат для 8 компьютеров каждая и центрального пульта на 16 компьютеров. Корпус со стороны интерфейсных плат не требуется, однако должны быть предусмотрены крепежные отверстия от 4 до 6 мм. Со стороны пульта корпус должен обеспечивать защиту на уровне IP50. Блок "кнопка + 2 светодиода" ан пульте должен иметь рядом с собой место для маркировки, к какому именно компьютеру это относится. Размер маркировочной площадки - 30х20мм. На стороне интерфейсной платы для кабелей к материнским платам должны использоваться винтовые клеммники, для интерфейса между интерфейсными платами и пультом - винтовые клеммники в случае использования много-многожильного кабеля, и RJ-45 в случае использования витой пары. На выходе должно быть: 1. Документация (схемы принципиальные, разводки печатных плат, чертежи корпусов, BOM) в распространенном формате. Сложность задачи подразумевает возможность использования STrace, Sprint Layout и DWG для чертежей; 2. Полностью готовый к использованию комплект из пульта на 16 компьютеров и двух интерфейсных плат на 8 компьютеров каждая. Времени на разработку и изготовление до 21 ноября включительно. Доставка нужна в г.Москву, в центр оного города. Дабы сэкономить время и деньги, предлагаю желающим поучаствовать в этом квесте для начала отписать мне идею реализации взаимодействия интерфейсной платы и пульта. Оплата по факту выполнения в оговоренные сроки пунктов 1-3, то есть нужно все и сразу. Цена вопроса - 10 тысяч рублей. Права на тиражирование и развитие изделия делятся между разработчиком и мной, то есть если вдруг с какого-то перепуга я решу начать заниматься производством и продажей изделия, то разработчик на меня в суд подавать не станет, а если подаст - то проиграет Предложение актуально до 8 ноября. Связь через личку, но лучше на kкlubniсhкin эт gmail.com Спасибо!
  10. Могу заслать работающий код - там FreeRTOS и USB Compisite device - HID joystick + custom. Только чур меня не спрашивать, что там и как, я уже и сам не помню Если надо, отпишите в личку.
  11. LPC2368, ADC и ....

    Цитата(zltigo @ Mar 11 2010, 23:39) причем, если я Вас правильно понял, и, что что убивает наповал - ПРОИЗВОДИТЕЛЕМ! Да, это вполне себе Филипсовская библиотека.
  12. LPC2368, ADC и ....

    В библиотэке оно выглядит так: Кодvoid PINSEL_Set ( U32 portnum, U32 pinnum, U32 funcnum) {     U32 pinnum_t = pinnum;     U32 pinselreg_idx = 2 * portnum;          if (pinnum_t >= 16)     {         pinnum_t -= 16;         pinselreg_idx++;     }          PINSEL->PINSELn[pinselreg_idx] &= ~((U32)(3 << (pinnum_t * 2)));     PINSEL->PINSELn[pinselreg_idx] |= (U32)(funcnum << (pinnum_t * 2)); } Я занялся чисткой кода, библиотека - библиотекой, но мне оно на дефайнах нравится много больше, поэтому для освоенной части как раз такие дефайны и пишу.
  13. LPC2368, ADC и ....

    Ну раз никто не знает, то сам расскажу Во-первых, на моей отладочной плате (SK-MLPC2368) не был заведен Vref, и это раз. Во-вторых, я передумал вообще смотреть на статус каналов, и теперь в обработчике делаю так: Код U32 regval;//= adccfg.regptr->STAT; volatile U32 ulStatus = AD0STAT; volatile U32 dummy; U8 i;      regval = ulStatus; for(i=0;i<6;i++)   {    /* Read ADC value */    dummy=adccfg.regptr->DR[i];    /* Cut to 10 bits */    dummy = ( dummy >>6 ) & 0x3ff;    /* Add data to accumulator */    ulADC_RawBuf[i] += dummy;   } /* Oversampling counter */ ulCnt++; if (ulCnt == 128)   {    /* Copy data to global buffer */    for(i=0;i<6;i++)     {      /* Copy data to global buffer and divide it by 2 */      *(ptrADC_Buf+i) = (ulADC_RawBuf[i]>>1);      /* Reset raw buffer */      ulADC_RawBuf[i]=0;     }    /* Reset oversampling counter */    ulCnt=0;   } Все вполне кошерно за исключением того, что 1023*64 никак не равно 65535, но в моем применении это - всё равно.
  14. AT91SAM7X --> LPC2300

    .... а ведь человек спрашивал про SAM7X -> LPC23xx Я до этого писал под SAM7S, сейчас борюсь с LPC2368. Различий дофига по организации периферии, в моем случае - ну ее просто больше. Тогда я борол USB, сейчас - CAN и Ethernet, поэтому насколько гемморойнее тут USB - трудно сказать. Судя по документации, оно поинтереснее, чем в САМах. Разные банки памяти под разную периферию - для меня оказалось необычным. Другой формат и подход к документации. Это заняло несколько дней, привык к Атмеловской манере изложения, но теперь проблем нет. Расстраивает отсутствие usecase'ов у Филипсов. Еще расстраивает отсутствие библиотеки функций для обращения к регистрам по именам. У Атмела это ИМХО очень приятно организовано, а тут - не очень. Вцелом - конечно, кристаллы сильно разные, но переход от AVR к SAM7 был более болезненным, чем от САМа к LPC.
  15. LPC2368, ADC и ....

    Добрый день! FreeRTOS завел, даже думал написать краткий мануал, а потом понял, что мануал давно написан и называется FreeRTOS Porting Guide, zltigo хоть и суров, но прав на 100% Теперь взялся за ADC. Последовательность такая: прочитал User Manual, посмотрел исходники для gcc, посмотрел библиотеку NXP (LPC CDL), подключил ее. Причина использования библиотеки - любовь к функциям типа PINSEL_Set, оставшаяся от писания под SAM7S. Итого получилось так: Кодvoid xSetupADC(void) { // Select pin that used as ADC function     PINSEL_Set (PORT_0, 23, FUNC_1);     PINSEL_Set (PORT_0, 24, FUNC_1);     PINSEL_Set (PORT_0, 25, FUNC_1);     PINSEL_Set (PORT_0, 26, FUNC_1);     PINSEL_Set (PORT_1, 30, FUNC_3);     PINSEL_Set (PORT_1, 31, FUNC_3);   PINSEL_SetResistorMode(PORT_0,23,PINMODE_TRISTATE); PINSEL_SetResistorMode(PORT_0,24,PINMODE_TRISTATE); PINSEL_SetResistorMode(PORT_0,25,PINMODE_TRISTATE); PINSEL_SetResistorMode(PORT_0,26,PINMODE_TRISTATE); PINSEL_SetResistorMode(PORT_1,30,PINMODE_TRISTATE); PINSEL_SetResistorMode(PORT_1,31,PINMODE_TRISTATE); /* Init ADC device */ if ((adcdev = ADC_Init()) == 0)      {          while(1);      }              // Install ADC interrupt handler     if ((VIC_InstallIRQ (ADC0_INT, (void *) ADC_ISR, 0x0F)) == _ERROR)      {          while(1);      }     // Set call back function for ADC     //ADC_SetCBS (adcdev, (void *)usr_adc_cbs);          // Configure ADC with 1MHz of freq, 10-bit of resolution     ADC_Config (adcdev, 500000, 10);          // Enable all channels     ADC_EnableCH (adcdev, 0);     ADC_EnableCH (adcdev, 1);     ADC_EnableCH (adcdev, 2);     ADC_EnableCH (adcdev, 3);     ADC_EnableCH (adcdev, 4);     ADC_EnableCH (adcdev, 5);          // Enable interrupt for ADC0 channel 5     ADC_EnableInt (adcdev, 5);         //ADC_EnableGlobalInt(adcdev);          // Enable ADC interrupt source     VIC_EnableInt (ADC0_INT);         // Start ADC conversion     ADC_Start (adcdev, ADC_START_CONTINUOUS, 0); } ADC_Config пришлось подправить, ибо частоту я выставляю не через библиотечные функции: КодS32 ADC_Config (S32 ADCdev, U32 freq, U32 resolution) {     ADC_CFG_T *pADCdev = (ADC_CFG_T *) ADCdev;     U32 tmp;          if (pADCdev->init == FALSE)     {         return _ERROR;     }          if ((resolution > 10) || (resolution < 3))     {         return _ERROR;     }          if (freq > 4500000)     {         return _ERROR;     }          tmp = SCB_GetPCLK (PCLK_ADC);          //tmp = (tmp / freq) - 1;         tmp = (30000000 / freq) -1;     pADCdev->regptr->CR &= ~(ADC_CR_CLKDIV(0xFF));     pADCdev->regptr->CR |= ADC_CR_CLKDIV(tmp);          pADCdev->regptr->CR &= ~(ADC_CR_BITS(3));     pADCdev->regptr->CR |= ADC_CR_BITS(resolution);          return _NO_ERROR; } Обработчик прерывания: Код__irq __arm void ADC_ISR (void) {         //FIXME For debug     U32 regval;//= adccfg.regptr->STAT;         //FIXME For debug         volatile U32 ulStatus = AD0STAT;     volatile U32 dummy;     U8 i;              regval = ulStatus;     if (regval & 0x0000FF00)    /* check OVERRUN error first */     {         regval = ADC_STAT_CH_OVERRUN_FLAG(regval);                //regval = AD0STAT;                 // BUGBUG There are 6 channels, not 8                 for (i = 0; i < 6; i++)         {             if (regval & 0x01)             {                 /* if overrun, just read ADDR to clear */                 dummy = adccfg.regptr->DR[i];             }             regval = regval >> 1;         }     }     // Check DONE bit     else if (regval & ADC_STAT_INT_FLAG)     {         regval = ADC_STAT_CH_DONE_FLAG(regval);                          // BUGBUG There are 6 channels, not 8         for (i = 0; i < 6; i++)         {             if (regval & 0x01)             {                 /* if overrun, just read ADDR to clear */                 adccfg.ADCBuff[i] = adccfg.regptr->DR[i];             }             regval = regval >> 1;         }     }          // call callback function if it is already installed     if (adccfg.cbs != NULL)     {         adccfg.cbs();     }      if ((ulStatus & 0x3f) != 0x3f)   ulStatus=0; // Acknowledge interrupt VIC_Ack(); } Чего хотел добиться: 1. Чтобы работали все 6 каналов. 2. Чтобы работало в Free run в Burst-режиме 3. Чтобы возникало одно прерывание при отработке всех 6 каналов. 4. Прерывание поставлено на 5 канал, потому что он должен отработаться последним: The first conversion after the start corresponds to the least-significant 1 in the SEL field, then higher numbered 1 bits (pins) if applicable. В общем, ставлю я два брейка - один на VIC_Ack(), другой - на ulStatus=0, запускаю. Дальше что-то, что я не понимаю. Если стоит два брейка, то остановка происходит только на VIC_Ack(), и статусный регистр содержит 0x00013F3F, что более или менее соответствует ожиданиям. Не соответствует Overrun, происхождение которого я не понимаю. Но стоит снять брейк с VIC_Ack(), начинает срабатывать брейк на ulStatus=0, при этом ulStatus == 0x00013C3C, т.е. каналы 0 и 1 не отработали. Частоту АЦМ пробовал менять, история повторяется от 4.5МГц до 30кГц. Вопрос традиционный: что я делаю не так? Заранее спасибо!