Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



PZEM-004T

Сообщений 1 страница 30 из 133

1

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

0

2

olegkaras написал(а):

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

https://github.com/olehs/PZEM004T

0

3

Забыл сказать микросхема на плате V9881D раньше продавали с другим типом микросхемы.

0

4

Даташит у V9881D весьма объемный, но достаточно внятный... ;)

UPD.
Скачал даташит, завтра полистаю поточнее.
Сегодня некогда будет...

Отредактировано Nord (2019-06-10 18:08:13)

0

5

В общем запустил я эту программку PZEM014-Master и запилинговал что происходит в компорте , программа дает запрос  F8 04 00 00 00 0A 64 64 , в ответ получает  F8 04 14 09 4D 00 00 00 00 00 00 00 00 00 00 00 00 01 F4 00 00 00 00 63 05 - осталось разобраться где тут вольты, амперы итд. Может кто расскажет где чего.

Запрос:10.06.2019 21:16:26.79864 (+0.2031 seconds)

F8 04 00 00 00 0A 64 64                                                                                       

Ответ:10.06.2019 21:16:26.82964 (+0.0313 seconds)

F8 04 14 08 E7 00 77 00 00 00 BA 00 00 00 1B 00 00 01 F4 00 45 00 00

Отредактировано olegkaras (2019-06-10 20:19:21)

+1

6

olegkaras написал(а):

запилинговал

пилинг
Можно было datasheet прикрепить, хотя бы.

0

7

Andrusha написал(а):

V9881D

Andrusha написал(а):

пилинг
Можно было datasheet прикрепить, хотя бы.


Даташит

Отредактировано olegkaras (2019-06-10 21:09:33)

0

8

Вот у китайца так написано:

"Например, мастер отправляет следующую команду (код проверки CRC заменен на 0xHH и 0xLL, то же самое ниже)
0x01 + 0x04 + 0x00 + 0x00 + 0x00 + 0x0A + 0xHH + 0xLL
Означает, что мастер должен считывать 10 регистраторов с slave адресом 0x01, а начальный адрес регистратора 0x0000
Правильный ответ от раба:
0x01 + 0x04 + 0x14 + 0x08 + 0x98 + 0x03 + 0xE8 + 0x00 + 0x00 + 0x08 + 0x98 + 0x00 + 0x00 + 0x00 + 0x00 + 0x00 + 0x00 + 0x01 + 0xF4 + 0x00 + 0x64 + 0x00 + 0x00 + 0xHH + 0xLL
Приведенные выше данные показывают
(4-5) L напряжение 0x0898, преобразовано в десятичное 2200, дисплей 220,0 в
(6-7)L ток 0x000003E8, преобразованный в десятичный 1000, дисплей 1.000A
(8-11)Мощность l-0x00000898, преобразована в десятичную-2200, дисплей 220,0 Вт
(12-15) L энергия 0x00000000, преобразована в десятичный 0, дисплей 0 Вт · ч
Частота l-0x01F4, преобразованная в десятичную-500, дисплей 50,0 Гц
L коэффициент мощности 0x0064, преобразованный в десятичный 100, дисплей 1,00
L сигнал тревоги 0x0000, означает, что сила тока ниже порога сигнала тревоги"                                                           

из выше сказанного я правильно нарисовал местоположение данных ?
               
http://qps.ru/jNznP

Отредактировано olegkaras (2019-06-10 22:53:29)

0

9

olegkaras написал(а):

из выше сказанного я правильно нарисовал местоположение данных ?

Очень даже похоже на истину...
Внешние приборы и изменение входных параметров помогут.
Значения будут меняться. Расшифровываем и сравниваем с внешними приборами.
Точность на пятом месте - главное правильно отловить.

Почему-то сразу подумалось, что эта V9881D прошита так, чтоб как-то эмулировать чип, устанавливаемый ранее.
Чтоб не слишком отпугивать потенциальных покупателей... ;)

Отредактировано Nord (2019-06-10 23:00:12)

0

10

Мне не понятна эта строчка вроде как много нулей - L ток 0x000003E8, преобразованный в десятичный 1000, дисплей 1.000A

0

11

olegkaras написал(а):

Мне не понятна эта строчка вроде как много нулей

V9881D - 16-разрядный чип.
Надо плясать в его понимании от этого... ;)
Просто примите эти "нули" как разделители.

0

12

Как вот эту строку F8 04 00 00 00 0A 64 64  выдать микроконтролером по UART ?

0

13

Для начала, я думаю, нужно изучить ЮАРТ. Разобраться с командами, понять как отправляются, и как принимаются данные. Потом подключить микроконтроллер к компьютеру, и научиться передавать и принимать данные. После этого изучить даташит на ваш девайс, если надо то перевести. Приходилось мне и с китайского переводить. Гугл довольно адекватно переводит. Понять какие команды для чего. Потом уже подключаете устройство к компьютеру, и пробуете все эти команды. Описание с Али тут не прокатит. Или вы хотите сразу готовый код?

0

14

olegkaras написал(а):

Как вот эту строку F8 04 00 00 00 0A 64 64  выдать микроконтролером по UART ?

Создать строку из 8 символов.
Dim stroka * 8

В каждую позицию строки занести значение.
...
char = Chr(...)
INSERTCHAR stroka, pos, char
...

Передать строку.
Print stroka

0

15

Nord написал(а):

Создать строку из 8 символов.
Dim stroka * 8

В каждую позицию строки занести значение.
...
char = Chr(...)
INSERTCHAR stroka, pos, char
...

Передать строку.
Print stroka

Так шо ли ?

'F8 04 00 00 00 0A 64 64

                    ' Создать строку из 8 символов.
Dim stroka * 8
'В каждую позицию строки занести значение.
...
Char = Chr(f8)
Insertchar Stroka , 1 , Char

Char = Chr(04)
Insertchar Stroka , 2 , Char...

Char = Chr(00)
Insertchar Stroka , 3 , Char

Char = Chr(00)
Insertchar Stroka , 4 , Char

Char = Chr(00)
Insertchar Stroka , 5 , Char

Char = Chr(0a)
Insertchar Stroka , 6 , Char

Char = Chr(64)
Insertchar Stroka , 7 , Char

Char = Chr(64)
Insertchar Stroka , 8 , Char

'Передать строку.
Print Stroka

0

16

Можно так
Printbin &HF8 ; &H04 ; &H00 ; &H00 ; &H00 ; &H0A ; &H64 ; &H64 ;

0

17

Оба варианта рабочие.

Первый я бы сделал в цикле, а в качестве исходных данных использовал массив из 8 чисел.
Удобство в том, что массив можно перезаписать перед формированием строки.

Второй вариант можно развить использованием нескольких строк Printbin с разными значениями.

0

18

Nord написал(а):

Оба варианта рабочие.

Первый я бы сделал в цикле, а в качестве исходных данных использовал массив из 8 чисел.
Удобство в том, что массив можно перезаписать перед формированием строки.

Второй вариант можно развить использованием нескольких строк Printbin с разными значениями.

При компиляции вашего примера - error 46;93;31;124

0

19

olegkaras написал(а):

При компиляции вашего примера - error 46;93;31;124

Я примеров не давал, я предлагал концепцию для решения. ;)

Ошибку 124 идентифицировать не удалось - такой в Справке нет... ;)
Все остальное указывают на "букет" несоответствий типов данных.
Проверить не могу, не дома... ;)

Отредактировано Nord (2019-06-11 21:41:10)

0

20

Nord написал(а):

Второй вариант можно развить использованием нескольких строк Printbin с разными значениями.

Я делал в виде подпрограммы.

Код:
Transmit:
Printbin &H7E ; &HFF ; &H06 ; Byte4 ; &H00 ; Byte6 ; Byte7 ; &HFE ; Byte9 ; &HEF ;
Return


Меняю в программе значение нескольких байт, и переход к подпрограмме отправки. Код экономится.

+1

21

Как эту переменную
Const Usart_0_input_const_size_buffer = 250
Dim Temp_usart_0_input_buffer_byte(usart_0_input_const_size_buffer) As Byte
преобразовать в строку , или как из нее вытащить определенные данные ? 
В протеусе эта переменная имеет примерно такое значение
TEMP_USART_0_INPUT_BUFFER_BYTE = 248 4 20 8 231 0 119 0 0 0 186 0 0 0 27 0 0 1 244 0 69 0 0 248 4 20 8 231 0 119 0 0 0 186 0 0 0 27 0 0 1 244 0 69 0 0 0 0 0 0

или
TEMP_USART_0_INPUT_BUFFER_BYTE = 0xF8 0x04 0x14 0x08 0xE7 0x00 0x77 0x00 0x00 0x00 0xBA 0x00 0x00 0x00 0x1B 0x00 0x00 0x01 0xF4 0x00 0x45 0x00 0x00 0xF8 0x00xE7

Отредактировано olegkaras (2019-06-13 20:22:17)

0

22

olegkaras написал(а):

Как эту переменную преобразовать в строку , или как из нее вытащить определенные данные ?

Операторы работы со строками
Читаем про Split

Прав был Александр... Кто это читает ..?

+1

23

Nord написал(а):

Операторы работы со строками
Читаем про Split

Прав был Александр... Кто это читает ..?

В этом примере строка разбивается -Dim Instring As  String * 15 , а мне нужно разбить Dim Ar(5) As Byte , или я чего то не понял ? поясните пожалуйста  :question:
Split - разбивает строку на элементы массива.
Dim Instring As  String * 15
Dim Ar(5) As Byte
Dim count As Byte
Instring = “11,22,33,44,55“
count = Split( Instring , Ar(1) , ",")  ‘ результат:
        count = 5
        Ar(1) = 11
        Ar(2) = 22
        Ar(3) = 33
        Ar(4) = 44
        Ar(5) = 55

0

24

В одном примере мастер сверлит отверстие перфоратором Makita, а у вас - Bosch...
Вывод - у вас просверлить не получится ? ;)

Вы пытались разобраться в примере ?
Там - "пример", а не готовый "кирпичик"...
Кирпичей на все случаи не уготовишь... ;)

Цитирую (оттуда же) то, что вы не дочитали:

Количество элементов массива должно быть не меньше искомого количества значений в строке, «излишки» будут проигнорированы.
При обнаружении пустых данных будет создан пустой элемент. Таким образом, "11,22,33,,55" позволит создать 5 элементов. Элемент 4 будет пустым.

0

25

Если делаю так - все компелится но Ar имеет значение нуль.
Count = Split(temp_usart_0_input_buffer_byte(usart_0_input_const_size_buffer) , Ar(1) , ",")
Если так
Count = Split(temp_usart_0_input_buffer_byte , Ar(1) , ",")
баском ругается на эту строчку - эррор 261

0

26

Подсказываю...
У вас строка из 26 (считаю по HEX) элементов...
Разделителем является "пробел"...

Если строка без разделителя, то работайте с Mid.

0

27

olegkaras написал(а):

Если делаю так - все компелится но Ar имеет значение нуль.
...
Если так, баском ругается на эту строчку - эррор 261

Попробуйте укоротить имя строковой переменной. ;)

0

28

Посмотри пожалкйста в "живую"

0

29

Посмотрел...
Долго думал...
Коньяк закончился... ;)

Если честно, то не понимаю таких "этажерок"...
Вы используете Mega128 - неужели его ресурсов не хватает на банальную обработку длинной строки через UART ? ;)

Определите буфер достаточной размерности, принимайте туда строку и корячьте её хоть побитно...
Принимаете уверенно ?
Уверены в качестве и правильности ?

Про "раскорячить" - ранее было много сказано... ;)

0

30

olegkaras написал(а):

Посмотри пожалкйста в "живую"

Сегодня еще раз посмотрел.
Без подсказок и комментариев автора что-то понять сложно, к сожалению... ;)

Сложилось впечатление, что хотите получить все и сразу.
Делайте поэтапно.
Уйдите от подключаемых модулей - они для вашего случая совсем не нужны.
Уверен, что программа кастрируется и станет более понятной не только вам, но и посторонним. ;)
А пока - понять кашную кашу крайне сложно... ;)

0