Lynx-EyEDの電音鍵盤 新館のeXodusinoを利用させていただいております。
ところが、【analogRead()】が実装されておりません (;_;)
・・・
そこでやっつけで実装をしてみました(笑
某arduino風「NeXtPino」はITショップ「えとせとら」にて販売中です。限定CPU付き!!
追加変更するファイルは
eXodusino-->src-->core 内の
analogio.h
analogio.cpp
の2つになります。
////---------アナログ入力追加分--------- #define AD0 0 #define AD1 1 #define AD2 2 #define AD3 3 #define AD4 4 #define AD5 5 #define ADC_OFFSET 0x10 #define ADC_INDEX 4 #define ADC_DONE 0x80000000 #define ADC_OVERRUN 0x40000000 #define ADC_ADINT 0x00010000 #define ADC_CLK 2400000 /* set to 2.4MHz */ #define ADC_MAX_PINS 6 void ADCInit( int ADC_Clk ); int analogRead(int pinnum); ////--------------------------------
////---------アナログ入力追加分---------
int ADCValue[ADC_MAX_PINS];
void ADCInit( int ADC_Clk )
{
  int i;
  /* Disable Power down bit to the ADC block. */
  LPC_SYSCON->PDRUNCFG &= ~(0x1<<4);
  /* Enable AHB clock to the ADC. */
  LPC_SYSCON->SYSAHBCLKCTRL |= (1<<13);
  for ( i = 0; i < ADC_MAX_PINS; i++ )
  {
 ADCValue[i] = 0x0;
  }
  /* Unlike some other pings, for ADC test, all the pins need
  to set to analog mode. Bit 7 needs to be cleared according
  to design team. */             /* ADC I/O config */
  LPC_IOCON->R_PIO0_11 &= ~0x8F; /* ADC IN0 */
  LPC_IOCON->R_PIO0_11 |=  0x02;
  LPC_IOCON->R_PIO1_0  &= ~0x8F; /* ADC IN1 */
  LPC_IOCON->R_PIO1_0  |=  0x02;
  LPC_IOCON->R_PIO1_1  &= ~0x8F; /* ADC IN2 */
  LPC_IOCON->R_PIO1_1  |=  0x02;
  LPC_IOCON->R_PIO1_2  &= ~0x8F; /* ADC IN3 */
  LPC_IOCON->R_PIO1_2  |=  0x02;
  /*注:SWDデバッグのときはコメントアウトする。*/
  LPC_IOCON->SWDIO_PIO1_3 &= ~0x8F;/* ADC IN4 */
  LPC_IOCON->SWDIO_PIO1_3 |=  0x02;
  LPC_IOCON->  PIO1_4  &= ~0x8F; /* ADC IN5 */
  LPC_IOCON->  PIO1_4  |=  0x01;
  LPC_ADC->CR = ( 0x01 << 0 ) |  /* select AD0 on PIO0_11. SEL=1,select channel 0~7 on ADC0 */
 ( ( SystemCoreClock / ADC_Clk - 1 ) << 8 ) |  /* CLKDIV = Fpclk / 1000000 - 1 */
 ( 0 << 16 ) |   /* BURST = 0, no BURST, software controlled */
 ( 0 << 17 ) |    /* CLKS = 0, 11 clocks/10 bits */
 ( 1 << 21 ) |    /* PDN = 1, normal operation */
 ( 0 << 22 ) |    /* TEST1:0 = 00 */
 ( 0 << 24 ) |    /* START = 0 A/D conversion stops */
 ( 0 << 27 );  /* EDGE = 0 (CAP/MAT singal falling,trigger A/D conversion) */
  return;
}
int analogRead(int pinnum)
{
 int ADC_DATA,regVal;
 if ( pinnum >= ADC_MAX_PINS )
   {
  pinnum = 0;  /* reset channel number to 0 */
   }
   LPC_ADC->CR &= 0xFFFFFF00;
   LPC_ADC->CR |= (1 << 24) | (1 << pinnum);
   while ( 1 ){   /* wait until end of A/D convert */
    regVal = *(volatile unsigned long *)(LPC_ADC_BASE
      + ADC_OFFSET + ADC_INDEX * pinnum);
    /* read result of A/D conversion */
    if ( regVal & ADC_DONE ){
     break;
    }
   }
   LPC_ADC->CR &= 0xF8FFFFFF; /* stop ADC now */
   if ( regVal & ADC_OVERRUN ){ /* save data when it's not overrun, otherwise, return zero */
    return ( 0 );
   }
   ADC_DATA = ( regVal >> 6 ) & 0x3FF;
 return ADC_DATA;
}
////--------------------------------
最後にuser_application.cppを記述します。
#include <libmary.h>
int ledPin = P1_5;   // LEDをデジタルP1.5(14ピン)に接続
int analogPin = AD0;  // ポテンショメータのワイプ(中央の端子)に
       // 両端はグランドと+5Vに接続
int       val =     0;  // 読み取った値を格納する変数
int threshold =   512;  // 閾値
void setup() {
  pinMode(ledPin, OUTPUT); // ピン14を出力に設定
  Serial.begin(9600);  // シリアル通信の初期化
  ADCInit( ADC_CLK );  // ADC初期化
}
void loop() {
  val = analogRead(analogPin);   // アナログピンを読み取る
  Serial.println(val,DEC);       // デバッグ用に送信
  if (val >= threshold) {
    digitalWrite(ledPin, LOW);   // LEDをオンに
  } else {
    digitalWrite(ledPin,HIGH);   // LEDをオフに
  }
}
BuildProject をして、マイコンに書き込みます。  ボリュームを配線して動作確認をしてみます。  
 おしまい【ご紹介など】
・工作と小物のがらくた部屋 NeXtPino と eXodusino (LPC1114)
・なんでも独り言 NeXtPinoとeXodusino

analogio.cpp 8行めでエラー出てしまいます。?
返信削除コメントありがとうございます。
返信削除コード修正しました。
ご迷惑をおかけしました。
修正ありがとうございました。
返信削除大切に、使わせて頂きます。
ありがとうございます。励みになります。
返信削除