Вы можете написать сейчас и зарегистрироваться позже.
Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.
Так ладно в общем нужно до конца разобраться с UART. Сейчас я выкладываю весь код и всю информацию что у меня есть.
Сначала поясню что по схеме. Микроконтроллер у меня ATMEGA16. На PD2 и PD3 установлены светодиоды, На PC0 и PC1 установлены кнопки. Также установлен внешний кварц на частоту 7.3728 MHz.
Теперь собственно сам код по UART. Код был взят из одного примера в просторах инета. Первоначально он был под ATMEGA8, но он вполне подошёл и на ATMEGA16.
#define F_CPU 7372800UL
#define BAUND 9600L
#define UBRRL_value (F_CPU/(BAUND*16))-1
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
void init_pin(void);
#define C_PC0 (~PINC&(1<<PC0))
#define C_PC1 (~PINC&(1<<PC1))
#define LED_1_ON() PORTD|=(1<<PD2)
#define LED_1_OFF() PORTD&=~(1<<PD2)
#define LED_2_ON() PORTD|=(1<<PD3)
#define LED_2_OFF() PORTD&=~(1<<PD3)
volatile start=1;
char b;
ISR(USART_RXC_vect)
{
b=UDR;
}
void init_UART()
{
UBRRL = UBRRL_value;
UBRRH = UBRRL_value>>8;
UCSRB|=(1<<TXEN);
UCSRB|=(1<<RXEN);
UCSRC|=((1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1));
UCSRB|=(1<<RXCIE);
sei();
}
void send_UART(char value)
{
while(!(UCSRA&(1<<UDRE)));
UDR=value;
}
int main(void)
{
init_pin();
init_UART();
while(1)
{
if (start==1)
{
_delay_ms(500);
send_UART('O');
send_UART('K');
send_UART('!');
send_UART(0x0D);
send_UART(0x0A);
_delay_ms(10);
start=0;
}
if (b == '0')
{
LED_1_ON();
LED_2_OFF();
send_UART('N');
send_UART('+');
send_UART('0');
send_UART(0x0D);
send_UART(0x0A);
_delay_ms(10);
b=4;
}
if (b == '1')
{
LED_1_OFF();
LED_2_ON();
send_UART('N');
send_UART('+');
send_UART('1');
send_UART(0x0D);
send_UART(0x0A);
_delay_ms(10);
b=4;
}
if (b == '2')
{
LED_1_ON();
LED_2_ON();
send_UART('N');
send_UART('+');
send_UART('2');
send_UART(0x0D);
send_UART(0x0A);
_delay_ms(10);
b=4;
}
if (b == '3')
{
LED_1_OFF();
LED_2_OFF();
send_UART('N');
send_UART('+');
send_UART('3');
send_UART(0x0D);
send_UART(0x0A);
_delay_ms(10);
b=4;
}
if (C_PC0)
{
send_UART('P');
send_UART('C');
send_UART('0');
send_UART(0x0D);
send_UART(0x0A);
_delay_ms(250);
}
if (C_PC1)
{
send_UART('P');
send_UART('C');
send_UART('1');
send_UART(0x0D);
send_UART(0x0A);
_delay_ms(250);
}
}
}
void init_pin(void)
{
DDRC = 0b00000000;
PORTC = 0b11111111;
DDRD |= ((1<<2)|(1<<3));
PORTD &=~ ((1<<2)|(1<<3));
}
Здесь я пробовал этот код UART конечно в таком виде работает, но здесь есть некоторая непонятная ситуация. На микроконтроллер почему то принимаются значения только в цифровом виде. По другому он отказывается работать. Возможно нужно как то перенастроить что то не совсем это понимаю. А UART эта вещь такая очень нужна без него не сделать управление плеером.
Заходишь в даташит усилителя, ищешь вход, обычно конденсаторы, туда и подпаиваешь. Выводишь 5 проводов: входы 4 каналов, и земля входа. Потом: провод левого переднего входа (in1) соединяешь с левым задним (in3), по аналогии с правой стороной делай так же. Получается 2 контакта и земля. Ищешь распиновку своего разъёма и паяешь. Распиновку могу объяснить, если фото будет. Что бы включить, Подключи разъём в телефон и вставь, например, пустой дик.
@Гость Михаил, что мешает поставить и послушать? Что мешает потестить операционник из магазина на предмет подлинности, хотя бы замерить скорость нарастания выходного сигнала и сравнить с даташит? Из магазина с большой вероятностью может быть перемаркированный LM358, его сразу видно то характерной ступеньке на синусоиде и по частоте он просто "тормоз" по сравнению с ne. Ваш LG медленнее в три раза от исходного. Ваш lg со своими 3 МГц должен быть однозначно лучше, чем перемаркированный ne из 358. Например, разницы между оригинальным LM833 и с хорошей 8 мегагерцовой подделкой ne с Али не слышно.
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.