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

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


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

7 часов назад, donec сказал:

А в каком виде здесь число представленное строкой "М1+00000091\r\n"?

В шестнадцатиричном, и что?

7 часов назад, donec сказал:

для чего эти 145, просто  для того чтобы знать что в десятичном виде это 145? 

Ага. Многим так удобнее. Не у всех ещё в ходе накопления опыта отросло на руках по 8 пальцев :)

7 часов назад, donec сказал:

В МК это 0х91, и он с 0х91 работает

А я утверждаю, что в МК это 145 (десятичное), и со 145 он работает ;)

7 часов назад, donec сказал:

Это-же все условности

Тогда о чём всё, что выше?!

7 часов назад, donec сказал:

Или хранить будут в памяти как 0х145

Ну вот такого извращения, по-моему, никто не предлагал и не предполагал.

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

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

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

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

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

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

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

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

Ага. Многим так удобнее

Ну удобнее дерзайте. Только выхлопа что-то не видать

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

Тогда о чём всё, что выше?!

Ну с hex числом же разобрались, а если еще немного подумать, то просветление придет.

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

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

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

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

10 часов назад, donec сказал:

вы  не понимаете о чем речь

Скорее всего так и есть, действительно не понимаю.
Предпочитаю для программирования МК ассемблер (хотя есть ЛБП для которого писал FW на Си) и прекрасно использую константы в десятичном виде. При этом не понимаю причем здесь двоично-десятичная арифметика :unknw: Которая необходима только лишь, когда мы специально (для определенных целей) кодируем одну десятичную цифру четырьмя битами.

Вот фрагмент кода от воротной автоматики, в какой системе счисления удобнее, в той и представлено значение.
Почему я должен использовать только hex, вообще без понятия :unknw:

Спойлер
; ======== для временных интервалов =========
.equ    c10sec          = 159   ; начальное значение счетчика
.equ    cActP           = 180   ; начальное значение периода активности (30 мин)
.equ    cCodeTime       =  40   ; начальное значение периода набора кода (~2,5 сек)
.equ    cIdleCfg        =  19   ; начальное значение периода бездействия в конфиге (~3 мин)
.equ    cPauseCnt       =  25   ; период частичной остановки (~1,5 с)

; ================ EEPROM =================
.equ    cEEmaxWR        = 0xFFFF        ; макс. количество обновлений eeprom
.equ    cParamED        = 16            ; количество редактируемых параметров
.equ    cParCounter     = 13            ; номер параметра счетчика циклов (считая от F1)

;============== коды ошибок =================
.equ    cNoErr          = 0          ; нет ошибок
.equ    cErrCrc         = 1          ; ошибка CRC данных в eeprom
.equ    cErrEEProm      = 2          ; ошибка eeprom (возможно не прошита или превышено циклов перезаписи)

; ========= входной регистр ===============
.equ    cBitC1          = 0             ; датчик C1
.equ    cBitPOpn        = 1             ; частично открыть
.equ    cBitOpen        = 2             ; открыть / пошаговое управление
.equ    cBitClose       = 3             ; закрыть
.equ    cBitStop        = 6             ; полный стоп
.equ    cBitC2          = 7             ; датчик C2

; =========================================
.equ    cKesS           = 0b00000001    ; код кнопки "S"
.equ    cKesR           = 0b00000010    ; код кнопки "R"
.equ    cKesM           = 0b00000100    ; код кнопки "-"
.equ    cKesP           = 0b00001000    ; код кнопки "+"
.equ    cLPMask         = 0b00010000    ; маска длит. нажатия S и R

.equ    cLoadBeep       =   5           ; длительность звука при включении
.equ    cStartBeep      =  50           ; длительность звука при запуске цикла
.equ    cErrBeep        = 200           ; длительность звука при ошибке 1c
.equ    cKeyBeep        =   3           ; длительность звука нажатия
.equ    cLKeyBeep       =  10           ; длительность звука удержания
.equ    cSaveBeep       =  25           ; длительность звука сохранения параметров

.equ    cDotMsk         = 0b01000000    ; маска добавления точки к коду символа
.equ    cFlMsk          = 0b10000000    ; маска признака мигания символа
.equ    cSymbMsk        = ~(cDotMsk + cFlMsk); маска выделения кода символа

; ========= коды символов ===========
.equ    cCh0     = 0x00
.equ    cCh1     = 0x01
.equ    cCh2     = 0x02
.equ    cCh3     = 0x03
.equ    cCh4     = 0x04
.equ    cCh5     = 0x05
.equ    cCh6     = 0x06
.equ    cCh7     = 0x07
.equ    cCh8     = 0x08
.equ    cCh9     = 0x09
.equ    cChA     = 0x0A
.equ    cChB     = 0x0B
.equ    cChC     = 0x0C
.equ    cChD     = 0x0D
.equ    cChE     = 0x0E
.equ    cChF     = 0x0F
.equ    cChM1    = 0x10         ; символ вращения мотора
.equ    cChM2    = 0x11         ; символ вращения мотора
.equ    cChM3    = 0x12         ; символ вращения мотора
.equ    cChM4    = 0x13         ; символ вращения мотора
.equ    cChM0    = 0x14         ; символ мотора в паузе
.equ    cChP     = 0x15
.equ    cChSpc   = 0x16
.equ    cChTire  = 0x17
.equ    cChOpen  = 0x18         ; символ открытого состояния
.equ    cChPOpn  = 0x19         ; символ частично открытого состояния
.equ    cChClose = cChTire      ; символ закрытого состояния

 

 

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

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

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

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

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

@ДядяВован  Цитатка " Предпочитаю для программирования МК ассемблер " 

Я оть боялся этого Аесмблёра не прикаяного   как огня :blush:

А сейчас бодаюсь с  Асемблёром успешно без пол литры  :lol:

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

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

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

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

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

17 часов назад, donec сказал:

как разберешься продолжим...

uint32_t HexStrToUint32(uint8_t *str)
{
	uint8_t s;
	uint32_t value = 0;
	//
	s = *(str++);
	while (s)
	{
		value <<= 4;
		if ((s > 0x2F) && (s < 0x3A))
			value += (s - 0x30); 
		else
			if ((s > 0x40) && (s < 0x47)) 
				value += (s - 0x41 + 10);
		s = *(str++);	
	}
	return value;
}

 

С этим без объяснений и подробнейших комментариев что и куда девается и откуда что берётся не разберёшься никогда.

@korsaj, @bulat943 По поводу функции перевода попробовал записать, но ожидаемого результата я так и не получил.

Спойлер
                //7  268435456
				if(rx_buf[3]== 'A')
				{
					ind7 = 10*268435456;
				}
				else if(rx_buf[3]== 'B')
				{
					ind7 = 11*268435456;
				}
				else if(rx_buf[3]== 'C')
				{
					ind7 = 12*268435456;
				}
				else if(rx_buf[3]== 'D')
				{
					ind7 = 13*268435456;
				}
				else if(rx_buf[3]== 'E')
				{
					ind7 = 14*268435456;
				}
				else if(rx_buf[3]== 'F')
				{
					ind7 = 15*268435456;
				}
				else
				{
					ind7 = rx_buf[3]*268435456;
				}
				
				//6  16777216
				if(rx_buf[4]== 'A')
				{
					ind6 = 10*16777216;
				}
				else if(rx_buf[4]== 'B')
				{
					ind6 = 11*16777216;
				}
				else if(rx_buf[4]== 'C')
				{
					ind6 = 12*16777216;
				}
				else if(rx_buf[4]== 'D')
				{
					ind6 = 13*16777216;
				}
				else if(rx_buf[4]== 'E')
				{
					ind6 = 14*16777216;
				}
				else if(rx_buf[4]== 'F')
				{
					ind6 = 15*16777216;
				}
				else
				{
					ind6 = rx_buf[4]*16777216;
				}
				
				//5  1048576
				if(rx_buf[5]== 'A')
				{
					ind5 = 10*1048576;
				}
				else if(rx_buf[5]== 'B')
				{
					ind5 = 11*1048576;
				}
				else if(rx_buf[5]== 'C')
				{
					ind5 = 12*1048576;
				}
				else if(rx_buf[5]== 'D')
				{
					ind5 = 13*1048576;
				}
				else if(rx_buf[5]== 'E')
				{
					ind5 = 14*1048576;
				}
				else if(rx_buf[5]== 'F')
				{
					ind5 = 15*1048576;
				}
				else
				{
					ind5 = rx_buf[5]*1048576;
				}
				
				//4  65536
				if(rx_buf[6]== 'A')
				{
					ind4 = 10*65536;
				}
				else if(rx_buf[6]== 'B')
				{
					ind4 = 11*65536;
				}
				else if(rx_buf[6]== 'C')
				{
					ind4 = 12*65536;
				}
				else if(rx_buf[6]== 'D')
				{
					ind4 = 13*65536;
				}
				else if(rx_buf[6]== 'E')
				{
					ind4 = 14*65536;
				}
				else if(rx_buf[6]== 'F')
				{
					ind4 = 15*65536;
				}
				else
				{
					ind4 = rx_buf[6]*65536;
				}
				
				//3  4096
				if(rx_buf[7]== 'A')
				{
					ind3 = 10*4096;
				}
				else if(rx_buf[7]== 'B')
				{
					ind3 = 11*4096;
				}
				else if(rx_buf[7]== 'C')
				{
					ind3 = 12*4096;
				}
				else if(rx_buf[7]== 'D')
				{
					ind3 = 13*4096;
				}
				else if(rx_buf[7]== 'E')
				{
					ind3 = 14*4096;
				}
				else if(rx_buf[7]== 'F')
				{
					ind3 = 15*4096;
				}
				else
				{
					ind3 = rx_buf[7]*4096;
				}
				
				//2  256
				if(rx_buf[8]== 'A')
				{
					ind2 = 10*256;
				}
				else if(rx_buf[8]== 'B')
				{
					ind2 = 11*256;
				}
				else if(rx_buf[8]== 'C')
				{
					ind2 = 12*256;
				}
				else if(rx_buf[8]== 'D')
				{
					ind2 = 13*256;
				}
				else if(rx_buf[8]== 'E')
				{
					ind2 = 14*256;
				}
				else if(rx_buf[8]== 'F')
				{
					ind2 = 15*256;
				}
				else
				{
					ind2 = rx_buf[8]*256;
				}
				
				//1  16
				if(rx_buf[9]== 'A')
				{
					ind1 = 10*16;
				}
				else if(rx_buf[9]== 'B')
				{
					ind1 = 11*16;
				}
				else if(rx_buf[9]== 'C')
				{
					ind1 = 12*16;
				}
				else if(rx_buf[9]== 'D')
				{
					ind1 = 13*16;
				}
				else if(rx_buf[9]== 'E')
				{
					ind1 = 14*16;
				}
				else if(rx_buf[9]== 'F')
				{
					ind1 = 15*16;
				}
				else
				{
					ind1 = rx_buf[9]*16;
				}
				
				//0  0
				if(rx_buf[10]== 'A')
				{
					ind0 = 10;
				}
				else if(rx_buf[10]== 'B')
				{
					ind0 = 11;
				}
				else if(rx_buf[10]== 'C')
				{
					ind0 = 12;
				}
				else if(rx_buf[10]== 'D')
				{
					ind0 = 13;
				}
				else if(rx_buf[10]== 'E')
				{
					ind0 = 14;
				}
				else if(rx_buf[10]== 'F')
				{
					ind0 = 15;
				}
				else
				{
					ind0 = rx_buf[10];
				}
				
				dec = ind7+ind6+ind5+ind4+ind3+ind2+ind1+ind0;

 

 

 

Вроде бы ничего сложного всё должно быть как то так, но оно по неизвестной причине не работает.

Портянки под спойлер прячь

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

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

оно по неизвестной причине не работает.

Следующий этап в программировании называется отладка.

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

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

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

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

Вообще не то!

Надо получить число,а уже потом из него выделять единицы-десятки-сотни и т д (только зачем это надо мне не понятно)

Например-

3 часа назад, tifaso сказал:
ind7 = 10*268435456;

я нигде не говорил что надо умножать на такое большое число,надо умножить на 16

А вот код от donec который вы цитировали я подробно объяснял здесь

 

8 часов назад, CruelAsm сказал:

Не у всех ещё в ходе накопления опыта отросло на руках по 8 пальцев

Это как? например модуль выдал что играет  "номер песни 0000F9EC",как на 8-ми пальцах понять какой номер песни в привычном десятичном виде?

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

3 hours ago, tifaso said:

по неизвестной причине не работает.

Когда используете значения rx_buf[] для переменных ind, надо вычитать 48 из буфера, потому то там лежат символы, а не числа. Например, 

ind1 = (rx_buf[9]-48) * 16;

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

53 минуты назад, bulat943 сказал:

Например-

4 часа назад, tifaso сказал:
ind7 = 10*268435456;

я нигде не говорил что надо умножать на такое большое число,надо умножить на 16

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

40 минут назад, Yurkin2015 сказал:

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

ind1 = (rx_buf[9]-48) * 16;

Не будет оно так работать. Ведь в массиве hex число, а там могут появится и буквы и как тогда ты действовать будешь?

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

Тебе русским языком говорят что там не нех число,а строка!!! В строке могут быть и числа,и знаки,и буквы

Каждому знаку строки есть ASC код,число 0 начинается с 48,потому и отнимаем 48

 

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

Вот статья где говорится что нужно работать со степенями

ну и статья... например такое-

Цитата

Двоичное число 1111 соответствует 16 в десятичной системе

 

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

Лучше Русским языком скажите tifaso, что программировать ему еще очень рано на любом языке. Он вообще не понимает о чем речь, а Ваши термины его только путают еще больше и пугают. Дайте ему какие-нибудь брошюрки по программированию и законсервируйте тему на пол-годика. Пусть читает!:)

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

Он и их не прочитает... Ему русским языком говорят что с модуля приходит строка,а не переменная,а он все равно гнет свое-

6 часов назад, tifaso сказал:
else
				{
					ind6 = rx_buf[4]*16777216;
				}

ему не понять что если rx_buf[4]="6" то rx_buf[4]*16777216 на самом деле будет 54*16777216 а не 6*16777216 как он думает...

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

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

ему не понять

Это потому, что он вообще ничего не знает про программирование и только краем уха слышал, что Си проще Ассма. Теперь он "плавает" в терминах. Данные в ячейке массива одинаковые, но последующие представления их (char, hex, int) вводят его в ступор. А это все от незнания основ программирования. Вы себе головы разобьете объясняя ему, но пока готовый проект не напишете, дело с места не сдвинется.

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

56 минут назад, bulat943 сказал:

если rx_buf[4]="6" то rx_buf[4]*16777216 на самом деле будет 54*16777216 а не 6*16777216

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

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

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

на дисплее совершенно не то что хотел увидеть получаешь

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

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

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

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

По поводу функции перевода попробовал записать, но ожидаемого результата я так и не получил

У вас почти получилось, хоть и сделали через часть тела для сидения, но все же.

Первая вам рекомендация - сделайте это отдельной функцией (изучите как функции пишутся). Затем сделайте только для одного элемента массива. А затем изучите что такое цикл и сделайте вызов функции для перевода одного символа в цикле.

Так что жду от вас объявление функции и ее вызов. Аргумент функции - элемент массива (символ). А результат число от 0 до 15

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

@tifaso  в настоящее время ты пытаешься надеть штаны через голову.

Изменено пользователем ДядяВован

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

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

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

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

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