výber mikrokontroléra - začiatočník
Moderátor: Moderátoři
výber mikrokontroléra - začiatočník
Aktuálne by som potreboval vyriešiť problém posielania I2C príkazov do TSA5511 napr. na základe voľby z DIP prepínačov. Neskôr možno z "klávesnice". Rovnako pomocou I2C ovládať napr. DVB-T tuner. Samozrejme, rád by som sa venoval neskôr aj iným projektom.
Otázka je výber vhodného mikrokontroléra. Na začiatok som pozeral PIC16F84 a Arduino Uno.
K PIC som našiel *.pdf knihu s asemblerom od začiatkov. K tomuto mikrokontroléru je treba aj programátor? Aké zhruba sú jeho výhody a nevýhody?
K Arduino Uno som našiel veľa projektov a dokonca aj priamo projekt na komunikáciu pomocou I2C - zrejme veľmi populárny MC. V doske je ATmega328P v DIP, ktorý je možné programovať priamo v doske UNO cez USB? Nie je potrebný žiadny programátor? Je potom možné vybrať MC z dosky UNO a aplikovať ho do finálnej dosky? Aké sú výhody a nevýhody?
Resp. uvažovať o výbere niečoho úplne iného?
Ďakujem za konštruktívne rady a pomoc!
- forbidden
- Příspěvky: 9442
- Registrován: 14 úno 2005, 00:00
- Bydliště: Brno (JN89GF)
- Kontaktovat uživatele:
Ano, je tomu tak.RudoSK píše:V doske je ATmega328P v DIP, ktorý je možné programovať priamo v doske UNO cez USB? Nie je potrebný žiadny programátor? Je potom možné vybrať MC z dosky UNO a aplikovať ho do finálnej dosky?
Je tam jedna výnimka: ak by si zobral zbrusu čistý ATmega328P a osadil ho do sokla, s najväčšou pravdepodobnosťou nebude mať "Arduino" bootloader (závisí, odkiaľ ho kúpiš), takže Uno doska nebude správne fungovať.
Nahrať tento bootloader, ak nemáš po ruke programovacie zariadenie, sa môže i druhým Arduinom ako ISP, a pár drátovými prepojkami. Návod je tu.
Samozrejme, keď pokročíš, nemusíš funkcie Arduina volať vôbec a môžeš to programovať ako normálne AVRko v C. Ak tam ponecháš Arduino bootloader (resp. nemáš dôvod navrhovať svoj), ten čip bude v Uno doske fungovať i naďalej.
Ja sa tiež nešpecializujem na mikrokontrolery či embedded, ale sem tam sa Arduinu povenujem, najmä pretože sa dá ľahko napojiť na starý hardware, čo je jeden z mojich koníčkov.
Doska s funkčnou Mega2560 stojí nejakých osem eur od šikmáka, máš k dispozícii 54 vstupnovýstupných pinov, ADC a kadejaké serepetičky. Lenže už to je predsa len zastaralé... a je to osembiťák.
Viď ten dotykový (a starý) farebný displej - keby ten kód nebol dobre odladený, videl by si ako sa grafika "prelieva".
RPi a Pico sú výpočtovo už na inej úrovni, zato o úplne inej platforme. Pôvodné Arduino je ešte TTL kompatibilné, u RP už treba výlučne CMOS logiku (+3.3V). AVR v Arduine je jednoduchý osembitový mikrokontroler s pár kB pamäte a rýchlosťou lepšej kalkulačky.
RPčko už je hotový systém v jednom čipe, s 32bitovým dvojjadrovým mikroprocesorom.
Každopádne, zmenou platformy (systému) sa budeš vždy nanovo učiť špeciality a lakocinky toho konkrétneho systému, ktorý si si zvolil. PIC, STM, ARM, AVR, RP, všetko vzájomne odlišné. Nie je to ako navrhovať web...
- pocitujlasku
- Příspěvky: 2764
- Registrován: 12 pro 2005, 00:00
- Bydliště: SR, Poprad
rampage: vidis, a mne ucitel na strednej hovoril presny opak. Princip programovania je stale rovnaky, len sa to inak zapisuje. Ale podmienky, cykly, algoritmus je vsade rovnaky.
A ked spominas web, tak tam tiez mas milion moznosti a roznych frameworkov na vytvorenie.
Ano, a potom som svedkom kódu, ktorý je "moderne" kompilovaný s C++20 toolsetom, aby akože držal krok s dobou.pocitujlasku píše:Ale podmienky, cykly, algoritmus je vsade rovnaky.
Vovnútri absencia exception handling či cykly z ktorých breaky nestačia - dáme goto na oboje, aby to bolo prehladné. Miesto lámbd pointery na funkcie, veď načo. Polymorfné inštancie pretypujeme krásne cez okrúhle zátvorky, warning level kompilátora dovolí, veď on už ten pointer niekam nasmeruje. A načo templaty, keď stačí jedno veľké #define. Ideálne na celý header.
Pekne ďakujem za také "C++". Veď princíp programovania ostal stále rovnaký... Iba že by nie.
Prípadne z Arduina presedlá na RPi a skúsi adresovať GPIO odniekaľ z Pythonu. Zistí, že miesto stoviek ns to zrazu zaberie desiatky, stovky mikrosekúnd. Čím to je? Veď princíp je ten istý.
Hej, ale skús naprogramovať niečo čsovo kritické na low level úrovni bez použitia chrobačných knižníc. Nevravím, že sa to nedá, ale zožerie ti to 10x viac času. Lebo už len programovanie ESP hoc pod Arduino IDE, nie je tak intuitívne a samozrejmé, ako programovanie Arduino Uno. Svedčia o tom stovky tutorialov na internetoch. A potom prelistovať podstatne hrubší datašit, ak sa k nemu vôbec dostaneš. A nakoniec nastaviť množstvo registrov, aby si mal istotu, že ti do časovo kritického tasku nebabre nejaké prerušenie trebárs od WiFi...pocitujlasku píše:ved esp vies tiez programovat ako arduino.
Nie, ďakujem, radšej ostanem pri Arduino Uno. To, čo na Arduino Uno jednoducho múdro nakodim, bude rýchlejšie, než čo jednoducho hlúpo nakopirujem do rýchlejšieho ESP.
kde jasne uvádzam, že sa menia špecifiká systému, pod ktorým bude vyvíjať. Nech si programuje v čom chce.Každopádne, zmenou platformy (systému) sa budeš vždy nanovo učiť špeciality a lakocinky toho konkrétneho systému, ktorý si si zvolil. PIC, STM, ARM, AVR, RP, všetko vzájomne odlišné
Neriešim tu, že je niekde syntax bitového súčinu slovné "and" a niekde "&", prípadne že niektoré jazyky medzi bitovým a logickým ani nerozlišujú. Ani že narátať od jedna po desať for cyklom býva v jazykoch obdobné. S výnimkou Brainfuck.
Už konkrétne algoritmy bude musieť vedieť patrične prispôsobovať a optimalizovať; s ohladom na architektúru mikrokontrolera, organizáciou a prístupe k RAM, k I/O portom, vôbec časovaním, a podobne.
Keď nebude vedieť adresovať jeden port (čo sa práve systém od systému vie líšiť), alebo nebude správne časovanie, tak na pripojený displej nevykreslí ani mäkké f.
A na takom osembiťáku ako Uno asi nebudem vykonávať tridsaťdvabitové operácie, kde netreba, že?
Tiež nie je pravda, že sa princípy programovania nemenia; napríklad medzi procedurálnym, objektovým a generickým programovaním sú rozdiely obrovské, už v pseudokóde - nezávisle od jazyka.
Nebudem niekde na desktope v Jave naháňať každý jeden bajt deklarovaním kdejakých statických polí, keď viem, že mi kód beží vo virtualke, kde beží garbage collector, a všetko je tam inštancia objektu - vrátane toho "pola", o ktoré sa snažím. Takže nemám ako sa starať o správu pamäte, sme zase u systému. A že rozšafnosti si môžem dovoliť iba tam, kde to mám dovolené - nie v embedded prostredí, kde jedna chyba má potenciál zostreliť celý beh systému.
Rovnako ako sa nedá nazvať horeuvedený ilustrovaný pokus o "C++" modernými princípmi.
Láskavo tu neslovíčkarte.
Jedno osembitové čítanie či zápis do portu je jedna in/out inštrukcia o dvoch taktoch, teda asi 126ns pri 16MHz. To vieš v pohode písať v inline asm, ak treba - už som tak preskakoval pármikrosekundové zdržanie kompilátora pri obsluhe IRQ (push všetkého na stack) tak, že som sa o registre staral sám. Na Arduine sa to dá zbrusu. Veľa šťastia s takýmto niečím napríklad na Raspberry Pi...
A to ak by som mal kvôli pár riadkom časovo náročného kódu mal všetko ostatné zahodiť, lúskať datasheety a písať si všetko sám - tak by som sa na to celé akurát tak vysrаl. Zvlášť ako začiatočník.