DRO DIY

Na tym forum rozmawiamy o elektronice nie związanej bezpośrednio z tematem CNC
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

#61

Post napisał: pioterek » 18 kwie 2017, 03:47




Tagi:


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

#62

Post napisał: strikexp » 18 kwie 2017, 12:15

Włąśnie ten największy kupiłem, teoretycznie wyświetla 10 metrów z dokładnością 0,0001mm. A kilka złotych to Jak dotrze paczka to go oprogramuję i wrzucę program ze schematem na forum.

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

#63

Post napisał: Yogi_ » 18 kwie 2017, 16:33

Cześć :-)
strikexp pisze:to go oprogramuję
Pamiętaj, żeby mieć osobne kody cyfr do jedności całkowitych i osobne do reszty.
Pozdrawiam
Krzysiek


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

#64

Post napisał: strikexp » 18 kwie 2017, 18:31

Jakie kody?
Z tego co zerknąłem to tam jest po prostu rejestr przesuwny. A jeśli chodzi o same cyfry to raczej widzę zliczanie 0,0001mm jako dużą liczbę całkowitą. Przecinek to będzie dodawany sztucznie.
Coś mi się zdaje że bedzie trochę roboty żeby napisać obsługę tylu LEDów. Jednak na prawdziwych sterownikach robi się to znacznie łatwiej.
Cieszę sie tylko że kupiłem ten najdłuższy wyświetlacz, przecież tam jeszcze musi być znak minus na początku :mrgreen:

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

#65

Post napisał: Yogi_ » 18 kwie 2017, 21:13

Przykład
Takie:
bez kropki:

Kod: Zaznacz cały

switch (Num_seg)
  {
    case 0: seg_data = 0x02; break;
    case 1: seg_data = 0x9E; break;
    case 2: seg_data = 0x24; break;
    case 3: seg_data = 0x0C; break;
    case 4: seg_data = 0x98; break;
    case 5: seg_data = 0x48; break;
    case 6: seg_data = 0x40; break;
    case 7: seg_data = 0x1E; break;
    case 8: seg_data = 0x00; break;
    case 9: seg_data = 0x08; break;
    default: seg_data = 0xFF; break;
    }
z kropką:

Kod: Zaznacz cały

switch (Num_seg_d)
  {
    case 0: seg_data = 0x03; break;
    case 1: seg_data = 0x9F; break;
    case 2: seg_data = 0x25; break;
    case 3: seg_data = 0x0D; break;
    case 4: seg_data = 0x99; break;
    case 5: seg_data = 0x49; break;
    case 6: seg_data = 0x41; break;
    case 7: seg_data = 0x1F; break;
    case 8: seg_data = 0x01; break;
    case 9: seg_data = 0x09; break;
    default: seg_data = 0xFF; break;
    }
To są cyfry wyświetlane na segmencie generowane przez jeden rejestr.
A to numery segmentów:

Kod: Zaznacz cały

switch (Num_bit)
 {
    case 0: bit_data = 0x10; break;
    case 1: bit_data = 0x20; break;
    case 2: bit_data = 0x40; break;
    case 3: bit_data = 0x01; break;
    case 4: bit_data = 0x02; break;
    case 5: bit_data = 0x04; break;
    //case 6: bit_data = 0x08; break;
    //case 7: bit_data = 0x08; break;
    default: bit_data = 0x00; break;
  }
i wysyłasz po kolei na oba rejestry:

Kod: Zaznacz cały

digitalWrite(RCKpin, LOW);
  shiftOut(DIOpin, SCKpin, LSBFIRST, seg_data);
  shiftOut(DIOpin, SCKpin, MSBFIRST, bit_data);
  digitalWrite(RCKpin, HIGH);
Właśnie się dopatrzyłem, że w przykładzie cwaniej podeszli do przecinka:

Kod: Zaznacz cały

if (Num_dec == 1)
  {
    seg_data = seg_data + 1;
  }
Wystarczy wysłać 8 par i już :-)

[ Dodano: 2017-04-18, 21:17 ]
To jest wspólna anoda jeśli się nie mylę.
Minus wyglądałby tak:

Kod: Zaznacz cały

case -: seg_data = 0xFE; break;
Pozdrawiam
Krzysiek


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

#66

Post napisał: strikexp » 18 kwie 2017, 21:25

Nie miałem czasu wnikać jak działa ten wyświetlacz, w tygodniu działam na innych językach programowania :mrgreen: Ale skoro piszesz że wystarczy wysłać 8 kodów na każdy segment, to super.
Pozostaje trzymać odległość w jakimś typie long. A dzieleniem przez kolejne potęgi 10, obliczać każdą cyfrę wyświetlacza.

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

#67

Post napisał: pioterek » 19 kwie 2017, 06:18

Ale jeszcze jedna uwaga. Do trzech osi wystarczy jedno arduino, tak jak, na schemacie w połowie strony, tu:
http://www.sawmillcreek.org/showthread. ... ing-scales
Zgadza się?

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

#68

Post napisał: Yogi_ » 19 kwie 2017, 08:28

pioterek pisze:Zgadza się?
Tak, ale... arduino jest tylko odczytywaczem skal a cała obróbka odbywa się na tablecie.
Pozdrawiam
Krzysiek


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

#69

Post napisał: strikexp » 19 kwie 2017, 18:03

Ciekawi mnie tylko czy takie czujniki liniowe nie łapią błędu. W enkoderze jest to niemożliwe ponieważ czujnik odczytuje wirującą tarczę ze stałymi dziurkami itp, a wszystko jest szczelne.
A w takim mechanizmie z suwmiarek to nie wiem jak to działa. Mozliwe że zabrudzenie osi może spowodować błąd odczytu...

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

#70

Post napisał: pioterek » 20 kwie 2017, 16:44

Ach rozumie Yogi. Ciekaw mnie na jakiego rodzaju wyświetlacz jest najłatwiej nauczyć się pisać oprogramowanie, który z nich zapewnia najwyższą prędkość działania i w zasadzie to z skąd się uzyskuje informacje na temat tego w jaki sposób się te programowanie wykonuje. natrafiłem na pięć rodzajów wyświetlaczy I²c przy tym trzy różne procesory, trzy rodzaje z TM1637, Tm1638, 74HC595 i MAX7219. po co tyle rodzajów i który do czego się lepiej nadaje.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Elektronika ogólna”