Onkohan jollain kokemusta atmelin kontrollerin ja tietokoneen välisestä liikenteestä..?
Esim. Lämpötilan mittaus kontrollerilla ja lukeminen ohjelmallisesti tietokoneella?
Katoin osia ja pelkkä rj 45 kortti maksaisi jo muutaman kympin.
Ohjelmapuolen ajattelin toteuttaa koneelle visual basic illa. Kunhan tän rautapuolen saisi ensin kuntoon...
Esim. Lämpötilan mittaus kontrollerilla ja lukeminen ohjelmallisesti tietokoneella?
Katoin osia ja pelkkä rj 45 kortti maksaisi jo muutaman kympin.
Ohjelmapuolen ajattelin toteuttaa koneelle visual basic illa. Kunhan tän rautapuolen saisi ensin kuntoon...
Vastaukset 18
Vanhimmat
Atmelista ei ole kokemusta, mutta olen liittänyt pic-kontrollerin onnistuneesti tietokoneeseen sarjaportin (COM-portti) kautta.
Katso löytyykö siitä sun atmelista sarjaporttia . Se on suhteellisen helppo tapa siirtää dataa tietokoneeseen. Luultavasti visual basiciin löytyy helposti valmis kirjasto sarjaporttiliikenteeseen.
Koneeseen kannattaa hankkia halpa usb-com-adapteri ebays. esim http://www.ebay.com/itm/NEW-USB-To-TTL-COM-Converter-Module-buildin-in-CP2102-/170872574767?pt=LH_DefaultDomain_0&hash=item27c8cc932f.
Toi mokkula näkyy koneessa virtuaalisena COM-porttina.
Joo selvennökseksi vielä että en käytä mitään kehitysalustaa. Eli kontrolleri on koelytkentälevyllä ja ohjelmointi tapahtuu spi mkiillä.
Eli pitäisi laitella tuohon sitten mitä ikinä tarvitsee.
Koneessani ei ole sarjaporttikytkentää. Löytyy vain usb ja rj45 liitäntämahdollisuudet.
Tuosta rj45 systeemistä tuntuu löytyvän kaapelin testaukseen ohjeita, joilla en siis tee mitään.
Eli siis rj45 jackin kytkentää kaipaisin. Ilmeisesti spi väylä-rx-tx pinnit, järjestys on siis hukassa. Alustavaa koodipätkää löytyy varmaan netistä avr tcp/ip;llä. Mutta kuten mainitsin niin rauta ensin kuntoon.
Toinen vaihtoehto on usb mutta..
On taas niin peukalo keskellä kämmentä että.
Siis onko sulla nyt sellainen kontrolleri, josta löytyy rautatasolla ethernet-tuki?
Noi RX/TX pinnit vittaavat nimenomaan sarjaporttiin. Tietysti voi olla, että niihin samoihin pinneihin on multipleksattu ethernetin pinnit.
Täsmällisen kytkennän luulisi löytyvän kontrollerin datasheetistä.
Noniin..
Eipä näyttäisi olevan missään atmelin 8-bittisissä ethernet tukea...
jospa jollain on sitten käteviä vinkkejä / linkkejä josta pääsisi alkuun joko attinyillä tai atmegoilla?
Arduinossa olis ollu usb valmiina. Tässä erillisiä palikoita.
http://www.miniinthebox.com/fi/enc28j60-ethernet-moduuli-arduino-toimii-virallinen-arduino-boards_p683865.html
http://www.miniinthebox.com/fi/_p421819.html
Ajasikohan tuo V-usb tässä haetun toiminnan?
tuota noin... ... ei kannata mennä kytkemään omaan koneeseen mitään ihan randomina. Siinä saattaa emolevy kärähtää.
Jos sä olet löytänyt V-usb pinnin kontrollerista, niin sitten siinä on jonkinlainen usb-tuki. Kontrollerista pitäisi löytyä silloin muutama muukin usb:hen liittyvä pinni.
Vaikka saisitkin kytkettyä kontrollerin oikeaoppisesti koneeseen kiinni, niin ne ongelmat ei siihen vielä lopu. Koneelle pitää olla asennettuna oikea usb-ajuri ja sun pitäisi visual basicista käsin pystyä käyttämään kyseistä ajuria oikein. Lisäksi usb käyttää suhteellisen mutkikasta protokollaa tietojen vaihtamiseen, joten kontrollerilla pitäisi pyöriä kyseinen protokolla. Löytyyköhän aivan pienimmistä kontrollereista edes kapasiteettia tuohon hommaan?
Kannattaa edelleenkin harkita sarjaporttia. Kontrollerista ei tarvitse kytkeä kuin kaksi pinniä usb mokkulaan kiinni, niin homma pelittää.
V-usbilla tarkoitin oheisen linkin takaa löytyvää ohjelmistoa:
http://www.obdev.at/products/vusb/index.html
Joku oli tehnyt tällaisen systeemin myös 8-pinniselle attinylle niin eiköhän se 20 pinnisessä sekä atmegoissa toimi.
Kytkentä vaikuttaa melko yksinkertaiselta 2 datalinjaa virrat (ei toki suorakytkentää). V-usb ohjelmisto löytyy myös oheisen linkin takaa.
Jos tulee vielä täystyrmäys tähän niin sitten täytyy varmaankin lähtä kaivelemaan tutoriaaleja sarjaporttihommiin.
joo o. Kyllähän tuo V-usb saattaa toimiakin. Jos kontrollerista löytyy vaan tarpeeksi megahertsejä (vähintään 12MHz), niin se pystyy käsittelemään usb-protokollaa.
Kokonaan toinen asia onkin se, miten tuota pystyy visual basicin kautta käyttämään. Luultavasti ainut fiksu tapa taitaa olla noiden c-koodien paketoiminen omaan dll-kirjastoon. Kirjaston kutsuminen taitaa olla suhteellisen helppoa visual basicistakin käsin. Työtähän toikin tosin teettää...
Olis vaan niinpaljon helpompaa varsinki kun tietotaito ei riitä, käyttää valmiita palikoita. Tuossa uunossa on toteutettu usb liikenne ATMEGA16 kans.
http://arduino-info.wikispaces.com/file/detail/Arduino_Uno_Rev3-schematic.jpg/346644662
Vanhemmassa taas FT232
http://brittonkerin.com/annotateduino/annotatable_duemilanove.html
Alun perin valitsin avr:t sen takia koska ne on huomattavasti kooltaan pienempiä ja saa itse värkätä miten haluaa ja laittaa loppupakettiin pienempään tilaan. Myöskin on selvä hinta ero.
-joo tiedän että arduino nano on pieni, mutta hinta on siinä lähtien 30e ja atmega328 kontrolleri lähtöhinta alle 3e.
Vastapainona joutuu sitten avr:n kanssa etsimään ja selvittämään jos haluaa tehdä jotain erikoisempaa, mutta tämä on tietoinen valinta.
Ja myönnän että tietotaito ei ole sillä tasolla että pystyisin itse soveltamaan, mutta taitaa kirjoittajalle se tarkoittaa sitä että koskaan ei voi kehittyä ja pitäisi mennä sieltä missä aita on matalin?
Alun perin valitsin avr:t sen takia koska ne on huomattavasti kooltaan pienempiä ja saa itse värkätä miten haluaa ja laittaa loppupakettiin pienempään tilaan. Myöskin on selvä hinta ero.
-joo tiedän että arduino nano on pieni, mutta hinta on siinä lähtien 30e ja atmega328 kontrolleri lähtöhinta alle 3e.
Vastapainona joutuu sitten avr:n kanssa etsimään ja selvittämään jos haluaa tehdä jotain erikoisempaa, mutta tämä on tietoinen valinta.
Ja myönnän että tietotaito ei ole sillä tasolla että pystyisin itse soveltamaan, mutta taitaa kirjoittajalle se tarkoittaa sitä että koskaan ei voi kehittyä ja pitäisi mennä sieltä missä aita on matalin?
FTDI tarjoaa USB-RS232 -muunnosmikropiirejä ja -kaapeleita.
http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm
Toimituskulujen takia voi kuitenkin olla fiksumpaa tilata elektroniikkamyymälästä (jolloin voi samalla tilata muutakin; esim Mouserilla tais olla niin että vähintään 65 EUR alv 0% tilaus tulee postikuluitta ) kuin suoraan valmistajalta, jolloin tulee postikulut päälle.
Tässä suoralinkit Mouserin myymiin (mutta siis FTDI:n valmistamiin) muunnoskaapeleihin, sekä 3,3V että 5V versiot:
http://fi.mouser.com/ProductDetail/FTDI/TTL-232R-3V3/?qs=sGAEpiMZZMvYU0Oh5y3R5sMdbLgwj41z
http://fi.mouser.com/ProductDetail/FTDI/TTL-232R-5V/?qs=sGAEpiMZZMtf8aSAtgR7DpPMdam%2fwe00
Hyvää:
Kompakti rakenne ja valmis ratkaisu kun haluat liittää 3,3V tai 5V signaalitasoa käyttäviä sarjaporttiliitäntäisiä laitteita (kuten ATMEL AVR) tietokoneen USB -porttiin.
Huonoa:
1. Eivät välttämättä ole hyvä ratkaisu, JOS lopputuloksen pitää olla 100% USB -standardin mukainen mukaanlukien myös USB -virransäästötila. Eivät nimittäin kerro tuon 6-nastaisen piirikorttiliittimen kautta mitenkään tietoa siitä, että "nyt pitäisi siirtyä USB -virransäästötilaan".
2. Vaikka tämän kaapelin käyttö myös AVR -ohjelmointilaitteena on mahdollista, se on hieman valmista ohjelmointilaitetta (tai LPT -porttiin tehtyä kytkentää) hankalampaa, ja vaatii manuaalisen ohjelmointitilan aktivointikytkimen.
Syy: PC:ltä AVR:lle tarvitaan ohjelmoinnissa vähintään 2, mutta mieluiten 3 kpl signaalilinjoja. Tuosta löytyy tasan 2 tuohon suuntaan, mutta ei sitä kolmatta.
Siksi AVR:n ohjelmointitilan aktivointi täytyy tehdä manuaalisella kytkimellä sensijaan, että PC voisi suoraan ohjata ko. Inputtia AVR:n päässä.
Tuossa 6-napaisessa liittimessä siis on seuraavat nastat (ei välttämättä tässä järjestyksessä):
2 digitaalista tulonastaa
2 digitaalista lähtönastaa
1 GND eli maataso
1 käyttöjännitenasta, ainakin 5V versiossa se on se sama 5V mikä otetaan tietokoneen USB -portista. En ole 100% varma, että jos ostat 3,3V -version, ono myös käyttöjännitenasta silloin 3,3V (vai siinäkin 5V) vai koskeeko tuo 3,3V vain signaalinastojen signaalitasoja.
Hyvää tuotteessa se, että ajureita löytyy useisiin windows -versioihin sekä linuxiin, ja ajurit sekä tekninen dokumentaatio on ladattavissa maksutta FTDI:n omilta kotisivuilta:
http://www.ftdichip.com/
Ajuria voi jopa (ainakin windowsissa, linux -versiosta en tiedä) käyttää kahdella eri tavalla:
a) siten, että emuloidaan sarjaporttia, ja kaikki datasiirto tapahtuu windowsin normaalilla tavalla käsitellä sarjaporttia, virtuaalinen sarjaportti saattaa olla vaikkapa COM11.
b) ftdi:n kehittämän DLL:n avulla, jolloin oman ohjelmasi tulee kutsua asianmukaisia funktioita tuossa FTDI:n kehittämässä DLL:ssä.
Tämä vaihtoehto on erityisen hyvä silloin, jos tarvitset muuta kuin standardin mukaista sarjaporttiliikennettä, esim. ns. bit banging -tekniikkaa, esim. juurikin AVR:n ohjelmoinnissa.
Ainakin Delphillä onnistuu mainiosti molemmat em. vaihtoehdoista, luultavasti Visual Basicistakin jos tutustuu VB:n dokumentointiin siitä, miten esim. C:llä tai Delphillä tehdyn DLL:n funktioita kutsutaan.
DLL:n suurin etu onkin juuri tuo, riippumattomuus mi8stään märätystä ohjelmointikielestä, eli kielellä X tehtyä DLL:ää voi kutsuia kielellä Y tehdystä ohjelmasta.
Mikäli häiritsee ajatus siitä, että em. kaapeli ei toteuta USB -virransäästötilaa asiallisesti (varsinkaan jos muu laite ottaa virtansa PC:n usb -portista tuon kaapelin kautta), niin FTDI:ltä saa myös pelkän mikropiirin joka tekee tuon USB -muunnoksen. Mutta mikropiirien kanssa joudut itse tekemään juotoksia pintaliitoskomponentin kanssa, sillä pintaliitosmikropiiri on käsittääkseni ainoa tajolla oleva versio.
Tässä mielessä voisi olla parempi tälläkin palstalla aiemmin mainittu toisen valmistajan muunnospiirilevy (joka ilmeisesti käyttää samaa FTDI:n mikropiiriä sekin)
Lisää aiheesta ja linkit paeae:n ja sparkfunin myymään muunnospiirilevyyn, jos FTDI:n oma kaapelin ei em. puutteistaan johtuen miellytä:
http://keskustelu.suomi24.fi/node/11270864
FTDI:ltä löytyy myös tällainen valmis palikka: http://fi.mouser.com/ProductDetail/FTDI/UB232/?qs=/ha2pyFadugCqdm6U58lyspsRhZ6HQkFB6zKPMYNFlg=
Se kertoo virransäästötilasta ja I/O-pinnejä on enemmän, joten SPI-pohjainen ohjelmointi onnistuu helposti. Helpommalla kyllä pääsee ostamalla ohjelmointipalikan, joka osaa myös toimia USB-sarjamuuntimena. Mulla on tämän edellinen versio: http://www.mattairtech.com/index.php/featured/zeptoprog-ii.html Tosin tuota en enää käytä, koska ostin JTAGICE3:n, jolla voi myös debugata.
Harmi, että kaapelimuodossa löytyy vain noita 6 (tai vielä vähemmän) -nastaisia.
Linkkaamasi ilmeisesti käyttää FT232R -piiriä. Ikävä kyllä, samaa piiriä käyttävät monet muutkin tuotteet, esim. tässä ketjussa mainitut FTDI -muunnoskaapelit.
Parempi versio olisi FT232H -piiri, on teknisesti edistyneempi, ja mm. puskurimuisti on isompi.
Täällä: Sivu:
https://www.sparkfun.com/products/718
Hakumerkkijono sivun sisällä:
Also, the features of the FT232H are worth looking into to make a similar board
löytyy käyttäjän kommenttia aiheesta FT232R vs. FT232H
Eli jostain syystä kukaan ei ilmeisesti tee hyvin suunniteltua muunnoskaapelia, eli käyttäisi tuota edistyneempää FT232H -piiriä ja sisältäisi riittävästi nastoja ja myös USB -virransäästötila otettu suunnittelussa huomioon hyvin.
Mekaanisesti tuo FTDI:n oma muunnoskaapeli miellyttää, ja se on myös hintakilpailukyvyltään parempi, sillä muihin joutuu yleensä ostamaan erikseen USB-MiniUSB -kaapelin, ja ainakin Suomesta ostettuna tuollainen (pelkkä kaapeli) on kalliin (Biltema) ja riistokalliin (monet muut myyjät) väliltä. Ulkomaisista firmoista saa monesti halvemmalla, mutta tällöin em. moduli ja kaapeli pitäisi saada samasta paikasta, ettei joudu maksamaan toimituskuluja molemmista erikseen.
JOS joutuu tilaamaan pelkän kaapelin ulkomailta, siinä käy helposti näin:
kaapeli: 1 euro
posti- ja käsittelykulut: 10 euroa
yhteensä: 11 euroa.
Eli itse tuote saadaan noin näyttämään erittäin halvalta (= 1 euro), mutta kun toimituskulut lasketaan mukaan, niin käynti Biltemassa olisikin halvempi vaihtoehto. Erityisesti ebay:ssä tuo, että toimituskulut ovat moninkertaisesti sen mitä itse tuote maksaa, on enemmän sääntö kuin poikkeus.
em. syystä vältän tilaamasta ebay:stä yhtään mitään.
Paikan ylläpito kun tuntuu täysin hyväksyvän tuollaisen vedätyksen, jossa tuote on superhalpa ja myyä tekee voittonsa ylimitoitetuilla toimituskuluilla.
Jos joku tietää tuotteen, joka
a) mekaaniselta suunnittelultaan vastaa FTDI:n omaa muunnoskaapelia siinä, että toisessa päässä on suoraan PC:hen käyvä USB -liitin (EI siis miniUSB:ta)
b) olisi enemmän nastoja ja USB -virransäästötila otettu kunnolla huomioon suunnittelussa
c) käyttää edistyneempää FT232H -piiriä
ja sitten kun olisi vielä:
a) hinnaltaan kohtuullinen
b) saatavissa esim. mouser.comista (suosikki ostopaikka siksi, että jos harrastaa elektroniikkaa, sieltä voi samalla tilata muitakin elektroniikkakomponentteja, ja jos tilaus on vähintään 65 EUR alv 0%, on toimitus ilmainen !).
niin vielä parempi.
Yksittäisten tuotteiden tilaaminen jostain, josta ei ole muuta ostettavaa, tulee kalliiksi juurikin toimituskulujen takia.
Ja eipä taida e-ville.com myöskään myydä tämän alan tarvikkeita.
On kunnostautunut siinä, ettei toimituskulut ole törkeän kalliita.
Lisätään vielä yks vaihtoehto, nimittäin I2C väylä(two-wire interface). Tuo on vaikeustasoltaan/käytettävyydeltään mielestäni RS232:n(helppo) ja USB(vaikeahko) välimaastossa. Eli lyhyesti asetetaan i2c-osoite avr:lle, etsitään jokin toimiva esimerkkikoodi, joka perustuu command-käsittelyyn ts. paketti on muotoa start address command data(r/w). Helpoimmalla pääsee, kun tekee omat komentonsa luvulle ja kirjoitukselle koska tällöin voi käyttää linuxin tiedosto-metaforaa lukuun/kirjoitukseen menestyksellä. Jos samassa komennossa on sekä lukua että kirjoitusta väylälle, niin menee vähän työläämmäksi koodaus.
Linuxiin löytyy suoraan bit-bang algoritmi rinnakkaisporttiin toteutetulle väylälle(ei tosin saa olla usb:in päässä) lisäksi on olemassa jotain usb/tiny dongleja, en kylläkään ole tesannut. Lpt versio on aika hidas, mutta varmatoiminen. Monissa emolevyissä on myös tarjolla sisäisiä i2c-väyliä(eri nimillä), tosin osoitekonflikteja voi olla luvassa, jos niitä käyttää.
Eiköhän helpoin ja halvin tapa ole ihan perus sarjaliikenne uartin kautta. Kontrollerissa on suoraan hardislähdöt uartille ja siitä ne pari pinniä kiinni euron usb -> uart sovittimeen, jolloin datan saa luettua suoraan vb:llä ilman minkään sortin rassaamista, ei tarvita edes mitään ulkoisia kirjastoja. Kontrolleri ja koneen softa tarvitsee kumpainenkin alle kymmenen riviä koodia toimivaan yhteyteen.
Samalla ja eri kannalla. Jos tarvitaan ohjelmastruktuuria, jolla hanskata se että laite tekee useita erilaisia hommia.. en näe syytä, miksi ei käyttäisi valmista ratkaisua i2c-muodossa. Tokihan senkin voi hanskata itse kehittämällään protokollalla, mutta eihän se silloin tod.näk. ole kovin yhteensopivaa, jos joskus tarttee jotain laajentaa. i2c-väylään voi plugata vaan toisen chipin ja on käytössä lisää io-nastoja, esimerkiksi. Tokihan sarjaportinkin voi ketjuttaa vaikka SPI-väylällä toiselle piirille, mutta siitä tulee vaan hirveä sekamelska koodia erinäisiin paikkoihin ja sen hallittavuus katoaa aika äkkiä..