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

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


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

@korsaj  Если уж модуль подделка ,  то что он получит то , снова  оно не рабоатет  ...  ??? 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

которую я предлагаю вам заполнить исходя из того что вы писали выше.

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

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

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

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

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

@tifaso По  ходу прийдётся туточки всей братвой,   делать  для тебя видеоурок  :moil:

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

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

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

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

как её заполнять?

Смотрите. У функции есть аргумент (char с), вы имеете внутри функции и это будет символ (пусть будет '9', не путайте с числом). Теперь нужно из этого символа получить число и вернуть из функции (return chislo). За вами задача написать как вы (с) преобразует в число.

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

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

Теперь нужно из этого символа получить число и вернуть из функции (return chislo). За вами задача написать как вы (с) преобразует в число.

Вот этого как то не понял. Из функции нужно вывести полученное число это понятно, но что именно и как должна выглядеть функция. Нам же нужно каким то образом передать из массива данные в функцию для перевода в десятичное число и потом уже с данным числом уже работать далее в основной программе.

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

В 03.05.2024 в 21:22, bulat943 сказал:

если меньше 65 то отнимаем 48 иначе отнимаем 55

char CharToInt(char c){

if (c<65) c=c-48 else c=c-55;

}

-что-то типа такого :)

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

А ничего, что в строках передаются данные в hex, а не int? Tifaso опять поплывет.

Может сразу if (c>0x2F II c<0x2B) c=c-0x30, дальше нужно пропустить "мертвые" символы и открыть следующий диапазон if (c>0x40 II c<0x47) c=c-0x37?

Так можно получить от 0 до 15.

А tifaso, будет сидеть и ждать готовенького.

 

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

Без понятия как вернуть результат,только изучаю си,сейчас погуглю сам (но думаю return c,но мало ли...)

@Геннадий "мертвые " символы все равно не передаются ,но наверно можно и так

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

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

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

Спойлер
#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>
#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;
volatile ind7=0;
volatile ind6=0;
volatile ind5=0;
volatile ind4=0;
volatile ind3=0;
volatile ind2=0;
volatile ind1=0;
volatile ind0=0;
volatile dec=0;
volatile chl=0;

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);
}

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");
			lcd_pos(0,10);
			lcd_str("BT201");
		}
		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");
			lcd_pos(0,10);
			lcd_str("BT201");
		}
		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");
			lcd_pos(0,10);
			lcd_str("BT201");
		}
		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");
			lcd_pos(0,10);
			lcd_str("BT201");
		}
		
		char i = 0;
		if (rx_buf[i] == 'M'){
			i++;
			if (rx_buf[i] == '1')
			{	
				LED_1_ON();
				LED_2_OFF();
				
				//7  268435456
				if (rx_buf[3]<65)
				{
					chl=rx_buf[3]-48;
				}
				else
				{
					chl=rx_buf[3]-55;
				}
				ind7 = chl*268435456;
				
				//6  16777216
				if (rx_buf[4]<65)
				{
					chl=rx_buf[4]-48;
				}
				else
				{
					chl=rx_buf[4]-55;
				}
				ind6 = chl*16777216;
				
				//5  1048576
				if (rx_buf[5]<65)
				{
					chl=rx_buf[5]-48;
				}
				else
				{
					chl=rx_buf[5]-55;
				}
				ind5 = chl*1048576;
				
				//4  65536
				if (rx_buf[6]<65)
				{
					chl=rx_buf[6]-48;
				}
				else
				{
					chl=rx_buf[6]-55;
				}
				ind4 = chl*65536;
				
				//3  4096
				if (rx_buf[7]<65)
				{
					chl=rx_buf[7]-48;
				}
				else
				{
					chl=rx_buf[7]-55;
				}
				ind3 = chl*4096;
				
				//2  256
				if (rx_buf[8]<65)
				{
					chl=rx_buf[8]-48;
				}
				else
				{
					chl=rx_buf[8]-55;
				}
				ind2 = chl*256;
				
				//1  16
				if (rx_buf[9]<65)
				{
					chl=rx_buf[9]-48;
				}
				else
				{
					chl=rx_buf[9]-55;
				}
				ind1 = chl*16;
				
				//0  0
				if (rx_buf[10]<65)
				{
					chl=rx_buf[10]-48;
				}
				else
				{
					chl=rx_buf[10]-55;
				}
				ind0 = chl;
				dec = ind7+ind6+ind5+ind4+ind3+ind2+ind1+ind0;
				
				lcd_pos(0,0);
				send_byte(rx_buf[3],1);
				lcd_pos(0,1);
				send_byte(rx_buf[4],1);
				lcd_pos(0,2);
				send_byte(rx_buf[5],1);
				lcd_pos(0,3);
				send_byte(rx_buf[6],1);
				lcd_pos(0,4);
				send_byte(rx_buf[7],1);
				lcd_pos(0,5);
				send_byte(rx_buf[8],1);
				lcd_pos(0,6);
				send_byte(rx_buf[9],1);
				lcd_pos(0,7);
				send_byte(rx_buf[10],1);
				
				lcd_pos(1,0);
				lcd_str(dec);
			}
			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");
			lcd_pos(0,10);
			lcd_str("BT201");
		}
		
		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");
			lcd_pos(0,10);
			lcd_str("BT201");
		}
	}
}

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

 

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

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

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

функцией пока не разбирался не до того

Это самые основы. Без этого "разбирательства" дело не пойдет.

Нельзя пропустить букварь и сразу перейти к написанию стихов. К сожалению.

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

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

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

без модуля есть мусор ?

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

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

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

С функцией пока не разбирался не до того.

Вот и зря, потому как "функция" есть решение вашей проблемы.

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

сейчас нужно перевести число

 

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

41 minutes ago, tifaso said:
lcd_str(dec)

Эта запись должна выдавать ошибку при компиляции.

Надо число dec сначала преобразовать в строку с помощью itoa() , а потом полученную строку передать в lcd_str(). 

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

@tifaso  кароче .. 

Давай так .. искуственно дай  данные :

Трек 

автор

исполнитель

длина  трека  

и вот на  основе сомделированого научись выводить инфу  НА  .... ДЯСПЯЙ   :P

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

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

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

инфу  НА  .... ДЯСПЯЙ

Вот именно!!!!!!!

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

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

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

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

Вот и зря, потому как "функция" есть решение вашей проблемы.

С функцией всё очень сложно. Там не понять как передать в функцию нужные данные из массива так как используется не весь массив, а только его часть и потом как из этой же функции вывести полученные данные, то есть десятичное число обратно? Так что с ней у меня врятли что то получится.

Нужно хотя бы как то число перевести в десятичное. Хотя бы обычным кодом как я делал. Но я уже не знаю что ещё может быть не так? Уже вроде всё перепробовал с разными подходами уже и как не даётся это число. Хоть ты тресни.

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

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

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

  • Сообщения

    • Почитал помогалку повнимательнее и понял, что это не мой случай. У буржуев главный канал рулится ШИМом, а мумуки на подтанцовке. Отсюда и геморр с выделением сигнала для каррент муде. В моих разработках все каналы мумуковые и разница лишь в мощности выхлопов. От 150 ватт, до  1,5 ватт и у каждого, ясен пень, своя защита.  Очевидный недостаток такого подхода, это завышенные витки в СТ тарахтелки. Поскольку частота постоянная, то при изменении входного напряжения тарахтелки в широких пределах, витки потребно выбирать для максимального напряжения, в то время как с шим каналом-для минимального. Это в теории, а на практике при сбросе-набросе нагрузки ШИМ может и при максиморуме раскрыть "варежку" на всю ширину, а сердешный влетит в насыщение, буде нет нямконтроля.  Для самовозбудной тарахтелки проблема витков решается естественным задиранием частоты тарахтения, но лично мне это не особо нравится, поскольку цепи коррекции мумук, пр изменении частоты коммутации, могут не обеспечит устойчивость во всём диапазоне нагрузок и пентератур. Кстати, и в тарахтелке с внешним управлением можно менять частоту пропорционально изменению напряжения питания, но я так не делаю по вышеупомянутой причине. А вот использование корректора, поддерживающего постоянное напряжение на входе тарахтелки, весьма перспективно, хоть и зело усложняет схему всего питальника.
    • @Lexter 1 этап - разводим плату и экспортируем в SVG     2 этап - переходим на этот сайт, загружаем нашу SVG-шку и устанавливаем следующие параметры:   3 этап - подготовка платы. Изначально промываю пемолюксом чтобы плата блестела, а после зашкуриваю мелкой шкуркой для увеличения адгезии смолы. 4 этап - закрепляю плату на стол. Заранее, на столе была напечатана рамка 60x60мм с толщиной в ~2мм.     5 этап - установка нуля и печать на плате 6 этап - снимаем стол, не открепляя плату от стола чистим и смотрим, все ли хорошо. Если нет - сдираем смолу и печатаем заново.   Удачная печать:     7 этап - отклеиваем плату, дозасвечиваем (пока неизвестно, имеет ли смысл, но раз толщина печати небольшая, имею смелость предположить что дозасветка хорошо повлияет на адгезию между медью и смолой) и травим. Кстати, дозасвечиваю просто положив плату мордой к экрану принтера.     Сейчас плата все еще травится, поэтому дополню после окончательного уничтожения ненужной меди.
    • Тороид имеет диаметр вторичной обмотки 0.7мм. Рассчитан на 12-14в с него не получится снять 4а долговременно без перегрева ?  купил у продавца он пишет что мощность тора 50вт.как то я в это не верю (марка ТТС 1406  не гуглится ) 
    • Спасибо всем , буду чёнить пробовать !
    • Необходимо спроектировать и рассчитать схему двухтактного усилителя УВЧ диапазона класса B. Если есть люди которые разбираются в этой теме и могут нормально оформить расчёт и симуляцию, то хотел бы обратиться за помощью, разумеется не за просто так,
    • Ступай туда, неведомо куда, принеси то, неведомо что!
×
×
  • Создать...