Как подключить ультразвуковой датчик измерения расстояния HC-SR04 к ATmega16 и передать данные через USART/UART на компьютер
Очень часто нам нужно подключить датчик измерения расстояния HC-SR04 к ATmega16, Arduino или другому микроконтроллеру и отображать данные на экран или передать через USART/UART на наш компьютер.
В данной статье мы решим эти проблемы, а именно:
- подключим HC-SR04 к ATmega16;
- подключим радио модуль TB387 к ATmega16 или напрямую, или другой имеющийся радио модуль как HC-11/12 или FS1000A/XD-FST;
- напишем прошивку для ATmega16;
- проверим работоспособность.
Схема подключения модуля TB387 и датчика движения HC-SR04 к ATmega16
Пример программы в Atmel Studio 7
uart.h
#ifndef UART_H_ #define UART_H_ void USARTInit(unsigned int); void USARTTransmitChar(char); void USARTTransmitString(char*); void USARTTransmitStringLn(char*); char USARTReceiveChar(void); #endif /* UART_H_ */
uart.c
#include <avr/io.h>
#include "uart.h"
void USARTInit(unsigned int ubrr) {
// нормальный асинхронный двунаправленный режим работы
// UBRR = f / (16 * band)
// Установка скорости
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)(ubrr);
// RXC - завершение приёма
// |TXC - завершение передачи
// ||UDRE - отсутствие данных для отправки
// |||FE - ошибка кадра
// ||||DOR - ошибка переполнение буфера
// |||||PE - ошибка чётности
// ||||||U2X - Двойная скорость
// |||||||MPCM - Многопроцессорный режим
// ||||||||
// 76543210
UCSRA = 0;
// RXCIE - прерывание при приёме данных
// |TXCIE - прерывание при завершение передачи
// ||UDRIE - прерывание отсутствие данных для отправки
// |||RXEN - разрешение приёма
// ||||TXEN - разрешение передачи
// |||||UCSZ2 - UCSZ0:2 размер кадра данных
// ||||||RXB8 - 9 бит принятых данных
// |||||||TXB8 - 9 бит переданных данных
// ||||||||
// 76543210
// разрешен приём и передача данных по UART
UCSRB = 1<<RXEN | 1<<TXEN;
// URSEL - всегда 1
// |UMSEL - режим: 1-синхронный 0-асинхронный
// ||UPM1 - UPM0: 1 чётность
// |||UPM0 - UPM0: 1 чётность
// ||||USBS - стоп биты: 0-1, 1-2
// |||||UCSZ1 - UCSZ0: 2 размер кадра данных
// ||||||UCSZ0 - UCSZ0: 2 размер кадра данных
// |||||||UCPOL - в синхронном режиме - тактирование
// ||||||||
// 76543210
// 8-битовая посылка, 2 стоп бита
UCSRC = 1<<URSEL | 1<<USBS | 1<<UCSZ0 | 1<<UCSZ1;
}
// Отправка байта
void USARTTransmitChar(char c) {
// Устанавливается, когда регистр свободен
while(!( UCSRA & (1<<UDRE)));
UDR = c;
}
// Отправка строки
void USARTTransmitString(char str[]) {
register char i = 0;
while(str[i]) {
USARTTransmitChar(str[i++]);
}
}
// Отправка строки
void USARTTransmitStringLn(char str[]) {
USARTTransmitString(str);
USARTTransmitChar((char)13);
USARTTransmitChar((char)10);
}
// Получение байта
char USARTReceiveChar(void) {
// Устанавливается, когда регистр свободен
while(!(UCSRA & (1<<RXC)));
return UDR;
}
hcsr04.h
#ifndef HCSR04_H_ #define HCSR04_H_ void initHCSR04(); void stopHCSR04(); void trigHCSR04(); void waitHCSR04(); uint32_t getDistance(); #endif /* HCSR04_H_ */
hcsr04.c
// HC-SR04 к ATmega16
#define F_CPU 11059200UL // Clock Speed
#define TRIG_DDR DDRD
#define TRIG_PORT PORTD
#define TRIG_PIN PIND3
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#include "hcsr04.h"
uint16_t rising, falling;
uint32_t counts;
uint32_t dist;
bool star = false;
// Режим захвата
ISR(TIMER1_CAPT_vect) {
// ICES1 = 1
// фронт - положительный срез
if (TCCR1B & (1<<ICES1)) {
// Сохраняем текущее значение счетчика
rising = ICR1;
// В следующий раз обнаружить спад (отрицательный срез)
TCCR1B &= ~(1<<ICES1);
// Просто код ошибки, что измерение не произошло
dist = -2;
}
// ICES1 = 0
// спад - отрицательный срез
else {
// Сохраняем текущее значение счетчика
falling = ICR1;
// считаем число тактов
counts = falling - rising;
// определяем растояние в миллиметрах
dist = (counts * 100) / 813;
// уведомляем функцию waitHCSR04() что можно отправить
// результат заказчику т.е. растояние определено
star = false;
}
}
// обработчик прерывания по совпадению значения таймера со значением регистра OCR1A
// OCR1A = 0xFFFF
ISR(TIMER1_COMPA_vect) {
// уведомляем функцию waitHCSR04() что можно отправить
// результат заказчику т.е. растояние не определено
// HC-SR04 не получил обратный сигнал т.е. растояние
// слишком большая, сенсор не подключён или сигнал слишком слабый
dist = -1;
star = false;
}
// инициализация HCSR04
void initHCSR04() {
// инициализация ножки TRIG как выход
TRIG_DDR |= 1<<TRIG_PIN;
rising = falling = counts = dist = 0;
// инициализация таймера 1 TIMER1
// CS12,CS11,CS10: Clock Select. Эти 3 бита задают источник тактового сигнала для счетчика.
// 0 1 0 : F_CPU/8 (с выхода делителя)
// ICNC1: Установка этого бита в лог. 1 активирует входной подавитель шума
// WGM13,WGM12,WGM11,WGM10:
// 0 1 0 0 : режим CTC, максимальное значение OCR1A = 0xFFFF
TCCR1B |= (1<<ICNC1) | (1<<CS11) | (1<<WGM12);
// TICIE1 = 1: разрешено прерывание захвата таймера/счетчика 1
// OCIE1A = 1: разрешено прерывание по совпадению регистра A с состоянием таймера/счетчика1
TIMSK |= (1<<TICIE1) | (1<<OCIE1A);
// ICES1 = 1: захват входа ICR1 по нарастающему фронту (положительный срез).
TCCR1B |= (1<<ICES1);
// максимальное значение счетчика
OCR1A = 0xFFFF;
// активируем прерывания
sei();
}
// отключаем режим захвата
void stopHCSR04() {
TRIG_DDR &= ~(1<<TRIG_PIN);
// TIMER1 INIT
TCCR1B &= ((1<<ICNC1) | (1<<CS11) | (1<<WGM12));
TIMSK &= ((1<<TICIE1) | (1<<OCIE1A));
TCCR1B &= ((1<<ICES1));
OCR1A = 0;
}
// Генерируем импульс на 12us
void trigHCSR04() {
TRIG_PORT ^= (1<<TRIG_PIN);
_delay_us(12);
TRIG_PORT ^= (1<<TRIG_PIN);
}
// ждём пока star равно true т.е. завершение измерения
void waitHCSR04() {
star = true;
while(star) {
_delay_us(1);
}
}
uint32_t getDistance() {
// Инициализируем таймер (HCSR04)
initHCSR04();
// Генерируем импульс на 12us
trigHCSR04();
// Ждем, пока растояние не определено
waitHCSR04();
// Останавливаем таймер
stopHCSR04();
// Возвращяем результат
return dist;
}
main.c
#define F_CPU 11059200UL // Clock Speed
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include "uart.h"
#include "hcsr04.h"
int main(void) {
uint32_t d;
char str[20];
USARTInit(MYUBRR);
while (1) {
d = getDistance();
sprintf(str, "Distance: %dmm", d);
USARTTransmitStringLn(str);
_delay_ms(1000);
}
}
Результат
Скачать
Terminal 1.9b — работаем с COM-портом
datasheet ATMEGA16.pdf
Проект в Atmel Studio 7 HC-SR04+UART+ATmega16


продать аккаунт https://birzha-accauntov.ru/
аккаунты с балансом площадка для продажи аккаунтов
магазин аккаунтов социальных сетей https://pokupka-akkauntov-online.ru/
Account Buying Service Ready-Made Accounts for Sale
Account Exchange Service Account Selling Service
Account Trading Platform Account Exchange Service
Accounts for Sale Buy accounts
Buy accounts Purchase Ready-Made Accounts
find accounts for sale account trading platform
account selling platform buyaccountsdiscount.com
sell accounts sell accounts
account market account exchange
guaranteed accounts accounts market
account selling service buy accounts
account trading service buy accounts
sell account verified accounts for sale
account market https://social-accounts.org
account marketplace https://buy-social-accounts.org/
secure account sales account market
website for buying accounts secure account sales
account marketplace profitable account sales
account acquisition profitable account sales
buy accounts account exchange
buy accounts sell accounts
account purchase account purchase
accounts marketplace verified accounts for sale
buy and sell accounts buy accounts
sell accounts https://accounts-marketplace.xyz
account marketplace https://buy-best-accounts.org/
account buying service https://social-accounts-marketplaces.live
gaming account marketplace https://social-accounts-marketplace.xyz
buy pre-made account https://buy-accounts-shop.pro
online account store buy accounts
account catalog https://social-accounts-marketplace.live
find accounts for sale account market
secure account purchasing platform https://accounts-marketplace.online
маркетплейс аккаунтов akkaunty-na-prodazhu.pro
площадка для продажи аккаунтов rynok-akkauntov.top
маркетплейс аккаунтов https://akkaunty-market.live
покупка аккаунтов kupit-akkaunty-market.xyz
маркетплейс аккаунтов https://akkaunty-optom.live
купить аккаунт kupit-akkaunt.online
facebook account sale facebook ads account buy
buy facebook ads manager https://buy-ad-account.top
facebook ads accounts https://buy-ads-account.click
buy fb ad account buying facebook accounts
buy aged facebook ads account buy facebook advertising accounts
buy facebook accounts for ads https://buy-ad-account.click
buy facebook accounts for advertising https://ad-accounts-for-sale.work
buy aged google ads account https://buy-ads-account.top
google ads accounts for sale https://ads-account-for-sale.top
buy verified google ads account https://ads-account-buy.work/
buy google ads threshold account https://buy-ads-invoice-account.top
buy google ads invoice account https://buy-account-ads.work
buy google agency account buy-ads-agency-account.top
buy google adwords accounts https://sell-ads-account.click
buy google ads buy-verified-ads-account.work
buy verified business manager buy-business-manager.org
buy facebook ads accounts and business managers buy-business-manager-acc.org
buy facebook business manager buy business manager account
buy fb bm https://buy-verified-business-manager.org
unlimited bm facebook business-manager-for-sale.org
buy facebook bm account https://verified-business-manager-for-sale.org
buy tiktok ad account https://buy-tiktok-ads-account.org
tiktok ads account buy https://tiktok-ads-account-buy.org
buy tiktok ad account https://tiktok-agency-account-for-sale.org
buy tiktok ads https://buy-tiktok-ads-accounts.org
tiktok ads agency account https://buy-tiktok-business-account.org
tiktok ads account for sale https://buy-tiktok-ads.org
buy tiktok business account https://tiktok-ads-agency-account.org
buy accounts facebook buy and sell accounts gaming account marketplace
legitimate pharmacy shipping to USA legitimate pharmacy shipping to USA trusted Canadian generics
doctor recommended Canadian pharmacy: affordable medications from Canada — canadian pharmacy online
safe medications from Mexico: verified Mexican pharmacies USA delivery — certified Mexican pharmacy discounts
generic medicine from Mexico: certified Mexican pharmacy discounts — mexico pharmacy
buy prednisone: prednisone 40 mg — Prednexa Med
amoxil online: antibiotic amoxicillin — Amoxicillin 500mg buy online
prednisone online sale: prednisone price — Prednexa Med
Prednexa Med: Prednexa Med — prednisone price
Navikara Pharmacy: generic amoxil — buying amoxicillin in mexico
generic amoxil: Navikara Pharmacy — amoxil online
IndiavaMeds online pharmacy india IndiavaMeds
PrednexaMed: PrednexaMed — PrednexaMed
online medicine: IndiavaMeds — indian pharmacy
Prednexa Med Prednexa Med Prednexa Med
Prednexa Med: Prednexa Med — buy prednisone
https://stromectadirect.com/# Stromectol buy cheap
buy prednisone: prednisone 20mg prices — buy prednisone
indian pharmacy: indian pharmacy — buy medication online
indian pharmacy india pharmacy online medicine
http://indiavameds.com/# online medicine
https://navikarapharmacy.xyz/# Navikara Pharmacy
indian pharmacy: indian pharmacy — Indiava Meds
http://prednexamed.com/# Prednexa Med
Prednexa Med: PrednexaMed — PrednexaMed
prednisone 20mg cheap: buy prednisone without a prescription best price — Prednexa Med
Prednexa Med: generic over the counter prednisone — Prednexa Med
order medicine online india IndiavaMeds india pharmacy
Buy Tadalafil 10mg: EveraMeds — Cialis 20mg price in USA
sildenafil 50 mg price generic sildenafil AeroMedsRx
Sildenafil 100mg price: AeroMedsRx — Generic Viagra for sale
https://bluewavemeds.xyz/# order Kamagra discreetly
kamagra online pharmacy for Kamagra BlueWaveMeds
https://bluewavemeds.xyz/# kamagra
order Kamagra discreetly: fast delivery Kamagra pills — kamagra oral jelly
buy Kamagra online: Blue Wave Meds — trusted Kamagra supplier in the US
kamagra oral jelly order Kamagra discreetly kamagra oral jelly
https://aeromedsrx.xyz/# AeroMedsRx
trusted Kamagra supplier in the US: order Kamagra discreetly — kamagra
buy Kamagra online kamagra order Kamagra discreetly
buy Kamagra online: Blue Wave Meds — fast delivery Kamagra pills
Viagra without a doctor prescription Canada Viagra without a doctor prescription Canada AeroMedsRx
https://bluewavemeds.xyz/# buy Kamagra online
fast delivery Kamagra pills order Kamagra discreetly Blue Wave Meds
AeroMedsRx: Sildenafil Citrate Tablets 100mg — sildenafil online
http://bluewavemeds.com/# buy Kamagra online
http://everameds.com/# EveraMeds
http://everameds.com/# Cialis 20mg price
AeroMedsRx: AeroMedsRx — sildenafil online
https://bluewavemeds.xyz/# fast delivery Kamagra pills
kamagra BlueWaveMeds online pharmacy for Kamagra
Viagra without a doctor prescription Canada: AeroMedsRx — buy viagra here
https://everameds.com/# EveraMeds
http://bluewavemeds.com/# fast delivery Kamagra pills
trusted Kamagra supplier in the US order Kamagra discreetly trusted Kamagra supplier in the US
EveraMeds: Buy Cialis online — EveraMeds
EveraMeds: Generic Cialis price — EveraMeds
sildenafil online Viagra without a doctor prescription Canada AeroMedsRx
EveraMeds: cialis for sale — Buy Cialis online
https://bluewavemeds.com/# trusted Kamagra supplier in the US
EveraMeds: cialis for sale — EveraMeds
http://bluewavemeds.com/# buy Kamagra online
AeroMedsRx: AeroMedsRx — Sildenafil Citrate Tablets 100mg
kamagra kamagra kamagra oral jelly
AeroMedsRx: AeroMedsRx — AeroMedsRx
UvaPharm Uva Pharm Uva Pharm
https://mhfapharm.xyz/# MHFA Pharm
IsoIndiaPharm: IsoIndiaPharm — Iso Pharm
canadian pharmacy review http://isoindiapharm.com/# india pharmacy mail order
https://isoindiapharm.com/# IsoIndiaPharm
reputable canadian pharmacy https://isoindiapharm.xyz/# IsoIndiaPharm
MhfaPharm: canadian pharmacies compare — MHFA Pharm
india online pharmacy: IsoIndiaPharm — pharmacy website india
IsoIndiaPharm indianpharmacy com Iso Pharm
http://mhfapharm.com/# MhfaPharm
best canadian pharmacy online https://isoindiapharm.xyz/# pharmacy website india
п»їlegitimate online pharmacies india: IsoIndiaPharm — IsoIndiaPharm
IsoIndiaPharm Iso Pharm indian pharmacy online
safe online pharmacies in canada https://uvapharm.xyz/# Uva Pharm
IsoIndiaPharm: Iso Pharm — IsoIndiaPharm
canada pharmacy world https://uvapharm.com/# mexican pharma
los algodones pharmacy online: hydrocodone mexico pharmacy — mexican pharmacies that ship to us
MhfaPharm MhfaPharm canada pharmacy world
Uva Pharm: mexican pharmacy las vegas — can i buy meds from mexico online
Uva Pharm: online mexican pharmacy — UvaPharm
http://uvapharm.com/# UvaPharm
MhfaPharm canadian drug stores MHFA Pharm
india pharmacy mail order https://bswfinasteride.xyz/# BSW Finasteride
buying generic propecia online: cost of propecia pills — BSW Finasteride
buy abortion pills SocalAbortionPill buy abortion pills
order generic propecia pill: BswFinasteride — BswFinasteride
reputable indian online pharmacy https://bswfinasteride.xyz/# BswFinasteride
PmaIvermectin: stromectol 3 mg tablet price — ivermectin studies 2021
buy abortion pills Socal Abortion Pill SocalAbortionPill
buy cytotec in usa: buy cytotec pills online cheap — Cytotec 200mcg price
UclaMetformin UclaMetformin Ucla Metformin
BswFinasteride: buy propecia without prescription — BswFinasteride
Socal Abortion Pill: Socal Abortion Pill — buy cytotec pills online cheap
mail order pharmacy india https://socalabortionpill.xyz/# SocalAbortionPill
buy abortion pills: buy abortion pills — buy abortion pills
canadian pharmacies for viagra http://muscpharm.com/# Musc Pharm
Musc Pharm: MuscPharm — Musc Pharm
kamagra NeoKamagra Neo Kamagra
Musc Pharm: Musc Pharm — universal canadian pharmacy
reliable online drugstore http://dmucialis.com/# Tadalafil Tablet
DmuCialis: Dmu Cialis — Cialis over the counter
no prescription drugs canada http://dmucialis.com/# DmuCialis
Cialis without a doctor prescription Cialis 20mg price DmuCialis
reputable canadian mail order pharmacies https://muscpharm.com/# MuscPharm
http://muscpharm.com/# MuscPharm
https://muscpharm.com/# Musc Pharm
Musc Pharm Musc Pharm us online pharmacy
mexican pharmacy drugs http://neokamagra.com/# Kamagra tablets
Neo Kamagra: NeoKamagra — Neo Kamagra
Cialis without a doctor prescription: Dmu Cialis — Dmu Cialis
DmuCialis: Cialis without a doctor prescription — DmuCialis
mexican pharmacy online no prescription https://edpillsafib.xyz/# Ed Pills Afib
Viagra Newark: Viagra Newark — Sildenafil Citrate Tablets 100mg
meds online without doctor prescription https://edpillsafib.xyz/# Ed Pills Afib
ViagraNewark generic sildenafil ViagraNewark
ed meds without doctor prescription https://corpharmacy.xyz/# Cor Pharmacy
Cor Pharmacy: online pharmacy without insurance — Cor Pharmacy
online ed pills EdPillsAfib ed online pharmacy
pharmacy express online http://edpillsafib.com/# EdPillsAfib
canadian mail order pharmacies to usa http://corpharmacy.com/# CorPharmacy
online ed drugs no prescription https://edpillsafib.xyz/# buy ed meds
affordable ed medication: EdPillsAfib — Ed Pills Afib
http://edpillsafib.com/# get ed meds today
ed pills Ed Pills Afib Ed Pills Afib
online pharmacy no prescription http://edpillsafib.com/# EdPillsAfib
ViagraNewark: Viagra Newark — ViagraNewark
ViagraNewark Order Viagra 50 mg online Viagra Newark
prescription price checker https://edpillsafib.xyz/# ed pills cheap
https://viagranewark.xyz/# Viagra without a doctor prescription Canada
EdPillsAfib ed medications cost Ed Pills Afib
cheap prescription drugs http://viagranewark.com/# ViagraNewark
prescription drugs prices https://edpillsafib.xyz/# EdPillsAfib
https://edpillsafib.xyz/# ed med online
Cor Pharmacy: no prescription pharmacy paypal — cheapest prescription pharmacy
Cheapest Sildenafil online Viagra Newark ViagraNewark
best price prescription drugs https://viagranewark.xyz/# Viagra Newark
EdPillsAfib buy erectile dysfunction treatment EdPillsAfib
https://viagranewark.com/# over the counter sildenafil
best no prescription pharmacy: CorPharmacy — canadian pharmacy for viagra
best canadian online pharmacy https://corpharmacy.com/# Cor Pharmacy
http://avtadalafil.com/# Av Tadalafil
https://avtadalafil.com/# Av Tadalafil
UofmSildenafil: sildenafil 100mg price usa — cheapest online 100 mg sildenafil
sildenafil prescription uk: UofmSildenafil — Uofm Sildenafil
https://massantibiotics.xyz/# cheapest antibiotics
MassAntibiotics Mass Antibiotics MassAntibiotics
can we buy amoxcillin 500mg on ebay without prescription: Mass Antibiotics — Mass Antibiotics
https://massantibiotics.com/# Mass Antibiotics
Uofm Sildenafil: sildenafil online purchase — UofmSildenafil
https://avtadalafil.xyz/# AvTadalafil
https://pennivermectin.com/# PennIvermectin
https://avtadalafil.xyz/# AvTadalafil
PennIvermectin ivermectin price ivermectin dosage
https://avtadalafil.xyz/# AvTadalafil
buy liquid ivermectin: cost of ivermectin lotion — stromectol pills
buy doxycycline cheap: buy doxycycline cheap — amoxicillin 500 mg without a prescription
https://massantibiotics.com/# MassAntibiotics
stromectol walmart PennIvermectin PennIvermectin
ivermectin for sale ivermectin dosage for mange in dogs Penn Ivermectin
https://pennivermectin.xyz/# buy ivermectin nz
stromectol otc: PennIvermectin — Penn Ivermectin
pharmacy online tadalafil Av Tadalafil Av Tadalafil
https://massantibiotics.com/# Mass Antibiotics
Penn Ivermectin: PennIvermectin — Penn Ivermectin
UofmSildenafil: UofmSildenafil — Uofm Sildenafil
https://pennivermectin.xyz/# PennIvermectin
UofmSildenafil: Uofm Sildenafil — Uofm Sildenafil
PennIvermectin ivermectin 200mg ivermectin uk
https://avtadalafil.com/# tadalafil tablets 20 mg online
MassAntibiotics: MassAntibiotics — cheapest antibiotics
http://uofmsildenafil.com/# UofmSildenafil
Dabet main access URL: Dabet Vietnam liên kết đang sử dụng — địa chỉ truy cập Dabet mới nhất
https://dabet.reviews/# du?ng d?n vao Dabet hi?n t?i