A/D変換のポート使ってセンサーの値読みたいと思ってるけど、なかなかうまくいかない。
多分データの取り出しか、変換完了の判別がうまくいってないんじゃないかと思うんやけど、、、
だれかHELP!
うーん、どうすればいいんやろう?
割り込み許可したし、ADMUXとADCSRA,ADCSRBの設定したのになー・・・
わけわかめ。
2014年6月12日木曜日
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で輝度を調節する。
とりあえず、プログラムはこれ。
よくわからんけど。
OCR0Bが最小値にでもなんのかな?わからん。
とりあえず、前の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にも値を入れないといけないみたい。
とりあえず、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を編集する。
がデフォルトなので、次のように書き換える。
そして、保存。
2.書き込み。
プログラムは前回ので大丈夫と思う。
AVRISPmk2は、つないだUSBポートの指定とかいらないみたい。
Arduino Unoでは必要だったから、いるのかとおもったら、いらなかった。
勝手にやってくれるのかな?
ライタをPCにつないで、マイコンの電源を入れたら(僕の場合はArduinoに電源供給したら)、AVRライタのLEDが緑色に点灯する。
そうなったら書き込みOKの合図。
Xcode でRunボタンを押す。
ちなみに、make+flashでは、ライタをつながない状態では"Build failed"が出て、書き込めなかった。なんかよくわからんエラーが出た。←ここで時間食った(泣)
とりあえずマイコンとつないだ状態(書き込み可能だよってLEDのランプがついてる状態)でRunを押すこと。
3.light the LED!
LED点灯!ちょっと達成感に浸ったよ。
チカチカさせてみた。
1秒ごとにLEDがチカチカする。
ちなみに、電源とAVRライタ両方ともつながってないとプログラム走らないっぽい。
どっちか片方ではLEDつかなかったし。
終了!
なんかエラー出たり、これだけでいろいろあった。
次は、、、アナログ値を読んでウンタラカンタラしたいかな。
Eagle の勉強もする。
章タイトル英語でかいてみたけど、なんかいろいろ間違ってる気がする。
まあいいや。
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$
登録:
投稿 (Atom)

