16+
Воскресенье
19 мая
Вход |Карта сайта |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Микроконтроллеры AVR

 
Новая темаПравила РегистрацияСтатистика Архив
Вернуться в конференциюТопик полностью
avrdude  (02.12.2018 18:37, просмотров: 3360)
Братцы ткните носом где не так сделал, тактируюсь от внутреннего 8МГц, отладчика с дебагом нету 
прибор должен считать обороты и при просадки ниже 1200 отключать реле вход датчика холла PB0, реле PB5
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>

#define RELAY_PORT PORTB
#define RELAY_PORT_DIR DDRB
#define RELAY_PIN 5

#define HALL_PORT PORTB
#define HALL_PORT_DIR DDRB
#define HALL_PIN 0
#define HALL_STATE PINB

#define F_CPU 8000000UL  // 8 MHz

unsigned char OVF_counter, zamer_1, zamer_T, zamer_t, duty;
unsigned long t, T, f=0;
unsigned int rising_1, rising_2, falling;

////прерывание захвата ICP1
ISR(TIMER1_CAPT_vect) {
	switch(zamer_T)
	{
		case 0:
		rising_1 = ICR1; // Запоминаем значение счётчика
		OVF_counter = 0; // Обнуляем количество переполнений счётчика
		zamer_T = 1; // Переходим к следующему вычислению
		break;
		
		case 1:
		rising_2 = ICR1; // Запоминаем значение счётчика
		// Приводим все переменные к одному типу и вычисляем период импульса
		T = (unsigned long)rising_2 - (unsigned long)rising_1 + ((unsigned long)OVF_counter * 65536);
		zamer_T = 0;
		zamer_1 = 2; // Переходим к следующему вычислению
		break;
	}
}

//прерывание переполнения Т1
ISR(TIMER1_OVF_vect) {
	OVF_counter++; // Увеличиваем счетчик переполнений
}

int main()
{	
	TCCR1B |= (1 << ICNC1)|(1 << CS11); // Активируем входной подавитель шума, предделитель на 8
	TIMSK1 |= (1 << ICIE1)|(1 << TOIE1); // Разрешаем прерывание по захвату и переполнению
	zamer_T=0;	
	//rpm_setup();
	wdt_disable();
	//RELAY_PORT_DIR |= 1 << RELAY_PIN;	//relay control pin as output
	//HALL_PORT_DIR  &= ~(1 << HALL_PIN);	//relay control pin as output
	DDRB = 0b00100000;
	//RELAY_PORT |= 1 << RELAY_PIN; //relay off init
	RELAY_PORT |= 1 << RELAY_PIN; //relay on
	sei();



			
	while(1)
	{
		wdt_disable();
			
			
			 if (zamer_1 ==2);
				{f = 8000000/T; // Вычисляем частоту сигнала в Гц}
					
					
	
					if (f <1200)
					{
						RELAY_PORT |= 1 << RELAY_PIN; //relay off
					}
					 if (f>1250)
					{
						RELAY_PORT |= 1 << RELAY_PIN; //relay on
					}
			
}
	}
}
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7527 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXIX