joosep's Aeonity Blog [entries | home | friends | archive]
[ entries | joosep entries ]
[ userinfo | joosep profile ]
[ rss feed | joosep rss feed ]

Pildid May 20th, 2007 2:23:33 pm - Subscribe
Mood | superior
TEHNO | Loogik ja IgorPlug

Ehitasin loogiku Tevalost ostetud makettplaadi peale, nüüd on ta veidi stabiilsem.
Vahepeal oli paras jama programmeerimispistiku asetusega, aga sai enam-vähem lahendatud. Polaarsus oli valepidi.

Analoog-digitaal jalgade külge tuleks ühendada nüüd pesad ja asi karbi sisse panna. Tellisin karbid kah ära, eks kunagi vaatab seda.










0 Comments | Post Comment

Loogikust viimast korda? May 16th, 2007 5:35:56 pm - Subscribe
Mood | fuzzy

Loogiku prototüübi võib lugeda valdavas osas valminuks.
Hetkel on lugemi võtmise sagedus umbes 250 hertsi, mis on küll elektrisignaalide uurimiseks häbiväärselt vähe, kuid sellega saab nii mõndagi teha.

Saatsin laualambi abil fototransistorist moodustatud pingejaguriga vastvõtjale signaale ning koostasin sellest Excelis graafiku.
Fototransistori takistus sõltub temale langeva valguse intensiivsusest, selle abil on võimalik ehitada pingejagur, mille väljundpinge on sõltuvuses valgustusest.
Pinget tõlgendab kontroller mis muudab selle vahemikus 0-3.6v(toitepinge) väärtuseks 0-255.


Pingejagur


S-O-S morsesignaal

Edasiseks võiks skeemi plaadile joota ning muuta püsivaks. Samuti tuleks tõenäoliselt välja töötada parem tarkavarile lahendus arvutile.

Kuid praegu on plaanis hakata arendama veebikaamera abil nägevat sihtijat.

loogik3.zip

0 Comments | Post Comment

Loogik May 6th, 2007 8:42:40 pm - Subscribe
Mood | asd
TEHNO | Loogik

Loogiku edasi arendamine on täies jõus ning põhiliselt on asi praegu koodi taga.
Oleks tarvis teha wxPythoni abil mingit sorti
graafiku joonestamise liides, kuid siiamaani pole ma ennast sundinud wxWidgetsi
graafilist poolt õppima.

Eelmises blogipostituses kirjeldatud probleemi - korraga rohkem kui 8 baidi info
liigutamist arvuti ning seadme abil USB-d kasutades - jaoks olen leidnud lahenduse,
mis on esialgu lihtsam, kuid võib-olla vähemtäiuslikum.

Olles uurinud minu loogikPC-programmi koodi, võite olla märganud, et on kasutatud
funktsiooni controlMsg.

Järgnevalt räägiksin veidi antud funktsiooni tööpõhimõttest:
USBtiny abil rakendatud USB-seade ootab ebastandartseid pakette ning reageerib nendele.

Üks usb-pakett (setup-tüüpi, see, millele seade vastab) koosneb kaheksast baidist.

USB setup-pakett

Bait koosneb kaheksast bitist, ning seda võib kujutleda kui

0000 0000

Vastavalt kahendsüsteemile võib iga 0 olla ka 1.
Ühe baidi maksimumväärtus on 255 ning miinimumväärtus 0, selles võib veenduda
kahendsüsteemi kasutades.

Meid huvitavad setup-paketi 2. bait ning 5. bait.

2. baidis peitub seadmele saadetud käsk - mida peab tegema. Erinevaid käske võib seega
kokku olla 256. Loogiliselt saab korraga, ühe paketiga, anda edasi ühe käsu.

5.bait on järjekorrabait, teatud usb-rakendused kasutavad seda, kuid antud juhul
võime seda ise edukalt rakendada. Selle abil saan seadmele teada anda, kustkohast lugema hakata.

Ainsaks probleemiks on selle piiratus - näiteks EEPROM mälu on kiibil 1024 baiti, kuid ma saan öelda vaid järjekorranumbri 255. Kahe baidi kasutamisel saaks piirangu tõsta 2^(2*8)-ni, ehk 65536-ni.

Minu rakenduses (main.c) saadab arvuti seadmele käsu, ning seade salvestab 5. baidi väärtuse endale mällu. Hiljem saab selle põhjal funktsioonides usb_in(suund seadmest arvutisse) ning usb_out(suund arvutist seadmesse) arvutada andmete asukohakoha.

loogik2.zip Kogu lahenduse lähtekood

Niipalju siis USB-st.
Vahepeal on tekkinud soov tegeleda ka millegi mehhaanilisema, seetõttu hakkan arendama ka arvutile kahest samm-mootorist koosnevat juhitavat turretit. Hetkel on see üsnagi algstaadiumis, kuid
edusamme on juba tehtud.

Kuid sellest mõni teine kord.

0 Comments | Post Comment

Loogikust ning usbst May 3rd, 2007 7:42:53 pm - Subscribe
Mood | asd

Panen siia kirja pähe tulnud mõtte, et meelest ei läheks.

Vaja on saata mikrokontrollerist korraga rohkem kui 8 baiti - see tähendab, et tuleb teha mitu ülekannet.

Plaan on teha eraldi käsk arvutist mikrokontrollerisse, mis täpsustab talle, mida ta saatma peab, ning usb_in funktsioon hakkab seda töötlema.

Näiteks:

Arvutipoolne
(1) Ütlen kontrollerile, mida ma temalt tahan ning kui palju
(2) Hakkan kontrollerilt infot 8 baidi kaupa vastu võtma(küsima)

Kontrolleripoolne
(1) Saan teada, mida minult tahetakse ning kui palju
(2) Globaalmuutujate abil lükkan "järjehoidjat" iga saatmise korral edasi, saadan korraga 8 baiti

Kaval mõte oleks näiteks üks bait pühendada järjehoidjaks, mis kontrollib, et oleks mälus õigel kaugusel, kuid see võib osutuda probleemkseks suuremate ülekannete tegemisel (üks bait võib hoida arvu kuni 255).

Lahenduseks sobiks näiteks rekursiivne lugemine.


Tuleb meeles pidada, et USB protokolli kohaselt on juht(host), see kes kontrolib kõike. Seade ise saab andmed ainult valmis panna ja loota, et temalt neid nõutakse.

Muust küljest: olen mõelnud, et ehk peaks kirjutama veidi vähemtehniliselt. Hea või halb mõte?

1 Comments | Post Comment

USB edusammud May 1st, 2007 7:44:30 am - Subscribe
Mood | asd
TEHNO | USB

Hoolimata vanameelsete jõudude kriminaalsest käitumisest pealinnas on õnnestunud USBtiny abil saada ATmega88-l tööle USB.
Esimesed sammud loogikaanalüsaatori valmimise jaoks on tehtud.
Paistis, et probleemid seisnesid kontrolleri ebastabiilsuses, mille vastu aitas Watchdog Timeri kasutuselevõtt.
Samuti leidsin uue mooduse andmesiinide pinge vähendamiseks - kontrollerit toidetakse läbi kahe järjestikkuse ränidioodi,
mis koos tekitavad pingelangu umbes 1.4 volti. Stabilitronid olen igaks juhuks siiski veel sisse jätnud.

Järgnevalt pilt USB piirkonnast makettpaneelil.



Riistvaralisest poolest pole suurt midagi vahepeal muutnud, välja arvatud USB-osa kontrollerile lähemale paigutamine.
On ilmnenud, et arvuti ei tunne USB-seadet ära, kui plaadiga on ühendatud programmaator.



Et arvuti tunneks seadme korralikult ära, tuli seadistada driverid, mille genereerisin LibUSB-Win32-ga kaasas oleva programmi abil.

Arvutipoolse juhttarkvara tegemiseks valisin Pythoni ning siiamaani on see tundunud õige valikuna. Python kindlustab tarkvara lihtsa ülekandmise teistele platvormidele ning vähendab
väljatöötamiseks kuluvat aega tunduvalt. LibUSB kasutamiseks Pythoniga ei kasutanud ma mitte USBtiny-ga kaasas olevat klassi, vaid PyUSB abil välja töötatud eriklassi.

Kontrolleritarkvara loomisel esinesid mõningased probleemid, mis olid tingitud minu C-keele puudulikust valdamisest.
Hetkel on kontroller seadistatud vastavalt juhttarkvarale kirjutama/lugema EEPROM-tüüpi sisseehitatud mälu.

Juhttarkvara kasutusjuhend:
python loogikpc.py "2 2 2 2 2 2 2 2" <- võtan puhvrisse arvu 2. Arve peab olema täpselt 8.
kood:1 <- kirjuta mällu

kood:2 <- loe mälust

kood:3 <- välju

Siin on kogu praegune loogiku kood, hetkel veel kommenteerimata ning ilustamata.

Järgmisteks eesmärkideks oleks teha programmile sobiv graafiline liides, selleks kasutan tõenäoliselt GTK-d või wxWidgetsit.

Varsti lisan ka skeemi.

0 Comments | Post Comment

Cerulean Template
Create your own Free Aeonity Blog Today
Content Copyrighted joosep at Aeonity Blog

navigation
next page