Atmel se zpožděním asi 5 let taky vydal miniaturní 6-pinový kontrolér, konkrétně ATTINY10, který vydává jako náhradu řady 10F a přizpůsobil tomu jak pinout tak programovací protokol. Je to trochu osekaná (ale stále pěkná) architektura AVR, ale stejně má bohatší výbavu než starší PIC, ovšem je taky dražší. Už jsem si s ním trochu hrál, ale nenašel jsem nějaké dobré použití, snad kromě elektronické kostky. Jako nevýhodu bych označil, že z programu nelze žádným způsobem permanentně uložit ani bajt. Tj. nemá EEPROM a flash není z programu zapisovatelná, což je s podivem, protože vlastní programovací mechanismy to má včetně speciálních registrů.
Jeste bych dodal, ze diky docela velke ROM je mozne, aby ta regulace analog->PWM (takze vlastne taky analog :-) byla hodne nelinearni, proste mit naprogramovane nejake podminky i mensi prevodni tabulky. To se s „klasickou“ technikou, tj. operacnim zesilovacem dela o dost hur, nehlede na to, ze ten zesilovac mnohdy vyjde i draz nez tyto PICprckove :-)
UART je sice hezký, ale pokud vůbec, pak je z počítače vyveden v úrovních ±12V, takže se nevyhnete přinejmenším MAX232.
SPI a I2C jsem zatím na zadním panelu počítače vyvedené neviděl (i když by se mi to líbilo).
USB znamená trochu kódován, ale na druhou stranu 0–1 externích rezistorů, jeden filtrační kondenzátor, levný konektor, a jinak v podstatě nic. USB navíc poskytne i napájení, takže nároky na příkon vás pálí jen u opravdu malých počítačů.
Stavíte-li periférii pro běžný počítač, USB je často nejmenší zlo, a to i s tím kusem kódu, který s ním komunikuje.
Zprasené sériáky jsou zlo. Propojíte dvě zařízení s podobně zpraseným sériovým portem, a divíte se, proč to nechodí.
Už jsem viděl i zařízení, kde je výstup z procesoru PXA270 vedený bez diody nebo jakékoliv ochrany rovnou na vstup sériového portu (příklad: http://www.penguin.cz/~utx/hardware/Sharp_CE-170TS/ ). Od té doby při každém zasouvání sériového konektoru trnu, kdy to vyhoří.
Rezistor zničení při výboji statické elektřiny nezabrání, a průrazu, pokud se při zasouvání vlivem náhodného pořadí pinů při spojování objeví záporné napětí, také nemusí.
Buď náročnější předělání PCB (kondenzátory, diody), anebo před spojováním konektorů obě zařízení galvanicky propojit, a pak nejdříve zapojit RS-232 stranu, pak teprve nízkonapěťovou.
Tak jsem se schválně podíval, jaké jsou mezní hodnoty pro PXA270:
Mezní napětí na vsupu: –0.3V-+4V
Mezní proud na vstupu: 5mA
Mezní ESD ochrana: 2kV, nejvýše 3 rázy
Pracovní výstupní napětí na zmíněném kabelu: 0V-3,3V
Naproti tomu řešení pomocí MAX3245E nabízí:
Mezní napětí na vsupních pinech: –25V-+25V
Mezní napětí na výsupních pinech do trvalého zkratu: –13,2V-+13,2V
Mezní ESD ochrana (vzdušný výboj nebo lidské tělo): 15kV
Mezní ESD ochrana (kontaktní výboj): 8kV
Pracovní výstupní napětí při napájení 3,3V: –5V-+5V
No on sice vysilac by skutecne mel dodavat ±12V, jak spravne pisete, ale prijimac by jiz mel rozeznavat hladiny ±3V, takze na mnoha zakladovkach ve skutecnosti je na seriaku jen 5V, treba na spouste notebooku. A to se jiz da s par diodama prakticky primo na MCU propojit.
Ale ze SPI nebo I2C na kazdem pocitaci by bylo pekne, s tim souhlas, je skoda ze to v prvnich PCckach nebylo (ale tam zas byla paralelni linka s TTL, tam se to dalo odsimulovat).
Nejvetsi problem s USB neni v signalovych charakteristikach (tam je to rekl bych kvuli diferencnimu prenosu lepsi nez RS-232C), ale v tom, kolik pameti sezere program v MCU na to, aby byl skutecne USB-compliant. To uz je mozna i Ethernet jednodussi :-)))
Naimplementovat ethernet je složitější. Kdyby to bylo jednodušší, měli bychom už před 15 lety ethernetové myši a klávesnice a USB by nikdy nevzniklo.
USB bylo navrženo přesně proto, aby většinu práce odvedl host a jeho řadič (OHCI, EHCI) nebo CPU (UHCI), a v periférii mohl být hloupý a levný čip. Až na poněkud složitější kódování (vyžádané jedinou datovou linkou) a identifikaci zařízení (vyžádané uživatelskou přítulností) to není o mnoho složitější než sériový port.
To, že se to časem zvrtlo, a spousta USB zařízení má uvnítř USB<->UART, USB<->I2C, USB<->SPI, USB<->(S)ATA nebo USB<->SCSI (= nejběžnější protokol pro mass storage), to už je jiná.
Je to o dost složitější než sériový port! To vám říkám jako člověk, který se tím 6 let zabývá. RS-232 je naprosto primitivní asynchronní point2point rozhraní, které specifikuje v podstatě jen komunikační rychlosti a základní, velmi primitivní protokol (start/stop bity, parita, datové bity…). USB je synchronní sběrnice hvězdicového typu s různými dedikovanými typy zařízení pro její realizaci, s jasně definovaným povinným protokolem, jehož komplexnost, robustnost a universálnost se nedá s primitivitou RS-232 v žádném případě srovnávat.
Pokud stavíte zařízení, které má mít USB host, tak souhlasím: USB je podstatně složitější. (Zvlášť Mass Storage je chuťovka, kdy USB flash může komunikovat několika různými protokoly, a vám nezbývá než implementovat všechny.)
Pokud stavíte USB klienta (oč asi šlo v diskusi), stačí, aby zareagoval na pár povelů, a zbytek řešit nemusí.
A ještě bych doplnil – obzvláště, když článek je o PICech – že Microchip dělá i MCU s podporou USB – např. PIC18F2550, PIC18F4550… Vyvedeny má pro tyto účely diferenciální D+/D- (jiné MPU to nemívají a nevyhovují tak ani z elektrického hlediska) a USB stack se realizuje čistě softwarově. Potřebný ovladač v C Microchip nabízí zdarma ke stažení a zakomponování do uživatelova projektu v MPLAB. Výhodou je, že to narozdíl od různých po domácku flikovaných řešení splňuje USB specifikaci. Zdrojáky v C (včetně implementace HID protokolu) mají cca 300 KB.
Atmel také vyrábí jednočipy s nativním USB. Nejnižší model AT90USB82 s 8kB flash se dá koupit pod $4.
Bastlíři, které USB specifikace nezajímá, často používají místo D+ a D- obyčejné GPIO. USB v nejnižší rychlosti zvládnou už vyšší modely AT Tiny za 40Kč, a navíc mají (narozdil od AT90USB) DIP pouzdro. Stačí oželet 1kB paměti.
U SPI a IIC to není nijak. Jsou to lokální sběrnice – mají pouze specifikované rozhraní a vzorkování v závislosti na hodinovém signálu a jeho polaritě; IIC má ještě specifikovány 3 různé protokoly, frekvence hodinového signálu a maximální kapacitu sběrnice (400 pF). USB je externí sběrnice.
1) Nepleťte si RS-232 a UART. Jsou to dvě různé věci.
2) SPI i IIC jsou lokální sběrnice. Nemají specifikované elektrické charakteristiky, proto je není možné vyvést mimo DPS – resp. postrádalo by to smysl.
3) Realizovat softwarově USB řadič neznamená „trochu“ kódování, ale hodně kódování – aby to vůbec nějak fungovalo. Aby to fungovalo tak, jak požaduje standard, bude to chtít ještě několikrát tolik kódování. :-)
1) Vím. Chtěl jsem říci, že výstupy UART typicky vyvedeny nebývají, pouze RS-232. A k jeho použití potřebujeme mít v periférii převodník úrovní, který je někdy dražší, než samotný mikrokontroler.
2) Pro bastlíře by bylo skvělé mít možnost přípojit malou destičku s libovolným integrovaným obvodem s SPI nebo I2C. Kdyby existovala rozumná standardizace, mohly by mít počítače minisloty pro I2C nebo SPI zařízení. Dnes u každé hlouposti s jedním I2C obvodem musí být často mnohem dražší převodník z USB nebo PCI Express.
Bastlíř zpravidla není tím mainstreamovým cílovým zákazníkem, na něhož by se zaměřoval marketing výrobců PC. ;-) Navíc – „rozumná standardisace“ by znamenala to, že by přestalo být možné připojit malou destičku s integrovaným obvodem s SPI nebo IIC, protože pro výrobce IO jsou tyto jednoduché lokální sběrničky zajímavé právě kvůli té jednoduchosti a specifikaci elektrických paramterů stylem „viz specifikaci TTL/LVTTL/CMOS – dle potřeby“. Pokud bych to chtěl vytáhnout ven a standardisovat, začnou v tom lítat napěťové a proudové úrovně, jejich tolerance, impedance, přenosové rychlosti, specifikace konektorů, kabeláže… SPI a IIC je zkrátka vymyšleno a určeno k něčemu jinému, než aby se to používalo místo externích sběrnic, jako je RS-232, RS-485, CAN, USB apod. V průmyslové branži se běžně používá ta RS-485, takže nějak „externalisovat“ SPI/IIC nemá smysl, pro PC je SPI/IIC zase příliš výkonnostně omezené. Při návrhu nějak rozšiřitelného embedded zařízení (např. možnost přicvaknutí nějakého modulu pomocí přímého konektoru, headeru apod.) se SPI a IIC používá velice hojně jako takový do jisté míry standard místo dřívějšího vyvádění sběrnice procesoru.
do I2C se da treba lezt skrz VGA a DVI vystup na nvidia kartach, dokonce je to registrovany jako nativni I2C bus driver v linuxu http://us.download.nvidia.com/XFree86/Linux-x86/256.35/README/i2c.html
Neni to uplne pravda. USB je komplikovanejsi, ale je treba si uvedomit i vyhody. Mensi konektory (a dobre popsane), jasne definovane napajeni (5V/500mA), rozsireni mezi ruznymi platformami (PC, Apple, atd), moznost retezit vice zarizeni (USB hub) a take moznost vyssich prenosovych rychlosti.
Take SW implemnetace USB v MCU ATMEL AVR navrh amaterskych konstrukci s USB znatelne zjednodusila, podobne jako dostupnost FTDI cipu…
Muzete poslat nejaky odkaz, ktery Vase tvrzeni podporuje? USB, potrebuje presny zdroj hodinoveho kmitoctu a take vice RAM, nez ma tento pidi MCU… Ano, AVR procesory zvladnou SW implementaci USB, ale jedna se o lepsi MCU, nejnizssi je snad ATtiny2313, ktery ma 128B RAM a moznost pripojit externi zdroj hodin (krystal 12MHz).
Záleží na tom, co považujete za přesné hodiny. Interní RC oscilátor lze kalibrovat pomocí samotné USB komunikace (detaily neznám) a přesnost je dostačující. Zatím nejmenší USB-schopné AVR co znám je ATtiny25, shodou okolností jsem ho využil na programování onoho šestipinu ATtiny10 :) 2KB paměti, což je 1K instrukcí, není opravdu mnoho. USB implementace je orčitě dost očesaná jen na nejdůležitější věci a standardu to neodpovídá ani náhodou.
Když už někdo chce malý levný kontrolér s USB tak určitě bych se neohlížel na SW implmentace, ale na srovnatelně drahé brouky, které to mají zabudované. Microchip nebo Cypress mají nabídku širokou. Vlastně dnes už kdejaký low-end ARM má USB a hromadu dalších věcí.
OK, presvedcil jste me, treba tady je to zdokumentovane (ATtiny25):
http://www.bobhobby.com/2008/04/22/usb-physical-hit-counter-based-on-avr-attiny25/
Toto je docela zavadejci tvrzeni:
„Naproti tomu některé mikrořadiče z rodiny PIC18 jsou umístěny v pouzdře s 28 až 40 piny, jejich instrukční sada má 75 instrukcí, paměť pro uložení programu může mít kapacitu 8 kB a počet universálních registrů dosahuje typicky 256 bajtů.“
Tak jak je to psano to navozuje dojem ze rada PIC18 ma pouze 256 bajtu RAM. Ale to neni pravda. Treba PIC18F4680 ma 3328 bajtu RAM a jsou varianty teto rady s jeste vetsi pameti. Prehled je zde: http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1004&mid=10&lang=en&pageId=74
David
…obsahují osmibitové mikrořadiče PIC (kromě nejvyšší řady) pouze instrukci pro provedení nepodmíněného skoku GOTO a několik instrukcí, které po splnění nějaké podmínky změní programový čítač takovým způsobem, že je následující instrukce přeskočena (skip).
Když jsem tenhle princip viděl poprvé, říkal jsem si, proč je to navržené tak divně. Pak jsem ale přišel na to, že je to jednoduše geniální. Totiž: ty procesory mají jednostupňový pipelining, tedy v době, kdy je jedna instrukce prováděna, instrukce na následující adrese je připravena v pomocném registru. No a pokud větvící instrukce rozhodne, že má být další instrukce přeskočena, provede se reset toho pomocného registru, takže procesor namísto původní instrukce vykoná instrukci NOP (kterážto má operační kód samé nuly).
Jediný problém je, pokud větvící instrukci následuje „dlouhá“ instrukce. Pak je potřeba vyřešit zahození i druhého slova instrukce.
To mělo být správně „25 Microchips That Shook The World“ (překlad je správně, žádný chip nikoho nezastřelil, natož celý svět). Viz:
http://spectrum.ieee.org/static/25chips
Ale to me ani tak neprekvapuje :-) protoze v GMku se spis nakupuji soucastky pro nejaka maloseriova zarizeni nebo dokonce jednotlive kusy.
A pro me jako amatera je vcelku jedno jestli budu bastlit na PIC10 nebo si o par korun draz koupim PIC16 (tam se nemusim tak omezovat, takze to v tomto pripade vyhraje PIC16 s vetsinou pinu visicich ve vzduchu).
Naopak v seriovych vyrobcich je PIC10 dost casto pouzivaji, ovsem vyrobci techto zarizeni samozrejme nenakupuji v geemku :-)
Rozdíl v ceně pro bastlíře zanedbatelný.Jinak já přešel na céčko, i když assembler samozřejmě nezavrhuji.Co se týče programátoru,PICKIT3,který ovládá přímo MPLAB,céčkový soft PICC Lite rovněž v MPLABu,sice má omezenou velikost kódu,ale je to super.Paradoxně jsem první poznatky o programování čerpal z knihy C pro mikrokontroléry (pro Atmel AVR…),no základy jsou stejný,jinak podrobnější popis je v PDFku přímo v instalačním adresáři MPLABu.Konkurenci nezavrhuji,ostatně myslím si,že je to jen o tom,jak komu co sedne a věčné dohady o tom,zda PIC či ATMEL,AVR,jsou hloupost.:-)
A kdepak jsi to nakupoval?To,že to nemají momentálně na skladě neznamená,že to nemohou objednat.A mimochodem,existují jiné možnosti,jak si objednat součástky až do domu přes net.Je otázka, jaké konstrukce s tím stavět.Já ti zase mohu oponovat,že pokud rozebereš jakýkoliv průmyslový termistorový relé,najdeš v něm PICku,většinou 16F676…Konstrukce s PICama se rojí jako houby po dešti,i v AR je jich požehnaně,včetně v současné době běžícího seriálu o programování PICů.Jestli ty nejsi tak trochu zaujatý,co?:-)