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

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


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

Прежде чем писать какие либо функции, в т.ч. и про которую сейчас речь, тебе надо на листке бумаги нарисовать некую структуру программы. Кубиками, типа блок схемы, но более "грубо". Потом каждый кубик детализировать, какие в нём будут функции, какие данные будут храниться, в каком формате и где. Какие входные параметры, какие выходные.

Тогда станет понятно, что сейчас стоит задача преобразовать hex-string в число, опять таки в hex. Потому что именно эти числа удобно хранить и обрабатывать в МК.

А потом тебе один раз понадобится функция преобразования hex числа в dec-string для вывода на индикацию.

Ну и т.д.

С уважением, Владимир

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

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

@tifaso  Не забывай что МК  , это не не бортовой капутер на орбитальной станции :yes:

Вот чем хорош,  но трудно изучемый Асемблёр неприкаяный  :blush:

Тем что он учит общатся с  МК  на том языке который  понятен ему  без пол литры выпитой  :crazy:

МК умеет понимать нули иединицы , а нам  Человекам  все десятично подавай 

( на как на блюдечке  готовое )  :lol:

@ДядяВован  Вот !!!  Наша ошибка начинающих  !!!  :wall:  эта  штукенция называется Алгоритм  :yes:

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

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

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

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

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

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

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

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

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

такую хрень больше не предлагай

Я предлагаю тебе реальные вещи, которые как-то могут помочь в этой безнадежной ситуации. А вот ты по большому счету несёшь хрень и чушь!

С уважением, Владимир

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

Особенности хранения литиевых аккумуляторов и батареек

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

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

Только что, ДядяВован сказал:

А вот ты по большому счету несёшь хрень и чушь!

Даже в мыслях не было. У меня всё чётко и по делу.

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

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

Да только выводить нужно не на экран, а на семисегментные индикаторы

Да подожди ты, все равно вернешься к LCD1602, а лучше 2004, на семисегментниках это извращение. 

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

Ассемблер tifaso не предлагать!!! Хотя он и обещал его изучить.:) На Си, говорит, проще. Вот Вам, tifaso, и "проще".:)

Так теперь Вы, мало того, что "кашу из топора" варите (за счет других форумчан), так еще и умудряетесь ножкой топать и всех подгонять с решением Вашего проекта.

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

...проблему то нужно решить. Сколько уже можно тянуть с этим проектом. Сейчас обязательно нужно...

 

 

 

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

2 минуты назад, donec сказал:

подожди ты, все равно вернешься к LCD1602, а лучше 2004, на семисегментниках это извращение.

Нет уж на семисегментных индикаторах проще выводить. Вот сейчас только одна эта проблема с переводом чисел держит, а дальше уже всё как по маслу пойдёт.

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

@Геннадий Я и сам  хочу на  СИ и на Си++  , 

но Асемблер как  строгий сен - сей  , его херь проведёшь  :blush:

А все рано заставит усваивать  все в нулях и единичках . 

Зато как  в  душу и в органы внутрение  без ренгена сморишь  в МК  :rolleyes:

А дадости то сколько как  даже самое простое сотворил  на Асемблере то  :P 

От тепереча  tifaso  можешь поржать с меня ...  :lol:

У меня радости то как у маленького ребёнка  ...  :blush:

 

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

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

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

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

Вот сейчас только одна эта проблема с переводом чисел держит, а дальше уже всё как по маслу пойдёт.

А дальше парсинг строки нужно кому-то сделать, чтоб поразрядно вывести, а дальше знакогенератор для семисегментников должен кто-то сделать и т.д.и т.п. Пока дойдет время до BT201 и желание что-то делать испарится

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

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

дальше уже всё как по маслу пойдёт

:lol2:

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

Вот сейчас только одна эта проблема с переводом чисел держит

Вот мой вопрос к чату гпт, который я тебе советовал воспользоваться:
Напиши функцию на Си для ATMega8, которая преобразую строковое число в hex-виде в двухбайтовое целое hex-число. Входящий параметр строка, значение 0 конец строки Возвращает 2-х байтовое число

Вот ответный код:

#include <avr/io.h>

uint16_t hexStringToUInt16(char* hexString) {
    uint16_t result = 0;
    int i = 0;
    while(hexString[i] != '\0') {
        char currentChar = hexString[i];
        if(currentChar >= '0' && currentChar <= '9') {
            result = (result << 4) | (currentChar - '0');
        } else if(currentChar >= 'A' && currentChar <= 'F') {
            result = (result << 4) | (currentChar - 'A' + 10);
        } else if(currentChar >= 'a' && currentChar <= 'f') {
            result = (result << 4) | (currentChar - 'a' + 10);
        }
        i++;
    }
    return result;
}

Теперь еще раз расскажи, какую хрень я тебе предложил?

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

проблема с переводом чисел держит

Кстати, не трать время зря.
Обычной практикой в программировании является написание dummy function. Всяких шаблонов/заглушек.
Ты сейчас напиши временную функцию перевода чисел, которая просто будет возвращать фиксированное число, не занимаясь переводом. И двигайся дальше, программируй другие функции проекта.
А к этой заглушке вернешься позже. С приобретением опыта программирования, появятся и мысли как реализовать этот перевод чисел. А может он и не нужен окажется. Не надо неделями сидеть над разработкой одной функции. На данном этапе не получается - делаешь шаблон и идешь дальше.
Я снова предлагаю не хрень, веришь?

С уважением, Владимир

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

Та точно, вы решили tefaso в ступор полный ввести. Думаете он знак умножение за что-то другое может воспринять ))

2 часа назад, tifaso сказал:

@korsaj У меня вариантов вообще не осталось. Всё что я нашёл уже перепробовал, но ничего не заработало

Я вас просил разобраться с таблицей символов, вы хоть как-то пытались вникнуть в мои слова?

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

14 минут назад, CruelAsm сказал:

Готовьтесь отгребать за неработающий код.

:lol2: Мне как-то фиолетово, работающий, неработающий.
Пусть другой вопрос натыкает пальчиком в чат, получит другой код.
Свой код  может тоже туда скопипастить... Для более адекватных ответов.

С уважением, Владимир

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

32 минуты назад, ДядяВован сказал:

Кстати, не трать время зря.
Обычной практикой в программировании является написание dummy function. Всяких шаблонов/заглушек.

Нет так дело не пойдёт. Данный код нужно записать сейчас в первую очередь и только потом дальше без этого работать ничего не будет (я про индикацию на семисегментниках сейчас говорю). 

Есть у меня ещё одна мысль как можно записать перевод чисел будет время попробую.

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

1 час назад, donec сказал:

Все расчеты в МК ведутся в hex,

Все расчёты в МК ведутся в двоичном формате. Остальное - интерпретация и преобразование. Хранить можно где угодно, делать - аналогично. Любой регистр, любой адрес памяти в полном распоряжении программиста. МК тем и хорош. Лучше всего исполнять это на ассемблере, но и Си тоже даёт возможность развернуться.

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

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

Есть у меня ещё одна мысль

Если вы не хотите разбираться в том на что вам указывают, то остаётся либо найти готовое, либо дождаться. На другое вы не способны.

Удачи.

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

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

Числа от плеера приходят в таком формате 00000C2E

		long int iii;
		char text[] = "00000C2E\r\n";
    		LCD_String(text);
    		LCD_Command(0xC0);		// в начало 2-й строки
		iii = strtol(text, NULL, 16);	// это для МК
		sprintf(str, "%d", iii);	// это для экрана
		LCD_String(str);

 

Безымянный5.png

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

Ладно тогда попробую всё вместе с народом разобраться ещё раз с дисплеем может здесь что получится по итогу. Со схемой там впринцепи понятно я уже делал ранее схему.

2071374645_MP3PlayerBT201.JPG.ca61c5d8ede85ff39cec56c9300a2fae.JPG

На дисплей конечно информации можно больше вытащить, но как я уже говорил ранее проблема в коде. Сейчас ещё раз прошёлся по коду дисплея и выявил и устранил целый ряд ошибок, но однако одна всё же осталась и не понятно чего от меня хочет студия. Я всё же выложу сюда сейчас код по дисплею и скрин ошибки.

Думаю вместе можно будет всё же решить эту проблему.

Вот скрин непонятной никаким боком ошибки

Clip21.jpg.5b69f552cf2a28ef536d6dd34b144dd9.jpg

Далее собственно сам код дисплея. Это всё было взято из примера работы с дисплеем.

#define MAIN_H_

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#define LCD_H_

#define LCD_DDR DDRD
#define LCD_PORT PORTD
#define LCD_PIN PIND

#define DATA 0xF0
#define RS PD2
#define E PD3

#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; //выставить значение на пины управления дата битами
	asm("nop"); //пропуск такта
	E0; //линию Е в 0
}

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

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);
	
	//send_byte(0b01000001,1); //A
	//send_byte(0x41,1); //A
	//send_byte('A',1);
	lcd_str("count=");
	lcd_pos(1,2);
	lcd_str("HOLa Amgos!");
}

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 lcd_num(uint8_t num, uint8_t line, uint8_t pos)
{
	char buf[4];
	
	utoa(num, buf,10);
	lcd_pos(line, pos);
	lcd_str("   ");
	lcd_pos(line, pos);
	lcd_str(buf);
}

int main(void)
{
	lcd_ini();
	uint8_t count=0;
	while(1)
	{
		_delay_ms(500);
		count++;
		icd_num(count, 0,6);
	}
}

Этот код был написан под ATMEGA8. Пока просто нужно запустить сам дисплей и попробовать вывести на него хоть что то. Например какие нибудь символы из этого примера. А далее уже будет понятно как с дисплеем работать.

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

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

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

  • Сообщения

    • Здравствуйте . Вот нашёл похожую тему ... Я всё борюсь с магнитофоном СКИФ М-310С-2 (мой любимый старичёк, ещё работает). У меня вопрос следующий : как можно отстроить ГСП операясь только на напряжения (осцилографа к сожелению ни имею). Вообще неисправность : записанные на данном аппарате кассеты звучат без показаний индикации и грязное звучание. Хотя сам процесс записи - звук кристально чистый и индикаторы показывают настроенный уровень. Что касается других кассет которые записаны на проффесиональных дэках - там всё чётко, хороший звук, мощь, идикация ..... Всё как доктор прописал. Скажу ещё одну вещь. Менял головки универсальную и стирающую , вероятно накрутил подстроечники .
    • Меня просто смутило Raa.  У меня кстати тут несколько поменялось техническое задание. Воткнули с тестем вместо ГУ-50 КТ-88 через переходники и звук вроде как больше понравился. Ну и порешали, что лучше с ними звучит. В общем, конечный вариант собираю на КТ-88. В целом их и параллелить-то необязательно. Есть более мощные КТ-150, но просто стратегический запас КТшек уже есть в наличии, поэтому решили на них
    • Щуп Р6100 для осциллографа с высокоомным входом
    • Что конкретно не нравиться, покажи, чтобы не испепелить хоть одну плату
    • Автору искать нормального мастера для его хотелок. Нужно понимать что, куда и как делать. И тогда все осуществимо. В молодости (по заказам товарищей) передние панели от тела магнитофонов кабелем относил на ДВА МЕТРА (естественно с доработкой аппаратов) и все стабильно работало годами.  И никакие твердотельные реле там даром не нужны. С такими бестолковыми экспериментами можно и аппарат убить. Единственный вариант это к толковому мастеру.   
    • Почему то думал, что там РК 50. Из него и мастырил щуп для С1-49. Сигналы 133и 176 серий хватало посмотреть.
    • Смысл отвода витков таков что я не знаю материала сердечника точно, и поэтому в программе тяжело рассчитать, а с помощью отмотки витков можно узнать насыщение сердечника тем самым подобрать оптимальное их количество... Клетка на осциллографе 0,5 вольта.. резистор в первичке Если не ошибаюсь 1 ом, амплитуда 0,6 в, тогда получается ток 0,6 А на холостом...   Антоха Спасибо посмотрю видео
×
×
  • Создать...