Вопросы по DSN-VC288

Коллеги, кто-нибудь может подсказать, какой МК используется в данном девайсе ( DSN-VC288)?
Плата выглядит вот так -


На корпусе МК “чисто”, ни единой надписи.
В “интернетах” пишут, что это либо STM8.., либо N76E..
“Вызвонил” разъём для программирования (??) - что-то не катит для STM..

В плане выводов для подключения программатора.
Пытался прицепиться к девайсу st-link- ом. Увы..

P.S. Интересуюсь в плане “вытаскивания” результатов измерений “наружу”.
Желательно UART.


Это не тот случАй.. Это всё я уже находил..
Схема не совпадает с тем, что я “вызвонил” на своём.
И “дырочек” на моём всего 6, а не 8..
На вашей фотке явно STM8S003.

По мне так смысла нет- очень низкое разрешение. Можно с выхода ОУ взять сигнал и АЦП атмеги даст лучший результат.

Да это понятно. И такое решение в “интернетах” я видел.
Но просто жалко ардуиной по воробьям. :slight_smile:
Хочется без аппаратной переделки вопрос решить.
А точности мне будет достаточно. По сути нужен почти “показометр”.

ну значит новутон у вас, как с ним работать я не знаю.

тут есть про него

Да походу не он это. Этот новутон почти один-в-один стм8.
Не вписывается по “распайке” разъёма.
Для него на программатор должен выходить RST(пин 4), а на моей плате он не выходит на разъём..

P.S. Кстати.. Для stm8 на гитхабе есть даже исходники.

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

Видимо, так и придётся сделать..
Прикручивать любимую ардуину нано. :slight_smile:

А мошт вообще PIC какой?))
Нет там рядом с лапами, что на программатор идут, диодов?

PIC это дорого))

1 лайк

Неа. На плате вообще всего один диод.
Защитный. С плюса на вход стабилизатора M5333B

Вообщем, нашёл схему и скетч для замены китайского МК на атмегу328.
Всё вроде бы неплохо получилось, но.. Не нравится приличный “дребезг” показаний.

Вот скетч -

//Автор VirtualDrive
//https://arduinocod.blogspot.com/

#include "L6Dig3x3.h"
#include <MsTimer2.h>
L6Dig3x3 disp(1, 16,15,14, 19,18,17,  2, 3, 4, 5, 6, 7, 8,9 );
void setup() {
  Serial.begin(9600);
  // put your setup code here, to run once:
  MsTimer2::set(2, timerInterrupt); // прерывание по таймеру 2 мс 
  MsTimer2::start();
  //pinMode(21, INPUT_PULLUP);// притянуть А6 к земле
  //pinMode(20, INPUT_PULLUP);// притянуть А7 к земле
}

void loop() {
 
float sensorValue = analogRead(A6);// напряжение
   sensorValue= sensorValue/6.333333333333333;// полученное число разделить
   disp.print((int)(sensorValue * 10.), 3, 0); // напечатать результат на 1 дисплей 
   disp.digit[1] |= 0x80;// зажечь точку 2 разряда 1-го дисплея
   // Serial.println(sensorValue);
    Serial.print("VOLT: ");
    Serial.println(sensorValue);
    

    float sensorValue2 = analogRead(A7);// ток
    sensorValue2=sensorValue2-14;// уберем погрешность
    float  T=sensorValue2*0.04;// полученный результат умножаем 
    if (T < 0.0) T = 0;
     disp.print2((int)(T * 100.), 3, 0);// напечатать результат на 2 дисплей 

     Serial.print("AMP: ");
     //Serial.println((int)(T * 100.));
     Serial.println(T);

    
disp.digit[5] |= 0x80;// зажечь точку 3 разряда 2-го дисплея или же по сути он же 5 разряд по счету
 
 
 delay(500);
  }
void  timerInterrupt() {// обработчик прерывания 2 мс

  disp.regen(); // регенерация индикатора

}

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

Решений может быть много разных. Зависит от того, что измеряете.
Простейшее - конденсатор на вход АЦП.
Или - пишем значения измерений в буфер. После каждого нового - буфер сдвигаем, и вычисляем среднее значение.
В любом случае , время реакции на изменение измеряемого сигнала увеличивается

Напряжение и ток высоковольного БП (напряжение - до 2500V, ток - до 500-800 mA).
Нагрузка - ламповый усилитель мощности.
Задача - получить “сглаженные” значения, вывести результат на родной дисплей DSN
и параллельно передать через serial в “контроллер управления”.

Тоже об этом подумал в первую очередь.
Может действительно, не стОит заморачиваться с софтовым решением?

P.S. Кстати, “дребезг” наблюдаю на “настольном измерении”.
При постоянном напряжении 14V и токе 180mA.
Предполагаю, что в реальном БП “дребезг” будет ещё больше.

Пробуйте.
Простейшие софтовые фильтры тоже несложно.

А примерчик не подкинете? :wink: Или хотя бы подсказку, как правильно “нагуглить”.

Так выше же привёл пример. Буфер можно переменную, можно массив - как удобнее.
У Гайвера есть об этом неплохо(наберите “цифровые фильтры”), очень доходчиво для начинающих ИМХО

Дык, самое простое

static uint16_t x = analogRead(A0);

x =( x * 3 + analogRead(A0)) / 4;
2 лайка

Чёт ничего не помогает.. Ни конденсаторы на пинах, ни плюсом к ним софтовые выкрутасы.. :frowning:
Может в коде что-то не так?

void loop() {
 
   uint16_t v = analogRead(A6);// напряжение
   v = ( v * 3 + analogRead(A6)) / 4;
   float sensorValue = v/5.632362459546925; 
   disp.print((int)(sensorValue * 10.), 3, 0); // напечатать результат на 1 дисплей 
   disp.digit[1] |= 0x80;// зажечь точку 2 разряда 1-го дисплея
    Serial.print("VOLT: ");
    Serial.println(sensorValue);
    uint16_t a = analogRead(A7);// ток
    a = ( a * 3 + analogRead(A7)) / 4;
    float sensorValue2 = a-12;// уберем погрешность
    float  T=sensorValue2*0.04;// полученный результат умножаем 
    if (T < 0.0) T = 0;
     disp.print2((int)(T * 100.), 3, 0);// напечатать результат на 2 дисплей 
     Serial.print("AMP: ");
     Serial.println(T);
     disp.digit[5] |= 0x80;// зажечь точку 3 разряда 2-го дисплея или же по сути он же 5 разряд по счету
 delay(500);
  }