Chtěl bych se naučit programovat uC

Dobrý den,
předem bych chtěl říci, že v programování jsem uplně tupý, s elektronikou je to trochu lepší.
Měl bych dotaz, s čím začít. S jakým uP se naučit dělat. Chtěl bych si třeba postavit tyto hodiny c4r0.skrzynka.org/_hv/index.php? … /pendclock
(delší dobu mě to fascinuje :smiley: )
Nebo si postavit k RXu čítač. Jde mi o nějaký uP, který by to zvládal. Ještě, jestli byste mi mohli doporučit i k uP nějakou literaturu.

Díky, David.

Jan16: Předmět příspěvku upraven z “Jak na to?” na "Chtěl bych se naučit programovat uC"

k hodinam:
Tie hodiny asi budu robit velky hluk pri zmene pohybu tej tycky.
Videl som nieco podobne, ale tak ze rad LED bol na ramene upevnenej na vertikalnej tycke (nieco ako veterna ruzica) a ta tycka bol pohanana motorcekom. Cele to bolo pod cervenym plexisklom vytvarovanym do kruhu. Bolo tak mozne zobrazovat texty v rozsahu 360st. Texty sa mohli pomaly posuvat a tak boli citatelne zo vsetkych stran. Ak chces, aby obraz neprijemen nekmital, obraz by sa mal obnovovat aspon 50x sekundu. Z toho vyplyva, ze ten polsky projekt musi vybat tyckou s LED 25x hore-dole (tam a spat). Myslim, ze na tycku su kladene velke naroky pri zmene smeru pohybu (50x/sek). Pri rotacii to tak nie je, len treba mat rameno dobre vyvazene. Pri akcii bolo zariadenie napajane z baterie, problematicky by sa zabezpecilo napajanie po vodicoch, aj ked by sa mohlo vymysliet nieco take, ako pri napajani elektrickych vlacikoch.

k procesoru:
zariadenie - zobrazovac na tociacom sa ramene bol kompletne obsluhovany AT89C2051.

Ja by som Ti doporucil zacat s ATmega8, ATmega32. Pri nizkej cene maju slusnu vybavu periferii a pamate.
ATmega8 ma 16MIPS, HW nasobicka, WDG, komparator, INT, 8kB Flash/1kB RAM/512B EEPROM/SPI, I2C,UART, PWM, T0,T1,T2, RTC, 6x 10b AD, JTAG, ISP, IAP, int RC oscilator

DIP28 v SOS 40.9Sk
DIP28 v TME od 3ks 34,-Sk

ATmega32 ma 16MIPS, HW nasobicka, WDG, komparator, INT, 32kB Flash/2kBRAM/1kB EEPRM/SPI, I2C,UART (644P -2xUART), PWM, T0,T1,T2,T3, RTC (644P spotreba pre RTC od 0.6uA), 8x 10b AD, ISP, IAP, int RC oscilator

DIP40 v TME od 3ks 73,-Sk

Ak nerozumies vsetkym skratkam, niz si z toho nerob, ber to ako vyzvu na dalsie studium :slight_smile:.

Na rozdiel od inych typov 8bit procesorov (pokial viem, tak este procesory od sylabsu, ale tie su len v prtavych puzdrach a tazko sa ti budu ako zaciatocnikovi letovat), robia instrukciu na takt procesora (pre porovnanie AT89C2051 robi instrukciu na 12/24 taktov procesora, t.j. Atmega je min. 12x rychlejsi pri tej istej frekvencii Xtalu).

Nemusis sa ani ucit asembler, lebo k ATmega je zdarma velmi slusne C (GCC) a ked sa ho naucis, vies v GCC programovat i 32b procesory, programovat pod Win a aj pod Linuxom (jasne, ze to nebude take priamociare, ale zaklady v C uz budes mat a na sposob prace s GCC uz budes zvyknuty).
Napisat program v C pre blikanie jednej LED Ti ako zaciatocnikovi moze trvat s pomocou znalejsieho kamarata cca 30minut. Ak do toho pojdes sam, tak cca za 1-2 hodiny.
Na nete je vela prikladov.

Inak asi pre cca 1/2 rokom tu chcel niekto riadit zeriav a nevedel ako na to, pohladaj tu diskusiu. Mozno sa tam dozvies odpovede na Tvoje zatial i nevyslovene otazky.

Martin

Díky za odpověď,
asi teda půjdu do té ATmegy.
Díval jsem se do BENu po nějaké knize o programování v jazyce C, co si myslíte o tomhle?
shop.ben.cz/cz/121139-atmel-avr- … yce-c.aspx
shop.ben.cz/cz/121120-c-pro-mikrokontrolery.aspx

Díky, David.

Když si tady zmiňoval výhody atmeg, tak si měl taky zvíraznit co umí ATmegy navíc oproti x51čkám… Krom vyšší rychlosti, AD převodníkama, internímu RC oscilátoru, integrované EEprom, o chlup větší RAM a FLASH, RTC, JTAG, to neumí o moc víc (možná jsem něco vynechal…)… Jinak watch dog timer se značí WDT ne WDG.
Cena atmeg není o moc menší než x51ček. Možná jen některé typy.
Jinak cčko existuje i pro x51čky.
x51 se dají programovat taky pod woknows i linux, nevim proč si tohle zmiňoval jako “výhodu”.
Mimochodem začít v Cčku je sice pohodlné, ale je to dost “o ničem” vůbec nevíte co se v kontroléru děje, nechápete jak to hardwarově funguje, atd. Není na škodu umět asm.
Jinak pro začátečníka, kterej o tom niiic neví bych doporučoval spíš to Cčko, ale aby se pak taky naučil ten asm, není to nic těžkého, jen je dobré znát kontroléry trochu více “do hloubky”.

2 3enit: Ano, knížky by mohly být dobré. Tu co si uvedl jako první mám doma, ale je to assembler. Od stejného člověka.

HOdně úspěchu, Honza

Jan16 má pravdu. Já bych jen podotkl, že programování v C je sice dobré, ale nezbaví Tě znalosti funkce kontroléru. To k tomu neodmyslitelně patří. Obě knížky mám a nejsou špatné, ale doporučuju Ti koupit ještě publikaci k ATmega. Jsou tam právě assemblerovské příklady. Tou bys měl začít alespoň zběžně. Je to dobrý start.

Myslíte tuhle knihu?
shop.ben.cz/cz/121135-mikrokontr … mbler.aspx
Nejsou v ní ale asi ATmegy, nevím ovšem jaký je rozdíl mezi ATmegou a AT90S.
A také již není v prodeji, ale možná by někde sehnat šla.

David

No, pokud vím tak ATmegy jsou dost podobné jako 90Sxx… AVR jako AVR… instrukční sada téměř stejná… spíš úplně řekl bych… chtěl bych asi přejít z x51ček na ATmegy. Jinak ano, tuhle knížku jsem myslel. A kde jí sehnat? třeba tady na foru :wink: v sekci download jsem si jí opatřil myslím…
Hodně úspěchu, Honza

K Jan16: Ked som spomynal programovanie pod Win a Linux, nepisal som o programovani Atmega pod tymito platformami, ale uviedol som ako VYHODU pracovat s GCC, s ktorym sa daju programovat aplikacie pod Win i Linux a nie len pod ARM a ATmega a co ja viem este pod aky zastup procesorov.
Pisal som aj, ze to nieje uplne priamociare a treba este vela veci dostudovat, ale je tu ta perspektiva, aj ked o nu prvoplanovo tazatelovi neslo.

K poznamke co vsetko ma Atmega oproti x51 (inak Sylabs je vyzbrojemy velmi slusne, ale aj za slusnu cenu) so si spomenul na scenu z Monthy Pythonov Zivot Briana na temu “co nam dali Rimania”. :slight_smile:

To ze nie je C ako C, respektive je, ale implementacie prostredia nie su som sa presvedcil, ked som sa snazil program v ICC prerobit pod GCC a iny program z GCC pod ICC aby som si overil efektivitu a rychlost prekladu jednotlivych prekladacov. Po dvoch dnoch som to vzdal. Program v rozsahu 22kB vysledneho kodu hojne vyuzivajuci HW je prepisat pod inu C platformu dost zahul. Samozrejme nejde o samotne prikazy C, ale o tie vseliake pragma, define, kniznice a co ja viem co este, ktore medzi platformami nie su jednoducho prenositelne. Ak sa mylim, opravte ma.

Preto, ak si bude chciet dnes zaciatocnik - v buducnosti odbornik vybrat niektoru z platforiem a udrzovat kod, je dobre si vybrat nieco, co ma pri “jednom” nauceni siroky zaber. A ked vidim to mnozstvo maleho a polamy uz aj lacneho hw s predinstalovanym Linuxom (nemam na mysli PC, ale male dosticky 5x6cm pre zabudovanie do zariadenia), myslim, ze je dobre mat do buducnosti potencial vediet sa rychlo pohybovat i v tejto oblasti.

Vediet ASM nie je zle. Ani pocitat na logaritmickom pravitku. Dodnes to viem, ale v praxi vobec nevyuzivam.
Rozdiel je poznat anatomiu asembleru a rozdiel procesor jednoducho pouzivat.
Na to, aby som mohol pouzivat procesor pre rozne aplikacie, nepotrebujem poznat anatomiu strojovych instrukcii - nemylit si prosim s anatomoiu procesora.
Nikdo predsa nemoze naprogramovat aplikaciu pre jednocip v C bez toho, aby nepoznal jeho moznosti a schopnosti. Neviem (viem, robil som :slight_smile: ) ako u inych procesorovych platforiem, ale Atmel ma celkom slusne spracovane datasheety s prikladmi vyuzitia periferii ci v ASM alebo aj v C. Vsetko jasne strucne zrozumitelne, ziadna zahada. Clovek vie, co sa mu v procesore deje. Je fakt, ze ma dost obmedzenu kontrolu kde sa ktora strojova instrukcia v programe nachadza. A co? V PC sa programuje na omnoho “vzdialenejsich” platformach od samotneho HW (a nie len pod Win) a kupodivu to nevadi. Skratka sa treba sustredit na riesenie problemu, nie na dierovanie stitkov :slight_smile:

Pre casovo kriticke aplikacie moze byt trochu menej efektivny kod na prekazku. Tam sa samotny ASM velmi hodi a je uzitocny. Poznam firmu kde sa dodnes programuju 386 v ASM a je to velmi renomovana firma.

Ruku na srdce, kolko zaciatocnikov potrebuje riesit casovo (hovorim o riadeni s casovym krokom 1-2us, za tu dobu spravi ATmega 16-32 instrukcii) narocne riadenia? Pravdou je aj to, ze na casovo naozaj kriticke operacie sa nevybera 8bit jednocip, ale dnes uz lacne (150-250Sk) 32bitove ARMy s vykonom cez 60MIPS. Oproti nim je aj ATmega so svojimi 8bit 20MISP pomaly slimak.

Myslim, ze je preto vyhodou, ak procesor robi instrukciu na takt a nie na 12 alebo na 4. Program napisany v C, aj keby bol po preklade 2x pomalsi (co nemusi byt) kvoli menej optimalizovanemu prekladu oproti kodu, ktory by vygeneroval odbornik (v ziadnom pripade nie zaciatocnik !!!)
bude na jednocyklovom procesore 2x rychlejsi, ako vysoko optimalizovany ASM pre procesor s 4taktovym jadrom (to ani nehovorim o rychlosti ASM ak treba pouzit v klasickej 12taktovej x51 MOVX).

Je pravda, ze okrem rychlosti je lubovolny prekladac z vyssieho jazyka tiez narocny na pamat. Cim je optimalizovaniejsia rychlost, tym mozu byt vacsie pamatove naroky. Podla mojich skusenosti 2-3x. Preto je dobre pouzivat procesorovy rad s dobre skalovatelnou pamatou a to ci uz ATmega, ARM7, PIC18 a ine.
Hlavne kvoli pamati by som nezacinal robit v C s procesorom s mensou flash ako 8kb. Hlavne na zaciatku tej pamate rychlo ubuda.
Jednoduche programy typu

for(;:wink: {
a++;
if (a > 5000) zapni_led();
if (a> 10000) {
a = 0;
vypni_led();
}
}
zaberu naozaj par desiatok instrukcii a od programu v ASM sa dlzkou velmi nelisia.

Ale nieco serioznejse, s komunikaciou, obsluhou LCD displaya, tlacitok, AD, DA si vyzaduje naozaj trocha viac pamate. Je to vsak vyvazene kompaktnostou a lepsou udrziavatelnostu kodu. Par instrukcii (C ich ma tusim menej ako PIC16 :slight_smile:) na zapamatanie, polia, ukazatele (aj tie na ine ukazatele), abstraknejsi popis problemu viac vyhovujuci rieseniu ulohy a nie potrebam procesora.

Clovek sa v C moze hlavne viac sustredit na samotny problem a to vydim ako hlavnu vyhodu. Nemusi riesit problemy integer, cardinal, nasobenie delenie. Samozrejme, ze i v ASM sa daju napisat prislusne funckie, ale najprv ich musi zaciatocnik napisat, odladit, odskusat, pripadne sa oboznamovat s uz existujucimi a vediet ako ich zacleni do svojho programu, kym ich moze pouzit. Tato casova strata pri vyssich jazykoch odpada.

Aj pri pisani programu v C sa da brat ohlad na efektivitu ci uz casovu alebo pamatovu a tieto skusenosti su vo velkej miere prenositelne i na ine hw platformy.

Na zaver mam este otazku do plena, kolko typov procesorov jednej platformy je rozumne pouzivat.

Z mojej praxe sa mi javy rozsah nasledovny (za predpokladu, ze vsetky maju vsetky periferie)

z pohladu HW

maly 32pin
stredny 44pin
velky 64pin

z pohladu pamate

8kB
32kB
128kB

Martin

Po několika přístrojcích z klasických TTL jsem se pustil do studia mikrokontrolérů. Nechci pájet při sebemenší změně chování, půjde jednoduše rozšiřovat funkčnost. Rozhodl jsem se pro ATMega a pro C. Mám AVRStudio s GCC. Pro assembler je na netu příkladů dost, ale na Cčko nemůžu vůbec nic najít. Tedy takového, co bych od základů pochopil, něco dobře komentovaného, ne hned dělat megazapojení, ale klasicky začít blikat LEDkama, přebírat data z portů vstupních, posílat je na porty výstupní apod. Můžete poradit nějaký zdroj? Pro mne jako pro začátečníka je těžké studovat datasheety a dávat si info do souvislostí, rád bych nějaký polopatický návod, jak na to - od píky. Díky :smiley:

Tato knížka by mohla pomoci.
shop.ben.cz/cz/121139-atmel-avr- … yce-c.aspx

V datasheetoch od Atmela mas priklady ovladania periferii ako v ASM tak aj v C.

Ak si v C uplny zaciatocnik, mne pomohli

Herout : Ucebnice jazyka C

este viac

Kadlec: Učíme se programovat v jazyce C

Musis pochopit na zaciatok “principy” C-ka. Rychlo zistis, ze struktury a uniony su velmi uzitocne a o pointroch (smernikoch) ani nehovorim.
Treba vsak co najskor zacat robit s jednocipakmi, lebo konzolove aplikacie v PC podla jednoduchych prikladov v uvedenych knihach su velmi nudne a pre pracu s jednocipmi nezaujimave.

Pre pracu v C na jednocipoch ATmega:

skvely material (nie len pre GCC), bohuzial pre niektorych v nemcine.

mikrocontroller.net/articles … C-Tutorial

Na nete najdes vela kniziek v rodnom jazyku. Je dobre si zobrat 2-3, lebo kazda kladie doraz na nieco ine a nazera na problem trochu inak. Mozes tak porovnat a lepsie si vybrat postup, pripadne pochopit problematiku.

Dobra je

Vladimir Subrt: ATMEL AVR vyvojove prostredi

Je to velmi tenke ale hutne. Mozno skor pre znalejsich, ale velmi velmi doporucujem,.

Martin

Díky za mnoho rad, půjčil jsem si Mikrokontroléry Atmel AVR Programování v jazyce C od pana Váni, škoda, že je psána pro prostředí CodeVision. To by samo o sobě nevadilo, ale v kódu je mnoho direktiv, které jsou jen pro tento vývojový soft. Není to nijak okomentované, takže i když jde o primitivní příklady, stejně jsem nepochopil některé zákaldní principy.
Určitě se podívám na tipy Martina, prolistuji ještě v BEN vydanou knihu C pro mikrokontroléry, překlad od Burkharda Manna. Cčko se naučím, to nebude potíž, zatím jen neumím tím Cčkem AVR ovládat.

Tak knihy moc nepomohly, pro naprostého začátečníka jakoby začínaly odněkud odprostřed. Německá stránka je vynikající, ale ta němčina - překládání mě brzdí. Dál jsem surfoval, stahoval kódy tutoriálů a už vesele blikám, ovládám tlačítky, posílám po UART, po něm i přijímám. Zatím jen v AVR studiu, tedy simulátoru. Prakticky to vyzkoušet je další můj úkol. Rozhodl jsem se postavit - a postavil - BIPROG web.quick.cz/ruckl/biprog/biprog.html ale zatím nejede, nemám nápad, jak naprogramovat procesor tohohle programátoru, když sám ještě vůbec programovat procesory neumím :cry: . Třeba se najde dobrá duše v Praze a okolí, která mi za pivo procesor pomůže naplnit (??).

NO to je tak, když někdo staví programátory, které se musí naprogramovat… LOL. POstav si tohle. JEdnoduchý. SPolehlivý. Dá se s tim naprogramovat spousty švábiků. KDyž si seženeš jinej programovací soft, lepší, tim líp. STK200 je standardizovaný, podporuje ho halda softwaru.
tady: jan16.czela.net/index.php?id=19&n=jak-naprogramovat-mikrokontroler-rady-89s-isp

EDIT: Funguje to i na jiny kontrolery nez jenom 89S…

Díky, zkusím tak naprogramovat tu ATMEGA8 z Biprogu. Tím ISP Flash softem to asi půjde, v seznamu podporovaných procesorů zravna tahle MEGA je. Tak hurá. Snad to ten paralelní port pro jednou vydrží, píše se, že takhle to pro něj nění moc příjemné. Existují i zapojení s vyšší ochranou (hw.cz/Teorie-a-praxe/Konstrukce/ … -Prog.html a podobné). Pavel

Port to vydrží vpohodě, před zkratem ho chrání ty odpory. A pokud nejseš jo vůl, tak ten port nezničíš.
Já takle programuju neustále, jinej programátor nemám.

Jan16: Díky za radu, programování přes paralelní port a několik odporů funguje. zapojil jsem ATMEGA8 nejdřív v kontaktním poli v úplně minimalistickém zapojení s LEDkou, naprogramoval, zablikal a pak tam nasypal bootloader Biprogu. Dál už podle návodu oživení Biprogu a nový programátor je na světě. Pavel

Všechno mi teď funguje jak má, programování dalšího procesoru pomocí Biprogu jde dobře a tak postupuju dál. Potřebuju teď zprovoznit a vyzkoušet sériovou linku. Když budu chtít data vysílat, napadá mne pro odzkoušení vyrobit TTL/RS232 převodník úrovní a na PC nainstalovat nějaký monitor sériové linky. Je moje úvaha správná nebo se to dá dělat jinak? Ale co při přijímání? Jak zkontroluju, že jsem data přijal do procesoru? To už nevím jak vyřešit, protože jakmile by mi to nezafungovalo na první zapojení a naprogramování, tak nejsem teď schopen zjistit, kde je chyba, jestli v HW nebo SW. Poradíte? Díky Pavel

To jsou děsně primitivní záležitosti… stačí myslet hlavou :slight_smile:

Nejprve zkus odeslat do kompu nějaký řetězec znaků (text) , třeba klasické “hello world”.

Potom by to chtělo vyzkoušet si i příjem znaků v uC, a to otestuješ třeba tim, že z kompu do toho uC pošleš nějaký znak, a uC ti ho pošle do kompu zpátky, ale třeba v závorce… například “A” -> “(A)”

Převodník, zbytečný kupovat drahýho maxe 232, když to lze vyřešit dvěma tranzistorama… Tohle používám já:
jan16.czela.net/index.php?id=24&n=jednoduchy-prevodnik-urovni-rs232/ttl

Napiš mi na ajsko nebo na maila, pošlu ti takovej soft na komp, je to RS232 terminál. Příjmá to i vysílá znaky, texty, podporuje jednoduchá makra, zobrazení v bináru, ASCII, hexadec, dec,… nastavení libovolné přenos. rychlosti, databitů, stopbitů, parity a haldu dalších věcí… Jestli budeš chtít, vysvětlim ti i jak se s tim programem zachází…
mail: jan(dot)16(at)seznam(dot)cz
ICQ: 225664188

Má ten softík svou web stránku? Rád se o něm něco víc dozvím. Dokázal by přijímat při baudrate 31250 ? Potřebuju testovat MIDI povely (MIDI pracuje s BAUD RATE 31250), AVR mi je vysílá v pořádku, ale špatně přijímá, MIDI monitory co znám přijmou jen data korektní a tak když V PC aplikaci MIDI povel vytvořím a pošlu do AVR a tím pak zrcadlím do PC, nevidím co AVR odesílá zpět do PC. Když jsem testoval UART přenos po COM portu z PC a zpět, bylo vše OK ale u MIDI mám podezření na špatně fungující vstup hardwarového MIDI interface. Tak by mi pomohl soft, který by vzal baud rate MIDI normy, pokud to jde, abych MIDI aplikací poslal data do AVR, tím je poslal dál po COM do PC a tam je sledoval v jiné než MIDI aplikaci. Pro test sériové komunikace po COM jsem zatím použil Hercules od www.HW-group.com. Ten sice umožňuje baudrate nastavit, ale jen z předem nabídnuté škály, kde 31250 není. Dík Pavel