Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 21.04.2009, 12:51  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Получается, Вам в основном цикле нужно тогда отслеживать и R3, а не только при загрузке.Перенесите его анализ в основной цикл
Код:
while (1)
      {
//теперь берем от этого числа 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 резистора
t1real=readr2(s.real);

if (t1real ‹ 5) 
    {
    tmr_stop();
    }
    else{ 
    t1real+=t1min;
// получили значение импульса, вычисляем паузу
t1pause=tperiod-t1real;
// заносим в счетчики
imp.imp.all=65536-t1real;
imp.pau.all=65536-t1pause;
     tmr_start();
     }
      };
Или я опять не понял ?
Может, в предыдущем варианте Вам просто надо заремить строчку сложения с минимальным значением ?
Но тогда градация изменится, перед заходом в рабочий цикл нужно восстановить...
Реклама:
__________________
warez
urry вне форума  
Непрочитано 22.04.2009, 09:56  
sh2cer
Временная регистрация
 
Регистрация: 18.11.2004
Сообщений: 63
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
sh2cer на пути к лучшему
По умолчанию

Вот разобрался где накосячил :
Код:
//теперь берем от этого числа 10 часть для определения
//градации регулировки 3 резистором 
s.na=tperiod/10;
// делим на 256
s.na››=8; // получили градацию для 3 резистора
//считываем значение 3 резистора
t1min=readr3(s.na);
Кусок кода переносил в рабочий цикл ,и получалось что здесь
Код:
//вычисляем градацию для 2 резистора
s.real=tperiod-t1min; // общий период - минимальная длительность
t1min оказывалась неопределеной величиной
Теперь верхний кусок не удалял , а добавил в рабочий цикл , а этот
Код:
t1real+=t1min;
до рабочего цикла закомментил и всё пошло правильно , теперь разбираюсь с задержкой ,вопросы скорее всего ещё будут .
Спасибо большое что тратишь на меня своё время , теперь я не чувствую себя полным бараном , начинаю немного понимать что к чему .
sh2cer вне форума  
Непрочитано 22.04.2009, 18:25  
sh2cer
Временная регистрация
 
Регистрация: 18.11.2004
Сообщений: 63
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
sh2cer на пути к лучшему
По умолчанию

Теперь с выдержкой запутался вот здесь
Код:
//ожидаем возврата 2 резистора в 0 положение
//вернули, запускаем задержку от 4 резистора
/*задержка будет в милисекундах - 
градация 10000 милисекунд на 256 -39 милисекунд 
*/
tdelay=readr4(39); 
delay_ms(tdelay);
считывание оставляю на месте , а delay_ms(tdelay); комментю и вставляю его в рабочий цикл , получается задержка на каждое изменение 2 резистора , а задержка нужна только при переходе 2 резистора из нуля ,на остальное изменение задержка не нужна .
Тогда ставлю ещё одно условие в рабочем цикле
Код:
if (t1real ‹ 5) 
    {
    goto label //метку ставлю ниже delay_ms(tdelay) 
    }
    else{
delay_ms(tdelay);
    }
и ничего не выходит .
Потом начинаю понимать что это условие никогда не выполнится , если резистор в нуле то таймер стоит .
Подскажи как можно реализовать задержку только от нуля .
sh2cer вне форума  
Непрочитано 23.04.2009, 11:02  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

А что Вам мешает поставить задержку здесь ?
if (t1real ‹ 5)
{
tmr_stop();
delay_ms(tdelay);
}
После окончания задержки программа выскакивает из скобок и должна анализировать 2 резистор. Если он отличный от 0, то сюда она не заходит, а стартует таймер.
__________________
warez
urry вне форума  
Непрочитано 23.04.2009, 16:48  
sh2cer
Временная регистрация
 
Регистрация: 18.11.2004
Сообщений: 63
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
sh2cer на пути к лучшему
По умолчанию

Точно , зачем было городить ещё один цикл , тут я лоханулся .
Почему то когда Вы подсказываете всё становится на свои места , и мало того всё становится понятным даже мне , ещё и думаю почему это я сам не догнал .
И , я надеюсь , последний вопрос : промодулировать t1real 5кГц(прямоугольный) на любой выход , т.е. импульс-на выходе 5кГц , пауза-на выходе ничего .
sh2cer вне форума  
Непрочитано 23.04.2009, 23:17  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Для заполнения используем ШИМ - 2 таймер в режиме fast pwm. Taймер 2- 8 разрядный, частоту на вход через делители подадим 1 мегагерц, следовательно нужный период - 5 килогерц, для этого 1 мегагерц нужно разделить на 200. 256 - 200 = 56, делаем прерывание по переполнению, и в тот момент, когда таймер досчитал до 255 и перевалился в 0, запишем в него число 56. Так получим нужный период - он будет считать от 56 до 256.
Длительность импульса - должен быть меандр получаем как среднее значение - т.е. 256-56 делим на 2, получается 100, к числу 56 начальному добавляем эту сотню и получаем 156, которое заносим в OCR2.
Ну и чтобы не рвать импульс в момент перехода, анализируем в прерывании 2 таймера, можно ли это делать. Если можно, останавливаем 2 таймер, обнуляя регистр.
Код:
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
if(!BITTST1(bit_pole,impu))
{
 TCCR2=0;
 }
 else{
TCNT2=58;
}
}
Почему число 58, а не 56 ? Отработка прерывания тоже занимает время, так точнее.
И.соответственно, взводится 2 таймер в условии 1 -
Код:
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
   if(!BITTST1(bit_pole,impu)) // если импульса нет, его нужно включить
    {
    BITSET(bit_pole,impu);// ставим флаг
    PORTD=0xFF; // светим
    TCCR2=0x7a;
    TCNT2=58;
    TCNT1H=imp.imp.st.hi;
    TCNT1L=imp.imp.st.lo;
    }
Ну и проект...

Прикрепленный файл: 403503.rar
__________________
warez
urry вне форума  
Непрочитано 24.04.2009, 12:46  
sh2cer
Временная регистрация
 
Регистрация: 18.11.2004
Сообщений: 63
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
sh2cer на пути к лучшему
По умолчанию

Спасибо огромное , всё шевелится как нужно , всё понятно , не то-что в книжках описано , чем больше читаю тем меньше понимаю . Так что Вам можно книги писать , я думаю даже новичок как я поймёт .
sh2cer вне форума  
Непрочитано 24.04.2009, 13:25  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Насчет книг... Посмотрел на количество просмотров этой темы... Как-то даже странно при таком количестве апноутов для той же меги...Программы, которые написали не Вася Пупкин или urry, а профессионалы в своем деле.
Но - на англицком все.
Выпустить бы книгу - перевод апноутов - наверняка пользовалась бы спросом, особенно если комменты от себя добавить подробнее. Чем объясняется популярность того же Евстигнеева - там просто перевод даташита ?
Ну это все лирика.
__________________
warez
urry вне форума  
Непрочитано 24.04.2009, 17:57  
sh2cer
Временная регистрация
 
Регистрация: 18.11.2004
Сообщений: 63
Сказал спасибо: 1
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
sh2cer на пути к лучшему
По умолчанию

Сообщение от urry
Посмотрел на количество просмотров этой темы...
Может простое любопытство , собеседников то раз-два и обчёлся .
Цитата:
Выпустить бы книгу - перевод апноутов - наверняка пользовалась бы спросом, особенно если комменты от себя добавить подробнее.
Мечта для новичка .
Ещё раз спасибо не только за программу , которую я попросил помочь написать , а сам бессовестно ничего не делая слизал Вами написаную , а ещё и за то что анализируя ваш код начал хоть что-то понимать , и это стало так интересно , так что сделаю ещё одну попытку победить книгу Лебедева , с самого начала , а не там где мне надо было .
sh2cer вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите отладить программу АЦП на AVR Alexander48 Микроконтроллеры, АЦП, память и т.д 8 30.11.2009 14:07
Помогите откорректировать программу 2517212 Микроконтроллеры, АЦП, память и т.д 21 18.11.2008 01:13
Помогите найти программу. un9gw Proteus, KiCAD и другие ECAD 1 13.04.2007 21:43
Помогите написать программу для микросхемы pic16f84 lexacs Микроконтроллеры, АЦП, память и т.д 0 27.01.2005 00:45


Часовой пояс GMT +4, время: 18:25.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot