製作モジュール一覧

ラベル AVR の投稿を表示しています。 すべての投稿を表示
ラベル AVR の投稿を表示しています。 すべての投稿を表示

2018年10月31日水曜日

AVR Pocket Programmerのドライバーのインストール(メモ)

AVR Pocket Programmerのドライバーをあらためてインストールしたのでメモです。

AVR Pocket ProgrammerはSparkfun製のATTINY2313を使ったAVRプログラマです。

1.WINAVRをインストール


AVRへの書き込みにavrdudeが必要なのでWINAVRをインストールします。

https://sourceforge.net/projects/winavr/

2.AVRのPocket Programmerのドライバーをインストール


いろんなバージョンがありますが、USBTinyISPのドライバーで動作しました。

https://learn.adafruit.com/usbtinyisp/drivers

3.avrdude-GUIをインストール


avrdudeはCUIプログラムなのでGUIラッパーのavrdude-GUIをインストールします。

http://yuki-lab.jp/hw/avrdude-GUI/ (yuki-lab.jp版)

http://d.hatena.ne.jp/OGURAM/20100624/1277345768 (拡張されたavrdude-GUI YCIT版)

書き込み時の配線図




2016年3月10日木曜日

aitendo AVRトランジスタテスターキット組み立て(メモ)

AVRトランジスタテスターキットを組み立てたのでメモ


クリスタルは8MHzのものがついていたが、後で差し替え出来るようにピンソケット(SIPソケット)を使って実装しておいた。


電源系だけテスターでチェックしてファームウェアをATMega328Pに書き込んで動作(^q^/

マニュアルはよく読んでいないが、1、2、3と書いてあるところにTrを挿せば勝手にチェックしてくれるようだ。

AVRのFuse Bitをいじっていないので内蔵8MHzで動作していると思う。

ファームウェア


https://www.mikrocontroller.net/svnbrowser/transistortester/

/Software/trunk/mega328にあるTransistorTester.hexとTransistorTester.eep

マニュアル(英語)


http://www.mikrocontroller.net/articles/AVR_Transistortester#Downloads_.28english.29

2015年10月4日日曜日

小ネタ実験: 電圧検知できるLEDのパイロットランプ AVRを使う

デジタルノイズが乗りそうで気が進まないので保留していたが、AVRの周辺機能にアナログ・コンパレータがあるので、これを使って電圧検知のテストをしてみた。

使ったのはATtiny13で、たった8Pinだがアナログ・コンパレータもADCも付いている。

ブレッドボード図
AVRのコンパレータは1入力で内蔵のリファレンス電圧(1.1V)と比較できるので、これを使ってみた。

Pin3(PB4)がLED出力、Pin6(AIN1)が検知する電圧入力だ。

 #define F_CPU 9600000  
 #include <avr/io.h>  
 #include <avr/interrupt.h>  
 #include <util/delay.h>  
 ISR (ANA_COMP_vect)  
 {  
      if (ACSR & (1 << ACO))  
      {  
           PORTB |= (1 << PB4);  
      }  
      else  
      {  
           PORTB &= ~(1 << PB4);  
      }  
 }  
 int main(void)  
 {  
      DDRB = 0x00;  
      // LED output  
      DDRB |= (1 << PB4);  
      // AIN1をバンドギャップ・リファレンス、割込み有効化  
      ACSR = (1 << ACBG) | (1 << ACIE);  
      sei();  
   while(1)  
   {       
   }  
 }  

Atmel Studioのプロジェクト
https://github.com/ryood/AVR_Analog_Comparator_Test

トリマーPOTで電圧を調整したのでかなりアバウトだが、LEDの点灯/消灯時の電圧をテスターで計ってみた。
LED点灯時: 1.171V
LED消灯時: 0.951V
まあまあ1Vあたりで切り替わるようだ。

ノイズ

VCCの波形をオシロで見てみた。

AVRをブレッドボードに乗せている時

AVRをブレッドボードから外した時

拡大

18.4MHzぐらいのノイズが乗っている。

ATtiny13の内蔵RCで9.6MHz駆動しているので、このクロック由来のノイズのようだ。
(なんで2倍になるのかよくわからないですが)

これだけ盛大にノイズが乗るとアナログ回路には使いづらいが、電圧の閾値をRで分圧して入力してやるとかいっそのことADCをつかうとかすればマイコンを使った回路には使えそうだ。

PINが空いていればわざわざATtiny13を用意する必要もないかな。

メモ:

ATtiny13の逆刺し(上下左右間違え)は危険。かなり発熱した(^q^;

2015年10月3日土曜日

Fuse Bitの設定を間違えたAVRを復活させた(京セラ EXO3)

はじめてヒューズビットを書き換えた時(「ATMega328Pを外部クリスタルで動かす」)、間違えて「Ext. Crystal Osc.: Frequency 0.4-0.9MHz」に設定してしまって普通の12MHzぐらいのクリスタルでは動作できなくなってしまった。

0.4-0.9MHzなので1MHz弱のクリスタルを使えばいいんだが、これぐらいの周波数の水晶振動子はなかなか売っていない。クォーツ時計用の32.768kHzのものでもだめだった。

多出力クリスタルオシレータ


秋月で「多出力クリスタルオシレータ EXO3(12MHz)」というのが売っていたので試してみた。

使い方はわりと簡単で電源をつないで、ピンで分周比を設定すれば動く。


AVRのヒューズビットの設定が「0.4MHz-0.9MHz」なので
12MHz / (1 / 2^4) = 0.75MHz
にEXO3を設定した。

ATMega328Pとの接続




ATMega328Pの方はAVRライタのSPIとRESET線をつないでいる。電源(+5V)もAVRライタから。

クロックの入力は、9Pinにつないだ。ヒューズビットの設定だと「クロック入力」ではなく「水晶振動子」を9Pin、10Pinにつながないとダメそうだが、ダメ元でやってみたら動いた。

ヒューズビット変更前

ヒューズビット変更後

ATMega328Pのデフォルトのヒューズビットにもどしてやった。

EXO3の出力波形


ch1:D(分周波) ch2:F(原振周波数)

波形は綺麗とは言えないが、手軽に周波数を生成できるのでなかなか便利なICだ。

(パスコンを入れたらもう少しきれいになるかな?)

2015年9月26日土曜日

AVRをI2Cスレーブとして使う スレーブを複数使う

製作したシーケンス入力用のデバイスと別にブレッドボードでI2Cのスレーブ回路組んでI2Cスレーブの2個使いの実験してみた。

ブレッドボード図





ブレッドボードの回路はリズムマシンのExt Boardを想定している

I2Cのスレーブ・マスタのテストプログラムをいろいろ作っているので、どれがどれかわからなくてかなり混乱したが、なんとか動くようになった。

このブログの記事を書きながら検証したのでなんとかなった感じだ(^q^;

ブログは見てもらいたいという動機もあるが、やっぱ書いてる時や、後で参照するのにとても役に立つ。

I2Cのスレーブ・アドレスはSequence Board:0xFE、Ext Board:0xAAに設定してやってみた。(スレーブ側のプログラムはSlave2のアドレス以外変えていない)

Atmel Studio(Slave1):Sequencer Board
https://github.com/ryood/RhythmMachine/tree/master/Atmel%20Stduio/Sequencer_I2C_Slave/Sequencer_I2C_Slave

Atmel Studio(Slave2):ブレッドボードで組んだ回路
https://github.com/ryood/Arduino_master_AVR_sleve/tree/master/Atmel%20Studio/I2C_2nd_Slave_Rx_Tx_ATMega88V

Arduino(Master)
https://github.com/ryood/Arduino_master_AVR_sleve/tree/master/Arduino/master_double_slave_tx_rx

メモ


  • 使おうと思っているSPIのグラフィクLCDはu8glibで動作確認されてるようなので、PSoCから直接制御するのはしんどそう。SPI経由でLCDを制御するAVRを入れて、PSoCとAVRはI2Cで通信?
  • そろそろPSoCでリズムマシンの音出しプログラムを作ったほうがいい?出力はぴゅんぴゅん3号のシールドを使う?
  • 秋月で仕入れたロータリーエンコーダーが安かったので(しかもALPS製)ちゃんとテストする


2015年9月24日木曜日

AVRをI2Cスレーブとして使う 送信・受信

AVRをI2Cスレーブとして使う スレーブからバイト列の送信(割り込みで処理) 」と同じ回路でテストしてみた。



処理としては、

AVR(Slave)→Arduino(Master)
AVRからタクトスイッチの押し下げ状態を含めた8Byteのデータを送信。Arduinoは受け取ったデータをSerial通信でパソコンに送る。

Arduino(Maseter)→AVR(Slave)
Arduinoから0..7の範囲でインクリメントした1Byteデータを送信。AVRは受け取ったデータの位置にあるLEDを点灯(LEDの点灯が流れる)。同時にタクトスイッチの押し下げ状態をORしてLEDを点灯。


AVRで使用したTWIのステータスコードは

  // TWI ステータスコード  
  // Rx  
  #define     TWI_SLA_W_ACK          0x60  
  #define     TWI_RX_DATA_ACK          0x80  
  #define     TWI_RX_STOP               0xA0  
  // Tx  
  #define     TWI_SLA_R_ACK          0xA8  
  #define     TWI_TX_DATA_ACK          0xB8  
  #define     TWI_TX_DATA_NACK     0xC0  

AVRはスレーブだがRX(受信)、TX(送信)両方の動作をする。I2C通信の開始時にマスターから送られる最初のI2Cアドレスの次のW/Rビットを見てRX、TXの処理に入る。

 データの送受信の処理はTWI割り込みルーチン内でTWIステータスコードでSwitch文で処理した。

  switch (TWSR & 0xF8) {  
      // Slave TX  
      case TWI_SLA_R_ACK:  
           TXdata_n = 0;  
      case TWI_TX_DATA_ACK:  
           TWDR = TXdata[TXdata_n++];  
           break;  
      case TWI_TX_DATA_NACK:  
           break;  
      // Slave RX  
      case TWI_SLA_W_ACK:  
           break;  
      case TWI_RX_DATA_ACK:  
           RXdata = TWDR;  
           break;  
      case TWI_RX_STOP:  
           break;  
      default:  
           twi_error(0x55);  
 }  

ほんとはRXモードのときにTX用のステータスコードを受け取った場合などの例外処理をしないといけないと思うが、かなりめんどくさそうなので今回は端折った。

のちのち禍根を残すことになるかもしれないが(^q^;

Atmel Studioのプロジェクト
https://github.com/ryood/Arduino_master_AVR_sleve/tree/master/Atmel%20Studio/I2C_Slave_Rx_Tx_ATMega88V_Byte_Sequence_Interrupt

Arduinoのスケッチ
https://github.com/ryood/Arduino_master_AVR_sleve/tree/master/Arduino/master_tx_rx

2015年9月20日日曜日

矩形波だけのファンクションジェネレーター 改良案

使ってみて思ったのは下手に加工するよりも、AVRからの5Vp-pの出力を単純にPOTである程度減衰して出力できるようにしたほうが良さそうな気がしてきた。

「もともと30MHzあたりのノイズが乗っているもんだ」と思って使えばこのクロックノイズも使いみちがあるかもしれない。

LME49600の特性」で見てみたが、矩形波の立ち上がりとか入力インピーダンスの影響を見るためにはAVRの出力をそのままの方がわかりやすい。

いろいろ調べたが、OPAMPやロジックICの特性も結局AVRの出力との比較してということになる。

もうあきらめて出力部は単に「AVRのPWM出力+POTによる降圧」でやってみることにする。

機能仕様


インパルス応答: 
普通のOPAMPではインパルスの幅が狭すぎるとまともな応答をしないので、矩形波のDuty比を狭めることで擬似的に行う

ステップ応答:
これもオシロのトリガーで引っ掛ければ矩形波で見れる

GNDレベル: 
必要かどうかわからないが基板に余裕があればTLE2426でやることも想定

AVRのPWM


ATMega328PのTimer/CounterのPWMのモードをもう少し調べてみた。

「FastPWM」は「Frequency & Phase Correct PWM」モードの倍の周波数の波形を生成できるみたいだが、Duty比の設定がよくわからない。

なので、「Frequency & Phase Correct PWM」モードで考えた。

ソース・コードはGithubで公開した。
https://github.com/ryood/Timer_Counter_Test/blob/master/FastPWM_Test/FastPWM_Test.c

Frequency and Phase Correct PWM 出力周波数


Clock(Hz) Clock(kHz)
CPU Clock 16000000 16000
Prescaler 1 Clock 16000000
cycle 出力周波数(Hz) 出力周波数(kHz) サイクル(秒) サイクル(m秒)
2 4000000 4000 0.00000025 0.00025
5 1600000 1600 0.000000625 0.000625
10 800000 800 0.00000125 0.00125
20 400000 400 0.0000025 0.0025
50 160000 160 0.00000625 0.00625
100 80000 80 0.0000125 0.0125
200 40000 40 0.000025 0.025
500 16000 16 0.0000625 0.0625
1000 8000 8 0.000125 0.125
2000 4000 4 0.00025 0.25
5000 1600 1.6 0.000625 0.625
10000 800 0.8 0.00125 1.25
20000 400 0.4 0.0025 2.5
50000 160 0.16 0.00625 6.25
Prescaler 8 Clock 2000000
cycle 出力周波数(Hz) 出力周波数(kHz) サイクル(秒) サイクル(m秒)
2 500000 500 0.000002 0.002
5 200000 200 0.000005 0.005
10 100000 100 0.00001 0.01
20 50000 50 0.00002 0.02
50 20000 20 0.00005 0.05
100 10000 10 0.0001 0.1
200 5000 5 0.0002 0.2
500 2000 2 0.0005 0.5
1000 1000 1 0.001 1
2000 500 0.5 0.002 2
5000 200 0.2 0.005 5
10000 100 0.1 0.01 10
20000 50 0.05 0.02 20
50000 20 0.02 0.05 50
Prescaler 64 Clock 250000
cycle 出力周波数(Hz) 出力周波数(kHz) サイクル(秒) サイクル(m秒)
2 62500 62.5 0.000016 0.016
5 25000 25 0.00004 0.04
10 12500 12.5 0.00008 0.08
20 6250 6.25 0.00016 0.16
50 2500 2.5 0.0004 0.4
100 1250 1.25 0.0008 0.8
200 625 0.625 0.0016 1.6
500 250 0.25 0.004 4
1000 125 0.125 0.008 8
2000 62.5 0.0625 0.016 16
5000 25 0.025 0.04 40
10000 12.5 0.0125 0.08 80
20000 6.25 0.00625 0.16 160
50000 2.5 0.0025 0.4 400
Prescaler 256 Clock 62500
cycle 出力周波数(Hz) 出力周波数(kHz) サイクル(秒) サイクル(m秒)
2 15625 15.625 0.000064 0.064
5 6250 6.25 0.00016 0.16
10 3125 3.125 0.00032 0.32
20 1562.5 1.5625 0.00064 0.64
50 625 0.625 0.0016 1.6
100 312.5 0.3125 0.0032 3.2
200 156.25 0.15625 0.0064 6.4
500 62.5 0.0625 0.016 16
1000 31.25 0.03125 0.032 32
2000 15.625 0.015625 0.064 64
5000 6.25 0.00625 0.16 160
10000 3.125 0.003125 0.32 320
20000 1.5625 0.0015625 0.64 640
50000 0.625 0.000625 1.6 1600
Prescaler 1024 Clock 15625
cycle 出力周波数(Hz) 出力周波数(kHz) サイクル(秒) サイクル(m秒)
2 3906.25 3.90625 0.000256 0.256
5 1562.5 1.5625 0.00064 0.64
10 781.25 0.78125 0.00128 1.28
20 390.625 0.390625 0.00256 2.56
50 156.25 0.15625 0.0064 6.4
100 78.125 0.078125 0.0128 12.8
200 39.0625 0.0390625 0.0256 25.6
500 15.625 0.015625 0.064 64
1000 7.8125 0.0078125 0.128 128
2000 3.90625 0.00390625 0.256 256
5000 1.5625 0.0015625 0.64 640
10000 0.78125 0.00078125 1.28 1280
20000 0.390625 0.000390625 2.56 2560
50000 0.15625 0.00015625 6.4 6400

2015年9月19日土曜日

ロジックICでクロックノイズを低減する AVRとロジックICは電源を分けないとだめそう

AVRのPWMの出力周波数を上げられるようにしたので、MHzレベルで測定してみた。


74HC04

AVRとロジックICの電源を分けて測定した。

  • AVR: USB(AVRのプログラマからの給電)
  • 74HC04: 自作の5V-3.3V安定化電源(5V出力)

赤色:AVRのPWM出力 黄色:74HC04を通した

2MHzだと波形の平坦な部分に乗っているクロックノイズより、立ち上がり、立ち下がり時のオーバーシュート、アンダーシュートが目立ってくる。

どっちがいいか判断が難しい。
→AVR直接の出力にもPOTを入れて減圧できるようにすればいいか?うーん。

拡大

波形の上側

波形の下側

拡大してみると波形の平坦な部分のノイズは確かに減っている

同一電源

ロジックICもAVRと同じUSBからの電源にしてみた。

波形の上側

波形の下側

別電源にしたときと比べるとノイズがあんまり抑えられていない(@@;

AVR用のリニアレギュレータ回路とは別に、ロジックIC用のリニアレギュレータ回路を入れたら改善したりするかな?

2015年9月18日金曜日

ロジックICでクロックノイズを低減する ICの選定

ロジックICでBufferやInverterならほとんどどれでも大差ないような気もするがもう少し測定してみた。

測定条件


  • SQR_FGの出力は、F:100kHz, Duty:50%
  • オシロのch1(赤色):入力、ch2(黄色):出力
  • 縦軸 ch1,ch2とも2V/div

オシロの機能の以下の表示値を表にした。

  • Rise Time
  • Fall Time
  • Over Shoot
  • Pre Shoot

非反転の素子では以下の値も記録した。

  • Delay1: 上昇時のch1からch2の遅延
  • Delay2: 下降時のch1からch2の遅延

結果の表


線で囲った値が一番優秀そうな値だ。

オシロのキャプ画像はGithubにあげた。
https://github.com/ryood/SQR_FG/blob/master/LogicIC-Filter.zip

ブレッドボード図

74HC00

74HC04, 74HCU04, 74HC14, 74VHC04, 74VHCU04


74HC125, 74VHC125

74HC4050



2015年9月14日月曜日

ロジックICでクロックノイズを低減する 74VHC編

今回実験したのは

  • 74VHC04
  • 74VHCU04
  • 74VHC125

だ。VHCシリーズはHCシリーズより高速化されているらしい。(あんまりよくわかってない)

ハーフピッチなのでDIP変換基板に乗せてブレッドボードで実験してみた。

ブレッドボードの配線は前回と同じものです。

74VHC125 1段

74VHC125 2段

74VHC04

74VHCU04

どれがいいのかもっとちゃんと比較しないとわからない。立ち上がり波形しか見ていないが立ち下がりも比較しないとだめかなぁ。

入力波形のあばれ


矩形波だけのファンクションジェネレーターの出力のGNDに気休めに100uHのLを入れていたが、これを通さずに直接GNDに接続してみた。

74VHC125 1段

入力波形のクロックノイズ(と思しきもの)は増えるが、入力は系のあばれは減っている。入力波形に出ているクロックノイズはLなしでも出力ではきれいになくなっている。

74VHC125 2段

74VHC04

74VHCU04

前回と比較するためにVHCではなくHCの74HC125(1段)も見てみた


GNDにLを入れた場合 (前回のもの)

入力に現れる振動はこのGNDに入れたLの影響くさい。

ブレッドボード図を見てもバネっぽい図形だし、インダクタは電流の変化に対して抵抗する素子という意味でもこれが原因かなあ

どちらでもクロックノイズは取れているようなのでこのLは削除する方向で考えます。

2015年9月12日土曜日

ロジックICでクロックノイズを低減する ICをいろいろ試してみた

<追記:2015.09.14>実験したブレッドボード図を追加しました。</>

発注しておいたICが届いたので実験してみた。

何をしているかというと、「矩形波だけのファンクションジェネレーター」を作ってみたもののAVRのPWMで矩形波を出力しているが、AVRのクロック由来と思われる30MHz付近のノイズが乗ってしまうのでこれを除去したい。

が、アナログ・フィルターやOPAMPを使ってノイズを除去しようと思うと矩形波の直角な感じがなまってしまってなかなか使いづらい。

思い付きで3-State Bufferの74HC125を通してみたら、クロックノイズは低減されて矩形波の直角な感じも維持もしくは好ましい感じに整形されるみたいなので他のロジックICでもやってみることにした。

使ったICは
74HC125 3-State Buffer
74HC04 Inverter
74HCU04 Inverter(Bufferなし)
74HC4050 Buffer
74HC04と74HCU04の違いはバッファードとアンバッファードとあるが、アンバッファードの方はCMOSのInverter回路1発で反転、バッファードの方は反転回路を3個重ねて最後に反転出力にしているみたいだ。

74HC4050は単なるバッファで中の回路は反転回路2段重ねみたいだ。

実験回路

AVRのPWM出力をロジックICに入力し、ロジックICの出力を1kΩのRで受けて波形を見ることにした(ブレッドボード図では負荷抵抗が10kΩになってますが1kΩで測定)

GNDに入っているインダクタはGNDに乗っているクロックノイズを除去するための気休め。


74HC125(3-State Buffer)

赤色が「矩形波だけのファンクションジェネレーター」の出力、黄色がロジックICを通した出力

74HC125(3-State Buffer)x2

3-State Bufferを2回通してみた

74HC04(Inveter)





反転素子なので位相も反転しています。

74HCU04(Inverter Unbuffered)



インバーターのバッファがないタイプ。 

このICをアンプとして使っている作例も結構あります。(秋月のキットとか

ブレッドボードの配線は74HC04と同じ。

74HC4050(Buffer)





どれもクロックノイズは低減されているし、振動も抑制されている

入力

入力波形が暴れるので、矩形波だけのファンクションジェネレーターの出力をオシロに直結して見てみた


入力波形(赤色の波形)が暴れなくなった(^q^;

ロジックICを通した波形と比べるとクロックノイズは確実に低減されている。

が、ロジックICにつないだ時に入力側に現れる振動の原因は何?と思って0.1uFのコンデンサーと1kΩのRを並列につないでみた



波形の暴れはでてこない。これはわからない(^q^;;;;


CR以外に他の成分も影響してるんだろうか?


ロジックICはあと74VHCというタイプも仕入れていて(高速タイプらしいです)実験したいですが、また今度