はじめに
最近、PICやAVRなどフラッシュメモリーを搭載したワンチップマイコンでの自作記事やプログラミングの記事が目に付くようになってきました。 しかし、その多くはアセンブラで記述されたプログラムが殆どで、マイコンを使って何かのH/Wの制御をしようとする初心者にはハードルの高いものになってしまいます。
C言語という選択肢もありますがこちらもC言語特有のルールを覚えなければならず、アセンブラよりましとはいえ感覚的にプログラムを書くというわけには行きません。 また、これらのマイコンを使用した記事では多くの場合、「アーキテクチャ」はとか「H/Wの構造」はとか、メーカーのデータシートに記述される難解な説明からスタートしています。 ここでは、S/Wのシロートがシロートなりにいかに手を抜いてプログラムを書き、何か動くものを作り上げるかという事に挑戦してみました。
BASICでAVRしよう!
いまどきBASICという声も聞こえてきそうですが、まず次のプログラムをみてください。 LCD “HelloAVR World”
一般的にプログラムの教科書の一番初めには「Hello World」を表示させる例題が記載されています。ここでは、使用するマイコンに敬意を表して「AVR」を追加してみました。 これから紹介するプログラム言語では、これらの表示をさせるためのプログラムは上記のたった一行ですみます。アセンブラで記述したらどうなるのでしょう。まず、使用するLCDの初期化、表示位置の設定、表示する文字番号の送出といった手順でしょうか。勿論、LCDとマイコン間でデータをやり取りするプログラムも必要です。おそらく、100行位は既に記述していることになるでしょう。
これらの複雑な手順は、使用するプログラム言語に全てまかせてしまい実現したい機能のみを記述することでプログラムを完成させようというのが今回の試みです。
しかも、本当に使ってゆけるかどうかわからない状態で、言語やライター等に何万円もの投資をすることなく、気楽に始められるツールを見つけてきました。
準備をしよう!
それでは、具体的にBASICでAVRするための準備を始めます。最低限必要なものは次の通りです。
1. パソコン
シリアル(RS-232C)、パラレル(プリンタ用)がついたWindowsが動作するレベルであれば十分です。最近のパソコンはRS-232Cやパラレルのプリンタポートが付いていないものが増えていますので、こちらのほうが問題かもしれません。USBから変換するアダプターも販売されており使えるとは思いますが、実験したことはありません。
私が使っているのはIBMのThinkPad535E(P150MHzMMX、48MBメモリー、2GBHDD、OSWin98SE)です。HAMのPSK31用マシンとしてヤフーオークションで\14000でGetしたものです。
2. 開発言語
MCSElectronicsという会社からリリースされている「BASCOM−AVR」というBASICコンパイラと呼ばれるS/Wです。
すばらしい事に、デモ版が提供されており、2KBまでは制限無くプログラムを作ることができます。2KBというとATMELの最も標準的なチップである2313はフルにプログラムを作ることができます。たいていのプログラムはこのデモ版で用が足りでしまうでしょう。デモ版で入りきれないくらいのプログラムを作るようになったら正規版を購入すればよいかと思います。価格も非常にリーズナブルです。日本での販売代理店もあります。S/Wそのものは英語版ですが、使用するに困るようなことは殆どないと思います。日本語マニュアルを販売している販売代理店もあります。
このBASICコンパイラのデモ版の入手先は下記の通りです。
http://www.mcselec.com/download_avr.htm
プログラム本体でフロッピーディスク4枚と遅いモデムでダウンロードすると少しばかり厳しいサイズですが、フリーで手に入ることを考えれば安いものです。
HelpファイルとSampleプログラムもダウンロードしておきましょう。
比較的こまめにバージョンアップされていますが、既に完成度は高く、どうしても動作がおかしいと感じたときにでもバージョンアップしてみる程度だと思います。
それでは、実際にインストールを行います。プログラムはフロッピーディスク4枚分ありますが、全てを同じフォルダーに入れてSETUPを実行すれば入れかえる手間が省けます。
インストールの方法は、普通のプログラムのインストールと変わりません。
・まず、ダウンロードしたファイル(Zipファイル)を解凍し,一つのフォルダーに纏めます。
・次に,Setupファイルをダブルクリックしてインストールプログラムを実行します。
・Welcomeメッセージが出ますので「Next」を押します。
・このプログラムの説明がでます。これがデモ版で制約が2KBであること、正規版が$69であることなどが記載されています。「Next」を押します。
・次にライセンスに関する記載が出ます。同意する場合は「Yes」を押します。
・次はインストールするフォルダーを指定します。指定があれば「Brows」を押して指定して「Next」を押します。
・次にBackupのフォルダを作るか聞いてきます。「Yes」がチェックされていますのでそのまま「Next」を押します。
・次にお決まりのプログラムマネージャーを作るか聞いてきます。そのまま「Next」を押します。
・インストールの準備ができたといってきますので、よければ「Next」を押します。
・インストールが自動的に行われます。終了したら「Finish」を押して終了です。
注意点は、パソコンにプリンタの設定がされていないとコメントが出てきます。設定されていれば何も出てこずに無事に終了です。
3. ライター
上記のコンパイラでプログラムを作ったら、マイコンにプログラムを書き込む必要があります。
昔は、EPROMと呼ばれるガラスの窓のついた紫外線でプログラムが消去できるメモリーを使って、書いては消し、書いては消しと結構苦労しながらプログラムを作っていたそうです。勿論、専用のプログラムライターと、ROMイレーサーなる物が必要だったそうです。
今回使用するマイコンは、電気的に書込み消去ができるフラッシュメモリーと呼ばれるメモリーが搭載されており、しかも、書込み時に特別な電源を用意することなく、また、マイコンを、目的とする回路に実装したまま書込み消去が可能なISP(In System Programming)という機能までついています。
それでは、具体的にライターについて説明します。
ここでは、コンパイラ付属のライタープログラムがそのまま使えて抵抗のみで作れるライターにSampleElectronics社のものがあり、これを真似て作りました。
書き込み後の評価時にもコネクタをはずす必要がなく、D-SUBコネクタと抵抗だけで作れる簡単さには魅力があります。
回路図:AVR_ISP_SampleElectoronics互換
このプログラマはパラレルタイプです。パラレルタイプを選択したのは、RS-232Cの評価を行うときに接続を一々やり直す必要がなく便利だからです。
何故、これほど接続のやり直しにこだわるかというと、プログラム作りの目的が、何時間もかかってプログラムを作り、その後にライターで焼いて動作を確認するとではなく、一つ一つ動作を確認しながら、感覚的に作ることにあるからです。
プロのプログラマの方には怒られるかもしれませんが、この方式で、敷居が高くてマイコンの使用を躊躇していた日曜自作マニアの方が、日曜プログラマとして一人でも増えることを期待しています。
実はこの非常にシンプルなライターを作る前に、ATMEL社標準?のSTK200互換のパラレルプログラマを作ってみました。必要な回路部品をD-SUBコネクタに全て収納したコンパクト設計です。機能的には、上記のものと同じです。
回路図:AVR_ISP_STK200互換
パターン図:AVR_ISP_STK200互換
パラレルタイプのライターを作る前までは、赤松さんのリセット回路をスイッチで切り離しができるようになった、シリアル接続用を作って使っていました。
DOS窓での使用はそれほど不自由では無かったのですが、コンパイラから直接使えるこのライターを作ってからは、更に効率が上がった?ような気がします。
このマイコンに使用できるライターは他にも何種類か紹介されています。最近見つけたホームページではこれらのライターを纏まった形で紹介されています。
一度参考にされたらよいかと思います。
http://micomfreaks.hoops.ne.jp/index.html
4. ターゲットボード
最初から、目的とする機能にあわせた回路を組んでプログラムを作る方法もあるでしょうが、多くの場合、実現しようとする機能をプログラムでどのように作るか事前に検討したほうが結果的に効率よくプログラムを作成することができると思います。
この場合、その時毎に回路を組んでいては時間のロスですし、面倒くさくて気楽にプログラムを組むという気持ちにはなれないと思います。
幸い、今回のコンパイラは簡単にマイコンのポート変更が可能ですの、プログラムテスト用のボードでプログラムのテストを行い実機に簡単に移植することができます。
ここでは、下記のようなプログラムテスト用のボード(ターゲットボード)を作ってみました。
回路図:AVR_TEST_BOARD
パターン図:TEST_BOARD
このターゲットボードには一般的に使用するであろう機能・I/Fを一通り搭載しています。AVRのチップは色々やってみましたが、結局、殆ど全てを網羅できる「AT90S8535」を使用しました。これで評価し、2313や4433等、実際に使用するチップにポートを変更すればプログラムはそのまま使用できます。
勿論、8535は40PINなので、2313(20PIN)や4433(28PIN)等の変換アダプタを作れば実際のチップで評価が可能です。
ターゲットボードで評価が可能な機能一覧を下に纏めてみました。
・LCD表示 16文字×2行
・キー入力 4入力
・LED出力 10出力(1出力はLCDのバックライト)
・A/D入力 8入力(内2入力は温度、電源電圧測定)
・ロータリーエンコーダー 入力1(通常の4倍カウント機能付)
・RS−232C入出力 1
・IRリモコン入力 1(ロータリーエンコーダーと切替)
・外部温度補償XOSC 1(Fカウンタ、時計等用、切替て使用)
・実験用I/O端子 20入出力(A/D、キー入力、LEDと兼用)
※電源は、外部5Vと乾電池(9V)のいずれも使用可能としました。
※プログラムの書き込みは、10PINのISP端子を搭載し、使用するライターによっては接続したまま評価が可能です。
5. マイコン
既に、記述しましたがターゲットボード用マイコンとしては「AT90S8535」という40PINのチップを選択しました。最もポピュラーな2313を標準にしても良かったのですが、A/D変換機能も使いたくなったりしますし、8535で評価すれば2313への移植は簡単にできるので大は小を兼ねるの思想で行きました。
個人的には、28PINの4433というA/D付きが機器実装用としてコンパクトで気に入っています。(入手できるところが限られてしまいますが)
実際に始めてみよう!
1.プログラム言語初期設定
プログラムを書き始める前にBASCOM-AVRの初期設定を行います。この初期設定により、1行プログラムが可能になります。
まず、ツールバーの「Options」から[Compiler」「Chip」を選択します。
この中でChipは、「90S8535」を選択します。
このChipを選択したのはターゲットボードで使用したChipにあわせたためです。必要に応じて使用するChipを選択してください。このページはこれで終わりです。まだ、OKボタンは押しません。
次に、LCDのタグを選択します。
LCDTypeは、使用するLCDにあわせて選択します。
ターゲットボードで使用したLCDは16桁×2行ですので、16*2を選択します。
次に、LCDとポートの接続を設定します。
上から順番に、Enable「PORTB.3」、RS{PORTB.2」、DB7「PORTB.7」、DB6「PORTB.6」、DB5「PORTB.5」、DB4「PORTB.4」と設定します。
その他は、変更しません。
次に、CLOCKの設定をします。
Communicationのタグを選択します。
この中でFrequencyを8000000Hzに設定します。
ターゲットボードに搭載したもう一つのCLOCKである12.8MHzを使用するときは、この値を12800000Hzに設定します。
使用したChipはカタログ上10MHzが上限ですが、アマチュア的には十分動作しました。
Baudrate0は、何もいじりません。
その他のタグもありますが、ここではこのページは終わりにします。
次に、上のタグでProgrammerを選択します。
Programmerで使用するライターを選択します。
ここでは、抵抗4本で作った「Sample Electronics Programmer」を選択しました。
また、チェック欄 EraseWarning、Auto Flash、AutoVerifyもチェックしておきます。
このライターはパラレルタイプですので下のタグでParallelを選択し、LPT-addressが使用するPCの
パラレルアドレスになっているか確認します。初期は378になっていたと思います。殆どのPCはこれでOKだと思いますが、下名のPCは3BCでした。
※PCのポートは、マイコンピュータを右クリックして、プロパティを選択し、タグ「デバイスマネージャ」を選択し、その中のポート(COM/LPT)をダブルクリックします。次に、プリンタポート(LPT1)をダブルクリックすると、プリンタポートのプロパティが開きます。更に、タグリソースを選択し、IOの範囲に示されている左側の値がプリンタポートのアドレスになります。
これで、OKのボタンを押して初期設定は終了です。
この他、RS232Cのボーレート、COMポートを設定するCommunicationのタグもあります。必要に応じて設定してください。
設定したからといって使わなければならないということはありません。エディターやプリンター出力するファイルの設定などもあります。初期値のままで使用して全く問題はありません。
重要なのは、ChipとCLOCKとLCDの種類とポートです。
2.プログラムの作成
いよいよプログラムを作成します。
ツールバーから、Newを選択し、白紙のファイルを呼び出します。
最初に、説明したLCDのプログラムが1行で動作するかやって見ましょう。
LCD”Hellow AVR World”
とインプットします。これで終わりです。コマンドとダブルクウォーテーションの間は空けなくてもEnterキーで自動的に空けてくれます。
ねんためにプログラムをセーブしましょう。
Fileを選択し、この中でSave asを選んで適当なフォルダーにファイルネームをつけてセーブします。ここでは「LCDTEST」としました。
3.プログラムのコンパイル
次は、プログラムをマイコンに書き込むための言葉に変換するコンパイルという作業です。しかし、全く難しくありません。ボタンを押すだけです。
ツールバーにICのマークがしてあるボタンがあります。これがコンパイルボタンです。
早速押して見ましょう。コンパイルを始めるとコンパイル中の表示がでて終了すると消えます。これで、終わりです。たった1行ですのでエラーは出ないと思います。
プログラムにエラーがあるときは、下のほうにエラーメッセージがでます。
メッセージが英文なのが課題ですが、なんとか雰囲気は理解できるでしょう。
4.プログラムの書込み
いよいよ、プログラムを書き込みます。
これも、既に初期設定がされていますので簡単です。ツールバー上のICソケットの形をしたボタンを押します。(緑色)もちろん、PCとターゲットボードがライターで接続されている必要があります。
Erasing chip, are you sure?
と聞いてきますので、「Yes」ボタンを押すと書込みが始まります。
書込み状態がバーで示され、同じようにVerifyが行われます。
5.プログラムの動作確認
書込みが終了すると自動的にプログラムがスタートします。
うまくゆきましたか?
LCDに表示されたことはされたと思いますが、永久に繰り返されるため読みにくいですね!
せっかくですから、きれいに表示されるようにプログラムを修正します。
Cls
LCD ”Hellow AVR World”
End
今度は3行のプログラムです。
同じように、コンパイルして書込みを行います。
今度はきれいに表示されたでしょう!
プログラム演習
突然、必要になって秋月のDDSキットの制御を実験始めました。
最初から応用問題です。
但し、取り敢えず必要な周波数を発振させるだけだったら12行のプログラムとなりました。
0.秋月製DDSキットの制御
最近色々なことを同時に進めていてこの演習の追加が遅れていましたが、突然応用問題として秋月製DDSキットの制御を行います。
下に示したのが12行プログラムです。
このプログラムを動作させると周波数7MHzの信号が出てきます。
実際には、日本語のコメントはつけられませんが、各行の右に簡単なコメントを付加しました。
'DDS TEST Sample
Config Portc = Output
Dim Ddscmd As Byte ’DDSのコマンドとChipアドレスを記述
Dim Freqdata As Long ’周波数データを記述
Ddscmd = &B01100111 ’コマンドは"C"、Chipアドレスは"111"
Freqdata = 7000000 ’周波数は7000000Hz(周波数そのものの数値)
Set Portc.3
Shiftout Portc.2 , Portc.1 , Ddscmd , 3 , 7 , 10 ’コマンド、アドレスを転送
Shiftout Portc.2 , Portc.1 , Freqdata , 3 , 26 , 10 ’周波数データを転送
Reset Portc.3 ’ストローブ信号を作成
Set Portc.3
End
どうですか、簡単ですよね! 周波数を変えるにはFreqdataの値を変えれば良いことがわかります。
あとで演習するロータリーエンコーダーと組み合わせればダイヤルを回して周波数を可変することが可能になります。
ここでのポイントは"Shiftout"コマンドです。
Portc2がデータ出力、Portc1がクロック出力、その次の変数は出力するデータ(コマンドや周波数)、次の"3"はDDSの仕様できまっているクロックの立上りでデータをLSBファーストで転送するコマンド、次の"7"や"26"は一度に転送するBit数(ここでは、コマンドと周波数データを分けた)、最後の"10"は、クロックの幅(時間uS)です。
この"Shiftout"コマンドはストローブ出力は対応していないためPortの"Set"、"Reset"コマンドを付加して、Portc3をストローブ出力にしました。
周波数を変えるだけでしたら、サブルーチンにしてFreqdataを与えるだけでこのまま使えます。
1.LEDのON/OFF
次に、最初に行うべきLEDのON/OFFの演習を行います。
プログラムは以下の通りです。
'LED TEST Sample
Config Portb = Output ’ポートbを出力に設定
Main: ’ループとなるラベル
Set Portb.1 ’Portbの1Bitを"1"に設定
Wait 1 ’1秒間待ちます
Reset Portb.1 ’Portbの1Bitを"0"に設定
Wait 1 ’また、1秒待ちます
Goto Main ’最初に戻ります
どんなプログラムか解りましたか?
そうです、Portbの1Bit目に接続されたLEDを1秒ごとにON/OFFさせるプログラムです。
ここでのポイントは、各ポートを1Bit毎に制御するコマンド、"Set"("1"にする)と"Reset"("0"にする)です。
"Wait"コマンドがその後ろに記述された数値(秒)だけ時間待ちをするコマンドであることも覚えましょう。
最後の”Goto ××"はラベル"××"にジャンプするコマンドです。
2.LCDの表示
ここは、最初に簡単に説明したので、今は割愛します。
3.キー入力
キー入力のプログラムは色々考えられ、コマンドにもありますが、ここでは、手っ取り早く、且つ割込み処理でも活用できるプログラムを組んでみました。
ターゲットボードでは、ポートCの上位4bitにキー入力用のスイッチを組み込み、通常は"1"でスイッチを押すと"0"になる回路となっているので、このスイッチの状態に合わせて、ポートDのLEDを光らせるプログラムとしてみました。
' KEYINPUT TEST Sample
Config Portd = Output 'LEDを光らせるためポートDを出力とする
Portc = &B11110000 'ポートCの上位4bitを入力のために"1"にする。
Dim Pca As Byte '最初に取込むキー入力の値を定義
Dim Pcb As Byte '次に取込むキー入力の値 を定義
Main:
Pca = Pinc '最初のキーデータの取込
Waitms 20 '20mSのウェイト(時間待ち)
Pcb = Pinc '二回目のキーデータの取込み
If Pca <> Pcb Then Goto Main '最初と二回目のキーデータの比較
Portd = Pcb 'ポートDにそのデータを書き込む
Goto Main
ポイントは、AVRの各ポートが入出力兼用になっているため、入力として使うポートは必ず"1"を出力しておく必要があるということです。
Pca = Pinc はポートCの8bitを一度に取込んでいます。
次の20mSのウェイトは、キースイッチのチャタリングといわれる誤入力となる現象やノイズによる誤入力を防ぐためのものです。通常10〜30mSの間隔をおいて二度取込み一致していたら正しい入力データと判断して入力されたデータの処理を行います。
正しく入力されたデータはそのままポートDに出力していますので入力のないときにはポートDの上位4bitのLEDが光り、キーを押すと押されたポートCのbitに対応したポートDのbitのLEDが消灯します。
4.A/D変換
比較的簡単なA/D変換を演習します。
これも、コメントを除いて僅か8行です。
A/D変換した値はLCDに表示します。
'A/D TEST Sample
Config Porta = Input ’Portaを入力に設定します。
Dim W As Word ’AVRのA/Dは10bitなので取込む変数をWとし16bitに定義します。
Start Adc ’A/D変換を許可します。
W = Getadc(1) ’Portaの1Bitの値をA/D変換し変数Wに代入します。
Cls ’Lcd表示を初期クリアします。
Lcd W ’LcdにWの値を表示します。十進数で表示されます。
Stop Adc ’A/D変換を不許可にします。
End
ターゲットボードでは、Portaの1Bitは、温度測定ICを接続しましたので、その出力電圧が表示されます。
A/D変換は10Bitなので概略5V*W/1024 Vです。このICを手で触ってからプログラムを動作させると手の温度で値が変化することがわかります。
正確な温度表示は校正が必要です。
ターゲットボードでは、Portaの0Bitは電源電圧5Vを抵抗で1/2にして接続してあるのでGetadcの( )の中を"0"にするとPortaの0Bitの値を表示することが可能です。
結果は500前後の値となります。5V*W/1024 Vですから500ということはほぼ2.5Vで電源電圧の約1/2であることがわかります。
ここでのポイントは、”Start Adc"、"W=Getadc(×)"と"Stop Adc"です。
このA/D変換機能を使ってSメーターをLCDで表示させることが可能になります。
5.エンコーダー入力
いよいよ、ロータリーエンコーダー処理の演習です。
目をつぶって以下のプログラムを実行させます。
今までで最も長い45行です。
もっと良いプログラムが書けると思いますが、素人に免じて許してください。
このプログラムは、一般的に使用される2相式エンコーダーを4倍でカウントできるようになっています。
秋月で販売されている20パルスのロータリーエンコーダーを80パルスとして使用することが可能です。
' ENCORDER TEST Sample
Dim Enc As Byte
Dim Encold As Byte
Dim Enccnt As Integer
Enccnt = 0
Encold = 0
Cls
Main:
Gosub Encsub
Waitms 10
Cls
Lcd Enccnt
Goto Main
Encsub:
Enc = Pind
Enc = Enc And &H0C
If Enc = Encold Then Goto Encerr
If Encold = &H0C Then Goto Encl1
If Encold = &H08 Then Goto Encl2
If Encold = &H04 Then Goto Encl3
If Encold = &H00 Then Goto Encl4
Encl1:
If Enc = &H08 Then Goto Encl5
If Enc = &H04 Then Goto Encl6
Goto Encerr
Encl2:
If Enc = &H00 Then Goto Encl5
If Enc = &H0C Then Goto Encl6
Goto Encerr
Encl3:
If Enc = &H0C Then Goto Encl5
If Enc = &H00 Then Goto Encl6
Goto Encerr
Encl4:
If Enc = &H04 Then Goto Encl5
If Enc = &H08 Then Goto Encl6
Goto Encerr
Encl5:
Decr Enccnt
Goto Encend
Encl6:
Incr Enccnt
Encend:
Encerr:
Encold = Enc
Return
このプログラムは最終完成ではありません。8項の割込み処理と組み合わせることで実用的なプログラムとなります。
まず、処理を理解するために作りました。
カウントした値のLCDへの表示は10mSおきに行っています。
LCDは、10mSおきに書きかえられるので表示が薄くなっています。
また、エンコーダーを早く回転させるとパルスの取りこぼしがあります。
ここでは、取り敢えず動作することを確認します。
6.RS-232C通信
7.リモコン受信
8.割込み処理
今回は取り敢えずタイマー割込みのプログラムのみを以下に示します。
このプログラムを起動させると、LCD上に1秒ずつのカウントデータが表示されます。なお、この1秒は約1秒で正確ではありません。
発振子の精度と割込みカウンターの正確な設定が必要です。
Tcntsの値が、秒を表していますので、60秒を繰り上げれば分に、分を60分で切り上げれば時間になり、時計を作ることができます。
'***************************************************
'* TIMER INT TEST Sample
'***************************************************
Dim Tcntus As Integer
Dim Tcntms As Integer
Dim Tcnts As Integer
Tcntus = 0
Tcntms = 0
Tcnts = 0
'***************************************************
'***************************************************
Config Timer0 = Timer , Prescale = 8
On Ovf0 Tim0_isr
Enable Ovf0
Enable Interrupts
Cls
'***************************************************
'* MAIN ROUTINE
'***************************************************
Main:
Cls
Lcd Tcnts
Waitms 450
Goto Main
'***************************************************
'* TIMER INT COUTER SUBROUTINE
'***************************************************
Tim0_isr:
Tcntus = Tcntus + 1
If Tcntus = 4 Then Goto Tcntl1
Goto Tcntl2
Tcntl1:
Tcntus = 0
Tcntms = Tcntms + 1
If Tcntms = 976 Then Goto Tcntl3
Goto Tcntl2
Tcntl3:
Tcnts = Tcnts + 1
Tcntms = 0
Tcntl2:
Return
'***************************************************
サンプルプログラム
1.エレキー
メインページで紹介している「ATTiny26L」という、OSCとA/Dを内蔵したAVRを使用したエレキーのプログラムを紹介します。
BASICでどこまでの機能が作れるかが実用的かどうかの判断となりますが、長短点メモリー、スクイーズ機能、2メッセージ機能、パドルのリバース、外部キーへの切替をはじめ、単なるエレキーとしてではなく、TRXの切替タイミング制御も含め、CW TRXの内蔵エレキーとしても使用可能です。
演習では、EEPROMの書き込み・読み出しを行っていませんが、一命令でできますのですぐ理解できると思います。
サンプルプログラム:Tiny26L ELEKEY