|
Тахометр на 16меге, не могу разобраться |
|
|
|
May 25 2007, 04:17
|
Местный
  
Группа: Свой
Сообщений: 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();// динамическая индикация
}
|
|
|
|
|
 |
Ответов
|
May 29 2007, 10:26
|
Местный
  
Группа: Свой
Сообщений: 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; } }
}
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|