Так тахометр и не получается. Может взглянете?
Кварц 20 мегагерц. 1 машинный циккл за 200 наносекунт это 10 в -9 степени или 0.0000002 секунды.
Алгоритм такой- Считаем время как сигнал упал в 0 до того как он снова упал в ноль, обнуляем таймер1 и считаем заново до следующего падения в 0. С тем что посчитали работаем.
Так как 1 цикл 200 наносекунд то то количество циклов что подсчитали умножаем на время 200 наносекунд.
знаем время периуда. Формуля 1\Т . Переводим то что помножили в секунды для этого нужно разделить на миллиард.
Делим на то что вышло 1. получаем частоту.
но в программе чтото не выходит. Незнаю как арифметикой работать и както ругается на большие числа типа миллиардов.
выдаёт кучу ошибок. У меня мозг уже плавится, помогите разобраться
Код: Выделить всё
#include <pic.h>
__CONFIG (XT & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);
unsigned shar tmr1temp;
unsigned long int tmp;
unsigned int tmppr;
int num10000;
int num1000;
int num100;
int num10;
int num1;
void pauza (void)
{ // начало переменная
unsigned int x; // локальная
x = 100; // в tmp поместить некое максимальное число
while (x-->0);
}// конец функции
void podgot (void)
{
TRISA = 0b00001111; // направление работы ножек порта А.
TRISB = 0b10000001; // направление работы ножек порта В.
CMCON = 0x07; // отключение компараторов.
PORTA = 0; // очищаем порт А
PORTB = 0; // очищаем порт Б.
GIE = 1; //разрешить глобальные прерывания .
PEIE = 1;
// OPTION BIT
RBPU = 1; // подтягивающие R (0-вкл, 1-выкл).
INTEDG = 0; //Прерывания INT по пер. фронту.
T0CS = 1; // внешний тактовый сигнал
T0SE = 0; // задний фронт преращения сигнала.
//T1CON BIT
T1CKPS1 = 0;
T1CKPS0 = 0; //предделитель 1:1
T1OSCEN = 0; // внутренний тактовый генератор выкл.
T1SYNC = 1; // не синхронизировать внешний сигнал
TMR1CS = 0; // Внутреннй источник тактового сигнала.
TMR1ON = 1; // таймер включен.
INTE=1;
/////////
TMR1IE = 1; // прерывание от 1 таймера on.
tmp=0;
}
void main (void)
{
podgot ();
while (1)
{
tmp=tmr1temp*655536;
tmp=tmp+tmppr;
tmp=tmp*200;
tmp=tmp\1000000000;
tmp=1\tmp;
num10000=tmp/10000;
tmp %=10000;
num1000=tmp/1000; // количество тысяч
tmp %=1000; // остаток от деления на 1000
num100=tmp/100; // количество сотен
tmp %=100; // остаток от деления на 100
num10=tmp/10; // кол-во десятков
num1=tmp%10; // остаток - единицы
// === массив констант с описанием 7-сегментных символов
const unsigned char arr_seg1[12]={ // начало массива
// 0bABCDEFGH <– расположение сегментов по битам
0b01111100, // 0й элемент, символ «0»
0b01100000, // 1й элемент, символ «1»
0b01011010, // 2й элемент, символ «2»
0b01110010, // 3й элемент, символ «3»
0b01100110, // 4й элемент, символ «4»
0b00110110, // 5й элемент, символ «5»
0b00111110, // 6й элемент, символ «6»
0b01100000, // 7й элемент, символ «7»
0b01111110, // 8й элемент, символ «8»
0b01110110, // 9й элемент, символ «9»
0b01000110, //10й элемент, символ градуса
0b00000000 //11й элемент, пробел
} // конец массива
// === массив констант с описанием 7-сегментных символов
const int arr_seg2[12]={ // начало массива
// 0bABCDEFGH <– расположение сегментов по битам
1, // 0й элемент, символ «0»
0, // 1й элемент, символ «1»
1, // 2й элемент, символ «2»
1, // 3й элемент, символ «3»
0, // 4й элемент, символ «4»
1, // 5й элемент, символ «5»
1, // 6й элемент, символ «6»
1, // 7й элемент, символ «7»
1, // 8й элемент, символ «8»
1, // 9й элемент, символ «9»
1, //10й элемент, символ градуса
0, //11й элемент, пробел
}
RB7 = 0;
PORTB = arr_seg1 [num10000];
RA4 = arr_seg2 [num10000];
pauza ();
RB7 = 1;
RA0 = 0;
PORTB = arr_seg1 [num1000];
RA4 = arr_seg2 [num1000];
pauza ();
RA0 = 1;
RA1 = 0;
PORTB = arr_seg1[num100];
RA4 = arr_seg2[num100];
pauza ();
RA1 = 1;
RA2 = 0;
PORTB = arr_seg1[num10];
RA4 = arr_seg2[num10];
pauza ();
RA2 = 1;
RA3 = 0;
PORTB = arr_seg1[num1];
RA4 = arr_seg2[num1];
pauza ();
RA3 = 1;
}
}
void interrupt prerivanie (void)
{
if (INTF==1)
{
INTF=0;
tmppr = TMR1H<<8;
tmppr +=TMR1L;
TMR1H=0;
TMR1L=0;
tmr1temp=0;
}
if (TMR1IF==1)
{
TMR1IF=0;
tmr1temp=tmr1temp+1;
}
}
.
Вот что выбивает
Код: Выделить всё
Executing: "C:\Program Files\HI-TECH Software\PICC\9.50\BIN\PICC.EXE" -C -E"proba.cce" "proba.c" -O"proba.obj" -Zg9 -O -ASMLIST -Q -MPLAB -16F628A
Advisory[1207] : some of the command line options you are using are now obsolete
Advisory[1208] : use --help option or refer to the user manual for option details
Warning[176] C:\Program Files\Microchip\project\proba\proba.c 139 : missing newline
Error[372] C:\Program Files\Microchip\project\proba\proba.c 3 : "," expected
Error[228] C:\Program Files\Microchip\project\proba\proba.c 52 : illegal character (0134)
Error[195] C:\Program Files\Microchip\project\proba\proba.c 52 : expression syntax
Error[228] C:\Program Files\Microchip\project\proba\proba.c 53 : illegal character (0134)
Error[195] C:\Program Files\Microchip\project\proba\proba.c 53 : expression syntax
Error[195] C:\Program Files\Microchip\project\proba\proba.c 63 : expression syntax
Error[312] C:\Program Files\Microchip\project\proba\proba.c 77 : ";" expected
Error[249] C:\Program Files\Microchip\project\proba\proba.c 80 : probable missing "}" in previous block
Error[372] C:\Program Files\Microchip\project\proba\proba.c 96 : "," expected
Error[983] C:\Program Files\Microchip\project\proba\proba.c 96 : storage class redeclared
Error[984] C:\Program Files\Microchip\project\proba\proba.c 96 : type redeclared
Error[239] C:\Program Files\Microchip\project\proba\proba.c 96 : identifier "RB7" redefined (from line 82)
Warning[374] C:\Program Files\Microchip\project\proba\proba.c 97 : missing basic type; int assumed
Error[983] C:\Program Files\Microchip\project\proba\proba.c 97 : storage class redeclared
Error[984] C:\Program Files\Microchip\project\proba\proba.c 97 : type redeclared
Error[239] C:\Program Files\Microchip\project\proba\proba.c 97 : identifier "PORTB" redefined (from line 23)
Error[192] C:\Program Files\Microchip\project\proba\proba.c 97 : undefined identifier "arr_seg1"
Error[981] C:\Program Files\Microchip\project\proba\proba.c 97 : pointer required
Error[981] C:\Program Files\Microchip\project\proba\proba.c 97 : pointer required
Error[188] C:\Program Files\Microchip\project\proba\proba.c 97 : constant expression required
Warning[374] C:\Program Files\Microchip\project\proba\proba.c 98 : missing basic type; int assumed
Error[983] C:\Program Files\Microchip\project\proba\proba.c 98 : storage class redeclared
Error[984] C:\Program Files\Microchip\project\proba\proba.c 98 : type redeclared
Advisory[1] C:\Program Files\Microchip\project\proba\proba.c 98 : too many errors (21)
Halting build on first failure as requested.
BUILD FAILED: Tue Aug 30 12:59:00 2011