Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
18.04.2009, 11:28
|
|
Временная регистрация
Регистрация: 18.11.2004
Сообщений: 63
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Никакого секрета , управление гидроклапаном , регулирует подачу масла на гидромотор , родная плата выгорела , востановлению не подлежит , залита эпоксидом примерно на сантиметр , выковыривать не получается .
Сделал самопальную на TTL логике , работает не совсем так как хотелось бы (пока работает в машине чтобы техника не простаивала , но нужно частенько подстраивать) .
Найти родную рабочую нереально , агрегат немецкий снят с производства лет этак 15 назад .
|
|
|
|
18.04.2009, 11:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Сообщение от sh2cer
|
Извините по русски мне тяжело думать , а родной узбекский технически сильно ограничен .
|
Возмите мой пример и подставьте свои параметры и названия... опишите что имено вам нужно...
Я это так, от фонаря написал... почитал ваше описание и примерно сформулировал...
В принципе задачка как бы не сложная.. но для АСМа вычислять период в зависиомти от 3-х переменных будет не так уж просто.. Нужно на Си... а Си я только начал учить..
|
|
|
|
18.04.2009, 12:30
|
|
Гражданин KAZUS.RU
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
|
Готовую программу вряд ли кто вам даст тк занимает время на написание и отладку, а помочь исправить кусок кода помогут.
Давайте для начала что вы не понимаете(ацп, таймеры, или сам Си) или не получается? желательно прицепить проект. Проще разделить задачу на более мелкие. Для начала скажем научитесь работать с ацп, потом с таймерами а уже в конце все собрать в один проект.
|
|
|
|
18.04.2009, 15:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
R4 определяет задержку сигнала относительно изменения R2 (то есть изменяем R2 и через заданное R4 время появляется/изменяется сигнал на выходе) или определяет время сигнала на выходе (т.е. изменяем R2 и на выходе на время заданное R4 появляется сигнал). Уточните этот момент. А так задача вполне проста и и реализация сложностей не вызовет. Тока я смогу это реализовать в avr-gcc (сижу под Линуксом) в Вынде это будет WinAvr. И из личной практики - Вам обязательно на подстройку и регулировку ставить именно резисторы? ибо вещь не слишком надежна и шуршит при регулировке. Если подстроечные резисторы устанавливаются один раз то луч их выкинуть и задавать параметры с клавиатуры или, если есть возможность, с компа через USART. Ибо при использовании резисторов предется эксперементировать с фильтрацией ложных срабатываний, а при условии достаточно быстрой реакции на изменения это задача далеко не столь проста как кажеться.
|
|
|
|
18.04.2009, 16:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Что понял, то и написал. Показания 1 и 3 потенциометра схватываются при инициализации, т.е. в момент включения, а 2 опрашивается в основном цикле. Вот что с 4 делать....Проект в кодевижин и протеусе прилагаю.
Прикрепленный файл: 5017766.rar
|
|
|
|
18.04.2009, 17:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Прочитал тему сначала, вроде доходит - вот вторая часть марлезонского балета.
Участок кода инициализации
Код:
|
//cчитываем положение 1 резистора для определения периода
tperiod=read_period();
//теперь берем от этого числа 10 часть для определения
//градации регулировки 3 резистором
s.na=tperiod/10;
// делим на 256
s.na››=8; // получили градацию для 3 резистора
//считываем значение 3 резистора
t1min=readr3(s.na);
//вычисляем градацию для 2 резистора
s.real=tperiod-t1min; // общий период - минимальная длительность
// делим на 256
s.real››=8; // получили градацию для 2 резистора
//считываем значение 2 резистора
do{
t1real=readr2(s.real);
}while(t1real ›0);
//ожидаем возврата 2 резистора в 0 положение
//вернули, запускаем задержку от 4 резистора
/*задержка будет в милисекундах -
градация 10000 милисекунд на 256 -39 милисекунд
*/
tdelay=readr4(39); //
delay_ms(tdelay);
//-------------------------------------
t1real+=t1min; // реальная длина импульса =считанная+минимальная
if (t1real ‹ 5)
{
tmr_stop();
}
else{
// получили значение импульса, вычисляем паузу
t1pause=tperiod-t1real;
// заносим в счетчики
imp.imp.all=65536-t1real;
imp.pau.all=65536-t1pause;
tmr_start();
} |
Проект - второй вариант
Прикрепленный файл: 6387032.rar
|
|
|
|
20.04.2009, 09:56
|
|
Временная регистрация
Регистрация: 18.11.2004
Сообщений: 63
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Спасибо огроменное , пока не смотрел что получилось , поставил на закачку 7 протеус , у меня 6.9 не открывает ,
все вопросы потом .
|
|
|
|
20.04.2009, 18:25
|
|
Временная регистрация
Регистрация: 18.11.2004
Сообщений: 63
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
To urry
По отдельности все резисторы работают правильно , вместе есть нестыковки , хотя если я правильно понимаю ваши комменты всё должно быть как надо.
Появилось много вопросов :
if (t1real ‹ 5)
{
tmr_stop();
}
else{
почему 5 , или почему t1real+=t1min; до этого цикла стоит .
и ещё не понятно почему в работе RV2 при установке его в ноль импульсы идут длительностью t1min .
Если RV2 в нуле никаких движений не должно быть .
Есть ещё моменты непонятные но хочется разобраться по порядку , хочу понять сам как весь код работает , правда признаюсь тяжко с наскока , но стараюсь .
|
|
|
|
20.04.2009, 20:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Сообщение от sh2cer
|
Появилось много вопросов :
if (t1real ‹ 5)
{
tmr_stop();
}
else{
почему 5 ,
|
Как бы скидка на возможную помеху, в идеальных условиях можно поставить 1
Сообщение от sh2cer
|
или почему t1real+=t1min; до этого цикла стоит .
и ещё не понятно почему в работе RV2 при установке его в ноль импульсы идут длительностью t1min .
|
это уже я не понял до конца, т.е. в рабочем цикле должно быть
Код:
|
while (1)
{
//считываем значение 2 резистора
t1real=readr2(s.real);
//t1real+=t1min; здесь строчку комментируем и переносим вниз
if (t1real ‹ 5)
{
tmr_stop();
}
else{
// получили значение импульса, вычисляем паузу
// и переносим сюда
t1real+=t1min;// новая строчка !!!! добавляем миним значение
t1pause=tperiod-t1real;
// заносим в счетчики
imp.imp.all=65536-t1real;
imp.pau.all=65536-t1pause;
tmr_start();
} |
Так ?
|
|
|
|
21.04.2009, 12:08
|
|
Временная регистрация
Регистрация: 18.11.2004
Сообщений: 63
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Переставил , скомпилил , не выходит .
При первом включении всё верно выходит : импульс = t1real+=t1min , в рабочем цикле при переходе RV2 в ноль
импульс = t1min , должно быть 0 т.е. ничего не должно быть , ничего не понимаю ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:27.
|
|