OK1HDU (Hamradio, electronics, travelling, photography, ok7u...)
599.cz - Homepage 599.cz - Homepage Memorial OK1WC SOTA - Vrcholy v éteru Optimalizováno pro web... Než něco pošlete dál, přečtěte si ... hoax.cz
     Dnes: 09. 04. 2020    fotogalerie na 599.cz spaceweather.com Bouřky v Česku v novém okně Bouřky v Evropě v novém okně Ionogram Průhonice v novém okně Contest calendar WA7BNM v novém okně RSS summary of the last 7 articles    
O   Hlavní menu
Hlavní stránka

Zajímavé odkazy

Download

Zasílání novinek

O   Seznam rubrik
mínus technika, bastleni
mínus provoz, závody
mínus Od krystalky k SSB
mínus ostatní


time.is in new window


f e e d b a c k

O   Počasí v Holicích
JO70XC


O   VOACAP KV Online

O   VOACAP pro CB
Šíření na CB

PHPRS fórum


<a1>technika, bastleni</a1>

Zpět Naprogramování flash paměti AVR jednočipu

Vydáno dne 29. 01. 2020 (543 přečtení)

Bascom-AVR-USBASP V poslední době mě občas někdo požádá, zda bych mu nenaprogramoval nějaký AVR jednočip (upload kódu do flash paměti MCU). Ať už nějaký, který jsem publikoval na tomto webu, nebo .hex kód stažený někde z internetu. Před pár lety jsem vydal článek, jak to udělat pomocí aplikace PonyProg a kabelu připojeného na paralelní port PC. Doba pokročila a tak je potřeba vydat článek nový.


Aby někdo třeba nečetl tento článek zbytečně, tak hned na začátku upozorňuji, že zde není nic o programování Arduina ani jednočipů PIC ani jednočipů jiných výrobců. Budu se zde zabývat pouze programováním osmibitových jednočipů Microchip AVR (dříve Atmel AVR).
Nicméně, jako ukázkový příklad ve videu na konci článku je jeden z možných způsobů jak nahrát bootloader do jednočipu Atmega328P a nastavit mu konfigurační bity tak, aby byl použitelný v desce Arduino_UNO_R3.

Možností, jak to udělat je nepočítaně, a detailní popis by byl na několik článků. Tady popíšu způsob, který mě připadá nejjednodušší.

Nejdříve slovník

Protože slova programátor, programování a podobně, mají v češtině několik významů, je potřeba si ujasnit, co mám zrovna na mysli.
Takže pro tento článek:
  • programátor - hardware, pomocí kterého nahráváme kód do paměti jednočipu
  • aplikace - software na PC, pomocí kterého nahráváme kód do paměti jednočipu
  • programování - upload již hotového binárního kódu (soubor.bin nebo soubor.hex) do paměti jednočipu

    Programátor - hardware

  •      
    ISP connector 10 pins
    ISP connector 6 pins
    ISP 10 to 6 pins
    ISP konektor 10 pinů ISP konektor 6 pinů redukce 10/6 pinů
         

         
    USBASP from ebay.com
    USBASP jumpers
    USBasp foto3
    USB-ASP Jumpery "low speed"
    a "self-programming"
    Můj home-made
    USB-ASP programátor
         

    • Asi nejjednodušší způsob, jak amatérsky naprogramovat většinu AVR jednočipů je pomocí takzvaného ISP (In-citcuit Serial Programming), někdy též označeného ICSP (In Circuit Serial Programming) přes rozhraní SPI (Serial Peripheral Interface). Tedy AVR jednočip je v případě SMD pouzdra již připájený, nebo v případě DIL pouzdra může být v patici v našem zařízení. Programování probíhá při normálním napájecím napětí (většinou 3,3V nebo 5V). Napájení může, ale nemusí být přivedeno z programátoru spolu s ostatními signály.

    • Zdá se, že hobby uživatelé (pominu-li Arduino) nejčastěji používají USB-ASP (samostatný jednoduchý programátor připojený na USB port počítače. Autorem je Thomas Fischl. Dneska jsou jich plné e-shopy za cenu, za kterou ani nenakoupíme součástky.

    • Klasická verze USB-ASP od Thomase Fischla má možnost přepnutí (zkratovacím jumperem) na nižší taktovací kmitočet (oscilátor < 1,5 MHz). To je potřeba například u nového AVR Atmega328(P), který ma defaultně nastaven vnitřní RC oscilátor 8 MHz a zapnuté dělení kmitočtu osmi, tedy výsledek 1 MHz a jednočip na plnou rychlost nepůjde programovat. Přepneme tedy programátor na nižší kmitočet, konfigurační bit nastavující dělení osmi změníme, uložíme a už to může jet na plnou rychlost.

    • Některé čínské verze programátorů (zdá se, že v poslední době většina) mají ve svém firmware přepnutí (snížení) kmitočtu hodin automatické. Stalo se mi ale, že to s některýmí programovacími aplikacemi nekomunikuje korektně. Konkrétně mám zkušenost s MCS-Bascom-AVR. Sice to funguje, ale stále vyskakuje hláška o nemožnosti nastavit kmitočet. Pak je řešením změna firmware v zakoupeném USB-ASP. Abychom ale potom mohli kmitočet přepínat, musejí být na destičce programátoru dva jumpery, na čínských klonech obvykle označené JP2 a JP3. Doporučuji tedy koupit verzi, která má tyto jumpery instalované, nebo alespoň připravené dírky na plošném spoji. Mnoho novějších čínských verzí je už úplně vypustilo. JP2 využijeme při přehrání firmware (self programming), JP3 je ten, kterým potom ručně snižujeme kmitočet hodin. Na přehrání firmware je však potřeba další funkční programátor. Klidně ten samý typ. (Při té ceně snad zakoupení dvou kusů nikoho nezruinuje a bude mít jeden do zálohy.)

    • Většina čínských klonů má možnost přepnout na 5V nebo 3,3V, obvykle jumperem označeným JP1. To je potřeba nastavit (zkontrolovat) před připojením.

    • Někteří prodejci tvrdí, že jejich USB-ASP programátor nepotřebuje pro Windows instalaci ovladače do počítače. Moc tomu nevěřím, já jsem ji vždy potřeboval. (vyzkoušeno na WinXP a Win7, s Win10 nemám zkušenost). Všechny tři ovladače mám vyzkoušeny jak na starém notebooku s WinXP 32bit tak na Win7 64bit. Na začátku videa odkazovaného na konci článku je ukázka instalace ovladače do Win7.
      LINK na ovladače.
      Nebo další LINK.

    • Piny programátoru a jednočipu se propojují 1:1. Tedy žádné křížení.
        Signály jsou:
      • GND - minus napájení
      • VCC - plus napájení
      • Reset(CS) - Chip select (dokud je reset stažený k nule, lze programovat)
      • SCK - taktovací kmitočet
      • MOSI, MISO - data

    • Standardní konektor pro ISP je desetipinový. Zdá se mi to jako plýtvání místem na plošném spoji, protože z toho čtyři piny jsou GND a jeden je nezapojený. Stačí tedy šestipinový konektor, který je rovněž jakýmsi standardem. Je dobré si s koupí programátoru koupit (nebo vyrobit) i redukci z 10 na 6 pinů. (Já jsem na mých deskách dlouho používal dokonce jen pětipinový, protože VCC vlastně není potřeba. Na desce je skoro vždycky stabilizátor, ze kterého je jednočip napájený).

    Tím je tedy hardware vyřešený.




    Programovací aplikace:

      Testoval jsem pár aplikací.
    • BitBurner (grafická nadstavba AVRdude)
    • AVRDUDESS (grafická nadstavba AVRdude)
    • ExtremeBurner
    • MCS BASCOM-AVR
    V minulosti jsem zkoušel také Atmel Studio a ještě nějaké další, které si již nepamatuji. Kdysi byl velice populární freeware PonyProg. Vývoj PonyProgu před několika lety skončil a tak s ním není možné programovat některé novější čipy. A také nepodporuje USB-ASP. (To je, bohužel, častý osud mnoha freeware projektů.)

    Po mých, ne zrovna pozitivních, zkušenostech s různými freeware a opensource aplikacemi doporučuji MCS-Bascom-AVR. To je sice především editor a kompilátor pro vytváření vlastního firmware, ale lze s ním také nahrát někde stažená, nebo vygenerovaná data do paměti jednočipu a nastavit konfigurační bity (fuses). Jedná se sice o placenou aplikaci, ale existuje DEMO verze (V-2.0.7.9), která pro tento účel naprosto postačuje. Demo verze není nijak časově omezená. Omezená je pouze tím, že umožňuje zkompilovat kód do maximální velikosti 4kB a nesmí se používat pro komerční účely. Pokud jde ale o vlastní programování (nahrávání kódu do paměti), žádné omezení velikosti tam není. Kdo chce, může si koupiti placenou verzi. V době psaní tohoto článku je aktuální placená verze V-2.0.8.2. Na to, co s tím člověk užije zábavy to není nijak drahé.

    Stažení a instalaci Demo verze Bascom-AVR snad není třeba nějak detailně probírat. Abych nemusel nahrání kódu do flash paměti zdlouhavě popisovat, vytvořil jsem video s návodem, jak na to. Jako ukázkový příklad jsem zvolil nahrání bootloaderu do paměti Atmega328P, aby byl použitelný v Arduinu UNO.

    Doplněno 18.2.2020

    Na Youtube.com jsem přidal video s ukázkou jak provést upgrade (downgrade) programátoru USB-ASP z Číny. Vyměníme tím upravený firmware, který sám přepíná rychlost programování za původní od Thomase Fischla. Tím se zbavíme varovných hlášení, ale musíme potom ručně (pomocí jumperu) nastavovat rychlost programování.

    Jarda, ok1hdu


       | Celý článek |      e-mailtisk clánku
     

    Zpět (klikni)

    O   Novinky
    05.07.2019:
    Update fotoalba
    Do fotoalba jsem přidal pár fotografií ze:
    Slovinska (červen 2019).

    05.12.2018:
    Update fotoalba
    Do fotoalba jsem přidal pár fotografií ze:
    Slovinska (jaro 2018)
    a ze:
    Suchého Vrchu (zima 2005/2006).

    24.11.2017:
    Update na webu DXFC
    Dneska jsem updatoval info na webu DXFC

    24.11.2017:
    Update fotoalba
    Do fotoalba jsem přidal fotky z letošní dovolené v Tureckém Oludeniz.

    20.11.2017:
    RSGB IOTA contest 2017
    Výsledky IOTA contestu 2017 v CW QRP kategorii.

    O   kalendář
    <<  Duben  >>
    PoÚtStČtSoNe
      1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30    

    O   Radary ČHMU

    Tento web site byl vytvořen prostřednictvím phpRS - redakčního systému napsaného v PHP jazyce.
    Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
    nebo registrovanými ochrannými známkami příslušných vlastníků.