roboforum.ru

Технический форум по робототехнике.


Как подсчитать количество импульсов на Си для ATmega8

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: Как подсчитать количество импульсов на Си для ATmega8

Сообщение rig » 20 фев 2008, 07:17

вот ведь человек, разжевал в рот положил. ни спасибо ни досвиданье.
может этого достаточно маршрутник для авто буду собирать как детали закуплю.
или на АВР с исходниками и теорией
маршрутник для авто
не знаю что делаю ни так, на меня гул почемуто не дуется :ROFL:
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Как подсчитать количество импульсов на Си для ATmega8

Сообщение -= Александр =- » 21 фев 2008, 09:47

Александр Карнаух, Вам дали исходник очень похожго проекта, дали ссылок для информации, чего же Вы еще ждете? Что за Вас тут все сделают и подадут готовое?
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: Как подсчитать количество импульсов на Си для ATmega8

Сообщение avr123.nm.ru » 21 фев 2008, 12:19

-= Александр =- писал(а):чего же Вы еще ждете?


скоро уж ЧЕТЫРЕ месяца !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Как подсчитать количество импульсов на Си для ATmega8

Сообщение gunner05 » 26 фев 2008, 19:14

а мне вот нужно не колличество импульсов подсчитать а длительность импульса .. кто может помочь советом? :roll:
Аватара пользователя
gunner05
 
Сообщения: 18
Зарегистрирован: 31 окт 2007, 00:19
Откуда: Украина, Донецк

Re: Как подсчитать количество импульсов на Си для ATmega8

Сообщение rig » 26 фев 2008, 19:32

так количество получается делением единицы на длительность, разве не так?
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Как подсчитать количество импульсов на Си для ATmega8

Сообщение gunner05 » 26 фев 2008, 22:12

rig писал(а):так количество получается делением единицы на длительность, разве не так?

чето ниче не понял

я вот пытаюсь собрать платформу (машинку) на радиоуправлении с четырьмя моторами, кодер и декодер собрал
декодер выдает (проверено осциллографом) импульсы от 1 до 2мс в зависимости от положения рычажка джойстика ..
также собрал Н-мосты на полевиках, на мосте есть выход А (крутить в лево) и Б (вправо) ...
над приемником и передатчиком сейчас работаю ...

теперь вопросы:

1. для управления н-мостами нужен контроллер (на меге8 желательно) ... нужно чтобы этот контроллер считывал ДЛИТЕЛЬНОСТЬ ИМПУЛЬСА с декодера и реагировал след. образом

1мс - полный назад или вперед
.
. изменение скорости
.
1,5мс - стоп
.
. изминение скорости
.
2мс - полный назад или вперед

как регулировать ШИМ вроде понятно ... а вот как считывать длительность импульсов ... нет
вот ...
Аватара пользователя
gunner05
 
Сообщения: 18
Зарегистрирован: 31 окт 2007, 00:19
Откуда: Украина, Донецк

Re: Как подсчитать количество импульсов на Си для ATmega8

Сообщение rig » 26 фев 2008, 22:58

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

Добавлено спустя 41 минуту 39 секунд:
что то долго думаешь, счас спать пойду.
глобально задача решается просто.
если период постоянный а меняется длитеьлность полодительного или нулевого импульса. выбираем что будем мерить. к примеру длительность положительного импульса.
заводим выход передатчика на ножку с возможностью внешнего прерывания.
конфигурируешь
1 способ самы легкий но возможны ложные срабатывания
ее на прерывание при любом изменении состояния
в обработчике смотрим 1 или 0 на ноге,
если один запускаем какой нибудь таймер с заданной дискретностью, или пользуем тот что управляет шимом. пишем в ячейку флаг к примеру 55.
таймер шима рулит всегда, дополнительно проверяет флаг если видит код 55 то в переменной считает сколько раз сработал. если флаг не 55 то пропускает эту часть.
если ноль пишем флаг 00 - тоесть запрещаем считать шиму такты.
читаем сколько раз сработал шим таймер. опытным путем подбераются константы соответствующие длительности 1 мкс/2/3/4 и тд. надо учесть погрешность будут плюс минус отклонения от констант, зависит от частоты подсчета.
зная длительность вызываем нужную протцедуру. исполнив протцедуру очищаем пеерменную с количеством подсчитанных тактов.
длее все с начала.

2 способ будет почти тоже самое за исключением что прерывание ставим сначало напереход с 0 на 1. как сработает меняем условие сработки таймера на переход с 1 на ноль, выполняемесли один,
при сработки прерывания с 1 на 0 , меняем условие сработки таймера на переход с 0 на один, делаем если ноль

примерно так.
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Как подсчитать количество импульсов на Си для ATmega8

Сообщение gunner05 » 27 фев 2008, 01:34

2rig
:shock:

период - пауза, одинаковая - 20мс
положительный импульс меняется (растягивается) 1-2мс. что соответствует практически всей радиоапаратуре для моделей.
считать нужно длительность положительного импульса ..

глобально задача решается просто.

что то я не вижу где тут просто :wink:

за теорию спасибо .. но я ее в гугле стока начитался ... на всех языках мира кроме иероглифов ... желательно нужен конкретный пример в CodeVisionAVR
Аватара пользователя
gunner05
 
Сообщения: 18
Зарегистрирован: 31 окт 2007, 00:19
Откуда: Украина, Донецк

Re: Как подсчитать количество импульсов на Си для ATmega8

Сообщение rig » 27 фев 2008, 07:05

тот же шим только вид сбоку.
слов больше, кода меньше будет.
погляди ссылку повыше где про маршрутник на АВР я давал. там автор меряет длительность открытия форсунки. и подробно все описывает с кодом и комментариями (если точно я просто пересказал его теорию). или жди пока кто нибудь скинет готовое решение. у меня такого нет.
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Как подсчитать количество импульсов на Си для ATmega8

Сообщение gunner05 » 29 фев 2008, 16:14

вот набросал ... про длительность импульса
частота МК 8 MHz

Код: Выделить всёРазвернуть
#include <mega8.h>
#include <stdio.h>

void main(void)
{

PORTC=0x00;
DDRC=0x02;  // на С0 подаем импульс а с С1 читаем

TCCR0=0x00;  // счетчик T0 остановлен
TCNT0=0x00;

//USART
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

while (1)
      {
      if (PINC.0) {
            TCCR0=0x04; //запускаем счетчик с пределителем 256
              while (PINC.0) {            //пустой цикл пока на ноге С0 еденица
               }
      }

TCCR0=0x00; //останавливаем счетчик

if (TCNT0>0) {
printf("T0 = %d\r\n", TCNT0); //выводим на терминал T0
}
TCNT0=0x00; //обнуляем счетчик
};
}


получается
при 1мс TCNT = 31
при 2мс TCNT= 62

проверяем 31 * 256 *0,125мкс = 992 мкс или ~1мс
62 * 256 * 0,125 = 1984 мкс или ~2 мс
:)

Программы надо оформлять тегом [code]! <Digit>
Аватара пользователя
gunner05
 
Сообщения: 18
Зарегистрирован: 31 окт 2007, 00:19
Откуда: Украина, Донецк

Re: Как подсчитать количество импульсов на Си для ATmega8

Сообщение DarkSilence » 19 сен 2008, 16:49

У меня задача состоит в следующем: необходимо определить частоту звука, поступающего либо на микрофон, либо с усилителя. Допустим что при низком диапазоне частот выполняется одна задача, в среднем дипазоне- другая, в в высоком - третья.
Аватара пользователя
DarkSilence
 
Сообщения: 25
Зарегистрирован: 18 сен 2008, 22:02
Откуда: Самара
прог. языки: C/C++, Pascal

Пред.

Вернуться в Микроконтроллеры

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1