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

Kitsok

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о Kitsok

  • Звание
    Местный
    Местный

Посетители профиля

1 182 просмотра профиля
  1. Приятно почитать себя самого через 6 лет. Докладываю: Идея с CPLD был верной, задачка решилась, проект закрылся, зато еще один ребенок свет родился, пока эти годы прошли ;) Спасибо еще раз всем за помощь.
  2. Я вроде как свой вопрос уже решил, поэтому могу и пофлудить. Надеюсь, модераторы поймут и простят. Для начала, небольшой экскурс. Однажды я захотел 3-осевой ЧПУ фрезер (гравер), и я хотел не купить его, а построить. Примерно 8 неторопливых месяцев по вечерам и ночам я его спроектировал. Вернее, я спроектировал сначала нереализуемую конструкцию, сходил к своим знакомым токарям-фрезеровщикам, показал чертежи, и они в один голос сказали, что то, что я хочу, сделать невозможно, а именно - отверстие 25H7 глубиной 150 мм, если память не изменяет. Тогда я углубился в ЕСДП, книжки по металлообработке и тому подобное, и полностью перепроектировал станок "с нуля" с использованием некоторых готовых узлов - ШВП, рельсовых направляющих, подшипниковых блоков. В общем, когда очередная итерация проверок и перепроверок завершилась, я пошел на некий известный форум по металлообработке, и точно так-же разместил объявление о необходимости изготовления деталей. Допуск я указал - +-10 микрон, материал, соосность отверстий, параллельность плоскостей деталей - все было строго. Началось бурное обсуждение, которое продолжалось недели две после того, как станок уже был собран и работал. Про то, что мне надо пойти назад в ПТУ, из которого меня выгнали за тупость, про то, что мне надо обратиться к специалистам, ну и прочее и прочее. Да, кстати. Когда я заказывал кое-какие детали на Тайване, то они с недоуменностью спрашивали меня, что за странные буквы типа 30H7 я указываю, и какая точность мне нужна. Я тогда спросил, мол, друзья мои азиатские, а вот если мне надо такие-то точности в таких-то размерах (и дал им первоначальные невозможные чертежи), то сколько стоить будет? В общем, оказалось, что доставка была бы дороже изготовления, и сумма изготовление + доставка незначительно превысила бы сумму, которую я отдал в Москве молчаливому участнику форума, который не ввязываясь в дискуссию, изготовил то что мне нужно в те сроки, которые мне были нужны, и за те деньги, о которых мы договорились. Это было в 2007 или в 2008 году. Теперь к задаче, которую я поставил в этой теме. Задача решается мной за один рабочий день (если железный пульт) или за три (если с софтом для станции управления). По деталям, как всегда, выходят не существенные совершенно деньги. Более того, за чуть большие деньги (чем 10 тысяч рублей) эту задачу можно решить готовыми изделиями, которых на рынке по крайней мере 4 крупных производителя, и прорва мелких. Однако при использовании готовых изделий возникает совершенно не нужный мне функционал, за который, понятно, мне платить не хочется. Теперь по поводу 7500 в час Vs. 10 тысяч за пульт и интерфейсные платы. Я указал 7500 не с потолка, это наша выручка за час работы снегосверлильной молотилки вертикального взлёта. То есть, это очень и очень по-божески. Про доступность в 99.98 - это нормальная доступность для всех современных ЦОДов. Про вочдоги, WoL и прочие идеи, возникшие в этой ветке (напоминаю, в которой я вроде как достаточно просто и понятно описал, какое изделие мне нужно изготовить). Господа теоретики, не надо меня учить как сделать потребную доступность сервиса, я этим занимался у телекома из Top-10 на протяжении 8 лет. И уж тем более не надо грубить не зная всей задачи целиком, не большого ума это признак. За сим я считаю, что на все вопросы много и не очень уважаемых собеседников ответил, и ветку можно закрывать. Всем спасибо!
  3. Вот именно поэтому я разместил объявление о разработке и изготовлении устройства, а не о консультационных услугах ;)
  4. Я так и думал, что вы откажетесь.
  5. Подходит, только не 1PC=1uC, а 1uC=8PC Согласен. Подумав, согласен. За исключением 2 месяцев все ОК ;) 2 месяца кажутся оверкиллом по той причине, что плат нужно два типа в количестве трёх штук, что вполне делается за пять дней срочным изготовлением. Учитывая сжатость сроков, готов софт для ПК написать сам, смогу это сделать после утрясания протокола обмена. Беретесь за "железную" часть за 10 т.р.? Сам придумал. Вы не правильно понимаете. Прямо скажу, что телепат из вас никакой. А давайте. Предложение такое: мы с вами подписываем договор, в котором будут сроки, оплата ваших услуг (10 т.р.), и конечная метрика успешности вашей работы, которая будет звучать так: "Целью работ по настоящему договору является бесперебойная работа программно-аппаратного комплекса 99.98% времени в году с максимальным простоем на аварийно-восстановительные и регламентные работы в 1 час в год". Результат вашей работы заключается в списке работ, которые нам необходимо будет сделать для достижения цели и акт о выполнении нами этих работ, который вы тоже подпишите. Штрафные санкции мы пропишем так: каждый час простоя сверх 1 часа в год будет вам стоить 7500 рублей. Договор заключается сроком на 1 год. Согласны?
  6. Мне не нужны управляемые розетки, мне нужно то, что я написал в первом сообщении этой темы ;)
  7. Совершенно верно. Опыт подсказал, что виснет абсолютно все в наших электромагнитных условиях, поэтому нужно чисто аппаратное решение. Еще поправка. Я написал, что будет хорошо, если между пультом и интерфейсной платой будет идти одна витая пара. Я имел в виду не 1х2, а 4х2 CAT5e. Приведу пример: грузим Linux, после загрузки ядра и initrd (содержащего по случайности только модули и скрипт их загрузки) корневая файловая система не находится. Ядро выпадает в аварийный режим и намертво вешает компьютер (while(1) {}). Я даже при наличии KVMа вынужден лезть в серверную и жать кнопку. Поэтому только аппаратное решение.
  8. Цвета светодиодов - зеленый для 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 и ....

    Да, это вполне себе Филипсовская библиотека.
  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кГц. Вопрос традиционный: что я делаю не так? Заранее спасибо!
×
×
  • Создать...