roboforum.ru

Технический форум по робототехнике.
Текущее время: 26 ноя 2024, 19:23

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 26 фев 2013, 22:59 
Не в сети
Аватара пользователя

Зарегистрирован: 08 дек 2009, 19:21
Сообщения: 404
Откуда: Й-Ола
Можно сделать аппаратную регулировку скважности на таймере 2
или частоты , включив его в режиме "сброс при совпадении"

а можно ли одновременно аппаратно, без прерываний,
управлять и частой, и скважностью на меге8?

или хотя бы управлять скважностью какой то заранее выставленной частоты,
но выставленой не делителем тактовой частоты частоты на 1-8- и т.д,
а к примеру частоты 1000 герц ?

_________________
Ваш IP-адрес 85.140.5.459 был внесён в черный список и заблокирован. Для получения дополнительной информации перейдите по ссылке http://www.spamhaus.org/query/bl?ip=85.140.5.459.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 26 фев 2013, 23:59 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
Можно. Но без счетчика и прерывания - зачем?
Проще всего - по алгоритму управления многими сервами.

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 27 фев 2013, 06:14 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
в голову пришло одно - на двухканальном счетчике, по одному совпадению ШИМить - по второму сбрасывать... реально ли - хз... надо глядеть доку. ессно с ростом частоты будет падать разрешение ШИМ

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 27 фев 2013, 11:11 
Не в сети
Аватара пользователя

Зарегистрирован: 08 дек 2009, 19:21
Сообщения: 404
Откуда: Й-Ола
есть какой то режим с коррекцией фазы и частоты, якобы можно задавать и заполнение ШИМ и верхний предел счета счетчика. Но буржуи пишут на плохо понятном техническом языке, который с трудом обрабатывается моим процессором и не вмещается в мою память :cry: . Помогите, плиз.

_________________
Ваш IP-адрес 85.140.5.459 был внесён в черный список и заблокирован. Для получения дополнительной информации перейдите по ссылке http://www.spamhaus.org/query/bl?ip=85.140.5.459.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 27 фев 2013, 12:18 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Аппаратно такого режима нет. Можно сделать на двух таймерах. Один будет следить за периодом, второй за длительностью импульса. Если посильнее извратиться, то можно обойтись и одним таймером. Естественно, есть ограничения на частоту и разрешение шим.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 27 фев 2013, 15:11 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
Делал так:
Сч=начала считаем сколько надо счетчику насчитать чтоб получить заданный период импульса.
Получаем количество "тиков". Потом умножаем количество тиков на заданную скважность. Получаем - длительности высокого и низкого состояния.
Счетчик считает рассчитанное количество полных циклов плюс рассчитанный "остаток" пока не насчитает заданный импульс (высокое состояние). Вывод "out" переключается. Затем счетчик считает период "низкого состояния"
Сейчас попробую накидать скетч.

Добавлено спустя 2 часа 46 минут 51 секунду:
Быстро подправил один из скетчей.
loop() можно чистить вообще.

Код:
/*
Генератор частоты-скаважности
*/

// ISR interrupt service routine
//#include < interrupt.h >


#define TOGGLE_IO 6 //вывод Arduino для переключения по таймеру ISR
#define TOGGLE_IO_GND 5 //земля светодиода

#define ClockHZ 1 //Частота в герцах
#define Skvaz 0.9 //Скважность

unsigned int latency;
unsigned int latencySum;
unsigned int sampleCount;
unsigned int CountPer;
long timerLoadValue; //Количество тиков
long Tick1; //Тиков для "1" ЦЕЛЫХ
long Tick0; //Тиков для "0" ЦЕЛЫХ
long TickCount; //Тиков для обработки в прерывании



void setup() {               
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);
//Устанавливает порт, который нам нужно переключать в ISR, выходным.
pinMode(TOGGLE_IO,OUTPUT);
pinMode(TOGGLE_IO_GND,OUTPUT);
digitalWrite(TOGGLE_IO_GND, LOW);
 
interrupts();                                 // Разрешить прерывания глобально

//Запускает последовательный порт
Serial.begin(9600);

//Сообщение о запуске программы
Serial.println("Timer Test"); 

//Запускает таймер Настройка таймера.
timerLoadValue=SetupTimer2(ClockHZ);

//Выводит рассчитанное значение таймера
Serial.print("Timer2 Period=");
Serial.println(timerLoadValue);
Tick1=timerLoadValue*Skvaz;
Tick0=timerLoadValue-Tick1;
Serial.print("Timer2 Tick1=");
Serial.println(Tick1);
Serial.print("Timer2 Tick0=");
Serial.println(Tick0);
TickCount=Tick1;
digitalWrite(TOGGLE_IO, HIGH);

}





void loop() {
 


//  digitalWrite(13, HIGH);   // set the LED on
  delay(5000);              // wait
  digitalWrite(13, LOW);    // set the LED off
//  delay();              // wait for a second
//    Serial.println( TCNT2 );
//   Serial.print("  ");
//    Serial.print( TestPerem );
//   Serial.print("  ");
//locateSensor=digitalRead(LOC_INPUT);


  delay(5000);              // wait
//  Serial.print (curstep) ;
//    Serial.print (" ") ;
  Serial.print ("TickCount=") ;
   Serial.println (TickCount) ;
//  Serial.println (" ");
//Serial.println( digitalRead(LOC_INPUT) );
//  TestPerem=locateStat;
   digitalWrite(13, HIGH);

  //Собирает текущее значение задержки из ISR и увеличивает счетчик на 1
//the sample counter
latencySum+=latency;
sampleCount++;

//Как только наберется 20 замеров, вычисляет и выводит результат измерений
if(sampleCount>20) {
float latencyAverage;
float loadPercent;

//Вычисляет среднюю задержку
latencyAverage=latencySum/100.0;

//обнуляет значения сумм
sampleCount=0;
latencySum=0;

//Вычисляет ожидаемый процент загрузки процессора
loadPercent=latencyAverage/(float)timerLoadValue;
loadPercent*=100; //Переводит доли в проценты;

//Выводит среднюю задержку
Serial.print("Latency Average:");
Serial.print((int)latencyAverage);
Serial.print(".");
latencyAverage-=(int)latencyAverage;
Serial.print((int)(latencyAverage*100));

//Выводит ожидаемый процент загрузки
Serial.print(" Load:");
Serial.print((int)loadPercent);
Serial.println("%");
}
 
 
}





//Timer2 указатель вектора прерывания по переполнению
ISR(TIMER2_OVF_vect) {
//Проверим счетчик TickCount
//Проверим состояние выхода, если 1 - то
if (TickCount==0) {
if (digitalRead(TOGGLE_IO)){ TickCount=Tick0;}
else { TickCount=Tick1;}
digitalWrite(TOGGLE_IO,!digitalRead(TOGGLE_IO)); //Переключение IO-вывода в другое состояние.
}
else{
  //проверяем - больше ли счетчик целого чикла (255)
  if (TickCount<255) {
     TCNT2=255-TickCount+TCNT2;
     TickCount=0;} //Компенсация того, что натикало.
  else {
      TickCount-=255;}
}
 
//  if (curstep> 400 || curstep<0){dir=-dir;}
//  curstep+=dir;
//  //Переключение IO-вывода в другое состояние.
//  digitalWrite(TOGGLE_IO,!digitalRead(TOGGLE_IO));



//Захват текущего значения таймера. Это величина ошибки
//из-за задержки обработки прерывания и работы этой функции
int latency=TCNT2;

//Перезагрузка таймера и коррекция по задержке
//TCNT2=latency+timerLoadValue;
//TCNT2=timerLoadValue;
}


long SetupTimer2(long Frequency){
#define TIMER_CLOCK_FREQ 15625.0
#define  TIMER_CLOCK_TICK 2000000.0
//15625 for /1024
//2MHz for /8 prescale from 16MHz
  //Установка Таймера2.
//Конфигурирует 8-битный Таймер2 ATMega168 для выработки прерывания
//с заданной частотой.
//Возвращает количество тиков таймера на один период требуемой частоты


//Установки Таймер2: Делитель частоты /8, режим 0
//Частота = 16MHz/1024 = 15625 герц или 64 мкс
//Делитель /1024 дает нам хороший рабочий диапазон
//Но нужен 16MHz/8 = 2Mhz или 0.5 мкс
//так что сейчас мы просто жестко запрограммируем это.
TCCR2A = 0;
TCCR2B = 0<<CS22 | 1<<CS21 | 0<<CS20; //это на 8
// TCCR2B = 7; //Это на 1024

//Подключение прерывания по переполнению Timer2
TIMSK2 = 1<<TOIE2;

//загружает таймер для первого цикла (если меньше 255, или
TCNT2=0;
//Количество тиков:
long CountPer=TIMER_CLOCK_TICK/(long)Frequency;

return(CountPer);
}



Добавлено спустя 2 минуты 47 секунд:
Да, если нужна бОльшая точность - то делитель счетчика можно установить =1.

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 27 фев 2013, 16:57 
Не в сети
Аватара пользователя

Зарегистрирован: 08 дек 2009, 19:21
Сообщения: 404
Откуда: Й-Ола
Ну ты умная голова. Спасибо, друг. Обрабатываю твой код

_________________
Ваш IP-адрес 85.140.5.459 был внесён в черный список и заблокирован. Для получения дополнительной информации перейдите по ссылке http://www.spamhaus.org/query/bl?ip=85.140.5.459.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 27 фев 2013, 21:59 
Не в сети
Аватара пользователя

Зарегистрирован: 08 дек 2009, 19:21
Сообщения: 404
Откуда: Й-Ола
Идею понял, но если чесно, :bad: код не осилил. :bad:
видимо мой процессор слегка перегрелся :(

В общем мучаюсь вопросами:

А можно ли задать аппаратно (именно аппаратно) частоту генератора,
а потом регулировать скважность?

Или наоборот, задать скважность а потом регулировать частоту?

И может ли вообще человек по своему хотению аппаратно выдать сигнал
на ногу заранее определенной частоты и скважности?

Или мы поставлены судьбою в рамки предделителя 1-8-64-256-1024?

_________________
Ваш IP-адрес 85.140.5.459 был внесён в черный список и заблокирован. Для получения дополнительной информации перейдите по ссылке http://www.spamhaus.org/query/bl?ip=85.140.5.459.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 27 фев 2013, 22:40 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Я уже ответил, что нельзя. Читайте даташиты на русском.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 27 фев 2013, 22:57 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
к561ЛА7, нескромный вопрос, а для чего нужно генерировать такой хитрый сигнал?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 27 фев 2013, 23:02 
Не в сети
Аватара пользователя

Зарегистрирован: 08 дек 2009, 19:21
Сообщения: 404
Откуда: Й-Ола
Я так и думал что найдуться люди которых заинтересует этот вопрос :) .
какие будут предположения :)

ладно, не терзайся, экспререментирую с накачкой колебательного контура.

кстати, если сделать генерацию не таймере и в прерывании менять значения счетчика до которого он считает, не помешает ли это прерывание работе другого прерывания?

_________________
Ваш IP-адрес 85.140.5.459 был внесён в черный список и заблокирован. Для получения дополнительной информации перейдите по ссылке http://www.spamhaus.org/query/bl?ip=85.140.5.459.


Последний раз редактировалось к561ЛА7 28 фев 2013, 00:06, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 27 фев 2013, 23:08 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 28 фев 2013, 01:10 
Не в сети

Зарегистрирован: 07 авг 2010, 21:29
Сообщения: 1725
Откуда: КМВ
прог. языки: C
ФИО: Андрей
ТС, озвучь техзадание - накидаю скетч. Можно и счетчик на ходу менять и предделитель и вообще вообще чего угодно, хоть на 5 ног вывести разные частоты/скважности.

Добавлено спустя 4 минуты 35 секунд:
А чем приведенный код плох? Килогерц до 100 работать должен, частоту равно как и скважность можно га лету менять как угодно.

_________________
Дым, идущий из всех устройств в помещении предвещает появление электрика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 28 фев 2013, 09:05 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
к561ЛА7, так терзаться наоборот ещё больше стал. почему недостаточно только просто шима с постоянной частотой и изменяющейся скважностью? если это какой импульсник, может проще достать специализированнйю микру? или или шим контроллер с внешней тактовой? или использовать шим и на резюках внешний цап?
про waveform генератор в даташите много написано, но никогда не вчитывался, т.к. необходимости небыло.
вот проектик генератора http://www.avr-asm-tutorial.net/avr_en/signalgen/rectgen_m8_v1_main.html с регулируемой ччастотой и скважностью.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: генератор частоты и скважности одновременно на атмеге8
СообщениеДобавлено: 28 фев 2013, 12:36 
Не в сети
Аватара пользователя

Зарегистрирован: 08 дек 2009, 19:21
Сообщения: 404
Откуда: Й-Ола
у колебательного контура есть своя резонансная частота, которая с 1-8-64-256 не совпадает. и накачивать его надо короткими импульсами , не с 50 процентным заполнением.
тоесть надо как можно больше аппаратно подстроиться под частоту контура и его накачивать,
програмно нельзя потому что время цикла программы раз в 500 больше частоты генерации.
тоесчть нужно выдать на ногу ОС2 сигнал с частотой контура и маленькой скважностью, а программа в это врямя пусть занимается другими делами

В проект генератора так сразу не вьеду так как пишу на С++ и содвижнавр

_________________
Ваш IP-адрес 85.140.5.459 был внесён в черный список и заблокирован. Для получения дополнительной информации перейдите по ссылке http://www.spamhaus.org/query/bl?ip=85.140.5.459.


Последний раз редактировалось к561ЛА7 28 фев 2013, 12:39, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 12


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO