реклама на сайте
подробности

 
 
> Тахометр на 16меге, не могу разобраться
DAndy_boy
сообщение May 25 2007, 04:17
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 25-09-05
Из: Москва
Пользователь №: 8 922



Господа разработчики, подскажите пожалуйста, что я не так делаю? Задача следующая необходимо построить тахометр. На вход МК подается последовательность импульсов с частотой до 100 Гц. Нужно подсчитать количество импульсов за секунду и вывести на индикатор. Я использую 6мегу , кварц 8.0МГц. Завожу сигнал на вход T0 счетчика и снимаю с него параметры каждую секунду. Проблема в том что полученные результаты не постоянны. Т.е. значение на индикаторе скачет в пределах +-4 единицы. Думал, что не стабильно получаю секунду, так проверил на осциллографе… вроде нормально.. Всю голову сломал… У кого какие будут мысли? (пишу в AVR Studio)
Прилагаю код …
Код
#define QZ              8000000L
#define    TIME_OCR1A      ((QZ / 1024)-1)

int Speed_p;
void Timer1_init(void)
{

     OCR1A = TIME_OCR1A;        /* прерывание раз в секунду */
                TCCR1A = 0x00;
                TCCR1B = (1 << 3) | 0x05;
                TIMSK |= 1 << 4;  /* разрешить прерывание OCIE1A */
}

SIGNAL (TIMER1_COMPA_vect)
{
     Speed_p=TCNT0;
        TCNT0=0;
}


int main()
{
unsigned int g=0;
char str[10];

Timer1_init();

// Таймер0 считает входные импульсы
// Timer/Counter 0 initialization
TCCR0=0x07;
TCNT0=0x00;
OCR0=0x00;

// Port B initialization
// Func7=Out Func6=Out Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=0 State6=0 State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xC8;

sei();
while(1)
{
   ..........

.//    Формируем строку для вывода
           g=(float)(Speed_p)*(float)1.66;
    str_out[8]=g%10;g/=10;
      str_out[7]=g%10;g/=10;
    str_out[6]=g%10;
// выводим строку      
reload();// динамическая индикация

}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DAndy_boy
сообщение May 29 2007, 10:26
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 25-09-05
Из: Москва
Пользователь №: 8 922



Начал разбираться с режимом захвата.... и все никак не получается в AVRStudio выставляю флаг на выходе компаратора, а захвата на таймере не происходит.... или это исключительно в симуляции... или я чего не правильно делаю... Может у кого есть какой пример... или скажите где я ошибаюсь, пожалуйста
Код
#include <avr/io.h>
#include <avr/interrupt.h>
#include <string.h>

int zahvat;

SIGNAL (ANA_COMP_vect)
{

}

SIGNAL (TIMER1_CAPT_vect)
{

zahvat=1;

}

int main()
{// Declare your local variables here
/// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7372,800 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: On
// Input Capture on Rising Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: On
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0xC1;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x20;

// Analog Comparator initialization
// Analog Comparator: On
// The Analog Comparator's positive input is
// connected to the Bandgap Voltage Reference
// Analog Comparator Input Capture by Timer/Counter 1: On
ACSR=0x44;
SFIOR=0x00;

// Global enable interrupts
sei();
while(1)
{
if(zahvat==1)//произошол захват
{
// подсчитываем период
...
zahvat=0;
}
}

}
Go to the top of the page
 
+Quote Post
aesok
сообщение May 29 2007, 10:33
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Есть такое волшебное слово: volatile. avr-libc-user-manual FAQ#1, или поиск на форуме.

Анатолий.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- DAndy_boy   Тахометр на 16меге   May 25 2007, 04:17
- - muravei   Цитата(DAndy_boy @ May 25 2007, 08:17) Ду...   May 25 2007, 07:32
- - DAndy_boy   ну как что? добавил в прерывание таймера SIGNAL (T...   May 25 2007, 08:43
|- - aesok   В reoload() запрещаются прерывания? Есть другие об...   May 25 2007, 08:57
||- - DAndy_boy   Цитата(aesok @ May 25 2007, 12:57) В reol...   May 25 2007, 10:18
||- - aesok   Входной сигнал стабильный? Может дрожит частота си...   May 25 2007, 10:48
|- - muravei   Цитата(DAndy_boy @ May 25 2007, 12:43) см...   May 25 2007, 10:09
- - DAndy_boy   Сигнал стабильный ТТЛ... может попробывать считать...   May 25 2007, 11:00
- - GDI   Для подсчета частоты импульсов есть специальный ре...   May 25 2007, 12:35
- - DAndy_boy   Действительно.... с этими преобразованиями и дробн...   May 25 2007, 15:52
|- - defunct   Цитата(DAndy_boy @ May 25 2007, 18:52) пр...   May 26 2007, 19:19
|- - DAndy_boy   Цитата(defunct @ May 26 2007, 23:19) 1* 2...   May 27 2007, 10:09
|- - defunct   Цитата(DAndy_boy @ May 27 2007, 13:09) Та...   May 27 2007, 19:01
|- - muravei   А может лучше мерять период вх сигнала , а не част...   May 28 2007, 07:02
|- - DAndy_boy   Цитата(muravei @ May 28 2007, 11:02) А мо...   May 28 2007, 07:13
||- - muravei   Цитата(DAndy_boy @ May 28 2007, 11:13) Т....   May 28 2007, 17:11
|- - Диm   Цитата(muravei @ May 28 2007, 13:02) А мо...   May 29 2007, 06:33
- - GDI   Если хватит диапазона то сделать так: Кодg = Speed...   May 28 2007, 07:18
|- - DAndy_boy   Цитата(GDI @ May 28 2007, 11:18) Если хва...   May 28 2007, 07:22
|- - ReAl   Цитата(DAndy_boy @ May 28 2007, 10:22) Во...   May 28 2007, 07:50
- - GDI   При умножении константы на константу, конечно резу...   May 28 2007, 07:31
|- - DAndy_boy   Цитата(GDI @ May 28 2007, 11:31) ...Это у...   May 28 2007, 07:50
- - DAndy_boy   Я все понял... вечером буду пробовать.... о резуль...   May 29 2007, 04:40
|- - DAndy_boy   Цитата(aesok @ May 29 2007, 14:33) Есть т...   May 29 2007, 10:52
|- - aesok   Цитата(DAndy_boy @ May 29 2007, 14:52) Я ...   May 29 2007, 11:12
|- - DAndy_boy   Цитата(aesok @ May 29 2007, 15:12) а поче...   May 29 2007, 11:21
|- - muravei   Цитата(aesok @ May 29 2007, 15:12) В хелп...   May 29 2007, 13:24
- - DAndy_boy   Господа, опять прошу помощи…. Почитав описание ко...   Jun 1 2007, 04:43
|- - VDV   значения могут прыгать из-за прескалера еще. его б...   Jun 19 2007, 17:09
- - GDI   Цитатапоскольку входной сигнал имеет форму пилы (о...   Jun 20 2007, 07:04


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 01:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.0142 секунд с 7
ELECTRONIX ©2004-2016