Aruduinoプログラム例    
 arduinoIEDからhtmにプログラムを移すと日本字のコメントが文字化けします。そこで、プログラム全体をサクラエディターにコピーして、<メニュー>変換→文字コード変換→自動判別-SJISコード変換 を行ってからhtmに移すと文字化けがでません。これで安心して日本字のコメントを書けます。


NANO
 5V仕様ですが周辺関係を3.3Vとしたいので(スペックには無理がありますが)3.3Vで使う予定です。 したがって書き込みはUSBを使わずにISCPで行います。
ポートの指定は、D1〜D13は 1〜13 とし、A1〜A7は 、A1〜A7 でよいようです。 DDRX、PORTX、PINX は有効なようです。
ATmega328PのBODヒューズは Extended FC=110=4.3V=Lebel 0,1、FD=101=2.7V=Lebel 1、FE=1.8V=L 0、FF=none

NANO 1    温度センサーDS7505を使う MC:NANOno1 3.3V
久しぶりにI2C接続の温度センサーを使ってみました。
最初にDS7505の留意事項を書いておきましょう。

このICは電源max3.7VですがSCL、SDAは5Vトレラントです。
アドレスは、0x48(7ビット)、0x90(8ビットW)0x91(8ビットR)です。
読み取り精度は9ビット(1/2℃まで)、10ビット、11ビット、12ビット(1/16℃まで)の4通りがあります。これはEEPROMに書かれるようで、工場出荷時は9ビットに設定されています。今回は12ビットで扱いたいので初回だけはEEPROMの書き換えプログラムをONにして実行します。→ しばらく実行すると9ビットになってしまします。RESETでONとするように書き換えました。原因はわかりません。

温度データは2バイトで、MSBが整数部分(摂氏温度の)、LSBの上位4ビットが 1/2、1/4、1/8、1/16℃を示します。LSBの下位4ビットは0です。

書き換えと読み取りの方法は次のとおりです。
 温度2バイト読み取り
 STARTコンディション
 アドレス0x91
 DATA(MSB)
 DATA(LSB)
 STOPコンディション
温度12ビットに設定
STARTコンディション
アドレス0x90
1を書き込み
0x60を書き込み
STOPコンディション
温度読み取りモードに戻す
STARTコンディション
アドレス0x90
0を書き込み
STOPコンディション


I2CのMCへの接続は、SDA→A4、SCL→A5 です。


プログラムは次のとおりです。
/*
  Temp1_2210   board:NANOno1 16MHz 3.3V
  LCD 3.3V   fuse: FF DF FD
                         FD=101=2.7V BOD (FC=4.3V) 
*/

#include <LiquidCrystal.h>
#include <Wire.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //rs, en, d4, d5, d6, d7
//縲val
int i;
uint8_t tp[3]; // tp[]:TEMPdata
char s[15]; // string for print & input

void setup() {
  lcd.begin(16, 2);
  lcd.print("hello, world!");
  Wire.begin(0x90 >> 1); // 温度センサーDS7505

// 温度センサー12ビット読み取りに設定
  Wire.beginTransmission(0x90>>1); 
  Wire.write(0x01); // inner=01 set mode9bit or 12bit
  Wire.write(0x60); delay(300);  // set 12bit mode
  Wire.endTransmission() ; delay(20);

// 温度センサーデータ読み取りモードに戻す
  Wire.beginTransmission(0x90>>1);
  Wire.write(0x00); delay(10); // inner=00 set mode read data
  Wire.endTransmission() ; delay(20);


void loop() {

//以下温度処理
  Wire.requestFrom(0x90>>1,2);    // デバイス(address 0x90>>1)に対し2バイト読み出しを要求
  i=1;
  while(Wire.available())  {   // 要求より短いデータが来る可能性あり
    tp[i] = Wire.read();      // 1バイトを受信
    i++;
  }
//温度表示
   s[1]=tp[1]/10+0x30;    s[2]=tp[1]%10+0x30;    s[3]='.';
   s[4]=(((tp[2]/16)*10)/16)+0x30;   s[5]=' ';
   lcd.setCursor(11,1);
   for(i=1;i<6;i++){lcd.print(s[i]);}  //配列は設定できない
//以上、温度処理・表示

  delay(1000);
  
  lcd.setCursor(0, 1);
  lcd.print(millis() / 1000);
}
 おわり top



8266WROOM02
 WROOM02を使ったarduinoの作例です。IDEのボードは Generic ESP8266 Module を使います(あとはデフォルトです)。
基本回路は辻のとおりです。


書き込みはUARTを接続して(COMポートを指定して)自動で行います。このとき、プログラムボタン+resetボタンの押下が必要です。

8266WROOM02 1    Lチカ MC:ROOM02 3.3V
/*    blink0-221102   mc:ESPWROOM02
 *    borad:GenericESP6Module
*/

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(16, OUTPUT);
  pinMode(12, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(16, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(12, LOW);
  delay(500);                       
  digitalWrite(16, LOW);
  digitalWrite(12, HIGH);
  delay(1000);                      
}
8266WROOM02 2   I2C_LCD_TEST MC:ROOM02 3.3V

 他と重複しますがLCDの点灯実験です。LCDはI2Cコンバーターを付けたものを使い、SDA→10ピン、FCL→14ピンに接続しています。
/* i2c_crt_test_221103    mc:ESPWROOM02 3.3V
   borad:GenericESP6Module

*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  // initialize the LCD
  lcd.begin();

  // Turn on the blacklight and print a message.
  lcd.backlight();
  lcd.print("Hello");
  delay(1000);
  lcd.clear();
}

void loop()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Hello,world!");
  delay(1000);

  lcd.setCursor(0, 1);
  lcd.print("0123456789012345");
  delay(1000);

  lcd.clear();
  lcd.setCursor(1, 1);
  lcd.print("ABCDefgh");
  delay(1000);
}



 
 おわり top






























 1    2018.

 
1  おわり top
 






















工事中














  

inserted by FC2 system