Sve vise mi se svidja ovaj PIC :)
Malo sam eksperimentiosao sa njegovim USB portom i to radi jako dobro i brzo.
Ne mogu da kazem tacno kolike su cifre u pitanju ali to se krece u megabitima u sekundi, verovatno desetine!
Evo kao primer posto sam iskoristio prakticno ovaj CDC USB<>Serial sto je vrlo prakticna stvar (nema drajvera i sl), malo sam prepravio code i odkacio sam RS232 interfejs unutra a da tako kazem zadrzao taj "layer" kompatibilnosti, u *nix OS-ovima se on uredno prijavi kao seriski device i dobije se u /dev/ listi ovako nesto:
Code:
crw-rw-rw- 1 root wheel 18, 13 May 19 04:43 cu.usbmodem411
crw-rw-rw- 1 root wheel 18, 12 May 19 04:39 tty.usbmodem411
Ovo je zgodno iz razloga sto mogu da "komuniciram" sa uredjajem totalno prosto sa nativ *nix komandama, pa sam napravio prostu BASH skriptu (pazite BASH, uzasno spor) i napravio jedan ovakav primer:
Code:
#!/bin/bash
for i in {1..500}
do
echo "1qwertyuiopqwertyuiopqwerty" > /dev/cu.usbmodem411
echo "0qwertyuiopqwertyuiopqwerty" > /dev/cu.usbmodem411
done
Ova jedinica na pocetku stringa mi je palila jedan output, nula gasila. Ostali karakteri su radi probe da ga bi video gde ce da zavrse i zavrse tacno gde treba, u input buferu od USB prijemnog kanala, tacno indexirani, prelepo.
Ovakva skripta (napominjem BASH, uzas sporo) je mogla oko 100 do 200 puta u sekundi da pali/gasi pin koji sam postavio. Cak (sto je za ocekivati) duzina ovog stringa nije uticala na ukupno vreme izvrsavanja. Nisam isao preko 64 karaktera (toliko je definisan buffer u pic) da nebi dosao u cuveni buffer-owerflow error a nisam to handlovao u PIC-u :)
Jos jedna zgodna stvar, ovaj "usbmodem411" je prakticno uvek aktivan u sistemu i nema potrebe da se otvara i zatvara USB komunikacija a sa cime sam imao problema u nekim predhodnim implementacijama sa LibUSB (za PC) jer nisam mogao da drzim "daemon" tj driver uvek aktivnim nego sam uspostavljao komunikaciju on-demand. Ovo mi je ubrzanje od jedno 5-6 puta u odnosu na predhodnu implementaciju a ostao sam u fazonu "on-demand" a jos i nemam custom driver.
Poenta je da ovih 100-ak puta u sekundi su sasvim dovoljni za solidan user response na nekakve akcije bez trunke muke sa drajverima. Za vece brzine, naravno neki brzi jezik treba za ove operacije a ne BASH. Verovatno Perl ili PHP bi to radi X puta brze, sa C i ostalim "ozbiljnim" jezicima tu nema brige.
Jedino sto za sad nisam skontao kako u BASH da procitam odgovor (sa custom drajverom znam, to nije problem) pa ako zna neko moze da predlozi, neka rederekcija inputa tamo-vamo STDIN / STDOUT ili neko "cat-ovanje" device-a ...
Konkretno pitanje bi bilo kako procitati npr 64 bajtova sa seriskog uredjaja u BASH?