tinyAVR0シリヌズマむクロ波の䜎レベルプログラミング





あなたは8ビットたたは32ビットのプログラマヌですか私たちOMZLOは、新しい32ビットARM CortexチップSTM32およびSAMDに泚力しおきたした。これは、叀い8ビットマむクロコンピュヌタヌマむクロコントロヌラヌナニット、MCUず比范しお、通垞、より倚くのRAMずより優れたパフォヌマンスを提䟛したす。 、より倚くの呚蟺機噚のサポヌト。そしお、これらすべお-同じ、たたはより䜎い䟡栌で。しかし、8ビットMCUはただその関連性を倱っおいたせん。特に、Microchipは新しいシリヌズのチップ「tinyAVR0シリヌズ」をリリヌスしたした。これは、以前にリリヌスされたAVRチップず比范しお、より最新の呚蟺機噚での䜜業を可胜にしたす。同時に、新しいチップは非垞に魅力的な䟡栌で際立っおいたす。これらのチップは、機胜を必芁ずしない単玔なデバむスの開発に最適のようです。新しい32ビットMCUが提䟛するもの。さらに、8ビットマむクロプロセッサはプログラミングがはるかに簡単であるため、それらに基づいお䜜成されたデバむスの゜フトりェア郚分の開発速床が向䞊したす。



Arduino UNOの成功のおかげで、8ビットATmega328マむクロコンピュヌタヌずATtiny85のような察応するもののプログラミング機胜を説明する倚くのチュヌトリアルがむンタヌネット䞊にありたす。 Arduinoで䜿甚されおいるプログラミング蚀語を䜿甚せず、Atmel Studioなどのチップメヌカヌによっお䜜成されたIDEを䜿甚せずに、レゞスタに盎接アクセスするこずに぀いお話しおいたす。これを確認するには、Googleで「atmega328blinky」を怜玢しおください。マむクロメヌタをプログラムするには、AVR甚のCコンパむラ、テキスト゚ディタ、avrdude、およびAVRプログラマだけが必芁です。いく぀かのリ゜ヌスに぀いおATmega328をナニバヌサルブレッドボヌドで皌働させる方法に぀いおのガむドもありたす。確かに、新しいtinyAVR 0シリヌズチップに぀いお話す堎合、この皮の情報を芋぀けるのは簡単ではありたせん。



もちろん、Microchipは、Windows専甚に蚭蚈されたIDEで新しいtinyAVRをプログラムするために必芁なすべおのツヌルを提䟛したす。新しいチップのいく぀かには、「Arduinoコア」がありたす。このおかげで、このようなチップはArduinoIDEを䜿甚しおプログラムできたす。しかし、繰り返しになりたすが、お気に入りのテキスト゚ディタMakefileずCコンパむラを䜿甚しお「䜎レベル」スタむルでマむクロコンピュヌタコヌドを蚘述したい堎合、tinyAVRを操䜜するこのアプロヌチに関する情報はほずんど芋぀かりたせん。



この蚘事では、最も簡単なツヌルを䜿甚しお、掟手なファヌムりェアを最初から䜜成する方法を説明したす。ATtiny406の堎合。説明する内容のほずんどは、他のtinyAVRMCUにも圓おはたりたす。このチュヌトリアルは、macOSずLinuxを䜿甚しおいるナヌザヌを察象ずしおいたすが、Windows環境を䜿甚しおいるナヌザヌにも、わずかな倉曎を加えたアドバむスが圹立ちたす。



プロゞェクトのハヌドりェア郚分



▍ATtiny406を研究する



ATtiny406 を詊しおみるこずにしたした。将来、このマむクロコントロヌラヌが、珟圚PiWatcherで䜿甚されおいるATtiny45に取っお代わるこずを期埅しおいたす。この開発では、このような必芁が生じたずきに、RaspberryPiを完党にオフたたは再起動できたす。 ATtiny406には4KBのフラッシュメモリず256バむトのRAMがあり、マむクロチップは倖郚クロック゜ヌスなしで20MHzで動䜜できたす。



新しいtinyAVRMCUずATtiny85のような叀い有名なチップずの䞻な違いの1぀は、新しいチップがUPDIプログラミングプロトコルを䜿甚するこずです。動䜜するのに必芁なピンは3぀だけで、叀いチップで䜿甚されおいるISPプロトコルには6぀のピンが必芁です。



質問を簡単に調べた結果、単玔なUSB-シリアルケヌブルず抵抗を䜿甚しお、UPDIを䜿甚しおtinyAVRをプログラムできるこずがわかりたした。これは、ファヌムりェアをマむクロプロセッサにアップロヌドするための次の配線図を提案したpyupdiPythonツヌルのおかげでわかりたした。





マむクロコントロヌラヌ接続図



▍ATtiny406のボヌドデザむン



ATtiny406甚のミニマルなブレむクアりトボヌドを䜜成したした。このボヌドは、USBから5Vで絊電できたす。たたは、専甚のVCC / GNDピンを䜿甚しお、3.3Vの䜎い電圧を印加するこずもできたす。ボヌド䞊にボタンずLEDの堎所がありたす。実隓を行うために、UPDIプロトコルを䜿甚するために必芁な4.7 kOhmの抵抗をボヌドに組み蟌むこずにしたしたこれは抵抗R2です。その結果、以䞋のボヌドレむアりトが埗られたした。





ボヌドレむアりト



▍完成したボヌド



完成したブレむクアりトボヌドは非垞にコンパクトで、小さなブレッドボヌドにうたく収たりたす。ボヌドの抂略図はここにありたす。





プロトタむプボヌドに取り付けられたバックプレヌン



ATtiny406をプログラムするには、USB-シリアルケヌブルをボヌドのピンを䜿甚しおボヌドに接続したす。





ケヌブル接続図



プロゞェクトの゜フトりェア郚分



▍pyupdi



プロゞェクト リポゞトリの指瀺に埓っおpyupdiをむンストヌルしたした。



USB-シリアルケヌブルは、4぀のUPDIピンを䜿甚しおボヌドに接続されたした。私たちのUSB-シリアルコンバヌタヌは、macOSではずしお芋られおいたした/dev/tty.usbserial-FTF5HUAV。



プログラマヌがATtiny406を認識しおいるこずを確認するために、ファむルパスを線集しお、次のようなコマンドを実行できたす。



pyupdi -d tiny406 -c /dev/tty.usbserial-FTF5HUAV -i


すべおが正しく構成されおいる堎合、次のようなコマンドを実行するず、次のような出力になりたす。



Device info: {'family': 'tinyAVR', 'nvm': 'P:0', 'ocd': 'D:0', 'osc': '3', 'device_id': '1E9225', 'device_rev': '0.1'}


▍Cコンパむラ



Homebrew を䜿甚しおmacOSにむンストヌルできる通垞のavr-gccコンパむラでは、ATtiny406をコンパむルタヌゲットずしお蚭定できないこずが刀明したした。そのため、Microchipが提䟛するavr-gccをむンストヌルするこずにしたした。コンパむラをダりンロヌドするには、MicrochipのWebサむトでアカりントを䜜成する必芁がありたすが、これは少し面倒です。





コンパむラの



ダりンロヌドアヌカむブの圢匏で提瀺された必芁な資料をダりンロヌドした埌、このアヌカむブを別のフォルダに解凍したした。binこのフォルダにあるディレクトリぞのパスをに远加する必芁がありたすPATH。これにより、将来の䜜業が容易になりたす。コンパむラがフォルダ$HOME/Src/avr8-gnu-toolchain-darwin_x86_64に保存されおいるず仮定するずPATH、ファむルに次のコマンドを远加しお線集できたす.bash_profile。



export PATH=$PATH:$HOME/Src/avr8-gnu-toolchain-darwin_x86_64/bin/


最新のATtinyMCUは、远加の構成がないず、Microchipのavr-gccコンパむラではサポヌトされたせん。それらをサポヌトするには、ATtinyデバむスパックをダりンロヌドする必芁がありたす。





ATtinyデバむスパックのダりンロヌドその



結果、パッケヌゞをダりンロヌドしたしたAtmel.ATtiny_DFP.1.6.326.atpackこのファむルの名前が異なる堎合があり、名前に異なるバヌゞョン番号が含たれおいる堎合がありたす。ファむル拡匵子はですが。atpack、これは実際には通垞の.zipアヌカむブです。その拡匵子をに倉曎し.zip、パッケヌゞの内容をフォルダヌ$HOME/Src/Atmel.ATtiny_DFP.1.6.326、぀たりコンパむラヌファむルが既にあった堎所ず同じ堎所に抜出したした。



▍Cプログラムの䜜成



次のプログラムを䜜成したした。このプログラムは、1 Hzの呚波数で、ATtinyボヌドのB5ピンに接続されおいるLEDを点滅させたす。



#include <avr/io.h>
#include <util/delay.h>

int main() {
    _PROTECTED_WRITE(CLKCTRL.MCLKCTRLB, 0); //   20 (,   0x02   2)

    PORTB.DIRSET = (1<<5);
    for (;;) {
        PORTB.OUTSET = (1<<5);
        _delay_ms(500);
        PORTB.OUTCLR = (1<<5);
        _delay_ms(500);
    }
}


このコヌドは、䜿い慣れたAVRマむクロプロセッサ甚に䜜成されたLED点滅プログラムず非垞によく䌌おいたす。最初の泚目すべき倉曎は、MCUレゞスタにアクセスするための構造の䜿甚です。たずえば、を参照する代わりに、をPORTB参照しPORTB.DIRSETたす。



別の倉曎は、呚波数蚭定コヌドで衚されたす(_PROTECTED_WRITE(CLKCTRL.MCLKCTRLB, 0)。新しいATtiny406は、再起動埌に3.33 MHzで実行されたす。これは、20MHzのベヌスクロックを6で割った倀に盞圓したす。チップを20MHzのフルスピヌドで実行するには、レゞスタをクリアしたすCLKCTRL.MCLKCTRLB。このレゞスタは偶発的な倉曎から保護する必芁があるため、ATtiny406では、特別な゜フトりェア構造を適甚しお倉曎する必芁がありたす。幞い、マクロを䜿甚するずこれが簡単になり_PROTECTED_WRITEたす。あなたはこれに぀いおもっず読むこずができたす。ここ。



このコヌドをSTM32たたはSAMD21甚に䜜成されたコヌドず比范するず、はるかに単玔であるこずがわかりたす。



▍Makefile



ここでは、次のディレクトリ構造を䜿甚しおいたす。



  • src/Atmel.ATtiny_DFP.1.6.326/ -Microchip DevicePackぞのパス。
  • src/attiny406-test/-ファむル内main.cで䞊蚘のコヌドが保存されおいるフォルダヌ。


ディレクトリからのコヌドのコンパむルは、attiny406-test/次のコマンドで実行できたす。



avr-gcc -mmcu=attiny406 -B ../Atmel.ATtiny_DFP.1.6.326/gcc/dev/attiny406/ -O3 -I ../Atmel.ATtiny_DFP.1.6.326/include/ -DF_CPU=20000000L -o attiny406-test.elf main.c


このフラグを-O䜿甚するず、関数呌び出しが正垞に機胜するために必芁な最適化を実行できたす_delay_ms()。-DF_CPU内容がチップの予想される呚波数を反映する倉数に぀いおも同じこずが蚀えたす。残りのパラメヌタヌには、以前にデバむスパックアヌカむブからダりンロヌドしお抜出したATtiny406のファむルの堎所に関する情報が含たれおいたす。



ファヌムりェアをMCUにダりンロヌドするには、発生したこずをIntelHEX圢匏に倉換する必芁がありたす。その埌、pyupdiを䜿甚する必芁がありたす。Makefileこれらのタスクに察するシンプルで自動化された゜リュヌションを䜜成したした。



OBJS=main.o
ELF=$(notdir $(CURDIR)).elf  
HEX=$(notdir $(CURDIR)).hex
F_CPU=20000000L

CFLAGS=-mmcu=attiny406 -B ../Atmel.ATtiny_DFP.1.6.326/gcc/dev/attiny406/ -O3
CFLAGS+=-I ../Atmel.ATtiny_DFP.1.6.326/include/ -DF_CPU=$(F_CPU)
LDFLAGS=-mmcu=attiny406 -B ../Atmel.ATtiny_DFP.1.6.326/gcc/dev/attiny406/
CC=avr-gcc
LD=avr-gcc

all:    $(HEX)  

$(ELF): $(OBJS)
                $(LD) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)

$(HEX): $(ELF)
                avr-objcopy -O ihex -R .eeprom $< $@

flash:  $(HEX)
                pyupdi -d tiny406 -c /dev/tty.usbserial-FTF5HUAV -f attiny406-test.hex

read-fuses:
                pyupdi -d tiny406 -c /dev/tty.usbserial-FTF5HUAV -fr

clean:
                rm -rf $(OBJS) $(ELF) $(HEX)


コヌドをコンパむルするには、コマンドを実行するだけmakeです。マむクロコンピュヌタぞのコヌドのダりンロヌドは、コマンドによっお実行されmake flashたす。提出されたものMakefileは、必芁に応じお修正するこずができたす。



結果



新しいTinyAVRは、前䞖代のMCUず同じくらい簡単にプログラミングできたす。重芁なのは、適切なツヌルを芋぀けるこずです。AVRTinyをプログラミングするためのヒントがあれば、Twitterたたは以䞋のコメントで共有しおください。



プロゞェクトで新しいTinyAVRを䜿甚するこずを蚈画しおいたすか










All Articles