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 удобен для анализа.