Odczyt danych z suwmiarki Parkside

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
Awatar użytkownika
Łukasz
Administrator
Posty: 667
Rejestracja: 12 lis 2011, 09:42
Lokalizacja: Zielona Góra
Kontakt:

Odczyt danych z suwmiarki Parkside

Post autor: Łukasz » 19 sty 2018, 16:49

Cześć,
próbuję rozpracować odczyt danych z suwmiarki za pomocą Arduino. Nigdy wcześniej nie zabierałem się za analizowanie i dekodowanie jakichkolwiek protokołów, dlatego próbuję zmusić do pracy gotowca, którego znalazłem w sieci:

Kod: Zaznacz cały

int i;
int sign;
long value;
float result;
int clockpin = 2;  
int datapin = 3;
unsigned long tempmicros;

void setup() {
  Serial.begin(115200);
  pinMode(clockpin, INPUT);
  pinMode(datapin, INPUT);
}

void loop () {
  while (digitalRead(clockpin)==HIGH) {} //if clock is LOW wait until it turns to HIGH
  tempmicros=micros();
  while (digitalRead(clockpin)==LOW) {} //wait for the end of the HIGH pulse
  if ((micros()-tempmicros)>500) { //if the HIGH pulse was longer than 500 micros we are at the start of a new bit sequence
    decode(); //decode the bit sequence
  }
}

void decode() {
  sign=1;
  value=0;
  for (i=0;i<23;i++) {
    while (digitalRead(clockpin)==HIGH) { } //wait until clock returns to HIGH- the first bit is not needed
    while (digitalRead(clockpin)==LOW) {} //wait until clock returns to LOW
    if (digitalRead(datapin)==LOW) {
      if (i<20) {
        value|= 1<<i;
      }
      if (i==20) {
        sign=-1;
      }
    }
  }

  result=(value*sign)/100.00;    
  Serial.println(result,2); //print result with 2 decimals
  delay(1000);
}
Suwmiarka działa na 1,5V, więc musiałem zastosować jakiś konwerter poziomów logicznych pomiędzy standardem 1,5V a 5V. Próbowałem wykorzystać popularny konwerter tego typu:
2018-01-19_153356.jpg
ale nie bardzo chciał działać (suwmiarka się zawieszała po podpięciu do niego).

Nie chcąc tracić czasu zmontowałem na szybko konwerter, który @lukg20 wykorzystał w swoim projekcie:
Obrazek

Myk z tym konwerterem jest taki, że odwraca stany logiczne (jest inwerterem). Próbując więc myśleć logicznie, pozamieniałem w kodzie wszystkie HIGH na LOW, a LOW na HIGH, otrzymując ostatecznie taki kod:

Kod: Zaznacz cały

int i;
int sign;
long value;
float result;
int clockpin = 2;  
int datapin = 3;
unsigned long tempmicros;

void setup() {
  Serial.begin(115200);
  pinMode(clockpin, INPUT);
  pinMode(datapin, INPUT);
}

void loop () {
  while (digitalRead(clockpin)==LOW) {} //if clock is LOW wait until it turns to HIGH
  tempmicros=micros();
  while (digitalRead(clockpin)==HIGH) {} //wait for the end of the HIGH pulse
  if ((micros()-tempmicros)>500) { //if the HIGH pulse was longer than 500 micros we are at the start of a new bit sequence
    decode(); //decode the bit sequence
  }
}

void decode() {
  sign=1;
  value=0;
  for (i=0;i<23;i++) {
    while (digitalRead(clockpin)==LOW) { } //wait until clock returns to HIGH- the first bit is not needed
    while (digitalRead(clockpin)==HIGH) {} //wait until clock returns to LOW
    if (digitalRead(datapin)==HIGH) {
      if (i<20) {
        value|= 1<<i;
      }
      if (i==20) {
        sign=-1;
      }
    }
  }

  result=(value*sign)/100.00;    
  Serial.println(result,2); //print result with 2 decimals
  delay(1000);
}
Coś jest jednak nie tak, bo serialmonitor wypluwa takie wartości (sama suwmiarka wskazuje 0.00):

Kod: Zaznacz cały

41.60
0.00
-245.76
-325.12
2.57
-209.93
-40.96
-83.20
-41.34
40.96
-0.01
82.56
Do Arduino trafia taki sygnał z suwmiarki (jest to już sygnał za konwerterem, czyli odwrócony w stosunku do tego, co wypluwa suwmiarka):
scope.gif
Jakieś sugestie? ;) Mnie to chyba przerasta...

Z góry dzięki za pomoc!
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Życie jest za krótkie, żeby nie majsterkować...

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
lukg20
Młodszy majsterkowicz
Posty: 16
Rejestracja: 1 paź 2017, 06:32

Re: Odczyt danych z suwmiarki Parkside

Post autor: lukg20 » 19 sty 2018, 18:06

Porównaj wykresy z mojej suwmiarki z twoimi.
Zielony: clock
Żółty: data

oscylogram.jpg

Clock (zielony), jest dokładnie zsynchronizowany z danymi. Zobacz czy mniejwięcej podobnie wygląda twój wykres z większym czasem próbkowania. Zastanawia mnie jakby narastające zbocze na twoim oscylogramie. Nie wiem czy to wina oscyloskopu, czy faktycznie masz taki sposób transmisji... Dziwne.

Za chwilę spróbuję odnaleść problem w samym kodzie, ale to może nie być takie proste, bo dla mnie to jak po Hebrajsku :)

Dobra...
w końcówce kodu masz odczyt bitu 20 który teorytycznie powinien świadczyć o znaku. Zmień go na 21. bit 23 świadczy o tym czy są to mm czy inch - u mnie nie działa.

Wydaje mi się że coś jeszcze jest nietak z interpretacją długości ramki.
Może też być zamieniony clock z data - sprawdź odwrotnie, ale przedewszystkim trzeba dojść do tego skąd te zbocza są u Ciebie. Podłączyłeś panie masę z oscyloskopu z masą Arduino :P ? Może też się okazać że Parkside ma jakiś inny nietypowy sposób komunikacji. Możesz sprawdzić to na innej suwmiarce ?

Podaj mi nazwy pinów do których podłączyłeś suwmiarkę, kwarc jaki jest w arduino, i proca, to skompiluje Ci dla testów moją wersje na Bascom - tak z czystej ciekawości.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Ostatnio zmieniony 19 sty 2018, 18:46 przez lukg20, łącznie zmieniany 1 raz.
Awatar użytkownika
Łukasz
Administrator
Posty: 667
Rejestracja: 12 lis 2011, 09:42
Lokalizacja: Zielona Góra
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: Łukasz » 19 sty 2018, 18:43

W obu miejscach zmienić na 21?

Kod: Zaznacz cały

      if (i<21) {
        value|= 1<<i;
      }
      if (i==21) {
        sign=-1;
      }
Teraz serialmonitor zwraca same 0.00.

Pozmieniałem trochę rezystory w tym Twoim konwerterze, żeby uzyskać ładniejsze prostokąty w przebiegu:
scope_19.png
(żółty clock, zielony data).

I data nadal trochę wariuje (nawet, gdy w ogóle nie dotykam suwmiarki):

https://www.youtube.com/watch?v=NQKo2JWJtgQ

To normalne, że to się tak zachowuje?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Życie jest za krótkie, żeby nie majsterkować...
Awatar użytkownika
lukg20
Młodszy majsterkowicz
Posty: 16
Rejestracja: 1 paź 2017, 06:32

Re: Odczyt danych z suwmiarki Parkside

Post autor: lukg20 » 19 sty 2018, 18:50

Pal pan gg, zaraz to ogarniemy (wysłałem Ci na maila)
Awatar użytkownika
lukg20
Młodszy majsterkowicz
Posty: 16
Rejestracja: 1 paź 2017, 06:32

Re: Odczyt danych z suwmiarki Parkside

Post autor: lukg20 » 19 sty 2018, 18:55

Wygląda na to że Parksajd ma jakiś inny protokół komunikacji. Chyba że masz Pan ustawiony inne próbkowanie dla kanału 1, a inne dla 2 :)

Napisz mi proszę których pinów używasz do data i clock, jaki jest uC, i jaki kwarc, to na szybko skompiluję Ci program w Bascom, żebyś sprawdził czy działa.
Nie wiem tylko jak zachowa się bootloader z Arduino. Tak czy owak najlepiej zapal GG
Awatar użytkownika
ethanak
Złota rączka
Posty: 761
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: ethanak » 19 sty 2018, 19:14

Mam nadzieję że efekty opublikujecie na forum? Szczerze mówiąc jestem zainteresowany odczytem danych z suwmiarki (wzrok już nie ten, i podpięcie syntezatora mowy by się przydało)...
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
Awatar użytkownika
lukg20
Młodszy majsterkowicz
Posty: 16
Rejestracja: 1 paź 2017, 06:32

Re: Odczyt danych z suwmiarki Parkside

Post autor: lukg20 » 19 sty 2018, 19:21

W bascom ze zwykłą chińską suwmiarką działa świetnie. Jeśli nie jest to dla Ciebie bareiara, to polecam.
Napewno podzielimy się wnioskami ;)
Awatar użytkownika
Łukasz
Administrator
Posty: 667
Rejestracja: 12 lis 2011, 09:42
Lokalizacja: Zielona Góra
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: Łukasz » 19 sty 2018, 19:23

@ethanak No jasne, że wrzucę działający kod ;)

@lukg20 Dla mnie Bascom to taki starohebrajski z naleciałościami greki ;)
Życie jest za krótkie, żeby nie majsterkować...
Awatar użytkownika
ethanak
Złota rączka
Posty: 761
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: ethanak » 19 sty 2018, 19:26

Bascom to dla mnie jakaś magia - zależałoby mi na tym aby ktoś opisał protokół, a ja już się zajmę podłączeniem do esp8266 i głośnika.
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
Awatar użytkownika
Łukasz
Administrator
Posty: 667
Rejestracja: 12 lis 2011, 09:42
Lokalizacja: Zielona Góra
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: Łukasz » 19 sty 2018, 19:31

Całkiem obszerny opis jest tutaj: http://www.shumatech.com/support/chinese_scales.htm

Tylko u mnie słabo z czytaniem takiego techicznego angielskiego...
Życie jest za krótkie, żeby nie majsterkować...
Awatar użytkownika
lukg20
Młodszy majsterkowicz
Posty: 16
Rejestracja: 1 paź 2017, 06:32

Re: Odczyt danych z suwmiarki Parkside

Post autor: lukg20 » 19 sty 2018, 20:11

Tak... generalnie są stosowane dwa rodzaje protokołów komunikacji w chińskich suwmiarkach. dane Binarne, lub BCD. Obydwa rodzaje wysyłają 24 bity, tyle że w wersji BCD są to paczki po 4 bity, a w tym drugim, całość w jednej ramce. Oczywiście ich znaczenie też jest nieco inne, ale mniejsza z tym... Wspólnie z Łukaszem doszliśmy do wniosku, że w przypadku jego suwmiarki mamy doczynienia z żadko spotykanym protokołem binarnym. Zarówno mój program napisany w Bascom, jak i ten na Arduino dotyczą protokołu BCD - stąd problem. Więcej na temat: http://pcbheaven.com/exppages/Digital_C ... chinesebin
Awatar użytkownika
lukg20
Młodszy majsterkowicz
Posty: 16
Rejestracja: 1 paź 2017, 06:32

Re: Odczyt danych z suwmiarki Parkside

Post autor: lukg20 » 19 sty 2018, 20:24

Nie miałem nigdy parksajda ;) Mam tanią chińską i działa świetnie.
Awatar użytkownika
Łukasz
Administrator
Posty: 667
Rejestracja: 12 lis 2011, 09:42
Lokalizacja: Zielona Góra
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: Łukasz » 19 sty 2018, 20:26

Mój parkside po takim rozsunięciu i zsunięciu ma odchyłki +/- 0,01, więc całkiem ok.
Życie jest za krótkie, żeby nie majsterkować...
Awatar użytkownika
Łukasz
Administrator
Posty: 667
Rejestracja: 12 lis 2011, 09:42
Lokalizacja: Zielona Góra
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: Łukasz » 19 sty 2018, 22:09

Nie udało się nam nic wywalczyć z odczytem pomiarów z suwmiarki Parkside. Coś tam zwraca na serial monitor, ale nie wiemy co ;)

Chciałem zrobić próbę z suwmiarką YATO YT-7201. Rozkręciłem, zrobiłem w obudowie dziurę na wyprowadzenie kabli, wlutowałem się kablami i... klops. Ta suwmiarka w ogóle nie wysyła kompletnie żadnego sygnału.
IMAG0942.jpg
No nic - chyba będę musiał kupić dokładnie taką suwmiarkę, jak ma @lukg20 (przynajmniej wiadomo, że działa;), albo całkowicie zmienić podejście do swojego projektu i zrezygnować z wykorzystania w nim suwmiarek...
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Życie jest za krótkie, żeby nie majsterkować...
Smaczek
Młodszy majsterkowicz
Posty: 38
Rejestracja: 18 sie 2016, 09:45
Lokalizacja: Zielona Góra

Re: Odczyt danych z suwmiarki Parkside

Post autor: Smaczek » 22 sty 2018, 12:28

Witam,
Temat ogarniałem dwa lata temu. Kolega poprosił, żeby zrobić mu odczyt do frezarki (3 osie) własnie na suwmiarkach.
Pierwszy problem z jakim się spotkałem, to identycznie jak u Ciebie @Łukasz. Po niekrótkiej walce, pomiarach, itd. wyszło mi, że UNO nie było w stanie nadążyć za suwmiarką ze zliczaniem impulsów. Oczywiście z wykorzystaniem przerwań. Dlatego użyłem DUE i śmiga bez problemu. Z nudów ogarnąłem również obsługę obu protokołów stosowanych w chińskich suwmiarkach. Spróbuj zatem zastosować DUE, W razie potrzeby służę pomocą (podobnie jak Ty, jestem z Zielonej Góry).
Pozdrawiam,
Tomek.
Awatar użytkownika
ethanak
Złota rączka
Posty: 761
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: ethanak » 22 sty 2018, 12:35

Czyli esp8266 (przetaktowany na 160 MHz) powinien się bez problemu wyrobić?
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
Smaczek
Młodszy majsterkowicz
Posty: 38
Rejestracja: 18 sie 2016, 09:45
Lokalizacja: Zielona Góra

Re: Odczyt danych z suwmiarki Parkside

Post autor: Smaczek » 22 sty 2018, 12:49

ethanak pisze:
22 sty 2018, 12:35
Czyli esp8266 (przetaktowany na 160 MHz) powinien się bez problemu wyrobić?
Oczywiście, że powinien :-) Samemu UNO niewiele brakowało. Jak wcześniej już napisałem, zajmowałem się tematem dosyć dawno i z tego co kojarzę to w przy dwukrotnie wyższej częstotliwości taktowania, niż w przypadku UNO, dawało by radę.
Pozdrawiam,
Smaczek.
Awatar użytkownika
ethanak
Złota rączka
Posty: 761
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: ethanak » 22 sty 2018, 13:07

Zaczyna to brzmieć ciekawie...
Pytanie: ktoś byłby zainteresowany projektem gadającej suwmiarki? Bo w sumie samemu mi się nie chce... a gadacza na esp mam i całkiem do rzeczy mówi, musiałbym tylko pozbyć się tego przetaktowania i nawet z większej baterii można by było go zasilać...
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
Awatar użytkownika
Łukasz
Administrator
Posty: 667
Rejestracja: 12 lis 2011, 09:42
Lokalizacja: Zielona Góra
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: Łukasz » 22 sty 2018, 13:10

Hm... a 16 MHz by wystarczyło? Bo docelowo miałem tam wsadzić Arduino Leonardo (ze względu na HID).

@ethanak - możesz pokazać jakiś filmik, jak ładnie Ci gada?
Życie jest za krótkie, żeby nie majsterkować...
Awatar użytkownika
ethanak
Złota rączka
Posty: 761
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: ethanak » 22 sty 2018, 13:20

Postaram się na jutro wrzucić filmik z działania omomierza. Chyba że komuś się spieszy - na github.com/ethanak/ jest wrzucona biblioteka, można to sobie skompilować pod Linuksem, tyle że jakość dźwięku bez i2s będzie gorsza. Przy i2s będzie zależeć tylko od głośnika.
Oczywiście - Ivona to nie jest, ale Ivony na mikrokontrolerze raczej nie uruchomisz ;)
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
Smaczek
Młodszy majsterkowicz
Posty: 38
Rejestracja: 18 sie 2016, 09:45
Lokalizacja: Zielona Góra

Re: Odczyt danych z suwmiarki Parkside

Post autor: Smaczek » 22 sty 2018, 13:24

Łukasz pisze:
22 sty 2018, 13:10
Hm... a 16 MHz by wystarczyło? Bo docelowo miałem tam wsadzić Arduino Leonardo (ze względu na HID).
Co prawda mam Leonardo, ale nie jestem sobie w stanie przypomnieć, czy próbowałem odczytywać za jego pomocą. Jeśli znajdę konwerter to sprawdzę.
Awatar użytkownika
Marhef
Złota rączka
Posty: 1137
Rejestracja: 18 lis 2011, 02:18

Re: Odczyt danych z suwmiarki Parkside

Post autor: Marhef » 22 sty 2018, 20:25

Panowie, nie czytałem całego wątku (brak czasu), ale jedna sugestia - jeśli chcecie dopasować poziomy logiczne, najłatwiej użyć takiego układu:
http://mirekk36.blogspot.com/2015/05/ko ... v-ttl.html
Bardzo prosty, i sprawdzony. Na 100% działa
Awatar użytkownika
ethanak
Złota rączka
Posty: 761
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: ethanak » 23 sty 2018, 11:29

@Marhef: zdaje się że to ten sam konwerter który powodował zawieszanie się suwmiarki. Tu akurat wystarczy konwersja sygnału w jedną stronę czyli zwykły tranzystor.
@Łukasz: obiecany filmik:
https://www.youtube.com/watch?v=2RrpiWzzdGY
Przepraszam za słaba jakość i o oddech na fonii, ale to tak na kolanie robione :)
BTW. dlaczego przy tagu "youtube" pokazuje mi się jakaś strona z Majsterkowa zamiast filmu?
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
Awatar użytkownika
Łukasz
Administrator
Posty: 667
Rejestracja: 12 lis 2011, 09:42
Lokalizacja: Zielona Góra
Kontakt:

Re: Odczyt danych z suwmiarki Parkside

Post autor: Łukasz » 23 sty 2018, 12:12

ethanak pisze:
23 sty 2018, 11:29
BTW. dlaczego przy tagu "youtube" pokazuje mi się jakaś strona z Majsterkowa zamiast filmu?
Coś się sypnęło z bbcode. Teraz nie mam jak zajrzeć, więc chwilowo całkiem wyłączyłem bbcode na forum. Wieczorem spróbuję naprawić :)
Życie jest za krótkie, żeby nie majsterkować...
ODPOWIEDZ

Strony partnerskie: