2014年11月9日日曜日

FT232RL使ってシリアル通信 for mac memo

FT232RLを使ってシリアル通信させる memo (やりながら)
- マイコンはATmega168P。
- FT232RLは秋月電子で購入。ピンだけ自分でハンダ付け。
- FTDI社から対応している Virtual COM Port (VCP) Drivers をダウンロード
  http://www.ftdichip.com/Drivers/VCP.htm
- デフォルトでインストール、再起動。
  テクニカルノート(多分読むべき。でもはじめの方しか読んでない)
  http://www.ftdichip.com/Support/Documents/TechnicalNotes/TN_105%20Adding%20Support%20for%20New%20FTDI%20Devices%20to%20Mac%20Driver.pdf
  インストールガイド(多分読まんでいいと思う)
  http://www.ftdichip.com/Support/Documents/InstallGuides/Mac_OS_X_Installation_Guide.pdf
  テクニカルノートに、ボーレートの変更の仕方とか書いてたから、そこは読むべきだと思うけど、とりあえずデフォルトのままやった。
  あと、編集するファイルをtmpファイルにコピーして、オリジナル消して、編集して、また元の場所に戻すとかやってた。今回は編集してないから無駄に終わったけど。
  ちなみに、sudo使わないと元の場所に戻せなかった。
- FT232RLとPCを接続
- ターミナル立ち上げて、
  MacBook-Pro:/ chuchulabo$ cd /dev

  MacBook-Pro:dev chuchulabo$ ls
- cu.usbserial-A601JU7Q
  tty.usbserial-A601JU7Q
  この二つがあればいい?
- マイコン側のTXDとFT232RL側のRXD
  マイコン側のRXDとFT232RL側のTXD
  をそれぞれつなぐ
- 後、GNDをつないで、真ん中のピンを短絡させる
  (電源USB供給にする)
- 適当なプログラムを書いて、マイコンに書き込む
  (プログラムはコピペした。)
  うしこさんのブログから
  http://usicolog.nomaki.jp/engineering/avr/serialSendReceive.html
- Cool Term をダウンロードして、起動。
- ボーレートとかをマイコンと同じにする。
- PC-マイコン、FT232RL-PC、FT232RL-マイコン全部つないで、通信開始!

ーーーーー結果ーーーーー
なんかよくわからんけど、通信っぽいのはしてるのかな?
とりあえず、表示はされた。
が、絶対間違ってる。
多分、ボーレート設定とか間違えたかな。(そもそもほとんどやってない)
FT232RLのマニュアルのなかでやってない所あるから、多分そのせい。
何にしても、環境は整った!!!
後は設定いじるだけ。と思う。。。

2014年10月12日日曜日

AVRをPCから外したら動かなくなる。。。件

マイコンはPCから外しても動作するはずなのに、なぜか動かない。(もちろん電源はつないでる。)
PCとライタがつながってるUSBを外したら、動かなくなる。
なぜ。。。
make flashで書き込んだのに、動かない。。。

これでずっと悩んでた訳ですが、、、
ATmega168pとライタを分離したらちゃんと動いた。
今まではマイコン-ライタをつないだ状態で、PC-ライタをつなぐUSBをPCから外しているだけだった。
でも、これでは動かないらしく、マイコン-ライタのケーブルを引っこ抜くとちゃんと動いた。
ライタが悪さしてるっぽい。

どのページみてもちゃんと動いてるし、わからんかったけど、すんごく初歩的。。。
あーあ。。。なんで今まで試さなかったのか。。。

何にしても解決してよかた。

2014年10月5日日曜日

AVR(ATMega168P) A/D変換成功!

A/D変換メモ。
だいぶ前の話になるけど、この前のA/D変換は、オーバーフローのせいだったっぽい。
A/D変換は10bitやけど、それを8bitにしたら出来たっぽい。
プログラムは次。(ちなみに、8bitどころか6bitにしてる)


/* Name: main.c
 * Author: <insert your name here>
 * Copyright: <insert your copyright message here>
 * License: <insert your license reference here>
 */

#include <avr/io.h>

void init_PORT(){
    DDRB = 0xff;
    DDRC = 0x00;
    
}


void init_AD(){
    //外部基準電圧AREF, 入力チャネルADC1
    ADMUX = 0x01;
    ADCSRA = 0x80;
}

int main(void)
{
    int x;
    
    init_PORT();
    init_AD();
    
    /* insert your hardware initialization here */
    for(;;){
        ADCSRA |= 0x40;
        while(ADCSRA & 0x40);
        x = ADC;
        //PORTB = (x >> 2);
        /* insert your main loop code here */
        x = x/16;
        PORTB = x;
    }
    return 0;   /* never reached */
}

いろんな人のサイトを参考にしたけど、忘れた。
ちなみに成功したのはちょっと前の話。


2014年6月12日木曜日

A/D変換がうまくいかない

A/D変換のポート使ってセンサーの値読みたいと思ってるけど、なかなかうまくいかない。
多分データの取り出しか、変換完了の判別がうまくいってないんじゃないかと思うんやけど、、、
だれかHELP!

うーん、どうすればいいんやろう?
割り込み許可したし、ADMUXとADCSRA,ADCSRBの設定したのになー・・・
わけわかめ。

2014年6月8日日曜日

PWMでサーボ動かす

PWMでサーボを動かしてみた。
サーボにVCC,GND,PWMの線をつなげば動いた。
今回は、Amazon で2個入り980円で売ってるTowerPro Micro Servo SG90を使った。
PWMはOCR0Bから出した。

サーボは周期を20msくらいにして・・・らしい。
よくわからん。
とりあえず、8bit高速PWM、前置分周を64分周にしたらいいらしい。
ほかにもなんか書いてあったけど、、、よくわからん。
ていうか、前置分周がわからん。
読んだけどわからん。

後、サーボの角度とプログラムでの数値 i は、
i = (角度)/7 + 9
らしい。
i = (角度)/7 + 8
のほうが安定するらしい。

とりあえず、プログラムこんな感じ。



/* Name: main.c
 * Author: <insert your name here>
 * Copyright: <insert your copyright message here>
 * License: <insert your license reference here>
 */

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


int main(void)
{
    TCCR0A = 0b10100011;
    TCCR0B = 0b00000011;
    
    DDRD = 0xff;
    
    OCR0A = 0x00;
    OCR0B = 0x00;
    /* insert your hardware initialization here */
    for(;;){
        //if(OCR0A == 0x80) OCR0A = 0x00;
        //OCR0A ++;
        //_delay_ms(1);
        
        OCR0B = 14;
        /* insert your main loop code here */
    }
    return 0;   /* never reached */

}

なんかよくわからんけど、とりあえず動いた。
うーん。。。
とりあえず、次はA/D変換のピン使ってアナログ値を読むことをがんばる。

2014年6月5日木曜日

PWMでLEDの輝度調節

前の回路図とか作んのめんどくさくなってきた。
とりあえず、前のLEDチカチカさせるのから、発展?して、PWMで輝度を調節する。
とりあえず、プログラムはこれ。

/* Name: main.c
 * Author: <insert your name here>
 * Copyright: <insert your copyright message here>
 * License: <insert your license reference here>
 */

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

int main(void)
{
    
    TCCR0A = 0b10100011;
    TCCR0B = 0b00000001;
    
    DDRD = 0xff;
    
    OCR0A = 0x02;
    OCR0B = 0x01;
    /* insert your hardware initialization here */
    for(;;){
        
        if(OCR0A == 0x80) OCR0A = 0x02;
        OCR0A ++;
        _delay_ms(1);
        
        
        /* insert your main loop code here */
    }
    return 0;   /* never reached */

}

比較一致で、非反転動作。8bit高速PWM動作。前置分周なし。
TCCR0AとTCCR0Bでこれらを設定。
DDRDで、出力の方向を決定。

前置分周よくわかってない。

PWM出力はOCR0A(PD6)につないでいるから、OCR0Aだけ数値入れればいいのかと思ってたけど、OCR0Bにも値を入れないといけないみたい
よくわからんけど。
OCR0Bが最小値にでもなんのかな?わからん。

とりあえず、OCR0Aの値を変更すると、LEDの輝度が変化。
プログラムでは、ちょっとずつ明るくなっていって、消える。っていうのを繰り返してる。

トランジスタ(1815)のエミッタにGND、コレクタに抵抗(200Ω)を介してLEDのカソード、ベースに抵抗(10kΩ)を介してPWMピンをつないだ。



2014年5月26日月曜日

AVRでLED点灯 Memo Part4

Memo

・Xcode で自分が使ってるMacのバージョンを指定してやらないといけない。
・エラーをみるところがあるからがんばって見つける。
・terminalでmakeしてもBuildできるから、とりあえず、terminalでしてみるのも手かなと。
エラー絶対すぐみれるし。
・ていうか、Xcodeいろいろ触ったほうがいい

AVRでLED点灯 Memo Part3

回路。
AVRに書き込むためには、マイコンに電源供給が必要らしい。
書き込みケーブルでやってくれたらいいのに。
おかげで電源がない!

と思ったけど、そうだ、Arduinoを使おう!
という訳で、わけわからんことになった。
Arduino素直に使えよ。
とかいわれそう。

という訳で、こんな感じ。

かおす!
Arduino Uno のすぐ横に乗ってるブレッドボードには別の回路乗ってるし。
参考は上だけ。
LEDの回路はいろいろネットをうろうろしたらわかるけど、回路図もかける用になっときたいなと思うから、いつかEagleの使い方をマスターしたい。
めんどくさいから今はしないけど、次する。

メモとして、使ったのは、
AVR:ATmega168P
ライタ:AVRISPmkII
抵抗:47Ω+100Ω=147Ω(直列)
LED:3mm赤色LED(20mAのとき順方向電圧2Vとかのやつ)
ジャンパ
Arduino(電源としてのみ)

ライタのピンの配置をメモ。

1.edit a Makefile
Makefileを編集する。

DEVICE     = atmega8
CLOCK      = 8000000
PROGRAMMER = #-c stk500v2 -P avrdoper
OBJECTS    = main.o

FUSES      = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m

がデフォルトなので、次のように書き換える。

DEVICE     = atmega168p
CLOCK      = 8000000
PROGRAMMER = -c avrispmkII -P usb
OBJECTS    = main.o

FUSES      = -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xf9:m

そして、保存。

2.書き込み。
プログラムは前回ので大丈夫と思う。
AVRISPmk2は、つないだUSBポートの指定とかいらないみたい。
Arduino Unoでは必要だったから、いるのかとおもったら、いらなかった。
勝手にやってくれるのかな?
ライタをPCにつないで、マイコンの電源を入れたら(僕の場合はArduinoに電源供給したら)、AVRライタのLEDが緑色に点灯する。
そうなったら書き込みOKの合図。
Xcode でRunボタンを押す。

ちなみに、make+flashでは、ライタをつながない状態では"Build failed"が出て、書き込めなかった。なんかよくわからんエラーが出た。←ここで時間食った(泣)
とりあえずマイコンとつないだ状態(書き込み可能だよってLEDのランプがついてる状態)でRunを押すこと。

3.light the LED!
LED点灯!ちょっと達成感に浸ったよ。
チカチカさせてみた。

/* Name: main.c
 * Author: chuchulabo
 * Copyright: <insert your copyright message here>
 * License: <insert your license reference here>
 */

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


int main(void)
{
    //initialoize
    DDRB = 0b11111111;
    PORTB = 0;
    
    //DDRB = 0b00000001;  //set outputPin0 of PORTD
    PORTB = 0b00000001; //set HIGH Pin0 of PORTD
    
    /* insert your hardware initialization here */
    for(;;){
        /* insert your main loop code here */
        PORTB = 0b00000001; //set HIGH Pin0 of PORTD
        _delay_ms(100);
        PORTB = 0b00000000; //set LOW Pin0 of PORTD
        _delay_ms(100);
    }
    return 0;   /* never reached */

}

1秒ごとにLEDがチカチカする。


ちなみに、電源とAVRライタ両方ともつながってないとプログラム走らないっぽい。
どっちか片方ではLEDつかなかったし。

終了!


なんかエラー出たり、これだけでいろいろあった。
次は、、、アナログ値を読んでウンタラカンタラしたいかな。
Eagle の勉強もする。

章タイトル英語でかいてみたけど、なんかいろいろ間違ってる気がする。
まあいいや。


2014年5月25日日曜日

AVRでLED点灯 Memo Part2

プログラム
*回路ではPORTBの0番ピンを出力にして、LEDにつないでる。
回路は次でのせる。
でもこれでいけるかどうかは。。。

1.Open a Demo.xcodeproj
デスクトップ→Demo の中の.xcodeprojをダブルクリック
参考したURL:

2.Write a LED turning program
main.c を編集する

//以下、作ったプログラム
/* Name: main.c
 * Author: chuchulabo
 * Copyright: <insert your copyright message here>
 * License: <insert your license reference here>
 */

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


int main(void)
{
    //initialoize
    DDRB = 0b11111111;
    PORTB = 0;
    
    DDRB = 0b00000001;  //set outputPin0 of PORTD
    PORTB = 0b00000001; //set HIGH Pin0 of PORTD
    
    /* insert your hardware initialization here */
    for(;;){
        /* insert your main loop code here */
    }
    return 0;   /* never reached */
}

3.build the program
左上の再生ボタンみたいな三角形を押す。
"Build Succeeded"って出たら成功!

4.Set up X code for writing the program to AVR micro controller
このURL参考に。


AVRでLED点灯 Memo Part 1

前回いろいろめんどくさかったので、OSをクリーンインストール!
さらについでなので、Mountain LionからMavericksにアップデート!
快適!
これからAVRマイコンを使っていろいろしていくぞー!
おー!

1.Install Xcode and CrossPack for AVR in Mac PC
とりあえず、Xcode と CrossPack for AVRをインストール。
全部デフォルトでOK。

2.Create a Xcode Project for AVR in Desktop
-ターミナルを起動。
--デスクトップにDemoというXcode プロジェクトを作成する。
--参考したサイト:

//ここからターミナルでの操作
~ User$ cd Desktop
Desktop User$ ls
Desktop User$ ls
Desktop User$ acr-project Demo
-bash: acr-project: command not found
Desktop User$ avr-project Demo
Using template: /usr/local/CrossPack-AVR-20131216/etc/templates/TemplateProject
Desktop User$ ls
Demo
Desktop User$ cd Demo
Demo User$ ls
Demo.xcodeproj firmware
Demo User$ cd firmware/
firmware User$ make


Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.


firmware User$ ls
Makefile main.c
firmware User$ ls
Makefile main.c
firmware User$ make
avr-gcc -Wall -Os -DF_CPU=8000000 -mmcu=atmega8 -c main.c -o main.o
avr-gcc -Wall -Os -DF_CPU=8000000 -mmcu=atmega8 -o main.elf main.o
rm -f main.hex
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
avr-size --format=avr --mcu=atmega8 main.elf
AVR Memory Usage
----------------
Device: atmega8

Program:      62 bytes (0.8% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)


firmware User$ ls
Makefile main.c main.elf main.hex main.o
firmware User$ ls
Makefile main.c main.elf main.hex main.o
firmware User$ 

2014年5月17日土曜日

空回り

AVRマイコン作ってライントレースカー作ろうとしています。
初めてなので、手探りで。
友達が作ったのとか見ながら。
ネット見ながら。

とりあえず、開発環境を整えようとしたら、PCにエラーが・・・!
原因はHDの容量不足。
残り1G切ってる。いつの間に!
しかも、そんな使った記憶ない!

挙動も若干不審な点がある。
とりあえず、まずはクリーンインストールかなー?
と思ったけど、退避場所が無い!
買いに行くしかないのかな???

2014年1月7日火曜日

Apple Script webページを開いて閉じる

昨日に引き続き.
今度は,webページを開いて,5秒後に閉じるやつを作った.
ちなみに,ブラウザはSafari.
openでwebページを開いたら,今開いてるsafariのページに新規タブで開かれる.
普通にcloseでやってしまうと,他のも全部消えちゃうから注意.
「1's current tab」ってのが重要.
これで,タブだけ消せる.
scriptって便利だねー.


property target_URL : "http://www.google.co.jp"
set accessURL to "http://www.google.co.jp"

repeat
  display dialog "Do you want access to " & accessURL & " ?" buttons {"access", "cancel"} default button 2
  copy the result as list to {button_pressed}
  if the button_pressed is "cancel" then exit repeat
  if the button_pressed is "access" then exit repeat
end repeat

if the button_pressed is "access" then
  tell application "Safari" --Safariにコール
    open location target_URL --target_URLにアクセス
    set theID to window 1's current tab --theIDwindow 1's current tabを代入
    delay 5 --5秒待つ
    close theID --theIDを閉じる(開いたタブを閉じる)
    --close window 1's current tab
  end tell
end if


2014年1月6日月曜日

Apple Script 指定したweb pageにアクセス

新年あけましておめでとう御座います.
今年もよろしくお願い致します.

さて,Apple script なるものを使って特定のweb siteにアクセス出来るスクリプトを書きました.ちなみに,意味はありません.
簡単な事なんでしょうが,初心者の僕にとっては・・・
いろんなサイト見て,やっと出来ました.
以下,作ったやつです.

property target_URL : "http://www.google.co.jp"
set accessURL to "http://www.google.co.jp"

repeatdisplay dialog "Do you want to access " & accessURL & " ?" buttons {"access", "cancel"}

  default button 2copy the result as list to {button_pressed}
  if the button_pressed is "cancel" then exit repeat
  if the button_pressed is "access" then exit repeat
end repeat


if the button_pressed is "access" then
  delay 5 --second wait
  open location target_URL
end if


すごく単純です.
まず,ダイアログ表示して,"access"を選べば,5秒後にgoogleのページへ飛びます.
"cancel"を押せば,ダイアログが消えて終わりです.

これにどれだけの時間を費やしたか・・・
でも,出来たから,よかったです.ほんと.

なんか,これで終わってしまいそうな予感がしますが,まあ良いや.