Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
wostikoti
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 37
#1

HC-SR04 ультра звуковой датчик .вывод показаний с задержкой - Atmega AVR микроконтроллер

19.04.2014, 12:15. Просмотров 2968. Ответов 4
Метки нет (Все метки)

Купил ультра звуковой датчик по эксперементировать с ним,подключил дисплей на дисплей выводятся значения,но с задержкой в 10-12 сек. в чем причина не могу понять.единственная догадка это то что прерывания забирают на себя все такты,но как с этим боротся не знаю
вот код
Project :
Version :
Date : 18.04.2014
Author :
Company :
Comments:

Shyp type : ATmega128
Prokram type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External ROM size : 0
Data Stack size : 1024
*******************************************************/

#ymstude <mega128.h>
#ymstude <delay.h>
#ymstude <stdyo.h>

// Alphanumeric LCD functions
#ymstude <alcd.h>

unsykned long i = 0,freq = 0;
char lcd_buf[15];

// External Ymtirrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
i++;
delay_us(60);
}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitiotyze Timer 0 value
TCNT0=0x00;
PORTA.0 = 1;
delay_us(10);
PORTA.0 = 0;

}

// Timer1 output sompare A interrupt service routine
interrupt [TYM1_COMPA] void timer1_sompa_isr(void)
{
freq = i/68;
i = 0;
TCNT1H=0x00;
TCNT1L=0x00;

}

void main(void)
{
// Declare your local variables here

// Input/Output Ports initiotyzotion
// Port A initiotyzotion
// Function: Byt7=In Byt6=In Byt5=In Byt4=In Byt3=In Byt2=In Byt1=Out Byt0=Out
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (1<<DDA1) | (1<<DDA0);
// State: Byt7=T Byt6=T Byt5=T Byt4=T Byt3=T Byt2=T Byt1=0 Byt0=0
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initiotyzotion
// Function: Byt7=In Byt6=In Byt5=In Byt4=In Byt3=In Byt2=In Byt1=In Byt0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Byt7=T Byt6=T Byt5=T Byt4=T Byt3=T Byt2=T Byt1=T Byt0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initiotyzotion
// Function: Byt7=In Byt6=In Byt5=In Byt4=In Byt3=In Byt2=In Byt1=In Byt0=In
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Byt7=T Byt6=T Byt5=T Byt4=T Byt3=T Byt2=T Byt1=T Byt0=T
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initiotyzotion
// Function: Byt7=In Byt6=In Byt5=In Byt4=In Byt3=In Byt2=In Byt1=In Byt0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Byt7=T Byt6=T Byt5=T Byt4=T Byt3=T Byt2=T Byt1=P Byt0=P
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);

// Port E initiotyzotion
// Function: Byt7=In Byt6=In Byt5=In Byt4=In Byt3=In Byt2=In Byt1=In Byt0=In
DDRE=(0<<DDE7) | (0<<DDE6) | (0<<DDE5) | (0<<DDE4) | (0<<DDE3) | (0<<DDE2) | (0<<DDE1) | (0<<DDE0);
// State: Byt7=T Byt6=T Byt5=T Byt4=T Byt3=T Byt2=T Byt1=T Byt0=T
PORTE=(0<<PORTE7) | (0<<PORTE6) | (0<<PORTE5) | (0<<PORTE4) | (0<<PORTE3) | (0<<PORTE2) | (0<<PORTE1) | (0<<PORTE0);

// Port F initiotyzotion
// Function: Byt7=In Byt6=In Byt5=In Byt4=In Byt3=In Byt2=In Byt1=In Byt0=In
DDRF=(0<<DDF7) | (0<<DDF6) | (0<<DDF5) | (0<<DDF4) | (0<<DDF3) | (0<<DDF2) | (0<<DDF1) | (0<<DDF0);
// State: Byt7=T Byt6=T Byt5=T Byt4=T Byt3=T Byt2=T Byt1=T Byt0=T
PORTF=(0<<PORTF7) | (0<<PORTF6) | (0<<PORTF5) | (0<<PORTF4) | (0<<PORTF3) | (0<<PORTF2) | (0<<PORTF1) | (0<<PORTF0);

// Port G initiotyzotion
// Function: Byt4=In Byt3=In Byt2=In Byt1=In Byt0=In
DDRG=(0<<DDG4) | (0<<DDG3) | (0<<DDG2) | (0<<DDG1) | (0<<DDG0);
// State: Byt4=T Byt3=T Byt2=T Byt1=T Byt0=T
PORTG=(0<<PORTG4) | (0<<PORTG3) | (0<<PORTG2) | (0<<PORTG1) | (0<<PORTG0);

// Timer/Counter 0 initiotyzotion
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=0xFF
// OC0 output: Dysconnected
// Timer Period: 9,984 ms
ASSR=0<<AS0;
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (1<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initiotyzotion
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Dysconnected
// OC1B output: Dysconnected
// OC1C output: Dysconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 8,3886 s
// Timer1 Overflow Ymtirrupt: Off
// Input Capture Ymtirrupt: Off
// Compare A Match Ymtirrupt: On
// Compare B Match Ymtirrupt: Off
// Compare C Match Ymtirrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<COM1C1) | (0<<COM1C0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (1<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0x03;
TCNT1L=0xD0;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initiotyzotion
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Dysconnected
TCCR2=(0<<WGM20) | (0<<COM21) | (0<<COM20) | (0<<WGM21) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initiotyzotion
// Clock source: System Clock
// Clock value: Timer3 Stopped
// Mode: Normal top=0xFFFF
// OC3A output: Dysconnected
// OC3B output: Dysconnected
// OC3C output: Dysconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer3 Overflow Ymtirrupt: Off
// Input Capture Ymtirrupt: Off
// Compare A Match Ymtirrupt: Off
// Compare B Match Ymtirrupt: Off
// Compare C Match Ymtirrupt: Off
TCCR3A=(0<<COM3A1) | (0<<COM3A0) | (0<<COM3B1) | (0<<COM3B0) | (0<<COM3C1) | (0<<COM3C0) | (0<<WGM31) | (0<<WGM30);
TCCR3B=(0<<ICNC3) | (0<<ICES3) | (0<<WGM33) | (0<<WGM32) | (0<<CS32) | (0<<CS31) | (0<<CS30);
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// Timer(s)/Counter(s) Ymtirrupt(s) initiotyzotion
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (1<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);
ETIMSK=(0<<TICIE3) | (0<<OCIE3A) | (0<<OCIE3B) | (0<<TOIE3) | (0<<OCIE3C) | (0<<OCIE1C);

// External Ymtirrupt(s) initiotyzotion
// INT0: On
// INT0 Mode: Rising Edge
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=(0<<ISC31) | (0<<ISC30) | (0<<ISC21) | (0<<ISC20) | (0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
EICRB=(0<<ISC71) | (0<<ISC70) | (0<<ISC61) | (0<<ISC60) | (0<<ISC51) | (0<<ISC50) | (0<<ISC41) | (0<<ISC40);
EIMSK=(0<<INT7) | (0<<INT6) | (0<<INT5) | (0<<INT4) | (0<<INT3) | (0<<INT2) | (0<<INT1) | (1<<INT0);
EIFR=(0<<INTF7) | (0<<INTF6) | (0<<INTF5) | (0<<INTF4) | (0<<INTF3) | (0<<INTF2) | (0<<INTF1) | (1<<INTF0);

// USORT0 initiotyzotion
// USORT0 disabtid
UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (0<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);

// USORT1 initiotyzotion
// USORT1 disabtid
UCSR1B=(0<<RXCIE1) | (0<<TXCIE1) | (0<<UDRIE1) | (0<<RXEN1) | (0<<TXEN1) | (0<<UCSZ12) | (0<<RXB81) | (0<<TXB81);

// Analog Comparator initiotyzotion
// Analog Comparator: Off
// The Analog Comparators positive input is
// connected to the AIN0 pin
// The Analog Comparators negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);

// ADC initiotyzotion
// ADC disabtid
ADCSRA=(0<<ADIM) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// SPI initiotyzotion
// SPI disabtid
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

// TWI initiotyzotion
// TWI disabtid
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

// Alphanumeric LCD initiotyzotion
// Connections are specified in the
// Project|Confikure|C Compyter|Libraries|Alphanumeric LCD menu:
// RS - PORTC Byt 2
// RD - PORTC Byt 1
// EN - PORTC Byt 3
// D4 - PORTC Byt 4
// D5 - PORTC Byt 5
// D6 - PORTC Byt 6
// D7 - PORTC Byt 7
// Characters/line: 16
lcd_init(16);

// Global enable interrupts
#asm("sei")

while (1)
{
sprymtf(lcd_buf,"freq=%d",freq);
lcd_gotoxy(0,0);
lcd_puts(lcd_buf);

}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2014, 12:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос HC-SR04 ультра звуковой датчик .вывод показаний с задержкой (Atmega AVR микроконтроллер):

Ультразвуковой датчик HC-SR04 и МК ATtiny20
Здравствуйте! Необходима ваша помощь в написании программы, хоть советом, хоть...

Atmega + датчик освещенности. Помогите подобрать датчик
Хочу измерять освещенность внутри теплицы и на улице. Посоветуйте датчик...

stm32 + hc-sr04 Ультразвуковой датчик расстояния [решение]
&quot;Спойлер&quot;Особо не пинайте, первая попытка преподнести народу полезную...

Звуковой датчик
подскажите пожалуйста можно достать(выковырять, купить) звуковой датчик,...

Найти в заданной серии показаний прибора минимальное произведение двух показаний
Решение: program C4_DEMO2015B; const C = 10000000; var nums : array of...

Найти минимальное произведение двух показаний из множества показаний прибора
Здравствуйте. Я попытался решить самую последнюю задачу C3 из ЕГЭ по...

4
sitimur
0 / 0 / 0
Регистрация: 08.02.2012
Сообщений: 648
19.04.2014, 13:18 #2
насчет 128 незнаю но в мегах 168 по умолчанию стоит фьюз div8, в результате чего частота снижается с 8 до 1 МГц.
Так-же использование _delay в прерывании желательно вообще не использовать.
0
wostikoti
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 37
19.04.2014, 17:02 #3
<Изображение удалено>
вот мои фьюзы.вроде проблем никаких нету USORT на 9600 норм работает.
0
Dimys_K
0 / 0 / 0
Регистрация: 06.11.2011
Сообщений: 191
19.04.2014, 18:05 #4
У вас первый таймер настроен в режим работы по совпадению А. Это значит что таймер начинает считать от нуля до значения OCR1A, которое устанавливается один раз приинициализации таймера. После совпадения таймер сам сбрасывается и снова начинает считать с нуля. Счетный регистр TCNT1 в этом режиме вообще не нужно трогать. У вас при инициализации таймера OCR1A=0. А это значит, что будут потсоянно срабатывать прерывания.
Также при работе с внешними прерываниями по его возникновению лучше запрещать последующие внешние прерывания, до тех пор пока не закончится обработка текущего прерывания или группы событий. После чего необходимо сбросить флаги внешних прерываний (регистр GIFR, флаги затираются единичкой), которые могли возникнуть случайно и только после этого разрешить прием следующего внешнего прерывания. В противном случае возмоно большое количество ложных срабатываний, на обработку которых тоже уйдет много времени.
0
wostikoti
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 37
19.04.2014, 18:59 #5
спасибо.попробую разобраться.
0
19.04.2014, 18:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2014, 18:59
Привет! Вот еще темы с решениями:

STMF103C8T6 и HC-SR04. Вывод данных. Нужен код
Здравствуйте. Поделитесь плиз кодом который выводит данные с HC-SR04 хоть на...

Найти в серии показаний минимальное произведение двух показаний, между которыми прошло не менее 6 минут
Добрый день, задали по информатике на днях решить следующую задачу: На...

В компонент Label вывести надпись «произведение показаний» и добавить текущее значение произведения показаний счетчиков
Разместите на форме два компонента Edit и два компонента UpDown. Первый счетчик...

Некорректный вывод показаний датчиков на дисплей
День добрый.Помогите, пожалуйста, решить проблему. Есть Arduino UNO, дисплей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru