Всем доброе утро и спасибо за то что хоть глянули топик! Срочно нужна ваша помощь! Собственно проблема - нужно сделать частотомер на авр (Atmega8) и обеспечить передачу данных по UART.
Вот то что есть уже у меня:
Но при запросе с ПК он выдает все что угодно, но не частоту (ресейв переменной сделал специально. что б смотреть не потерялось ли чего).
Или напишите структурную схему частотомера (прерывание по int0 или t1). Заранее спасибо!
Раздел: AVR
Вот то что есть уже у меня:
program MAN;
var rec,send,setup,cons,start,a,i:integer;
var f,freq:longint;
var outp,inp:string [23];
label lbl;
procedure Compare(); iv IVT_ADDR_TIMER1_COMPA;
begin
inc(i);
if i=1 then begin
INT0_bit:=1;
TCNT1H:=0x00;
TCNT1L:=0x00;
DDC1_bit:=1;
end else if i=2 then begin
TCCR1B:=0;
INT0_bit:=0;
TCNT1H:=0x00;
TCNT1L:=0x00;
i:=0;
IntToStr(f,outp);
UART1_Write_Text(outp);
DDC1_bit:=0;
f:=0;
end;
end;
procedure int0p(); iv IVT_ADDR_INT0;
begin
inc(f);
end;
begin
SREG_I_bit:=1;
TCCR1B:=0;
OCIE1A_bit:=1;
OCR1AH:= 0x7a;
OCR1AL:= 0x12;
ISC00_bit:=1;
ISC01_bit:=1;
INT0_bit:=0;
UART1_Init(600);
PINB0_bit:=1;
DDC0_bit:=0;
DDC1_bit:=0;
DDC2_bit:=1;
While TRUE do begin
if (UART_Data_Ready() = 1) then begin
UART1_Read_Text(inp,'/',23);
UART1_Write_Text(inp);
if strstr(inp,'get') <> 0xFFFF then TCCR1B:=4;
end;
end;
end.
Но при запросе с ПК он выдает все что угодно, но не частоту (ресейв переменной сделал специально. что б смотреть не потерялось ли чего).
Или напишите структурную схему частотомера (прерывание по int0 или t1). Заранее спасибо!
Раздел: AVR