AFON // радиотехник affonya@mail.ru
← Все проекты для дронов

Логер по UART (blackbox)

Периодическая запись строки телеметрии в текстовом виде по UART.

DMC.50 · Телеметрия и служебное · ATmega328P

Задача

Выводить по UART периодические строки с данными для записи во внешний логер/терминал.

Алгоритм

Раз в период печатать CSV-строку значений; на приёмной стороне сохранять в файл для разбора.

Исходный код (C, avr-gcc)

⇩ Скачать 50-blackbox-uart-log.c

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
static void uart_init(uint32_t baud){
  uint16_t ubrr=(F_CPU/(16UL*baud))-1; UBRR0H=ubrr>>8; UBRR0L=ubrr;
  UCSR0C=(1<<UCSZ01)|(1<<UCSZ00); UCSR0B=(1<<TXEN0);
}
static void tx(char c){ while(!(UCSR0A&(1<<UDRE0))); UDR0=c; }
static void print_u16(uint16_t v){
  char b[6]; int8_t i=0; if(!v){tx('0');return;}
  while(v){ b[i++]='0'+v%10; v/=10; } while(i--) tx(b[i]);
}
int main(void){
  uart_init(57600);
  volatile uint16_t t=0, vbat=1680, curr=520;
  for(;;){
    print_u16(t); tx(','); print_u16(vbat); tx(','); print_u16(curr); tx('\n');
    t++;
    _delay_ms(200);
  }
}

Сборка: avr-gcc -mmcu=atmega328p -DF_CPU=16000000UL -Os файл.c -o файл.elf

Пояснения

Простейший «чёрный ящик»: пишем в терминал/на модуль записи. Формат CSV удобен для анализа.