Перейти к содержанию

BT201 схема подключения и управление из под ATMEGA8


Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

1 минуту назад, tifaso сказал:

Я буду пользоваться AVR микроконтроллерами.

а вы ими и не пользуетесь. что вы на них реализовали ?

 

или что атмега 328 на плате с обвязкой дешевле атмеги 16?

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Тренды и лучшие решения для разработки зарядных станций в России

К 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

@dolmatovva  у аурдинках  тама  яшибочяк  большя  чям  ,

если умом по разуму сам пишешь программу  :P

Изменено пользователем Нэцкэ

У меня есть мысль , и я её думаю ...  

Ссылка на комментарий
Поделиться на другие сайты

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

скажу так, изобретение мужикального центра с каменными кнопками управления в эпоху полётов на марс, если ты не илон маск, то это идея тупая и тупиковая. А если ещё и свинья в апельсинах, то поберегите себя ещё на десять лет.

Ссылка на комментарий
Поделиться на другие сайты

@dolmatovva  ну  зачем - же так ...  

Он  в соседей  теме  приемнички  на МК  сотворяют и МР3 играют на нём же ...

Ну хочет человек сотворить свой ,  то туточки греха  нема  ... :yes:

У меня есть мысль , и я её думаю ...  

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Нэцкэ сказал:

хочет человек сотворить свой

так пусть и сотворяет. а он не может(неприятное слово), а простаки потакают . Чего глумиться то над юродивым..

он не космолётчик, пусть на ардуине попробует, потом на МК чистый как слеза перейдет

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, Нэцкэ сказал:

Ну хочет человек сотворить свой ,  то туточки греха  нема 

А я, например, хочу создать собственный многоядерный микропроцессор по технологии три нанометра. С нуля, избежав всех ошибок моих предшественников. Чтобы мой процессор был самым мощным и экономичным на рынке. С чего бы начать? Изучать то, как там миллиарды транзисторов скомпоновать правильно? Как изготовить такое устройство? Да ну, учёба для ботаников. Наверно надо тему на форуме создать...

Ссылка на комментарий
Поделиться на другие сайты

32 минуты назад, tifaso сказал:

сами пользуйтесь этой ардуиной

А мы не гордые, мы пользуемся когда это выгодно. Пока жители Виллабаджо под руководством @tifaso страдают хе*ней, жители Вилларибо заказали у китайцев модуль BT201 за 13 центов, подключили его к  ардуине и уже слушают музыку.

Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Огонёк сказал:

...хочу создать собственный многоядерный микропроцессор...

Наверно надо тему на форуме создать...

Вы опоздали, где-то в недрах корзины уже есть подобная тема.

Изменено пользователем Dr. West

"Я не знаю какой там коэффициент, я просто паять умею. "

Ссылка на комментарий
Поделиться на другие сайты

В 08.03.2024 в 18:13, IMXO сказал:

Новая тема на +100500 страниц ниАчом

Уже 23-я страница, "а воз и ныне там".

Не отвлекайтесь! По-больше конкретики! А то tifaso никогда не закончит СВОЮ идею Вашими "молитвами".:)

Ссылка на комментарий
Поделиться на другие сайты

 

17 минут назад, Геннадий сказал:

Не отвлекайтесь! По-больше конкретики!

Так рады стараться, но облом :unknw:

19 часов назад, tifaso сказал:

Слишком всё как то всё сложно и запутано написано там

 

Ссылка на комментарий
Поделиться на другие сайты

@tifaso, вы не можете подключить самый убогий дисплей, значит нужно отказаться от дисплея. Вы не можете разобраться с динамической индикацией, значит нужно отказаться от индикации. Вы не можете разобраться с управлением модулем по UART, значит нужно отказаться от UART. Остается один вариант, но ваш самый любимый. На плате модуля четыре кнопки для управления, ставите параллельно кнопкам оптроны или транзисторы, или ваши любимые реле, и тогда ногодрыга будет вполне достаточно для управления. А ногодрыгать вы умеете, вроде. А вообще управление модулем простое, как три копейки.

Спойлер

1847508573_.jpg.71b44a3beabe0877d607f8ef9e55e4f4.jpg

Нужно только изучить документацию на модуль и вашу IDE . А вот с этим у вас проблемы.

Ссылка на комментарий
Поделиться на другие сайты

13 часов назад, ДядяВован сказал:

Операция записи для 4-х разрядной шины:

1.Установить RS

2.Вывести значение старшей тетрады на DB4...DB7

3.Установить E = 1 (на >=1мкс)

4.Установить E = 0

5.Вывести значение младшей тетрады на DB4...DB7

6.Установить E = 1 (на >=1мкс)

7.Установить E = 0

8.Установить линии DB4...DB7 = HI

Минимальное время между шагами 250 нс

Проверил в коде все шаги вывода строк и знаков. Как оказывается у меня в коде почти что всё было правильно. Единственное что без задержек вот потому видать оно и смешивало всё в кашу. Сейчас я добавил задержки в нужных местах и всё встало на свои места. Теперь все строки выводятся адекватно как и должно быть.

Вот получившийся код на данный момент.

#define UBRRL_value (F_CPU/(BAUND*16))-1

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>

#define MAIN_H_
#define LCD_H_

#define LCD_DDR DDRA
#define LCD_PORT PORTA
#define LCD_PIN PINA

#define DATA 0b11110000
#define RS PA2
#define E PA3

#define E1 LCD_PORT|=(1<<E)
#define E0 LCD_PORT&=~(1<<E)

#define RS1 LCD_PORT|=(1<<RS)
#define RS0 LCD_PORT&=~(1<<RS)

void lcd_ini(void);
void lcd_str(char* str);
void lcd_pos(uint8_t line, uint8_t pos);
void lcd_num(uint8_t num, uint8_t line, uint8_t pos);
uint8_t n=0;


void write(uint8_t n)
{
	n<<=4;
	E1; //линию Е в 1
	LCD_PORT&=~DATA; //удалить предыдущую отправку
	LCD_PORT|=n; //выставить значение на пины управления дата битами
	_delay_ms(1);
	E0; //линию Е в 0
}

void send_byte(uint8_t byte, uint8_t tip)
{
	if (tip) //если тип данные на линии RS 1
	{
		RS1;
	}
	else //иначе тип команда и на линии RS 0
	{
		RS0;
	}
	
	write(byte>>4); //передача старшего полубайта
	_delay_us(250);
	write(byte); //передача младшего полубайта
	_delay_us(250);
}

void lcd_ini(void)
{
	LCD_DDR|=DATA | (1<<RS) | (1<<E);
	_delay_ms(20);
	RS0;
	write(3);
	_delay_ms(5);
	write(3);
	_delay_us(150);
	write(3);
	_delay_us(50);
	write(2);
	_delay_us(50);
	
	send_byte(40,0);
	_delay_us(50);
	
	send_byte(12,0);
	_delay_us(50);
	
	send_byte(1,0);
	_delay_ms(2);
	
	send_byte(6,0);
	_delay_us(50);
}

void lcd_str(char* str)
{
	uint8_t n=0;
	while(str[n])
	{
		send_byte(str[n],1);
		n++;
	}
}

void lcd_pos(uint8_t line, uint8_t pos)
{
	uint8_t adress=(line*0x40+pos)|0x80;
	send_byte(adress,0);
	_delay_us(50);
}

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)

#define FLAG_END_RX (1<<3)
#define FLAG_ERR_RX (1<<4)
#define BUF_SIZE 20

char rx_buf[BUF_SIZE];
char buf_index = 0;
char rxb;

volatile start=1, flags;

ISR(USART_RXC_vect)
{
	char rxb = UDR;
	if(!(flags & FLAG_END_RX))
	{
		rx_buf[buf_index]=rxb;
		if(rx_buf[buf_index] == 0x0D)
		{
			flags |= FLAG_END_RX;
			return;
		}
		buf_index++;
		if(buf_index >= BUF_SIZE)
		{
			buf_index = 0;
			flags |= FLAG_ERR_RX;
		}
	}
}

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();
	flags = 0;
}

void send_UART(char value)
{
	while(!(UCSRA&(1<<UDRE)));
	UDR=value;
}

int main(void)
{
	init_pin();
	init_UART();
	
	_delay_ms(500);
	send_UART('O');
	send_UART('K');
	send_UART('!');
	send_UART(0x0D);
	send_UART(0x0A);
	_delay_ms(10);
	flags = 0;
	
	DDRB = 0b10000000;
	PORTB = 0b11111111;
	lcd_ini();
	
	while(1)
	{
		if (~PINB & (1<<1))
		{
			send_UART('P');
			send_UART('B');
			send_UART('1');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(250);
			lcd_pos(0,0);
			send_byte('A',1);
			lcd_pos(1,0);
			lcd_str("PORT B1");
		}
		if (~PINB & (1<<2))
		{
			send_UART('P');
			send_UART('B');
			send_UART('2');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(250);
			lcd_pos(0,0);
			send_byte('B',1);
			lcd_pos(1,0);
			lcd_str("PORT B2");
		}
		if (~PINB & (1<<3))
		{
			send_UART('P');
			send_UART('B');
			send_UART('3');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(250);
			lcd_pos(0,0);
			send_byte('C',1);
			lcd_pos(1,0);
			lcd_str("PORT B3");
		}
		if (~PINB & (1<<4))
		{
			send_UART('P');
			send_UART('B');
			send_UART('4');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(250);
			lcd_pos(0,0);
			send_byte('D',1);
			lcd_pos(1,0);
			lcd_str("PORT B4");
		}
		
		char i = 0;
		if (rx_buf[i] == 'M'){
			i++;
			if (rx_buf[i] == '1')
			{	
				LED_1_ON();
				LED_2_OFF();
			}
			else if (rx_buf[i] == '2')
			{
				
				LED_1_OFF();
				LED_2_ON();
			}
			else if (rx_buf[i] == 'T')
			{
				
				LED_1_ON();
				LED_2_ON();
			}
			else if (rx_buf[i] == 'K')
			{
				
				LED_1_OFF();
				LED_2_OFF();
			}
		}

		if (C_PC0)
		{
			send_UART('P');
			send_UART('C');
			send_UART('0');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(250);
			lcd_pos(0,0);
			send_byte('E',1);
			lcd_pos(1,0);
			lcd_str("PORT C0");
		}
		
		if (C_PC1)
		{
			send_UART('P');
			send_UART('C');
			send_UART('1');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(250);
			lcd_pos(0,0);
			send_byte('F',1);
			lcd_pos(1,0);
			lcd_str("PORT C1");
		}
	}
}

void init_pin(void)
{
	DDRC = 0b00000000;
	PORTC = 0b11111111;
	DDRD |= ((1<<2)|(1<<3));
	PORTD &=~ ((1<<2)|(1<<3));
}

В любом случае это пока черновой код. Позже всё будет переписываться на чистовую и уже конкретно под сам плеер. Данный код использовался для отладки работы UART и работы с дисплеем. Теперь как я уже понял как с этим работать буду уже делать чистовые схемы и платы плеера и проводить корректировки в остальных узлах устройства. Отладки прошивки для самого плеера будут проходить уже чистовой плате В чистовой плате отлаживать надёжней будет. Да впринцепи и схема плеера в дальнейшем уже меняться не будет. Разве что сейчас нужно будет окончательно всю схему перечертить и кое что сейчас изменится доработается и всё.

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

21 минуту назад, tifaso сказал:
E1; //линию Е в 1
	LCD_PORT&=~DATA; //удалить предыдущую отправку
	LCD_PORT|=n; //выставить значение на пины управления дата битами
	_delay_ms(1);
	E0; //линию Е в 0

Порядок не попутан, не? В принципе то не страшно, считывание происходит по заднему фронту.

"2.Вывести значение старшей тетрады на DB4...DB7

3.Установить E = 1 (на >=1мкс)

4.Установить E = 0"

Но вот зачем задержка в 1 мС, не понятно. Может попутал с мкС?

Изменено пользователем korsaj
Ссылка на комментарий
Поделиться на другие сайты

20 минут назад, korsaj сказал:

зачем задержка в 1 мС, не понятно. Может попутал с мкС?

Да сейчас посмотрел. Вполне достаточно задержки 

_delay_us(1);

20 минут назад, korsaj сказал:

Порядок не попутан, не?

Нет порядки не попутаны всё чётко.

При выводе символа вызывается функция send_byte там и указан весь порядок отправки данных.

void write(uint8_t n)
{
	n<<=4;
	E1; //линию Е в 1
	LCD_PORT&=~DATA; //удалить предыдущую отправку
	LCD_PORT|=n; //выставить значение на пины управления дата битами
	_delay_us(1);
	E0; //линию Е в 0
}

void send_byte(uint8_t byte, uint8_t tip)
{
	if (tip) //если тип данные на линии RS 1
	{
		RS1;
	}
	else //иначе тип команда и на линии RS 0
	{
		RS0;
	}
	
	write(byte>>4); //передача старшего полубайта
	_delay_us(250);
	write(byte); //передача младшего полубайта
	_delay_us(250);
}

Главное что всё это уже работает, а большего и не нужно.

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

И всё же как не крути, а я всё равно стопорюсь на выводе чисел полученных по UART. К примеру приходит по UART следующее M2+00000091. Тут понятно что мы при получении обрабатываем принятые данные M2 это тип данных. Это уже нам известно. далее сами данные в виде hex числа 00000091. Это число нужно взять из массива как видно оно не с самого начала массива расположено и перевести в десятичное и только после этого с ним можно будет уже работать. Если это число времени трека, то там нужно ещё провести расчет на то чтоб из полученного десятичного числа высчитать минуты и секунды. Мне просто сейчас нужно понять каким образом вывести числа в нужном виде?

Ссылка на комментарий
Поделиться на другие сайты

В 27.04.2024 в 20:28, korsaj сказал:

С помощью таблицы ASCII вы переводите числа (байты) в символы и обратно. Например попробуйте перевести последовательность чисел 74 69 66 61 73 6F в символы/строку

 

Ссылка на комментарий
Поделиться на другие сайты

@korsaj Это то понятно что таблицей нужно переводить. Но как это сделать кодом? Вот в этом и заключается вопрос. Каким образом код писать на эту функцию?

Ссылка на комментарий
Поделиться на другие сайты

@korsaj tifaso там написано ну и смысл от этого. Ты мне хоть функцию подскажи как написать чтобы делать перевод чисел программно. От этого хоть польза будет, а не этот ребус, которым время лишбы занять и своё и моё.

Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...