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

 
 
> Работа с датчиком скорости авто (AVR)
Athlon128
сообщение Apr 28 2006, 16:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



Хочу сделать цифровой спидометр для машины, добавить всяких функций вроде измерения времени разгона до 100 или времени прохождения 402 м, учесть погрешность, например, при смене колёс с R13 на R14 biggrin.gif biggrin.gif ну и т.д. и вообще хочу иметь постоянно работающий перед глазами цифровой спидометр.
На начальном этапе стоит задача измерения частоты импульсов с датчика скорости (таз 21099i). Датчик выдаёт 6004 импульса на 1 км пути, т.е. 6 импульсов на 1 м. Частота импульсов прямопропорциональна скорости авто.

Начал делать на Кодевижене. Алгоритм такой: в main стартует таймер0, контроллер постоянно обновляет lcd дисплей из переменной. По прерыванию с ноги: останавливаю таймер0, ссчитываю его значение в переменную, обнуляю его, стартую таймер.

ATmega8515, 4МГц, в качестве ДС At90S2313, который формирует прямоугольные импульсы длиной 10мс, время между импульсами 10мс.

По началу использовал 8-битный таймер, при делителе частоты таймера 1024, в счётчике было значение 0-1, при делителе 1 в счётчике 69-70, хотя должно быть несколько тысяч. Я так понимаю он несколько раз успевает переполниться?

Нашёл в нете исходник на C маршрутного компьютера, который умеет мерять скорость с ДС. В нём используется 16-битный таймер1:
Код
void IRQ_Speedometer_Lable(void) interrupt 0
{
  // Считываем значение интервала между метками скорости в числе 0.5 мксек.
  union LONG_INT
    {
      unsigned long int Long;
      unsigned char Byte[4];
    };
  union LONG_INT Interval;
  unsigned int Tmp;

  TR1=0;
  Interval.Byte[3]=TL1; Interval.Byte[2]=TH1;
  Interval.Byte[1]=Speed_Interval; Interval.Byte[0]=0;
  TH1=TL1=0;
  Speed_Interval=0;
  TR1=1;

  // Вычисляем текущую скорость движения.
  Tmp=((16666666/Interval.Long)*72)/100;
  Speed=Tmp/10;
  if((Tmp%10) >= 5) Speed++;

  // Смотрим, разрешен ли подсчет параметров маршрута.
  if((Trip_Params.State&0x01) != 0)
    {
      // Инкрементируем счетчик пройденного расстояния.
      Trip_Params.Passed_Distance++;
    }

  return;
}

Так и не понял что за переменная speed_interval, ну это не столь важно.

Попробовал переделать свою прогу под таймер1, но никогда им не пользовался, напортачил, в таймере всегда 0. Посмотрите плиз:
Код
#include <mega8515.h>
#include <stdio.h>
#include <delay.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15;PORTC
#endasm
#include <lcd.h>

char lcd_buffer[33];

// Процедуры
void init(void);
void imp(void);        
unsigned char k;

  union LONG_INT
    {
      unsigned long int Long;
      unsigned char Byte[4];
    }Interval;

unsigned int Tmp;

interrupt [2] comp(void){imp();}


//---------------------------------------- Инициализация -----------------------------------------------

void init(void)
{lcd_init(16);

TCCR1B=0x81;

GICR|=0x40;
MCUCR=0x00;
EMCUCR=0x00;
GIFR=0x40;

DDRD=0x00;
PORTD=0xff;
lcd_init(16);

#asm("sei")
k=0;
}

//------------------------------------- Процедура вызываемая по Int0 ------------------------------------------

void imp(void)
{  unsigned char Speed_Interval;
Speed_Interval=0; // ???

TCCR1B=0x00;
  Interval.Byte[3]=TCNT1L; Interval.Byte[2]=TCNT1H;
  Interval.Byte[1]=Speed_Interval; Interval.Byte[0]=0;
  TCNT1H=TCNT1L=0;
  Speed_Interval=0;
TCCR1B=0x81;

  // Вычисляем текущую скорость движения.
  Tmp=((16666666/Interval.Long)*72)/100;
  k=Tmp/10;
  if((Tmp%10) >= 5) k++;

   sprintf(lcd_buffer,"Скорость: %d",k);
  return;
}

//----------------------------------- Главная процедура -----------------------------------------------
void main(void)
{
init();
#pragma ruslcd+
while (1)
{

lcd_clear();

lcd_puts(lcd_buffer);
delay_ms(100);
}
#pragma ruslcd-
}


Буду благодарен любой помощи wink.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VladimirZ
сообщение May 5 2006, 14:38
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 8-02-05
Из: Харьков
Пользователь №: 2 496



Протокол обмена KWP2000 можно найти на www.almisoft.ru/doc.htm. Там же и схемку контроллера можно поискать и посмотреть например интерфейс ДС.
При обмене опо K-Line всё же таймер понадобится таймауты и др. Измерение расхода по длительности импульса впрыска большой точности не даст, как и использование датчика расхода там в описании погрешность от 7-ми до 30-ти %.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Athlon128   Работа с датчиком скорости авто (AVR)   Apr 28 2006, 16:41
- - MMP   Если проблема только в таймере, то советую инициал...   Apr 29 2006, 04:22
- - Athlon128   Попробовал использовать 8-битный таймер0, поставив...   Apr 29 2006, 08:30
- - Proton   У тебя условие внешнего прерывания настроено на ни...   Apr 29 2006, 10:15
|- - Athlon128   Цитата(Proton @ Apr 29 2006, 16:15) У теб...   Apr 29 2006, 10:28
- - Athlon128   Убрал формулу вычисления скорости из периода, когд...   Apr 29 2006, 11:15
- - Athlon128   Убрал КР1533ТЛ2 и диоды, транзистор взял BC547. Пр...   Apr 30 2006, 13:53
- - sseett   Убрал КР1533ТЛ2 и диодыЦитатаУбрал КР1533ТЛ2 и дио...   May 2 2006, 00:04
- - Athlon128   ок, принято, спасибо   May 2 2006, 00:20
|- - Karl   Тоже баловался года 4 назад. Сделал МК, который из...   May 2 2006, 06:24
|- - BVU   Цитата(Karl @ May 2 2006, 10:24) ... Расх...   May 2 2006, 06:32
|- - Karl   Про карбюраторные ничем помочь не могу - работал с...   May 3 2006, 11:30
- - HBB   Датчик расхода топлива на карбюраторных машинах вы...   May 2 2006, 07:42
|- - kalinka16   Цитата(HBB @ May 2 2006, 10:42) Датчик ра...   May 2 2006, 07:49
- - HBB   Искать в магазине, продаются обычно где маршрутник...   May 2 2006, 07:54
- - m16   Цитата(kalinka16 @ May 2 2006, 11:49) А г...   May 2 2006, 08:25
- - Athlon128   Черт, у меня уже таймеров не осталось, таймер0 для...   May 3 2006, 16:49
|- - Karl   Цитата(Athlon128 @ May 3 2006, 22:49) Чер...   May 4 2006, 03:24
- - VladislavS   На тахометр приборной доски идет специальный прово...   May 4 2006, 11:48
|- - Karl   Цитата(VladimirZ @ May 5 2006, 20:38) Про...   May 6 2006, 03:50
- - VladislavS   Машина не лучшее место для обучения программирован...   May 6 2006, 05:39


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

 


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


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