В данной статье пойдет речь о том, как подключить ультразвуковой дальномер HC-SR04 к ATtiny2313 и отображать данные на ЖКИ-дисплее 16×1 на базе HD44780. Также сделал пример программы для отправки результата по UART. Для приёма я использовал Terminal 1.9b и преобразователь USB-UART на базе PL2303HX. Для проверки работоспособности программы и схемы я использовал Proteus 7. Проект в Atmel Studio 7 целиком вы сможете скачать по ссылке в конце статьи. При прошивке микроконтроллера ATtiny2313 не забудьте менять фьюзы: CKSEL3…0 = 0100 – Внутренний тактовый генератор — частота 8 МГц и поставить галочку (т.е. отключить) на SCKDIV8 – деление тактовой частоты на 8.
- 1 Схема подключения TB378 и HC-SR04 к ATtiny2313
- 2 Пример программы в Atmel Studio 7
- 3 Схема подключения LCD HD44780 и HC-SR04 к ATtiny2313
- 4 Пример программы в Atmel Studio 7
- 5 Скачать файлы
- 6 Купить HC-SR04 на AliExpress
- 7 Купить ATTINY2313A на Aliexpress
- 8 Купить LCD1602 HD44780 на Aliexpress
- 9 Похожие записи
Схема подключения TB378 и HC-SR04 к ATtiny2313
Для начала сделал программу для получения данных по UART.
Пример программы в Atmel Studio 7
main.c
#define F_CPU 8000000UL
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>
#include <stdlib.h>
#include "uart.h"
#include "hcsr04.h"
inline void prepareText(char * text, int distance) {
char textDistance[5];
itoa(distance, textDistance, 10);
strcat(text, "D = ");
strcat(text, textDistance);
strcat(text, "mm");
}
int main(void) {
int distance;
char text[17];
USARTInit(MYUBRR);
while (1) {
text[0] = '\0';
distance = getDistance();
prepareText(text, distance);
USARTTransmitStringLn(text);
_delay_ms(333);
}
}
Краткое описание
Вместо функции sprintf() сделал собственную функцию для преобразования числа в строку, потому что sprintf() жрёт больше половины флеш памяти контроллера.
inline void prepareText(char * text, int distance) Функция prepareText преобразует целое число distance (расстояние) в строку и добавляет строку в text.
itoa(distance, textDistance, 10); Функция itoa преобразует целое число distance в строку textDistance в формате 10.
strcat(text, textDistance); Объединение строк. Функция добавляет textDistance строки srcptr в конец строки text.
Результат
Так как в Протеус нету HC-SR04, я его просто нарисовал. На первой картинке результат в -1 означает что датчик HC-SR04 не подключён или Echo не отправил сигнал.
После прошивки реального ATtiny2313, подключил к компьютеру и вот результат.
Схема подключения LCD HD44780 и HC-SR04 к ATtiny2313
После того, как убедился, что датчик HC-SR04 и программа работают правильно, для вывода результата подключил однорядный ЖК на 16 символов — HD44780.
Пример программы в Atmel Studio 7
main.c
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>
#include <stdlib.h>
#include "hcsr04.h"
#include "LCD.h"
inline void prepareText(char * text, int distance) {
char textDistance[5];
itoa(distance, textDistance, 10);
strcat(text, "D=");
strcat(text, textDistance);
strcat(text, "mm");
}
int main(void) {
_delay_ms(100);
lcdInit();
lcdClear();
lcdSetDisplay(LCD_DISPLAY_ON);
lcdSetCursor(LCD_CURSOR_OFF);
int distance;
char text[17];
while (1) {
text[0] = '\0';
distance = getDistance();
prepareText(text, distance);
lcdClear();
lcdGotoXY(0, 0);
lcdPuts(text);
_delay_ms(333);
}
}
Результат
В Протеусе всё работает, текст отображается правильно.
Скачать файлы
ATtiny2313 + HC-SR04 + LCD — Atmel Studio 7 проект
ATtiny2313 + HC-SR04 + UART — ISIS Professional (Proteus) проект
ATtiny2313 + HC-SR04 + LCD — ISIS Professional (Proteus) проект
ATtiny2313 + HC-SR04 + UART — Atmel Studio 7 проект
ATtiny2313A даташит на Русском
ATtiny2313A datasheet (EN)



























































































































