-
Automatizacija kućice za teleskop
(i internetsko upravljanje teleskopom)
Tomislav Šklebar 1. razred
Prirodoslovna Škola Vladimira Preloga, Zagreb
Mentorica: Suzana Galović, prof.
Zagreb, 2011
-
1
Sadržaj
Uvod 2
Materijali i metode 7
Mikrokontroler 9
Software 10
Programiranje glavnog sučelja 11
Pokretanje kućice 11
Sklop za pokretanje elektromotora 12
Releji 13
Senzor kiše 14
Web kamera 16
Spajanje s računala na računalo 17
Teleskop 18
Zaključak 19
Popis literature 20
Životopis 20
Dodatak 21
-
2
Uvod
Cijeli projekt započeo je na ljetnoj školi astronomije u Višnjanu 2010. godine. Glavni ciljevi
bili su izraditi kućicu za teleskop te automatizirati teleskop i kućicu kako bi se mogli upravljati preko
interneta. Na ljetnoj školi završena je samo kućica za teleskop. Kućica je izrađena s namjerom
zaštite teleskopa od vanjskih utjecaja i mogućnosti njegovog korištenja u svakom pogodnom
trenutku iako nismo fizički pokraj teleskopa. U obzir su dolazila 4 tipa izvedbe kućice za teleskop,
to su: kontejner (1), pomični krov (2), pomična kućica (3) i oblik kupole (4). Prva ideja je bila
upotrijebiti kontejner za smeće kao vrtni observatorij za teleskop. Izmjeren je i promotren jedan
takav kontejner, te se došlo do zaključka da mehanizam otvaranja / zatvaranja nije dovoljno
jednostavan za pokretanje (slika 2).
Slika 1. Kontejner
Slika 2. Konstrukcija vrtnog observatorija
-
3
Sljedeća zamisao zasnivala se na klasičnom obliku vrtnih observatorija s pomičnim krovom,
metalna konstrukcija bila bi obložena panelima (slika 3.), a elektromotor bi pokretao krov. Nakon
premjeravanja zaključilo se da bi vidno polje teleskopa bilo 45° (premalo), rješenje bi bilo da s
nakon spuštanja krova teleskop podiže pomoću dizalice, što nije dovoljno jednostavno.
Slika 3. Kućica za teleskop sa pomičnim krovom
Pomična kućica je konstrukcija s fiksnim zidom i pomičnom metalnom konstrukcijom. Taj oblik bi
omogućio vidljivost cijelog merdijana te se zato na njemu nastavilo raditi (slika 4).
Slika 4. Pomična kućica za teleskop
Postoji mogućnost izrade kupole (slika 5) od staklo plastike, no ova mogućnost će se razmatrati
možda nekom drugom prilikom.
Slika 5. Kupola
-
4
Nacrt kućice sa mjerama dan je na slici 6.
Slika 6. Nacrt kućice za teleskop
Kostur kućice izrađen je od metalnih profila koji su spajani varenjem, a stranica su obložene
dvostrukim metalnim panelima unutar kojih se nalazi stirodur. U fiksnom zidu predviđen je prostor
za kompjuter i ostale elektroničke uređaje. Cijela konstrukcija (osim prostora predviđenog za
kompjuter) pokretna je i postavljena je na kotače koji klize po metalnim trakama L profila. Ovi profili
su zavareni na masivnije željezne četvrtaste profile (slika 7).
Slika 7. Skica postavljanja kotača na konstrukciju kućice
Na slici 8 prikazano je planiranje i dimenzioniranje kućice u odnosu na teleskop.
-
5
Slika 8. Podnožje konstrukcije i teleskop
Nacrt kućice prikazan je na slici 9. Na prvoj slićici vidi se tlocrt kućice kada je zatvorena, prikazan
je fiksni zid u kojemu je predviđeno mjesto za kompjuter. Na trečoj slićici prikazan je sustav
pokretanja kućice bez motora, tračnice po kojima se konstrukcija pokreče.
Slika 9. Nacrt kućice za teleskop
-
6
Njeno prvobitno otvaranje i zatvaranje izvedeno je kao na automatskim kliznim vratima od
dvorišta, pomoću zupčaste letve i elektromotora. Kada je kućica zatvorena dijelom nalježe na
fiksni zid i gotovo se potpuno zatvara. Cijela kućica i teleskop trebaju biti potpuno automatizirani
kako bi se s njima moglo upravljati iz bilo kojeg dijela svijeta preko interneta. Pod automatizacijom
podrazumjeva se mogućnost upravljanja kućicom (otvaranje i zatvaranje), izrada senzora kiše i
naoblake, interface-a (sučelja na koje se spajaju svi senzori, a ono se upravlja preko kompjutera),
usklađivanje teleskopa i kompjutera te povazivanje kompjutera na internet (slika 10).
Slika 10. Automatizacija teleskopa i internetsko upravljanje
-
7
Materijali i metode
Automatizaciju sam započeo izradom glavnog sučelja (interface-a) za upravljanje svim
operacijama.
Nacrt tiskane pločice glavnog sučelja napravljen je u programu PCB i prikazan je na slici 11.
Slika 11. Nacrt tiskane pločice glavnog sučelja
Na slici 12 prikazan je tijek izrade tiskane pločice. Tijek izrade opisan je u koracima prema slikama
(1-4).
-
8
(1.) (2.) (3.) (4.)
Slika 12. Izrada tiskane pločice
1. nakon završenog projektiranja sučelja izgled pločice ispisuje se laserskim pisačem na toplinski
neosjetljivu foliju i pomoću drugog izvora topline (npr. električno kuhalo/glačalo) tinta se prenese na
bakrenu pločicu koju sam prethodno očistio.
2. bakrenu pločicu s prenesenom tintom uroni se u vodenu otopinu klorovodične kiseline (HCl) i
vodikova peroksida (H2O2), pričeka se nekoliko minuta sve dok kiselina ne otopi sav bakar koji nije
zaštićen tintom (jetkanje).
3. kada je jetkanje gotovo pločica se izvadi iz kiseline te se ispere pod mlazom vode. Sa suhe
pločice spužvicom natopljenom nitro razređivačem se ukloni tintu i probuše se predviđene rupice
odgovarajućim svrdlom (npr. 1mm).
4. u izbušene rupice s gornje strane (gdje nema bakrenih vodova) umetnu se elektroničke
komponente i zaleme se. Podnožja za mikrokontroler PIC 16F877A i za MAX232N leme se prazna.
Lemljenje je postupak spajanja dvaju metala (nožica elektroničkih elemenata i bakrenih
vodova na tiskanoj pločici) legurom olova i kositra (u obliku tanke žice) koja se zagrijavanjem
prevodi iz krutog u tekuće stanje te ponovnim hlađenjem zadržava metale spojene. Vrh lemilice
nasloni se na lemno mjesto tako da dodiruje i vod oko rupe na tiskanoj pločici i metalni vrh
(nožicu) komponente koji se lemi. Odmah potom se tinol žica prisloni na tromeđu vrha lemilice,
metalnog sloja pločice i lemnog vrha komponente. Grije se vrh komponente koja se lemi te se žica
na njoj rastopi. Ako je lemilica dobro zagrijana i ako su lemne površine čiste, vrh tinola će se
trenutno otopiti i, zahvaljujući adheziji, početi obuhvćati sve metalne površine (slika 13).
-
9
Slika 13. Postupak lemljenja
Pošto pločica u tjekom lemljenja leži naopako, korisno je podeliti komponente u grupe po
visini, pa prvo lemiti najniže i ići postupno prema najvišoj, jer jedino tako će sve komponente prije
lemljenja moći osloniti na površinu stola, bez opasnosti da neka od njih ispadne.
Mikrokontroler Mikrokontroleri su elektronički uređaji koji rade na načelu vrlo bliskom računalu. Mikrokontroler je
uistinu malo računalo, a složenost mu ovisi o složenosti zadataka koje mora nadzirati. Kako bi
mogli pomoću računala upravljali otvaranjem i zatvaranjem kućice za teleskop te senzorima koristit
će se mikrokontroler i napisat će se potrebni softver. Mikrokontroler posjeduje više vrasta
memorije. Programska ili FLASH memorija koristi se za pohranjivanje napisanog programa. Ova
se memorija može više puta brisati i reprogramirati. EEPROM memorija se koristi za pohranjivanje
podataka koji trebaju biti sačuvani i kad nema napajanja. RAM memoriju koristi program tijekom
svog izvođenja. Ovdje se pohranjuju međurezultati ili privremeni podaci. PORT A, PORT B, PORT
C, PORT D i PORT E su fizičke veze sa vanjskim svijetom. Port A ima 6, port B 8, port C 8, port D
8 i port E 3 pinova (izvoda). Centralni procesor povezuje ostale dijelove mikrokontrolera i kordinira
njihov rad te izvršava korisnički program. Brojač je 8-bitni registar unutar mikrokontrolera koji radi
neovisno o programu. Na svaki četvrti takt iz oscilatora brojač uveća svoju vrijednost dok ne
postigne maksimalnu (255) i brojanje počinje ispočetka. Vrijeme između dva povećanja sadržaja
brojača je poznato, što se može iskoristiti za mjerenje vremena. Takt je osnovni pokretač
mikrokontrolera i dobiva se izvana putem oscilatora.
-
10
PIC 16F877A je mikrokontroler u jednom čipu i ima ukupno četrdeset pinova. Najčešće je izveden
u DIP 40 kučištu, shema je prikazana na slici 14.
Slika 14. Shema PIC 16F877A
Da bi mikrokontroler mogao raditi potrebno je nekoliko vanjskih komponenata. Prvo je potreban
regulator napajanja, npr. IC 78L05 (koji regulira napon na 5V). Kao oscilator korišten je kristal od
20 MHz. Osim toga potrebno je još nekoliko pasivnih elemenata, na primjer otpornik od 10 kilooma
i nekoliko kondenzatora. Ulazi mikrokontrolera mogu biti analogne i digitalne prirode (npr. naponi i
frekvencije) a podatke će prosljeđivati neki mjerni pretvornik (senzor). Dakako i izlazi mogu biti i
analogne i digitalne prirode. Senzori se spajaju na mikrokontroler kojemu se putem računala prvo
daje set instrukcija (programiramo) kako bi mikrokontroler uz određeno napajanje mogao postati
zasebna cjelina koja izvršava upisane naredbe.
Software
Software se sastoji od dva osnovna programa. Prvi program se nalazi u mikrokontroleru i
zadužen je za očitavanje signala koji dolaze sa senzora. Drugi dio programa nalazi se na računalu,
a pokreće se nakon priključivanja na sučelje. Preko njega se upravlja sučeljem
-
11
Programiranje glavnog sučelja
Programiranje glavnog sučelja vrši se pomoću programa „Microsoft Visual Basic“. Kod
napisanog programa nalazi se u prilogu. Program je osmišljen kako bi se mogao pokretati sa
svakog računala s operativnim sustavom "Windows" i USB ili COM priključkom te instaliranim
programima upogoniteljima od web kamere.
Pokretanje kućice
Prva idea bila je da se kućica pokreče elektromotorom od automobilskih brisača (Slika 15.)
tako da se na osovinu motora spoji navojna šipku (promjera 8 mm), a na pokretni dio kućice
zavarimo maticu te se kućica otvara i zatvara po sistemu odvijanja i zavijanja navojne šipke kroz
maticu. No tu se se pojavili i prvi problemi. Motor se okretao samo u jednom smjeru te je trebalo
izraditi sklop kojim bi se omogučilo upavljanje motora u oba smijera. Taj sam sklop izradio pomoću
dva releja (slika 18.) Nakon postavljanja motora prema zamislili pojavio se drugi problem, presporo
otvaranje kućice te će na kraju vjerojatno ovaj način otvaranja/zatvaranja kućice biti rezervni za
slučaj nestanka električne energije i da nikog nema u blizini. Osnovna zamisao otvaranja kućice
zamjeniti će se načinom otvaranja automatskih dvorišnih vrata, pomoću elektromotora, zupčanika i
zupčaste letve (nacrt motora i općenita primjena su na slici 16). Motor će se postaviti s vanjske
strane jer na sebi ima mogućnost otpuštanja kočnice te ručnog pomicanja kućice što nije
zanemrivo u slučaju nestanka struje.
Slika 15. DC motor (automobilski brisač)
-
12
Slika 16. Motor za otvaranje automaskih dvorišnih vrata
Sklop za pokretanje elektromotora
Sklop za pokretanje elektromotora od automobilskih brisača napravio sam pomoću dva
releja, dva tranzistora i dva otpornika. Glavno upravljačko sučelja može isporučiti samo 5VDC
napona vrlo mala struje što je bilo nedovoljno da bi se pobudili releji koji su bili na 12VDC ali pošto
je za pobuđenje relaja potrebno ili napon ili struja izradio sam pojačala struje za svaki od releja.
Ovaj sklop omogućuje promjenu smjera vrtnje kada se zamjene polovi na ulazu sklopa (slika 17)
Zamjena polova na ulazu izvršava se kompjuterski, preko programa.
Slika 17. Nacrt tiskane pločice sklopa za pokretanje elektromotora
-
13
Slika 18. Sklop za pokretanje elektromotora
Releji
Releji su sklopni aparati koji se aktiviraju od jedne ili više električnih veličina kao što su
(napon, struja, snaga…). Svi releji se uključuju preko više vrsta kontakata i osnovni im je zadatak
da preko svojih kontakata i pomoćnih strujnih krugova djeluju na druge uređaje radi upravljanja,
mjerenja, signalizacije, zaštite nekih postrojenja i nekih dijelova postrojenja. Relejske kontakte
pomiče namot elektromagnetnom silom. Dijelovi releja su: namot releja, jaram koji na sebi drži
elektromagnet, a koji privlači željeznu kotvu. Kotva uspostavlja ili prekida set električnih kontakata,
a vraća se u polazni položaj uz pomoć opruge, kad kroz elektromagnet više ne teče struja. Namot
releja spojen je u upravljačkom strujnom krugu. Strujni krug s relejom čine dva neovisna strujna
kruga : upravljački krug s upravljačkom strjom i uklopni krug sa radnom strujom. Kad prekidač
uključi, poteče struja kroz namot releja i kotva releja privuče. Kontakti releja se zatvore i u strujnom
krugu potrošača poteče radna struja.
Elektromagnet se obično sastoji od mnogobrojnih namotaja bakrene žice željeznu jezgru. Kada
struja poteče kroz žicu ( primarni strujni krug ), oko elektromagneta se stvara magnetsko polje koje
privlači željeznu kotvu. Kotva nosi na sebi električne kontakte koji onda otvaraju ili zatvaraju
sekundarni strujni krug. Kada se prekine struja kroz elektromagnet, on više ne privlači željeznu
kotvu, i ona se vraća u polazni položaj, obično uz pomoć opruge. Time električni kontakti prekidaju
ili uspostavljaju strujni krug. U gornjem dijelu slike 19, relej je isključen. Kontakti dalje od
elektromagneta su otvoreni. U donjem dijelu slike relej je uključen, kotva pomjera srednji kontakt
-
14
koji sad uspostavlja vezu sa desnim. Desni par kontakata je normalno otvoren. Dijelovi : 1)
elektromagnet 2) kotva 3) kontakti.
Slika 19. Relej
U svakom releju se nalaze kontakti, koji se otvaraju ili zatvaraju pri djelovanju releja,
a izvedeni su od srebra ili srebrenih legura. Većina releja ima više parova kontakata.
Radni napon i jakost struje
Na relejima koje sam koristio dati su podaci: 12V, 240V, 10A. To znači da je radni napon
elektromagneta 12V istosmjernog napona, a kontakti su predviđeni za prekopčavanje
na 240V izmjeničnog napona.
Senzor kiše
Senzor kiše izradio sam pomoću promjenjivog otpornika, običng otpornika te tranzistora
(nacrt i izvedba su na slikama slika 22 i 23.) Na senzor kiše spaja se proba (nacrt na slici 21) koja
se postavlja na vanjskoj strani kućice (krovu) kako bi bila u doticaju s kišom kada počne padati.
Ona je izrađena od golih vodova na tiskanoj pločici koji su naizmjenično postavljeni tako da se ne
dodiruju, a razmak između njih je približno 1mm (slika 22). Kroz vodič teče istosmjerna struja te je
njen protok kroz vodič prekinut u slučaju da kiša ne pada, a kada padne prva kap kiše te zatvori
strujni krug srtuja slobodno prolazi kroz vodič te odlazi do promjenjivog otpornika na kojemu se
-
15
podešava osjetljivost senzora. Kada struja poteče kroz otpornik te dođe do tranzistora on šalje
signal na glavno upravljačko sučelje. Kada sučelje primi taj signal prosljeđuje informaciju do
računala „Kiša pada!“ te automatski počinje zatvarati kućicu.
Slika 20. Nacrt probe Shema 22. Nacrt senzora kiše
Slika 21. Proba Slika 23. Senzor kiše
-
16
Web kamera
U planu je bila izrada senzora naoblake ali pošto za sada to nisam realizirao, privremeno
kao senzor naoblake koristiti će se web kamera za vanjski nadzor. Prvobitna kamera bila je VGA
rezolucuje (loše) i kao takva nije bila pogodna za pračenje neba. Prvobitnu kameru zamjenjena je
boljom rezolucuje od 2 megapiksela. Što je zahtjevalo male preinake u programskom kodu.
Kako bi bilo moguće promatranje preko kamere, računalo koje pokreče program na sebi mora
imati instalirane programe upogonitelje svojstvene svakom modelu kamere. Ova kamera spaja se
na računalo preko USB priključka.
Slika 24. prikazuje senzor kiše, glavno sučelje i sklop za pokretanje motora unutar
plastičnog kučišta (dimenzija: 228x178x68mm). Glavne priključke za struju izvode za elektromotor
te priključak za računalo (RS232) izveo sam na površinu kučišta.
Slika 24. Senzor kiše, glavno sučelje i sklop za pokretanje motora
-
17
Spajanje s računala na računalo
Glavno sučelje ne može raditi bez računala što znači da jedno računalo mora biti blizu
sučelja i svih senzora. Predviđeno je da se računalo nalazi u fiksnom zidu kućice te da je nekim
putem (žicom ili bežično) spojeno s internetom kako bi mu se moglo pristupati, pošto je zamišljeno
da se teleskopom može upravljati iz bilo kojeg dijela svijeta u bilo koje vrijeme. Računalo koje će
se nalaziti u kućici mora na sebi imati instaliran i podešen program preko kojega mu se može
pristupati a koristiti će se program „Windows Remote Desktop“. Tijekom instalacije programa
potrebno je izraditi korisnički račun na koji ćemo se kasnije spajati. Kada se računalu pristupi njime
se upravlja kao da smo fizički na njemu.
Slika 25. Windows Remote Desktop
Slika 26. Korisnički račun
Slika 25. Prikazuje prozor programa „Remote Desktop“ te je označeo računalo na koje su spojeni
svi senzori. Za spajanje na računalo s kojim sve upravljamo potrebna nam je lozinka. Slika 26.
prikazuje prozor za unos lozinke računala na koje se spajamo. Nakon potvrde lozinke prikazuje
-
18
nam se radna površina drugoga računala na kojemu zatim pokrenemo program za upravljanje
kućicom.
Na slici 27 prikazan je prototip internetskog upravljanja jednog računala drugim te
cjelokupne aparature koja je priključena na njega.
Slika 27. Internetsko upravljanje jednog računala drugim
Teleskop
Teleskop koji se koristiti u projektu je Meade LX200 GPS 8 (slika 28.) koji dolazi u kompletu s
software-om ( „Meade Autostar II” ) za upravljanje. Teleskop će se upravljati s istim računalom s kojim se
upravljaju senzori i pokreće kućica, a spaja se pomoću COM (RS232) priključka. Navođenje teleskopa
olakšano je pomoću GPS-a koji je potrebno podesiti. Za praćenje preko interneta potrebna CCD kamera koja
se postavlja na teleskop. Pošto još nije nabavljena odgovarajuću kamera za obavljanje ove zadaće nisam ju
mogo unjeti u program.
-
19
Slika 28. Meade LX200 GPS 8
Zaključak
Ovo je samo početak. U planu je izrada još nakoliko senzora (naoblake, otvorenosti kućice)
te realizacija pokretanja kućice pomoću elektromotora i zupčaste letve. Postavljane kućice na
terasu stare Višnjanske zvjezdarnice u gradu Višnjanu, ugrađivanje računala u fiksni zid kućice i
njegovo spajenje na internet kako bi nam bio dostupan u svakom trenutku. Još smo uvijek u
procesu traženja dovoljno kvalitetne kamere koju bi postavili na teleskop kako bi mogli vršiti
promatranja. Ovaj projekt otvara jednu novu dimenziju promatranja i bilježenja neba, iz bilo kojeg
dijela svijeta s bilo kojeg računala s instaliranim „Windows Remote Desktop“ programom.
-
20
Popis literature
-„Small Astronomical Observatories“, Patrick Moore, Springer, 1996
- „Meade manual“, Meade Instruments Corporation
Životopis
Rođen sam u Zagrebu 1995. g, a živio sam u Bjelovaru gdje sam završio osnovnu školu. U
Zagreb se opet vračam 2010. godine te upisujem Prirodoslovnu školu Vladimira Preloga.
Astronomijom sam se počeo baviti prije šest mjeseci. Osim astronomije zanima me i elektronika te
umjetnička fotografija.
-
21
Dodatak
Kod programa kodiran u „Microsoft Visual Basic-u“
Module MataSoftInterface
Private WithEvents SerPort As System.IO.Ports.SerialPort
Public Const PORTAnalog As Integer = 8
Public Const PORTB As Integer = 16
Public Const PORTC As Integer = 32
Public Const PORTD As Integer = 64
Private Started As Boolean = False
Private TRISB As String = ""
Private TRISC As String = ""
Private TRISD As String = ""
Private TRISE As String = ""
Public Function InterfaceInit(ByVal comport As String) As Boolean
SerPort = New System.IO.Ports.SerialPort(comport, 19200, IO.Ports.Parity.None, 8,
IO.Ports.StopBits.One)
SerPort.ReadTimeout = 1000
SerPort.RtsEnable = True
Try
SerPort.Open()
Catch ex As Exception
Started = False
SerPort.Close()
InterfaceInit = False
Exit Function
End Try
System.Threading.Thread.Sleep(1000)
SerPort.Write("STARTOK")
-
22
Try
If SerPort.ReadLine = "Interface Connected!" Then
PopulateTRIS()
Started = True
InterfaceInit = True
Else
Started = False
SerPort.Close()
InterfaceInit = False
End If
Catch ex As Exception
Started = False
SerPort.Close()
InterfaceInit = False
End Try
End Function
Public Sub InterfaceStop()
If Started Then
Started = False
SerPort.Write("STARTOK")
SerPort.ReadLine()
SerPort.Close()
End If
End Sub
Public Function GetIOStatus(ByVal port As Integer) As String
If Started Then
Select Case port
Case PORTB
PopulateTRIS()
GetIOStatus = TRISB
Case PORTC
PopulateTRIS()
GetIOStatus = Mid(TRISE, 6, 2) & Mid(TRISC, 3, 6)
Case PORTD
PopulateTRIS()
GetIOStatus = TRISD
Case Else
-
23
GetIOStatus = ""
End Select
Else
GetIOStatus = ""
End If
End Function
Public Function SetIOStatus(ByVal port As Integer, ByVal tris As String) As Boolean
Dim txt As String = ""
Dim med As String = ""
If Started Then
Select Case port
Case PORTB
If Len(tris) = 8 And CheckTRIS(tris) Then
txt = "TB" & BinaryToDecimal(tris) & "OK"
SerPort.Write(txt)
PopulateTRIS()
SetIOStatus = True
Else
SetIOStatus = False
End If
Case PORTC
If Len(tris) = 8 And CheckTRIS(tris) Then
med = "10" & Mid(tris, 3, 6)
txt = "TC" & BinaryToDecimal(med) & "OK"
SerPort.Write(txt)
med = "00000" & Mid(tris, 1, 2) & "1"
txt = "TE" & BinaryToDecimal(med) & "OK"
SerPort.Write(txt)
PopulateTRIS()
SetIOStatus = True
Else
SetIOStatus = False
End If
Case PORTD
If Len(tris) = 8 And CheckTRIS(tris) Then
txt = "TD" & BinaryToDecimal(tris) & "OK"
SerPort.Write(txt)
PopulateTRIS()
-
24
SetIOStatus = True
Else
SetIOStatus = False
End If
Case Else
SetIOStatus = False
End Select
Else
SetIOStatus = False
End If
End Function
Public Function SetBitStatus(ByVal port As Integer, ByVal bit As Integer, ByVal state
As Integer) As Boolean
Dim txt As String = ""
If Started Then
Select Case port
Case PORTB
If bit > -1 And bit < 8 And state > -1 And state < 2 Then
txt = "OB" & bit.ToString & state.ToString & "OK"
SerPort.Write(txt)
SetBitStatus = True
Else
SetBitStatus = False
End If
Case PORTC
If bit > -1 And bit < 8 And state > -1 And state < 2 Then
If bit < 6 Then
txt = "OC" & bit.ToString & state.ToString & "OK"
SerPort.Write(txt)
SetBitStatus = True
Else
txt = "OE" & LTrim(Str(bit - 5)) & state.ToString & "OK"
SerPort.Write(txt)
SetBitStatus = True
End If
Else
SetBitStatus = False
End If
-
25
Case PORTD
If bit > -1 And bit < 8 And state > -1 And state < 2 Then
txt = "OD" & bit.ToString & state.ToString & "OK"
SerPort.Write(txt)
SetBitStatus = True
Else
SetBitStatus = False
End If
Case Else
SetBitStatus = False
End Select
Else
SetBitStatus = False
End If
End Function
Public Function GetBitStatus(ByVal port As Integer, ByVal bit As Integer) As Integer
Try
Dim txt As String = ""
Dim ret As String = ""
If Started Then
Select Case port
Case PORTAnalog
If bit > -1 And bit < 6 Then
txt = "A" & bit.ToString & "OK"
SerPort.Write(txt)
ret = SerPort.ReadLine
If Mid(ret, 1, 2) = Mid(txt, 1, 2) Then
GetBitStatus = Val(Mid(ret, 4, 4))
Else
GetBitStatus = -1
End If
Else
GetBitStatus = -1
End If
Case PORTB
If bit > -1 And bit < 8 Then
txt = "IB" & bit.ToString & "OK"
SerPort.Write(txt)
-
26
ret = SerPort.ReadLine
If Mid(ret, 1, 3) = Mid(txt, 1, 3) Then
GetBitStatus = Val(Mid(ret, 4, 1))
Else
GetBitStatus = -1
End If
Else
GetBitStatus = -1
End If
Case PORTC
If bit > -1 And bit < 8 Then
If bit < 6 Then
txt = "IC" & bit.ToString & "OK"
SerPort.Write(txt)
ret = SerPort.ReadLine
If Mid(ret, 1, 3) = Mid(txt, 1, 3) Then
GetBitStatus = Val(Mid(ret, 4, 1))
Else
GetBitStatus = -1
End If
Else
txt = "IE" & LTrim(Str(bit - 5)) & "OK"
SerPort.Write(txt)
ret = SerPort.ReadLine
If Mid(ret, 1, 3) = Mid(txt, 1, 3) Then
GetBitStatus = Val(Mid(ret, 4, 1))
Else
GetBitStatus = -1
End If
End If
Else
GetBitStatus = -1
End If
Case PORTD
If bit > -1 And bit < 8 Then
txt = "ID" & bit.ToString & "OK"
SerPort.Write(txt)
ret = SerPort.ReadLine
If Mid(ret, 1, 3) = Mid(txt, 1, 3) Then
-
27
GetBitStatus = Val(Mid(ret, 4, 1))
Else
GetBitStatus = -1
End If
Else
GetBitStatus = -1
End If
Case Else
GetBitStatus = -1
End Select
Else
GetBitStatus = -1
End If
Catch ex As Exception
GetBitStatus = 0
End Try
End Function
Private Sub PopulateTRIS()
Dim txt As String = ""
'TRISB
SerPort.Write("GBOK")
txt = SerPort.ReadLine
If Mid(txt, 1, 2) = "GB" Then
TRISB = DecimalToBinary(Val(Mid(txt, 3, 3)))
End If
'TRISC
SerPort.Write("GCOK")
txt = SerPort.ReadLine
If Mid(txt, 1, 2) = "GC" Then
TRISC = DecimalToBinary(Val(Mid(txt, 3, 3)))
End If
'TRISD
SerPort.Write("GDOK")
txt = SerPort.ReadLine
If Mid(txt, 1, 2) = "GD" Then
TRISD = DecimalToBinary(Val(Mid(txt, 3, 3)))
End If
'TRISE
-
28
SerPort.Write("GEOK")
txt = SerPort.ReadLine
If Mid(txt, 1, 2) = "GE" Then
TRISE = DecimalToBinary(Val(Mid(txt, 3, 3)))
End If
End Sub
Private Function CheckTRIS(ByVal tris As String) As Boolean
Dim nula As Integer = 0
Dim jedan As Integer = 0
For i = 1 To 8
If Mid(tris, i, 1) = "1" Then
jedan += 1
ElseIf Mid(tris, i, 1) = "0" Then
nula += 1
End If
Next
If nula + jedan = 8 Then
CheckTRIS = True
Else
CheckTRIS = False
End If
End Function
Private Function DecimalToBinary(ByVal dec As Integer) As String
Dim res As String = ""
Dim val As Integer = 128
While val > 0
If dec - val > -1 Then
dec -= val
res &= "1"
Else
res &= "0"
End If
val /= 2
End While
DecimalToBinary = res
End Function
-
29
Private Function BinaryToDecimal(ByVal bin As String) As String
Dim res As Integer = 0
Dim val As Integer = 128
Dim final As String = ""
For i = 1 To 8
If Mid(bin, i, 1) = "1" Then
res += val
End If
val /= 2
Next
final = res.ToString
For i = 2 To final.Length Step -1
final = "0" & final
Next
BinaryToDecimal = final
End Function
End Module