Сб мар 23, 2019 10:24:27
#define F_CPU 8000000UL
#include <stdio.h>
#include <avr/io.h>
int current_track_number = 0;
int default_buffer[10] = {0x7E , 0xFF , 0x06 , 0x00 , 0x00 , 0x00 , 0x00 , 0xEF}; // Default Buffer
int buffer_data[10] = {0x7E , 0xFF , 0x06 , 0x00 , 0x00 , 0x00 , 0x00 , 0xEF}; // Sending Buffer
// Send Buffer to UART TX Pin
void send_buffer(void) {
int i;
for( i=0; i< 10; i++){
putchar(buffer_data[i]);
buffer_data[i] = default_buffer[i];
}
}
// Set Volume And Send it's Serial Command
void set_volume( int volume ) {
buffer_data[3] = 0x06;
buffer_data[6] = volume;
send_buffer();
}
// Set a Track (1-3000) to Play
void play_track(int track_id) {
buffer_data[3] = 0x03;
if(track_id < 256) {
buffer_data[6] = track_id;
} else {
buffer_data[5] = track_id / 256;
buffer_data[6] = track_id - 256 * buffer_data[6];
}
send_buffer();
}
// Set a Track to Play Continuous
void play_current_track_continuous(void) {
buffer_data[3] = 0x08;
buffer_data[6] = current_track_number;
send_buffer();
}
// Pause Current Playing Track
void pause_current_track(void) {
buffer_data[3] = 0x0E;
send_buffer();
}
int main(void)
{
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
//
set_volume(10);
//
play_track(0);
}
Сб мар 23, 2019 11:08:28
Сб мар 23, 2019 11:26:15
Сб мар 23, 2019 15:12:31
Вс мар 24, 2019 08:22:05
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
Вс мар 24, 2019 15:54:38
ну да, я ошибся: компилироваться будет, работать не будетWireless писал(а):Компилируется без ошибок.
#define putchar(__c) \
fputc(__c, stdout)
/** \file com_io.h
* \brief Заголовочный файл библиотеки ввода-вывода для USART
*
* \author ARV
* \date 05.02.2009
* \version 1.0 beta
* \copyright 2008 © ARV
* Для компиляции требуется:\n
* -# WinAVR-20080411 или более новая версия
*
*/
#ifndef COM_IO_H_
#define COM_IO_H_
#include <stdio.h>
/// Если не используется WDT, эту опцию установить в ноль
#define USE_WDT 0
/// Если ввод не требуется, эту опцию надо установить в единичку
#define ONLY_OUT 1
/// Скорость обмена по USART
#define BAUD 38400UL
#endif /* COM_IO_H_ */
/** \file com_io.c
* \brief Библиотека ввода-вывода для USART
*
* Реализует "интерфейс по умолчанию" для функций printf() и т.п.
* По умлочанию устанавливаетя скорость, задаваемая макросом #BAUD
* \author ARV
* \date 05.02.2009 ...
* \version 1.0 beta
* \copyright 2008 © ARV
* Для компиляции требуется:\n
* -# WinAVR-20080411 или более новая версия
*
*/
#include <avr/io.h>
#include <avr/wdt.h>
#include "com_io.h"
#include <stdio.h>
/// Выводит символ
static int uart_putchar(char c, FILE *stream);
#if ONLY_OUT == 0
static int uart_getchar(FILE *stream);
#endif
/// Структура устройства ввода-вывода
#if ONLY_OUT != 0
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
#else
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
#endif
/** Вывод одного символа с переводом строки при необходимости (локальная функция)
*
* @param c выводимый символ
* @param stream поток для вывода
* @return всегда возвращает 0
*/
static int uart_putchar(char c, FILE *stream){
if (c == '\n')
uart_putchar('\r', stream);
while(bit_is_clear(UCSR0A, UDRE0))
#if USE_WDT != 0
wdt_reset();
#endif
;
UDR = c;
return 0;
}
#if ONLY_OUT == 0
static int uart_getchar(FILE *stream){
while(bit_is_clear(UCSRA, RXC))
#if USE_WDT != 0
wdt_reset();
#endif
;
return UDR;
}
#endif
/** Автоматическая инициализация модуля.
* Вызывать из основного модуля эту функцию не нужно.
*/
/// Функция настройки параметров USART и инициализации ввода-вывода.
static void __attribute__((naked, used, section(".init7"))) stdio_init(void){
UCSRA = 0;
#include <util/setbaud.h>
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
#if USE_2X
UCSRA |= (1 << U2X);
#else
UCSRA &= ~(1 << U2X);
#endif
UCSRB |= _BV(TXEN);
#if ONLY_OUT == 0
UCSRB |= _BV(RXEN);
#endif
UCSRC = 0x86;
stdout = &mystdout;
stdin = stdout;
}
#include "com_io.h"
int main(void){
printf("\nHello, world!");
}
Пн мар 25, 2019 13:22:34
FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
stdout = &mystdout;
Module's serial port is 3.3V TTL level, so the default interface level is 3.3V. If the MCU system is 5V. It
is recommended connect a 1K resistor in series.
Пн мар 25, 2019 15:20:08