AVR 2: Blikani LED na ATmega-8

Dnes ukazu jednoduchy postup, jak rozblikat LED pomoci procesoru ATmega8, programovat to budu v BASCOMu. Cely postup je velmi jednoduchy, ale sam jsem mel taky problemy kdyz jsem zacinal a nemel jsem se koho zeptat.

Procesor – proc zrovna ATmega8 kdyz jich Atmel dela tolik?

 

  • Stoji do 50Kc (u GM 34Kc i s DPH)
  • 8KB flash; 512B EEPROM; 1KB SRAM
  • 2x 8-bit Timer; 1x 16-bit Timer; 3x PWM; Watchdog; I2C; UART; SPI; A/D prevodniky
  • neni potreba pripojovat externi krystal; moznost pripojit krystal az do 16MHz
  • pouzdro PDIP 28; 23 I/O pinu
  • napajeni 4,5V – 5,5V; 3,6mA
  • neni potreba kupovat programator za nekolik set nebo tisic korun – da se vyrobit do 50Kc

Jak a v cem to programovat?

V BASCOMu – C je asi lepsi, ale v Basicu umim o hodne lip.

K nahrani programu do procesoru pouzivam ISP programovani.

 

Zdroj

jsem udelal ze stabilizatoru 78L05 (5V, 100mA).
zdroj                         
 

zdroj

 

Frekvence procesoru

Vyuzivam interni 1MHz krystal – ten je zapnuty od vyrobce. V pripade potreby se da pomoci pojistek zapnout externi krystal nebo zmenit frekvence interniho (1, 2, 4 nebo 8 MHz).

Programovani v BASCOMu

BASCOM je vyvojove prostredi pro AVR procesory. Ja pouzivam demo verzi, ta ma dve omezeni – velikost programu maximalne 4kB a nekomercni vyuziti – na uceni idealni. Zatim mi to vzdy stacilo. Tady (dole) je demo ke stazeni.
Vyvojove prostredi BASCOMu.

 
Pomoci nasledujiciho zapojeni a programu se rozblika LED:
 led schema

Drobnou zmenou programu lze rozblikat stridave 2 LEDky:

V BASCOMu napisu program a pres Program -> Compile ho zkompiluju. Tim se vytvori soubor *.hex s programem – ten je potreba nahrat do procesoru.

intel hex
ukazka zkompilovaneho programu ve formatu Intel HEX

Program se do procesoru nahraje stiknutim klavesy <F4> – je to videt na videu.

Dalsi moznost nahrani je pouziti PonyProgu. Me to funguje ve verzi 2.05a beta. Po spusteni PonyProgu je potreba v menu Setup -> Interface setup nastavit typ pripojeni podle nasledujiciho obrazku:
ponyprog interface

Pak uz jen staci otevrit soubor s FLASH (vystupni *.hex s BASCOMu), smazat procesor a zapsat novy program do procesoru.

Je potreba dat pozor na ikonu zamku, pres ni se nastavuji pojistky (fuses). Spatne nastavenymi pojistkami se da skoro znicit procesor, napr. pri vypnuti ISP nelze do procesoru zapsat novy program (jedina moznost pak je pouzit profesionalni programator za nekolik tisic). Pred zmenou pojistek je nezbytne nutne prostudovat datasheet od Atmelu!

Pokud nebude LED blikat je potreba odpojit ATMEL od paralelniho portu (hlavne u BASCOMu).
Ukazkovy program na blikani 2 LED ke stazeni.
 

 

Odkazy

Zapojeni vyvodu u ATmega8
PonyProg
MCS Electronik (BASCOM)
BASCOM
ATmega8 na atmel.com
Datasheet k ATmega8
ATmega8 u GM
78L05 datasheet

 

Aktualizace 1.4.2015:
Clanek je z roku 2008 a pouziva program PonyProg. PonyProg je stary a nevyvijeny program s posledni verzi z roku 2005. Na novych Windows (obzvlast 64 bitovych) s nim budou problemy. Doporucuji prejit na program avrdude, ktery se v dnesni dobe prevazne pouziva. Pouziva ho napr. i oficialni IDE pro Arduino.
PonyProg jsem pouzil naposledy asi pred 8 lety, takze s nim nejsem schopny poradit. Nyni pouzivam avrdude.
Vice info o avrdude naleznete v
mem clanku, nebo v komentarich pod timto clankem.

 

Dalsi clanky o AVR.

19 komentářů u „AVR 2: Blikani LED na ATmega-8

  1. Martin
    Dobrý den, chtěl bych se zeptat na pár věcí. Postavil jsem si programátor který uvádíte na vašich stránkách STK200 ale nejde mi s ním naprogramovat atmegu když jsem ho připojil poprvé tak po spuštění BASCOM se atmega nadetekovala ale když jsem dal naprogramovat tak to vypsalo chybu Difference at 0000. Asi tak 5x jsem to zkusil znovu ale pořád nic a potom už nešla ani atmega nadetekovat a píše chybu. v BIOSU mám nastaveno:Parallel Port Address (378-)
    Parallel Port mode (EPP)
    EPP Version (1.9)
    Parallel port IRQ (IRQ7)
    Nevíte kde by mohla být chyba? Není náhodou potřeb nahrát nijáké ovladače já jen nainstaloval BASCOM. Děkuji za odpověď
  2. tuxmartin Autor příspěvku
    Dobry den, omlouvam se za pozdni odpoved. Ja mam v  BIOSu nasledujici nastaveni. Nemusel jsem doinstalovavat (pouzivam Win XP SP2) zadne ovladace. Neni mozne, ze je ta atmega rozbita, nebo ze je chyba v programatoru? Doporucuji Vam zkusit jinou atmegu – snad to pomuze.
  3. Milan S.
    Dobrý den,
    díky Vašemu blogu jsem se poprvé setkal s tímto programovatelným obvodem a velmi mne to zaujalo. Zajímalo by mne, kolik by se takto dalo max. ovládat diod?

    Děkuji, Milan.

  4. tuxmartin Autor příspěvku
    Dobry den,
    jsem rad, ze Vas clanek zaujal.

    Procesor ATmega8 ma 23 I/O. Nelze je vsak pouzit vsechny. PC6 (RESET) se nesmi pouzit – bez resetu nelze nahrat do procesoru jiny program. Zbyva tedy 22 pinu – ty lze pouzit vsechny (za predpokladu, ze nechcete vyuzivat jejich jine funkce).

    • PD0 a PD1 – seriovy port (RS-232) – nemusi se pouzit
    • PB6 a PB7 – pripojeni externiho krystalu – nemusi se pouzit (ATmega8 ma interni krystal)
    • PC5 a PC4 – I2C – nemusi se pouzit
    • PB5 a PB4 a PB3 – SPI – pres ne se nahrava program do procesoru, pokud na tyto piny budou pripojeny LED, mely by se pred nahravanim noveho programu odpojit

    ATmega8 IO

    Z toho vyplyva, ze maximalni pocet I/O je 22.

    Nastesti existuji moznosti, jak pocet I/O zvetsit. Napriklad muzete pouzit jiny procesor – napr. ATmega1280, ten ma 86 I/O pinu.

    Pokud trvate na ATmega8, lze pouzit treba I2C expander – napr. PCF8574 nebo MCP23016. Vice informaci o techto obvodech naleznete treba tady, nebo tady.

    Doporuciji Vam, podivat se jeste na tento clanek, ktery vysel na root.cz.

     

    Preji mnoho dalsich uspechu
    Martin

  5. Milan S.
    Dobrý den,

    děkuji za odpověď.
    Rád bych se Vás zeptal na ATmega1280, který jste zmínil v odpovědi, jestli jej lze naprogramovat přes STK200?
    Předpokládám, že jej stačí jen správně napojit na vývody RESET, GND, MISO, MOSI ,SCK a napájecí napětí.
    Jelikož má vývod „RESET“ zvlášť, pak by měly jít využít všechny porty, tj. 86 I/O jestliže nebudu požadovat jejich jiné funkce, je to tak?

    Viz: http://www.atmel.com/dyn/resources/prod_documents/doc2549.pdf

    Děkuji, Milan.

  6. tuxmartin Autor příspěvku

    Dobry den,

    s procesorem ATmega1280 nemam osobni zkusenosti – uvadel jsem ho pouze jako priklad procesoru s vice I/O. Nicmene nevidim duvod, proc by nemel jit programovat pres SPI pomoci STK-200 programatoru. Konkretne se jedna o piny PB3 (MISO), PB2 (MOSI), PB1 (SCK) a RESET. S tim RESETem mate pravdu, je to samostatny pin, tudiz by melo byt mozne pouzit vsechny I/O.

    Jelikoz uz to neni takova "hracka" jako ATmega8, stalo by za uvahu, jestli nepouzit JTAG rozhrani. Urcite by ale melo smysl uvazovat o pouziti bootloaderu. Pri pouziti bootloaderu usetrite piny, ktere byste jinak pouzil na STK-200 programator. Atmel pripojite k PC pres RS-232 (3 draty – TXD, RXD, GND). Cele nahravani programu je pak jednodussi.

    Ja jsem nedavno zacal pouzivat Arduino (clanek na rootu). Osobne nepouzivam zadnou z jejich desek (ale neni problem si ji doma vyrobit, nebo koupit). Ze zacatku jsem mel mensi problemy s pouzitim ATmega8, ale podarilo se. Planuji o tom brzy napsat. Velka vyhoda je, ze Arduino ma zdarma vyvojove prostredi. Navic Arduino pouziva zavadec v procesoru.
     

    Martin

  7. MartinP
    Dobrý den,mohl by mi někdo pomoci s nastavením pojistek u Atmega168,
    po pročtení datasheetu a nastavení ze stránek http://www.engbedded.com/fusecalc jsem trochu zmaten. Mám nahrán bootloader na $1C00 zkontrolováno v ponyprogu2.07c a pojistky nastavené na BOOTSZ1,BOOTSZ0,BOOTRST + SPEN dále už nic jiného. Crystal16MHz+kondenzátory. Je to tak správně? Bootloader se pravděpodobně vůbec neaktivuje. Proč? LED na SCK neindikuje nic,po nahrání programu(ponyprog a LPT) blikání ledkou (a nepřepsání bootloaderu) po zapnutí či resetu ihned bliká :((( Děkuji velice Martin
  8. LedDiode
    Ahoj, podla zakladov od teba si robim program , ale mam proble : tu je kod :
    $regfile = „m8def.dat“
    $crystal = 1000000
    Config Portd. 1 = Input
    Config Portd. 2 = Output
    ‚a teraz program bude to tak ze ked stlacim tlacitko rozsvieti sa led
    If Portd. 1 = 1 Then
    Portd. 2 = 1
    Wait 1000
    Portd. 2 = 0
    Elseif Portd. 1 = 0 Then
    Portd. 2 = 0
    Else
    End If
    End

    no a stale my pise 3 parameters expected , in file x*x
    pls pomoc, ma to byt indikator on vypinaca (moj 2 program) xD diki

  9. tuxmartin Autor příspěvku

    Pekne 🙂

    Ja jsem psal clanek v roce 2008 (pred 6 lety) a tenkrat si myslim jeste nebyly jednocipy tak modereni a navodu take mnoho nebylo. Dnes by bylo blikani na par radku v Arduinu.

  10. Jan
    Prosím Vás pěkně , můžete laskavě popsat postup zapnutí pojistek v PonyProg2000 pro ATmega8
    tak aby kmital externí /připojený / krystal na pin XTAL1 , XTAL2 ???
    Platí že , zaškrtnuté políčko pojistky je na ní stav 0 /LOW/ ????
    nezaškrtnuté políčko pojistky je stav 1 / HIG/ ?????

    Vřelý dík za pomoc !!! Už jsem zničil několik čipů.
    Jan

  11. tuxmartin Autor příspěvku

    PonyProg uz nekolik let nepouzivam, takze presne nevim, co se kde muselo zaskrtnout.

    Nyni pouzivam avrdude, ktery Vam take doporucuji. Jeho pouziti s USBtinyISP programatorem jsem na svem blogu pred casem popisoval.

    Jaky typ programatoru pouzivate? Ve clanku uvedeny STK-200?

    Tady je webova kalkulacka na pojistky Atmel AVR procesoru. A zde prehled vychozich pojistek pro jednotlive modely MCU.
    Pro ATmega8 to je H fuse=0xD9 a L fuse 0xE1. Na uvedenm odkazu je i popis.

    Pro avrdude a USBtinyISP programator by vypadal prikaz pro nahrani pojistek nasledovne:

    I zniceny cip (spatne nastavene pojistky) by mel jit opravit. Slouzi na to tzv. „vysokonapetove programovani„. Nikdy jsem ho ovsem nezkousel, takze Vam nemohu zarucit uspech.

    Osobne uz dlouho nepouzivam samotne ATmega cipy, ale kupuji si v Cine levne Arduino desky. Pokud nechcete pouzivat Arduino, ale treba AVR C, nebo Bascom, nevadi. Pouzijete jenom hardware. Ceny jsou ale bezkonkurencni. Cela deska se vsim (Atmega, stabilizator, DPS, …) od 57Kc za kus. Pokud mate zajem, dam sem nejake odkazy.

  12. tuxmartin Autor příspěvku

    Dobry den, jak jsem psal v komentari vyse, PonyProg uz hodne roku nepouzivam.

    Mam tady starsi clanek.

    Jaky pouzivate programator? STK-200? Co mate za system (Windows/Linux) a jakou verzi?

    Pokud netrvate na PonyProgu, urcite nejdeme zpusob, jak atmegu naprogramovat.

    V dnesni dobe bych Vam doporucil program avrdude. Priklad nastaveni pojistek (v ukazce jsou jine) a nahrani programu STK-200 programatorem:

  13. dano
    zdravim potrebujem nahodit program do atmegy8 ale neviem ako nastavit fuses: Lfuse=0xE1 Hfuse=0xD9. programujem s ponyprog Ďakujem
  14. Karel Sejk
    Dobrý den, mám problém s použitím INT0 v procesoru ATMEGA 8, po překladu hlásí chybu v příkazu Eicra.isc00 = 1.

    $regfile = „m8adef.dat“
    $crystal = 100000

    Enable Int0 ‚povol vnější přerušení 0
    Eicra.isc00 = 1 ‚nastane při změně úrovně na pinu INT0
    On Int0 Vnejsi0 ‚při přerušení skoč na podprogram vnejsi0

  15. tuxmartin Autor příspěvku

    Dobry den,

    jak uz jsem tu vyse nekolikrat psal, PonyProg uz nekolik let nepouzivam.

     

  16. Jirka
    Dobrý den,
    chci se zeptat, jestli se někdo nesetkal s problémem v PonyProgu. Vždy když ho zapnu, a zaškrtnu AVR ISP I/O tak se mi ukáže, „DLPortio.SYS device diver not loaded. Port I/O will have not effect“ ….. nevím co s tim. zkoušel jsem ho i stáhnout.
    Mám Win 7 a PonnyProg verzi —- v2.06f BETA
    Prosím poraďte, já jsem v těhlech věcech úplný začátečník a nic o tom nevim.
    Děkuji.
  17. tuxmartin Autor příspěvku

    Dobry den,

    kdyz se zkusite zeptat googlu na „DLPortio.SYS device diver not loaded. Port I/O will have not effect„, mezi prvnimi odkazy bude zminka o 64 bitovych Windows 7 a necem s registry.
    Nemate nahodou 64b Win 7? Pokud ano, historicky PonyProg (myslim, ze je z roku 2005) bude mit asi problemy. Pokud trvate na PonyProgu, zkuste Windows XP, na ktery byl napsany.

    Pokud nemate nejaky specialni duvod pouzivat i nadale PonyProg (na 99% ne), prejdete na avrdudeKdyz si proctete diskuzi pod clankem, mnohokrat jsem ho jiz zminoval.
    Na avrdude exituji i GUI nastroje, pokud Vam vadi terminal – ale ja je nikdy nezkousel.

    V pripade dotazu me nevahejte kontaktovat.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *