udineze 0 28 мая, 2012 Опубликовано 28 мая, 2012 · Жалоба Да блин... Мы говорим о квантовании в 10 мс или в "примерно 20 секунд" ? хм, 20 секунд убрать нельзя - ТАУ не позволяет (задание такое, что 20 секунд никуда не денешь), но и в уравнениях заложен такт квантования 0,01 не знаю...что Вы предлагаете ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 28 мая, 2012 Опубликовано 28 мая, 2012 · Жалоба Предлагаю изучить матчасть. можно даже в википедию заглянуть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
udineze 0 28 мая, 2012 Опубликовано 28 мая, 2012 · Жалоба Предлагаю изучить матчасть. можно даже в википедию заглянуть хитро, спасибо) еще вопрос для общего развития: как на Си задержки правильно делать? Допустим 1 секунду, на том же контроллере Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 28 мая, 2012 Опубликовано 28 мая, 2012 · Жалоба На таймере, всё на таймере. Это и Си, и ассемблер, и всё-что-угодно. Задержки типа "тупой цикл" можно делать только для проверки (программа "подёргать ножкой", для проверки живости вывода) или для коротких задержек, которым некритичны небольшие отклонения. Вот, например. Там, правда, смесь STMа c LPC, но принцип (целых два!) видно. http://electronix.ru/forum/index.php?showtopic=99675 Если использовать просто циклы (даже написанные на ассемблере, для исключения влияния компилятора), результат никто не гарантирует. Прерывание в середину влезет, например. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
udineze 0 28 мая, 2012 Опубликовано 28 мая, 2012 · Жалоба На таймере, всё на таймере. Это и Си, и ассемблер, и всё-что-угодно. Задержки типа "тупой цикл" можно делать только для проверки (программа "подёргать ножкой", для проверки живости вывода) или для коротких задержек, которым некритичны небольшие отклонения. Вот, например. Там, правда, смесь STMа c LPC, но принцип (целых два!) видно. http://electronix.ru/forum/index.php?showtopic=99675 Если использовать просто циклы (даже написанные на ассемблере, для исключения влияния компилятора), результат никто не гарантирует. Прерывание в середину влезет, например. понятно, еще вопрос: где можно найти полный список команд на Си для LРС ? Я поискал - ассемблера выше крыши, а на Си одни обрывки. Или это просто от компилятора зависит ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 28 мая, 2012 Опубликовано 28 мая, 2012 · Жалоба полный список команд на Си для LРС ? админы, прилепите. Шедевр Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
udineze 0 28 мая, 2012 Опубликовано 28 мая, 2012 · Жалоба админы, прилепите. Шедевр значит от компилятора))) :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 28 мая, 2012 Опубликовано 28 мая, 2012 · Жалоба значит от компилятора))) :rolleyes: значит, руководство по С читаем "Керниган, Ричи. Язык C", гуглится сразу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 28 мая, 2012 Опубликовано 28 мая, 2012 · Жалоба Вообще-то "список команд на Си" придуман задолго до появления LPC и описан в любом учебнике по Си. Есть маааленькие расширения языка (дополнительные функции, прагмы и прочие служебные слова). Это в первую очередь зависит от компилятора. Однако для простоты можно про них не думать. Работать лень, загнал в Кейл вышеприведённый пример. Рекомендую повторить, очень полезно - у кейла (демоверсия - бесплатно) более-менее работоспособный симулятор и удобные окошки с галками для просмотра периферии (да, они с "побочными эффектами", но для первоначального ознакомления пойдёт). Так вот: - АЦП неработоспособно (два канала при ручном запуске выбирать нельзя, надо каждый раз заново устанавливать) - таймер неработоспособен (неправильно выбран режим) - несколько мелких опечаток в именах регистров А всё остальное работает. Я сделал маленькое открытие - зря я боялся float'ов, на 32-битниках они довольно шустро обсчитываются. Просто я в своих проектах медленно и мучительно переводил всё в fixed-point, пересчитывая все коэффициенты. Десяток сложений и десяток умножений - это около 600 тактов. Терпимо... Да, и ещё. У 2148 32 килобайта памяти (+ 8 килобайт "сбоку"), туда никак не влезет 20000 запомненных значений. Разве что ограничить точность одним байтом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
udineze 0 28 мая, 2012 Опубликовано 28 мая, 2012 · Жалоба значит, руководство по С читаем "Керниган, Ричи. Язык C", гуглится сразу основы я немного знаю, на 1м курсе С++ был мне бы про манипуляции с АЦП/ЦАП/таймером/портами юзермануал и даташит есть но там про Си нет ничего Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 29 мая, 2012 Опубликовано 29 мая, 2012 · Жалоба основы я немного знаю, на 1м курсе С++ был мне бы про манипуляции с АЦП/ЦАП/таймером/портами юзермануал и даташит есть но там про Си нет ничего и не будет :) в даташите рассказано, какие есть регистры управления периферией, какие биты в них за что отвечают. На какой языке вы будете записывать в эти регистры нужные значения - даташиту по барабану. Допустим, имеем LPC2148 Нам нужно настроить пин контроллера как AD0.7 Лезем в даташит. Пин с функцией AD0.7 есть 29, пятый бит порта 0 (P0.5). Смотрим регистр, отвечающий за функцию пина P0.5 -- PINSEL0 Для этого регистра занесение в биты 11:10 значения 11 как раз настроит функцию пина 29 контроллера как AD0.7 Как записать это на С? // Сбросим эти биты в 0 PINSEL0 &= ~(3UL<<10); // и установим в 11 PINSEL0 |= (3UL<<10); Все, пин 29, он же P0.5 стал AD0.7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
udineze 0 29 мая, 2012 Опубликовано 29 мая, 2012 · Жалоба и не будет :) в даташите рассказано, какие есть регистры управления периферией, какие биты в них за что отвечают. На какой языке вы будете записывать в эти регистры нужные значения - даташиту по барабану. Допустим, имеем LPC2148 Нам нужно настроить пин контроллера как AD0.7 Лезем в даташит. Пин с функцией AD0.7 есть 29, пятый бит порта 0 (P0.5). Смотрим регистр, отвечающий за функцию пина P0.5 -- PINSEL0 Для этого регистра занесение в биты 11:10 значения 11 как раз настроит функцию пина 29 контроллера как AD0.7 Как записать это на С? // Сбросим эти биты в 0 PINSEL0 &= ~(3UL<<10); // и установим в 11 PINSEL0 |= (3UL<<10); Все, пин 29, он же P0.5 стал AD0.7 где про такие команды можно почитать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 29 мая, 2012 Опубликовано 29 мая, 2012 · Жалоба Волшебные буквы |= &= ~ << UL (и прочие) должны быть описаны в любом справочнике по языку Си. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
udineze 0 29 мая, 2012 Опубликовано 29 мая, 2012 · Жалоба Волшебные буквы |= &= ~ << UL (и прочие) должны быть описаны в любом справочнике по языку Си. отлично, спасибо)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kosta 0 29 мая, 2012 Опубликовано 29 мая, 2012 · Жалоба ' Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться