4

この質問は何千回も聞かれていると思いますが、この件に関する多くのリソースを見つけることができません.

Atmel Studio と C 言語を使用して Arduino Uno (ATmega328P) をプログラミングしたいと思いますが、Arduino ライブラリは使用しません。これが意味することは、次のようにコードを書きたいということです。

int main(void) {
     /* set pin 5 of PORTB for output*/
     DDRB |= _BV(DDB5);

     while (1) {
       /* set pin 5 high to turn led on */
       PORTB |= _BV(PORTB5);
       _delay_ms(BLINK_DELAY_MS);

       /* set pin 5 low to turn led off */
       PORTB &= ~_BV(PORTB5);
       _delay_ms(BLINK_DELAY_MS);
     }
}

とても便利な Arduino 機能でいっぱいのコードではなく。ボンネットの下に入り、Arduinosで汚れたいです!

そうは言っても、知識を広げられるように、あなたが提供できる素晴らしい学習ソースを探しています!

これまでのところ、私が見つけることができ た唯一の役に立つ情報源は次のページです: https://hekilledmywire.wordpress.com/2010/12/04/22/

ただし、画像が欠落しており、とにかく最小限に見えます.

4

2 に答える 2

3

Cに精通している場合は、次をお勧めします

  • AVR Libc リファレンスから始めます
  • iom328p.hでプロセッサ固有の定義を調べます (下にあります)...\Atmel Toolchain\AVR8 GCC\Native\[#.#.####]\avr8-gnu-toolchain\avr\include\avr
  • オプションで、Atmel Studio でデバイスATmega328pを選択する新しい ASF ボード プロジェクトを作成し、"user_board" テンプレートからプロジェクト フォルダーにロードされたソースを調べます (いずれにせよ、これは一般的なほぼ空のセットであり、*.h使用できる/使用できないものにスペースを提供します)。必要)
  • 完全なプロセッサ マニュアルをいつでも手元に置いてください。そこにあるレジスタとビット名は、AVR ライブラリの定義と一致します。

Atmel Studio に付属するライブラリとツールチェーンは m328P をサポートしていますが、UNO ボード自体は ASF によってサポートされていないことに注意してください。ただし、基本的なプログラミングについては問題ありません。

PORTB に ... を追加中

PORTBこれは、AVR Studio に正しいプロセッサを...io.h含めて選択することによって自動的に含まれます。<io.h>プロセッサのライブラリで見つけます

#define PORTB _SFR_IO8(0x05)

プロセッサ ガイド (上記の 4 番目の箇条書き) の 615 ページを調べると、PORTB が I/O アドレス0x05( qed ) にあることがわかります。それ自体は、 I / Oからメモリアドレスに変換するために_SFR_IO8(..)定義されたマクロです(はい、下位レジスタはI / Oおよびメモリとして二重にマップされます。これにより、メモリアドレスは、最小メモリアドレスがR0からR31によって占有されるため、0x20高くなります) .<avr/sfr_defs.h>

含める<io.h>ことにより、AVR ライブラリから取得します

#include <avr/io.h>
// included by io.h
//    #include <avr/sfr_defs.h>
//    #include <avr/portpins.h>
//    #include <avr/common.h>
//    #include <avr/version.h>
//    #include <avr/io(your_processor).h> via processor declaration ... fuses
//        #include <avr/(maybe some more).h>

これらすべて...h(およびその他のいくつか) により、プロセッサのマニュアルに記載されているレジスタ/ポート/ピン名を使用して C でプログラミングできるようになりました。

次のような便利なライブラリがいくつかあります

#include <stdint.h>                     // Type definitions, e.g. uint8_t
//    #include "stdint-gcc.h"
#include <avr/power.h>                  // clock prescaler macro
#include <avr/interrupt.h>              // interrupt macros

プログラムやフラッシュメモリなどからの読み取り/書き込みをサポートするライブラリが見つかります。

于 2015-06-18T09:42:26.327 に答える
1

やりたいことができますが、Atmel-ICEAVR DragonSTK 500AVRISP mkIIなどのプログラマが必要になります。他にもいくつかあります。Atmel には、必要に応じて多数のプログラマーがあります。はるかに安価なサードパーティのプログラマーもあります。私はSTK500とDragonを持っています。どちらも気に入っており、Atmel Studio 6.X との相性も抜群です。

優れた学習リソースは次の本です。

作成: Elliot Williams による AVR プログラミング

于 2015-06-17T14:42:59.880 に答える