spi-ramの配線は上記を参考にした
https://ameblo.jp/pi-poh/entry-12667969903.html のプルアップ不要だった
cs,miso,mosi,sck::10,12,11,13のままholdとncをvccにつなぐのがキモだった!
#include <SPI.h>
void setup()
{
Serial.begin(115200);
pinMode (SS, OUTPUT);
digitalWrite(SS,HIGH);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV4);
SPI.setDataMode(SPI_MODE0);
}
void loop()
{
byte write_data = 0;
byte read_data = 0;
word ram_address = 0x0000;
while(1) //1=無限ループ
{
ram_wr( ram_address , write_data);
read_data = ram_rd( ram_address );
Serial.print("ram_address =");
Serial.print(ram_address);
Serial.print(" : write_data =");
Serial.print(write_data);
Serial.print(" : read_data =");
Serial.println(read_data);
ram_address++;
write_data++;
delay(500);
}//while
}
//ライトシーケンス
void ram_wr(word add , byte data)
{
byte add_H;
byte add_L;
add_H = highByte(add); // 上位4ビット(アドレス)
add_L = lowByte(add); // 下位4ビット
digitalWrite(SS,LOW);
SPI.transfer(0x02); //0x02=書き込みモード
SPI.transfer(add_H);
SPI.transfer(add_L);
SPI.transfer(data);
digitalWrite(SS,HIGH);
}
//リードシーケンス
int ram_rd( word add )
{
byte add_H;
byte add_L;
byte r_data;
add_H = highByte(add);
add_L = lowByte(add);
digitalWrite(SS,LOW);
SPI.transfer(0x03); //0x03=読み込みモード
SPI.transfer(add_H);
SPI.transfer(add_L);
r_data = SPI.transfer(0); // この0は多分ダミーデータだろう
digitalWrite(SS,HIGH);
return r_data;
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
c-mcc book p298 :: pic16f18857でeuratするには
redirect to にチェックをいれるのとc90に変更するのが両方必要だった!
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
c-mcc book p360 :: pic16f18857 以下に成功
/*****************************************
* CCP キャプチャモード例題
* 超音波距離系のパルス幅測定
****************************************/
#include "mcc_generated_files/mcc.h"
#include "lcd8x2_lib.h"
// 変数定義
uint16_t RiseEdge, FallEdge, Line2[10];
double Distance;
/******* メイン関数 *********************/
void main(void){
SYSTEM_Initialize();
lcd_init();
lcd_str("Distance");
/****** メインループ ***********/
while (1)
{
TMR1_WriteTimer(0); // タイマ0リセット
// トリガ出力
Trig_SetHigh();
__delay_us(10);
Trig_SetLow();
// 計測実行 1usec単位
while(!CCP1_IsCapturedDataReady()); // 立ち上がり
// echoピンがhighになると上記のwhileから脱出
RiseEdge = CCP1_CaptureRead();
__delay_ms(100);
while(!CCP1_IsCapturedDataReady()); // 立下り
// every edgeの設定にて上記同様にechoピンがlowになるとwhileから脱出 多分!
FallEdge = CCP1_CaptureRead();
// 距離に変換しLCD表示 音速=343m/s 20℃
Distance = (double)(FallEdge - RiseEdge)*343/20000;
sprintf(Line2, "%3.1f cm ", Distance);
lcd_cmd(0xC0);
lcd_str(Line2);
__delay_ms(2000);
}
}
0 件のコメント:
コメントを投稿