Технический форум по робототехнике.
Michael_K » 12 дек 2010, 21:28
итого:
пусть зряплата инженера 45 тыр. в месяце 22 рабочих дня по 8 часов.
значит час стоит 250 руб.
Потерял два часа, на ровном месте. проблему не решил.
Минус 500 рублей по времени.
Да еще и плату переделывать.
Такая вот арифметика.
=DeaD= » 12 дек 2010, 21:30
Да еще учесть налоги, амортизацию раб. места, отпускные - получится не 45тр в месяц, а все 65-75тр легко.
Сергей » 12 дек 2010, 21:31
ну знаешь, по моему в этом и заключается профессия инженера
Иначе было бы совсем просто
Michael_K » 12 дек 2010, 21:31
=DeaD= писал(а):Да еще учесть налоги, амортизацию раб. места, отпускные - получится не 45тр в месяц, а все 65-75тр легко.
угу - ну это я для ровного счета
Сергей » 12 дек 2010, 21:32
Я помню допустил ошибку в дескрипторе USB устройства, но все работало нормально до одного момента. Неделю разбирался.
Michael_K » 12 дек 2010, 21:32
Это я к тому, что некоторые тут хотят купить "на копейку пятаков"
Michael_K » 16 дек 2010, 01:03
Бьюсь об новые грабли...
По даташиту АЦП в LPC1111 может запускаться автоматом от таймера.
Таймер работает правильно (сигнал CT16B0_MAT0 вижу на ноге)
АЦП постоянно вызывает прерывания - то есть только закончилось предыдущее, сразу опять влетает в тот же обработчик. По идее, как я понимаю, бит прерывания должен сниматься при чтении регистра STAT. Не работает.
(Для отладки вывел на ногу многострадального светодиода и тыркаю осциллом).
Код инициализации и хэндлера:
- Код: Выделить всё • Развернуть
void ADCInit( void )
{
// Enable ADC
LPC_SYSCON->PDRUNCFG &= ~(0x1<<4); // Disable Power down bit to the ADC block.
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<13); // Enable AHB clock to the ADC. */
// ADC I/O config
LPC_IOCON->R_PIO1_1 &= ~0x8F;
LPC_IOCON->R_PIO1_1 |= 0x02; // ADC IN2 - SIGNAL INPUT
// ADC config
LPC_ADC->CR = ( 0x04 << 0 ) | // SEL=1,select channel 2 on ADC0 (SIGNAL)
( ( 11 - 1 ) << 8 ) | // CLKDIV = Fpclk / 1000000 - 1
( 0 << 16 ) | // BURST = 0, no BURST, hardware controlled
( 0 << 17 ) | // CLKS = 0, 11 clocks/10 bits
// ( 1 << 21 ) | // PDN = 1, normal operation
// ( 0 << 22 ) | // TEST1:0 = 00
( 6 << 24 ) | // START = 6 A/D conversion start on CT16B0_MAT0
( 1 << 27 ); // EDGE = 1 (CAP/MAT singal rising,trigger A/D conversion)
// Config Interrupt
NVIC_EnableIRQ(ADC_IRQn);
LPC_ADC->INTEN = 0x100; // Enable general interrupt
return;
}
#define LED_RED() { LPC_GPIO1->MASKED_ACCESS[0x0110] = 0x0100; }
#define LED_OFF() { LPC_GPIO1->MASKED_ACCESS[0x0110] = 0x0000; }
void ADC_IRQHandler (void)
{
volatile unsigned int temp;
temp = LPC_ADC->STAT; // Read ADC will clear the interrupt
temp = ( LPC_ADC->DR[2] >> 6 ) & 0x3FF; // Read ADC value
LED_RED();
for(temp=2;temp>0;temp--);
LED_OFF();
return;
}
Добавлено спустя 1 минуту 2 секунды:Re: LPC1111... Вопросы.Если что, использую Кейл
Добавлено спустя 16 минут 38 секунд:Re: LPC1111... Вопросы.Вопрос снят.
Нужно разрешать (оказывается) не глобальное прерывание от АЦП, а прерывание от нужного канала... Дока отвратительная.
Сергей » 16 дек 2010, 03:12
Доки ужасные, все на скорую руку. По LPC2000 и LPC1700 были намного лучше.
Виталий » 16 дек 2010, 03:35
Вот мне всегда было интересно. Они же тестируют свои девайсы, значит должны быть тесты, а значит и коды. Почему бы их не выкладывать?
Сергей » 16 дек 2010, 09:13
Да они и не запаривались вообще, к примеру по целому регистру для каждой ножки микроконтроллера + перемешаны в порядке и не подряд в адресном пространстве.
Michael_K » 16 дек 2010, 13:31
Будете смеяться, но порядок там все же есть.
Они расположены в порядке нумерации ног на корпусе...
P.S.
Меня телевизор филипс до сих пор в тупик ставит своей "юзабилити"...
Сергей » 16 дек 2010, 14:32
Смеюсь
Только вот API не прикрутить нормальное к IOCON.
Michael_K » 16 дек 2010, 16:27
Ну, честно говоря, API меня волнует в последнюю очередь,
(имхо, нафиг оно не упало в реальных проектах), но неудобно, согласен.
Еще и ноги названы в хеадерах фиг знает как...
Да даже не это напрягает - не работает же по даташиту, сволочь!!!
Сергей » 16 дек 2010, 16:35
Насчет API конечно он не является приоритетным. Но, к примеру, периферия у LPC2000 и LPC1700 совпадает полностью и ничего переделывать не надо было, я просто код перекинул и все заработало. А здесь же (только с LPC1343) надо было писать заново и разбираться почему не работает.
Michael_K » 30 янв 2011, 02:53
Поигрался тут немножко - случайно завел проц на 108 МГц (глюканул в битиках PLL).
А он взял и заработал... как минимум ядро, память, таймеры, ноги (АЦП и запись во флэш не проверял).
Спокойно лежит вот и работает минут двадцать уже... не греется, не зависает, такты не теряет...