DRO DIY

Na tym forum rozmawiamy o elektronice nie związanej bezpośrednio z tematem CNC

strikexp
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 105
Posty: 4690
Rejestracja: 31 mar 2017, 19:47
Lokalizacja: Warszawa

#71

Post napisał: strikexp » 20 kwie 2017, 18:33

Prędkość działania to dyskusyjny temat, nie warto go poruszać. Raczej przekracza Twoje możliwości wzrokowe wynoszące zaledwie około 25 klatek na sekundę.

Jeśli chodzi o Arduino to zawsze szuka sie gotowej biblioteki tzw library. To najszybszy i najprostrzy sposób obsługi wyświetlaczy. Im bardziej rozbudowany wyświetlacz, tym więcej zaoszczędzonego czasu.
Tutaj masz bibliotekę do wyświetlacza LCD, jeśli dobrze pamiętam to steruję nią mój wyświetlacz 2x16 znaków.
https://www.arduino.cc/en/Reference/LiquidCrystal
Inny sposób to szukanie instrukcji po polsku w google:
http://forbot.pl/blog/artykuly/programo ... lcd-id4263

Różne scalone układy sterujące (nie procesory) wynikaja przede wszystkim z konkurencji na rynku. Ale nie tylko, ponieważ wyświetlacze są różne to i sterowniki do nich muszą być różne.
Zawsze jest podział na dzieciaki-hobbyści. Dla których wydanie 5zł to sporo i będą preferować jak najtańsze układy. I zawodowców których czas jest cenniejszy niż kilkukrotnie wyższa cena.
Nie wszystkie sterowniki są faktycznie sterownikami. Wspomniany 74HC595 jest układem logicznym za około 1zł. Tak się fajnie skłąda że można go wykorzystać do stworzenia dodatkowych pinów wyjściowych, czyli np świecić diodami LED w wyświetlaczach 8-segmentowych. Minus tego taki że sposób sterowania zależy od sposobu połączeń z konkretnymi diodami LED.

[ Dodano: 2017-04-20, 18:59 ]
A tak przy okazji, szukałem wczoraj taniego wyświetlacza na aliexpress.com do innego projektu.
Znalazłem zarówno taki jak kupiłem na allegro, jak i kilka innych modeli. Interesujący jest szczególnie ten:
https://www.aliexpress.com/item/74HC595 ... 0.0.2gaMMN



Tagi:

Awatar użytkownika

pioterek
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 69
Posty: 1724
Rejestracja: 27 gru 2012, 02:40
Lokalizacja: kujawsko-pomorskie

#72

Post napisał: pioterek » 21 kwie 2017, 05:13

To może napiszę konkretnie o co mi chodzi.
czy ten układ PIC16C62
można ustawić tak, żeby pracował identycznie do zastosowanego ( SAA1064 ) z wątku:
https://forum.arduino.cc/index.php?topic=313713.0
tak, żeby można zastosować ten sam szkic, albo czy mogę prosić o zmianę szkicu która to zadanie zrealizuje. (zmieniłem adres I²C oraz kody wyświetlacza)
Na układzie SAA1064 ten szkic działa pięknie, ale wyświetlaczy takich nie ma w rozsądnych cenach, natomiast tych z układem ICM7218B jest podobno sporo.

Kod: Zaznacz cały

/******************************************************************/
/*                                                                */
/*                            MillDRO - Z                         */
/*                                                                */
/*                            Apr 4, 2015                         */
/*                                                                */
/******************************************************************/

// Quad Encoder 600 ppr LPA3806
// Red    5 Vcc
// Black  Gnd
// Green  Chanel A Pin 2 (Int 1)
// White  Chanel B Pin 3 (Int 2)

// Display 4 digit SAA1064
// 3/8    None                                            -a-
// 5/8    None                                           f   b
// VCC    5 Vcc                                           -g-
// GND    Gnd                                            e   c
// ADR    Gnd (Read Addr 0x70 / Write Addr 0x71)          -d-   p
// SDA    Pin A4 SDA
// SCL    Pin A5 SCL                                    pgfe dcba

// Zero switch
// COM    Gnd
// NO     Pin 4   

/******************************************************************/

#include "Wire.h"     // Include I2C bus

#define DSP   0x3B    // Display Addr (0x70>>1)

#define DSD   100     // Refresh period (100 ms)

byte DspDig[10]={0x3F,0x0A,0x6D,0xEB,0x5A,0x73,0x77,0x2A,0x7F,0x7B};

/******************************************************************/

#define QFT   0.4     // Encoder Factor (pulse to inch * 1000)

#define QCA   2       // Encoder Chanel A (Pin 2)
#define QCB   3       // Encoder Chanel B (Pin 3)

#define QIA   0       // Encoder Chanel A (Int 1)
#define QIB   1       // Encoder Chanel B (Int 2)

long  QenCnt;         // Counter (inch * 1000) 

/******************************************************************/

#define SWZ   4       // EZero switch (Pin 4)

/******************************************************************/


void setup(void)
{
 Wire.begin();                              // Start up I2C bus
 delay(500);
 QenCnt=0;                                  // Counter init = 0
 IniDsp();
 ClrDsp();
 IniSwz();
 IniQen();
}


void loop(void)
{
 ThrSwz();
 ThrQen();
 delay(DSD);
}


/******************************************************************/


void IniSwz(void)                           // Init switch
{
 pinMode(SWZ,INPUT_PULLUP);
}


void ThrSwz(void)
{
 if(!digitalRead(SWZ))
  QenCnt=0;
}


/******************************************************************/


void IniQen(void)                           // Init encoder
{
 pinMode(QCA,INPUT_PULLUP);
 pinMode(QCB,INPUT_PULLUP);
 attachInterrupt(QIA,QenChAInt,CHANGE);
 attachInterrupt(QIB,QenChBInt,CHANGE);
}


void ThrQen(void)
{
 long v;

 v=(long)((float)QenCnt*QFT);
 VluDsp(v);
}


void QenChAInt(void)                        // Interruption chanel A
{
 if(PIND&4)
  {                 // Chanel A High
   if(PIND&8)
    QenCnt--;       // Chanel B High (decrease)
   else
    QenCnt++;       // Chanel B Low  (increase)
  }
 else
  {                 // Chanel A Low
   if(PIND&8)
    QenCnt++;       // Chanel B High (increase)
   else
    QenCnt--;       // Chanel B Low  (decrease)
  }
}


void QenChBInt(void)                        // Interruption chanel B
{
 if(PIND&8)
  {                 // Chanel B High
   if(PIND&4)
    QenCnt++;       // Chanel A High (increase)
   else
    QenCnt--;       // Chanel A Low  (decrease)
  }
 else
  {                 // Chanel B Low
   if(PIND&4)
    QenCnt--;       // Chanel A High (decrease)
   else
    QenCnt++;       // Chanel A Low  (increase)
  }
}


/******************************************************************/


void IniDsp(void)                           // Init display
{
 Wire.beginTransmission(DSP);
 Wire.write(B00000000);                     // Instruction byte. Zero: the next byte is the control byte
 Wire.write(B00100111);                     // Control byte (dynamic mode, digits 1+3 on, digits 2+4 on, 6 mA current
 Wire.endTransmission();
}


void ClrDsp(void)                           // Clears display
{
 Wire.beginTransmission(DSP);
 Wire.write(B00000001);                     // Instruction byte. One: first digit is 1 (right side)
 Wire.write(B00000000);                     // Digit 1 (Right)
 Wire.write(B00000000);                     // Digit 2
 Wire.write(B00000000);                     // Digit 3
 Wire.write(B00000000);                     // Digit 4 (Left)
 Wire.endTransmission();
}


void VluDsp(long v)                           // Display value
{
 byte i;
 byte d[4];
 
 if(v<0)
  v*=-1;                                         // Negative
 for(i=0;i<4;d[i]=v%10,v/=10,i++);
 Wire.beginTransmission(DSP);
 Wire.write(B00000001);                    // Instruction byte. One: first digit is 1 (right side)
 Wire.write(DspDig[d[3]]|0x80);          // Digit 4 (left) + decimal point
 Wire.write(DspDig[d[2]]);                  // Digit 3
 Wire.write(DspDig[d[1]]);                  // Digit 2
 Wire.write(DspDig[d[0]]);                  // Digit 1 (right)
 Wire.endTransmission();
} 
 

Ostatnio zmieniony 21 kwie 2017, 18:56 przez pioterek, łącznie zmieniany 1 raz.


upanie
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 48
Posty: 1962
Rejestracja: 15 sty 2011, 09:26
Lokalizacja: Wyszków

#73

Post napisał: upanie » 21 kwie 2017, 06:47

Szkic? Chodzi o program?
Nie da się. SAA1064 jest układem na I2C a ten przez Ciebie podany ma zupełnie inny interfejs.
Albo inaczej: wszystko się da ale trzeba zmienić kod i połączenie fizyczne z mikrokontrolerem.
Za bardzo kombinujesz. Z tego co widzę sam nie dobrniesz do brzegu więc kup gotowca albo ten wyświetlacz, który działa albo poczekaj aż strikexp to zrobi.
Nie wiem jaką kasą dysponujesz ale u skośnookich można już za 230$ kupić DRO na 3 osie z liniałami, np: http://www.ebay.com/itm/DIGITAL-READOUT ... Sw5UZY9GGr
czilałt...

Awatar użytkownika

pioterek
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 69
Posty: 1724
Rejestracja: 27 gru 2012, 02:40
Lokalizacja: kujawsko-pomorskie

#74

Post napisał: pioterek » 22 kwie 2017, 04:56

Po załadowaniu tego programu na tym układzie
Obrazek
wyświetla trzy zera ale nie liczy, to może wystarczy drobna zmiana kosmetyczna i zadziała.
Obrazek
http://www.zymcu.com/pic_file/PIC16c62.htm

Na szkic od kolegi strikexp
oczywiście czekam.


strikexp
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 105
Posty: 4690
Rejestracja: 31 mar 2017, 19:47
Lokalizacja: Warszawa

#75

Post napisał: strikexp » 22 kwie 2017, 09:57

Spoko pioterek, wyświetlacz z allegro doszedł więc mam na czym pracować.
Wrzucę DRO w innym wątku a tutaj podam linka, tak aby nie śmiecić za bardzo. Z tym że narysowanie schematu i opisanie, zajmie mi więcej czasu niż zrobienie DRO. Tak więc całość powstanie pewnie dopiero wieczorem.
Chcę to zrobić w takiej formie, aby każdy zainteresowany bez problemów zrobił sobie takie DRO sam.

Awatar użytkownika

Yogi_
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 25
Posty: 759
Rejestracja: 13 sty 2010, 08:07
Lokalizacja: Braniewo

#76

Post napisał: Yogi_ » 22 kwie 2017, 12:35

Jestem :-)
Ok, od razu grupowo popiszę :-)
strikexp pisze:wyświetlacz z allegro doszedł więc mam na czym pracować
Mam nadzieję, że ogarniesz temat programowego kasowania luzu, takie DRO będzie dużo bardziej uniwersalne.
W programie przytoczonym przez kol. pioterek nie widziałem takowgo kasowania.

pioterek prośba - określaj to co da się wgrać do mikrokontrolera jako program a nie szkic. Owszem translator tłumaczy poprawnie sketch na szkic tylko że jest to jakaś nowomowa używana na forach anglojęzycznych.
pioterek pisze:wyświetla trzy zera ale nie liczy, to może wystarczy drobna zmiana kosmetyczna i zadziała [ ... ] http://www.zymcu.com/pic_file/PIC16c62.htm
Skąd wziął Ci się ten PIC16C62? On występuje na płytce wyświetlaczy? Jeśli tak to (będzie długie tłumaczenie):
Arduino jako takie zostało pomyślane jako platforma uruchomieniowa (żadnego lutowania, złącze programowania, zasilania i wyprowadzone piny) mikrokontrolerów AVR firmy Atmel . W przypadku Arduino UNO jest to ATmega328. Później można zrobić docelową płytkę drukowaną zależną od potrzeb, ale której nie da się łatwo użyć do testowania innych pomysłów. Owszem, ze względu na taniość i różnorodność Arduino a także "niechęć" do robienia płytek drukowanych - używa się ich bezpośrednio w projektowanym układzie.
Wracając do PIC-a, PIC16C62 jest 8-mio bitowym mikrokontrolerem firmy Microchip, więc jeśli faktycznie występuje na płytce wyświetlaczy (skoro o nim piszesz) to (tu zaczynam porządnie gdybać) jest to zegar albo licznik czasu z jakiegoś urządzenia przeznaczony do sterowania. Wyświetlanie 0:00 wygląda jakby czekało na ustawienie czasu i zrobienie czegoś po jego upływie. (W sensie zmiany stanu na którymś pinie lub pinach.)
Możesz podać jakie jeszcze układy są na tej płytce?

Jeśli chodzi o sterowniki wyświetlaczy to poczytaj tu: http://kaktusa.pl/tm1637-w-module-z-wys ... eg-4-cyfry . Powinno trochę rozjaśnić.
Jeśli chodzi o SAA1064 to zobacz tu.
upanie pisze:Nie wiem jaką kasą dysponujesz ale u skośnookich można już za 230$ kupić DRO na 3 osie z liniałami, np: http://www.ebay.com/itm/D...XsAAOSw5UZY9GGr
Nie tak do końca. 230$ + 50$ (przesyłka) + 23% VAT (dobrze jak nie będzie ale doliczyć trzeba) = 350$ czyli ok. 1400 zł. Co i tak jest niezłą ceną w porównaniu do Polski. Ale jeśli uda się sklecić coś na potrzeby domowe za mniej niż tysiąc to uważam, że jest o co walczyć.
strikexp pisze:Znalazłem zarówno taki jak kupiłem na allegro, jak i kilka innych modeli. Interesujący jest szczególnie ten:
https://www.aliexpress.co...0608.0.0.2gaMMN
Jest (programowo) dokładnie taki sam jak ten co kupiłeś tylko cyferki ma w dwóch rządkach.

strikexp przyglądałeś się temu? Może być ciekawą alternatywą dla droższych enkoderów, tym bardziej, że temat budowy enkodera z silnika krokowego przewinął się przez forum i wyniki były więcej niż zadowalające.
Pozdrawiam
Krzysiek

Awatar użytkownika

pioterek
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 69
Posty: 1724
Rejestracja: 27 gru 2012, 02:40
Lokalizacja: kujawsko-pomorskie

#77

Post napisał: pioterek » 22 kwie 2017, 13:31

Yogi_ pisze: Skąd wziął Ci się ten PIC16C62? On występuje na płytce wyświetlaczy?
Dokładnie
Yogi_ pisze: Możesz podać jakie jeszcze układy są na tej płytce? ?
Proszę:
Załączniki
pytka.pdf
(357.89 KiB) Pobrany 248 razy
Ostatnio zmieniony 22 kwie 2017, 15:15 przez pioterek, łącznie zmieniany 1 raz.


strikexp
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 105
Posty: 4690
Rejestracja: 31 mar 2017, 19:47
Lokalizacja: Warszawa

#78

Post napisał: strikexp » 22 kwie 2017, 14:49

Yogi_ pisze: Mam nadzieję, że ogarniesz temat programowego kasowania luzu, takie DRO będzie dużo bardziej uniwersalne.
W programie przytoczonym przez kol. pioterek nie widziałem takowgo kasowania.
Nie wiem jak takie kasowanie luzów miałoby działać. Enkoder ma określoną liczbę impulsów na obrót. Od jakości wykonania (czytaj - ceny) zależy jak dokładne jest to położenie impulsów na osi obrotu.
Muszę doczytać ile wynoszą niedokłądności odczytów z enkodera, aby napisać coś więcej. Ale dla taniego enkodera trzeba przyjąć niedokładność +/- 0,5 impulsu.

Jeśli chodzi o luzy na maszynie to musicie mi to opisać. Nie znam się na mechanice, nie wiem czy to są jakieś wartości liniowe czy nieliniowe.
Możliwości są spore, bo nawet można podłączyc czujniki temperatury i korygować automatycznie rozszerzalność temepraturową metali. Jednak jest to oczywiście dużo bardziej czasochłonny i droższy temat niż zwykłe DRO.

Yogi_ pisze: strikexp przyglądałeś się temu? Może być ciekawą alternatywą dla droższych enkoderów, tym bardziej, że temat budowy enkodera z silnika krokowego przewinął się przez forum i wyniki były więcej niż zadowalające.
Praktycznie za tą samą cenę masz najtańszy enkoder z Chin (aliexpress.com). Raczej się nie opłaca.
Dla pasjonatów z małymi funduszami jest opcja wykonania enkodera optycznego samodzielnie. Wystarczy w Google wpisać "tarcza enkodera" aby zobaczyć jak wygląda główny element. W najprostrzej wersji wystarczy wydrukować wzór na naklejce. a potem wyciąć w kawałku plastiku itp. Następnie montuje się "czujnik szczelinowy" lub jeszcze lepiej wykonuje samodzielnie odpowiedniej wielkości szczelinę.
W ten sposób otrzymuje się średnio dokładny enkoder na np 50-100 impulsów.


jacek38
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 3
Posty: 273
Rejestracja: 13 mar 2005, 21:35
Lokalizacja: Pelplin

#79

Post napisał: jacek38 » 22 kwie 2017, 16:53

Witam - tak pracuje enkoder z chin kupiony na ebay'u 1000imp/obr.

pozdrawiam Jacek.

Awatar użytkownika

Yogi_
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 25
Posty: 759
Rejestracja: 13 sty 2010, 08:07
Lokalizacja: Braniewo

#80

Post napisał: Yogi_ » 22 kwie 2017, 17:01

pioterek z jakiego jest to urządzenia?
Koncepcje co tym wyświetlaczem zegara (clock display z pdfa) zrobić:
1. Odłożyć na półkę jako dawcę organów.
2. Wyrzucić niepotrzebne części, dołożyć układ i kawałek płytki i mieć wyświetlacz oparty o SAA1064.
3. Przeprogramować PIC-a zwracając uwagę aby I²C było zgodne z arduinowym.

[ Dodano: 2017-04-22, 18:04 ]
strikexp pisze: Jeśli chodzi o luzy na maszynie to musicie mi to opisać. Nie znam się na mechanice, nie wiem czy to są jakieś wartości liniowe czy nieliniowe.
OK. W skrócie - każde połączenie gwintowane ma pewien luz. Śruba napędowa poruszy nakrętkę dopiero po obrocie o pewien kąt, od wartości bliskich zeru do nawet kilkuset stopni. liniał pomiarowy (o którym wspominał kol, upanie)umocowany do nakrętki omija luz śruby w nakrętce, DRO podłączone do liniału pokaże zmianę wartości niezależnie od kąta obrotu śruby bez ruchu nakrętki. DRO z enkoderem obrotowym zmieni wskazania jeszcze bez ruchu nakrętki.
strikexp pisze:Nie wiem jak takie kasowanie luzów miałoby działać. Enkoder ma określoną liczbę impulsów na obrót.
Plik konfiguracyjny programu DRO. W nim wartości takie jak skok śruby, ilość impulsów na obrót enkodera, ilość impulsów na luz śruby - dla każdej osi osobno.
Oraz tryb pomiaru błędu na DRO tzn tryb wyświetlania liczby impulsów enkodera.
Wyobrażam to sobie tak:
1, DRO w tryb pomiaru błędu.
2. kilka obrotów śruby w np.lewo, wyzerowanie wyświetlacza.
3. Jakiś czujnik ruchu do elementu, którego przesunięcie ma być mierzone.
4. Obrót śruby w prawo do momentu wskazania przesunięcia przez czujnik ruchu.
5. Odczytanie i zapisanie do pliku konfiguracyjnego ilości impulsów - błędu luzu.
Gdzieś w programie coś w ten deseń:

Kod: Zaznacz cały

Jeśli oś zmienia kierunek to pomiń [i]błąd[/i] impulsów i dopiero zacznij przeliczać przesunięcie.
Cały czas mam wrażenie, że namotałem, ale jak coś to pytaj :-)
Pozdrawiam
Krzysiek

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Elektronika ogólna”