ATtiny202は8PinSOPの小さなマイコンですが,NeoPixel系のLEDテープが駆動できるぐらいのナノ秒のパルスが出せれば楽しそうなので試してみました。
パルスはアセンブラを使わず,普通のArduino言語でプログラムしてロジアナで波形を見ます。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/af/6f/j/o1200082114890554184.jpg?caw=800)
1.基本的なdigitalWrite()
プログラムはPin0から5までループで回してHIGH/LOWを行っています。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/a1/0c/j/o0366036814890554209.jpg?caw=800)
波形を見るとパルス幅はだいたい5usで,やはりそんなに速くはないですね。
また,Pin4(PA0)はUPDI書き込みやリセットに使われているからでしょうか,プロテクトされているようです,,,。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/5f/e1/j/o1020039914890554198.jpg?caw=800)
2.ポートコントロール
Arduino のポートコントロールで使うDDRなどとは少し名前が違いますが,ビット指定は同じ方法です。まだ他にも書き方はあるようです(^^)。
なおポートコントロールのpin指定は各Pinに割り振られているbitになり,6(PA6),7(PA7),1(PA1),2(PA2),3(PA3)の順にパルス を出すようにしています。0(A0)は除いています,,。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/fe/8b/j/o0389048214890554205.jpg?caw=800)
結果,パルス幅はだいたい300nsぐらいで,速くはなりますがNeoPixelのパルスとしてはぎり使えるかな?というところでしょうか。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/d1/28/j/o1189040414890554189.jpg?caw=800)
3.バーチャルポートコントロール
ATtiny202などのこのシリーズにはI/Oの高速化のためにバーチャルポートがおかれているとの事なので,使ってみました。PORTAなどの頭にVをつければ良いようです。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/92/0c/j/o0430047614890554203.jpg?caw=800)
これは速くなりましたV(^^)。だいたい50nsのパルス幅が得られるようです。
逆に周辺機器には細かすぎますかね(^^;;;;;;;
![](https://stat.ameba.jp/user_images/20210202/21/pta55/f2/17/j/o1164045514890554188.jpg?caw=800)
4.ポートコントロールとバーチャルポートコントロールの混合
ポートコントロールとバーチャルポートコントロールを組み合わせてNeoPixelを想定したパルス を作るように調整してみました。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/d4/9b/j/o0604082114890554200.jpg?caw=800)
50nsずつに調整が効くので,データ値0xAAを送信するそれらしい波形が得られました。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/c4/e6/j/o1030025014890554193.jpg?caw=800)
以上のように,普通にポートコントロールが使えるのが分かりました。いろいろと応用が効きそうですね。
(追記 2021年8月)
VPORT操作と同等のdigitalWriteFast()がありましたので,参照してください。
→ ATtiny202でSerial.begin()とdigitalWriteFast()のチェック
ま,ピン数とメモリは多くないので,使いようではありますけど,楽しそうです
(^^)。
パルスはアセンブラを使わず,普通のArduino言語でプログラムしてロジアナで波形を見ます。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/af/6f/j/o1200082114890554184.jpg?caw=800)
1.基本的なdigitalWrite()
プログラムはPin0から5までループで回してHIGH/LOWを行っています。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/a1/0c/j/o0366036814890554209.jpg?caw=800)
波形を見るとパルス幅はだいたい5usで,やはりそんなに速くはないですね。
また,Pin4(PA0)はUPDI書き込みやリセットに使われているからでしょうか,プロテクトされているようです,,,。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/5f/e1/j/o1020039914890554198.jpg?caw=800)
2.ポートコントロール
Arduino のポートコントロールで使うDDRなどとは少し名前が違いますが,ビット指定は同じ方法です。まだ他にも書き方はあるようです(^^)。
なおポートコントロールのpin指定は各Pinに割り振られているbitになり,6(PA6),7(PA7),1(PA1),2(PA2),3(PA3)の順にパルス を出すようにしています。0(A0)は除いています,,。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/fe/8b/j/o0389048214890554205.jpg?caw=800)
結果,パルス幅はだいたい300nsぐらいで,速くはなりますがNeoPixelのパルスとしてはぎり使えるかな?というところでしょうか。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/d1/28/j/o1189040414890554189.jpg?caw=800)
3.バーチャルポートコントロール
ATtiny202などのこのシリーズにはI/Oの高速化のためにバーチャルポートがおかれているとの事なので,使ってみました。PORTAなどの頭にVをつければ良いようです。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/92/0c/j/o0430047614890554203.jpg?caw=800)
これは速くなりましたV(^^)。だいたい50nsのパルス幅が得られるようです。
逆に周辺機器には細かすぎますかね(^^;;;;;;;
![](https://stat.ameba.jp/user_images/20210202/21/pta55/f2/17/j/o1164045514890554188.jpg?caw=800)
4.ポートコントロールとバーチャルポートコントロールの混合
ポートコントロールとバーチャルポートコントロールを組み合わせてNeoPixelを想定したパルス を作るように調整してみました。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/d4/9b/j/o0604082114890554200.jpg?caw=800)
50nsずつに調整が効くので,データ値0xAAを送信するそれらしい波形が得られました。
![](https://stat.ameba.jp/user_images/20210202/21/pta55/c4/e6/j/o1030025014890554193.jpg?caw=800)
以上のように,普通にポートコントロールが使えるのが分かりました。いろいろと応用が効きそうですね。
(追記 2021年8月)
VPORT操作と同等のdigitalWriteFast()がありましたので,参照してください。
→ ATtiny202でSerial.begin()とdigitalWriteFast()のチェック
ま,ピン数とメモリは多くないので,使いようではありますけど,楽しそうです
(^^)。