2024年10月26日土曜日

Dream Ware DPASS 緊急地震速報発報システム MODEL SH200-Jの分解


Dream Ware DPASS 緊急地震速報発報システム MODEL SH200-Jの分解

注意:この記事の内容を鵜呑みにし、事故や損失を招いた場合でも当方は一切の責任は負いかねます。自己責任でお願いします。


電子機器分解シリーズです。

本機は緊急地震速報の情報をネットワークを用いて受信するための装置です。

本体裏面にあるシリアルIDをサービス提供会社に知らせることで、緊急地震速報の情報を取得できます。(有料、月額約10000円?)

地震が来るまでの秒数を含めた警報を表示できます。主に法人向けの装置です。


本体には"3SOFT"と印字された上から"DPASS"シールが貼られています。
同様に"Digital Catfish"と印字された上から"Dream Ware"シールが貼られています。
3SOFTの「デジタルなまず」のOEM版ということでしょうか?




専用ACアダプタ : DEP-1208A 12V 800mA


ICの生産年は2006年台が多いです。

MCUは沖電気のML674000 ML67Q4003-INNN (ARM7/TDMI)が入っていました。



「OKI L67Q4003-INNN」  沖電気 ML67Q4003-INNN ML674000シリーズ ARM7/TDMI 32bitマイクロコントローラ BootROM:4KB, Flash:512KB, SRAM:32KB

沖電気のマイコンが使われているのは珍しいですね。
JTAGだけでなく、UART書き込みにも対応しています。
開発環境さえ手に入れば再利用できそうです。


「OKI L2216-016」 沖電気 ML2216 ADPCM2 Algorithm-Based Speech Synthesis LSI
 MaskROM品 ROM番号016
音声再生LSIです。
内部にサンプリングデータが入った8MbitのROMがあり、フレーズ番号を指定することで音声が再生されます。(最大256フレーズ)

音声データの書き換えはできないもものの、地震に関する音声(震度や秒数、効果音)が入っているので、何かしら再利用できそうですね。

フレーズ番号ごとの音声データとArduinoサンプルプログラムは、このページ一番下に示します。


「S353 90A」 ABLIC S35390A リアルタイムクロック


「Atmel ATmega168V 10AU」 Atmel ATmega168V10AU 8bit AVRマイクロコントローラ Flash:16KB, SRAM:1KB
フラッシュのAVRマイコンです。再利用できそうです。

「SAMSUNG K4S641632H-UC75」 SAMSUNG K4S641632H-UC75 4M*16bit 64Mbit SDRAM


「PROCHILD VER 1.3 CS449XJPAA」 詳細不明 無線モジュール 
周波数 : 449.7125~449.8750MHz
変調方式 : FSK


「ATMEL614 93C46」 ATEMEL AT93C46 1Kbit EEPROM
「RTL8019AS」 REALTEK RTL8019AS 10BASE-T イーサネットコントローラ


「SIPEX SP3243ECA」 SIPEX SP3243ECA RS-232トランシーバ



・基板裏面


デバッグ用にUART端子(ミニジャック3P)が用意されています。

このUART端子はAVRマイコンへ接続されています。
シルクRXDが出力(ジャック中端SH200-J→ホスト)、TXDが入力(ジャック先端SH200-J←ホスト)、ボーレートは38400bpsです。
通電中はRSSI(電波強度?)の状態の情報を吐き出します。
おそらくこの端子は無線モジュールまわりのデバッグようでしょう。


・LCD





「SK0621」 バックライトパネル印字
「221-3059-0657 S0 060521-0016」 LCD本体シール印字
「11-NE084 0619」 LCDフレキ印字

詳細不明の26pin LCDです。

回路起こしをした結果、SLG12864PというLCDの仕様に近いことがわかりました。
SLG12864PのコントローラはNT7538というものが使われています。
SLG12864P自体は28pinのLCDですが、このLCDは27pinと28pinが省かれています。


このLCDは、秋月電子などでよく販売されている12864系のものとバス制御方式が違います。
80系のバス制御に近い/RD, /WE, /CS, A0コントロールとなっています。
LCDコマンドも微妙に異なっているため、よくある12864LCDをそのまま付け替えることはできないようです。


SH200-JのLCD駆動用チャージポンプ回路をみると、3倍電圧回路(3x step-up voltage circuit)となっています。
NT7538はチャージポンプ回路次第で2, 3, 4, 5倍の任意の倍電圧回路とすることができます。
電源電圧が3.3Vの場合は3倍電圧、3.0Vの場合は4倍電圧にすると良いでしょう。

SH200-JのLCD周りの回路




SLG12864Pのピンアサイン





・ML2216-016のサンプリングリスト


ROM番号016

サンプリング番号 : 音声の内容
0 : "ぜろ"
1 : "いち"
2 : "に"
3 : "さん"
4 : "よん"
5 : "ご"
6 : "ろく"
7 : "なな"
8 : "はち"
9 : "きゅう"
10 : "じゅう"
11 : "にじゅう"
12 : "さんじゅう"
13 : "よんじゅう"
14 : "ごじゅう"
15 : "じしん"
16 : "しんどいち"
17 : "しんどに"
18 : "しんどさん"
19 : "しんどよん"
20 : "しんどごじゃく"
21 : "しんどごきょう"
22 : "しんどろくじゃく"
23 : "しんどろくきょう"
24 : "しんどなな"
25 : "びょうご"
26 : "きんきゅうじしんそくほうをかいじょします   ぼうさいききはマニュアルにしたがいふっきゅうしてください"
27 : "はいしんテストです"
28 : "れいびょうご"
29 : "いちびょうご"
30 : "にびょうご"
31 : "さんびょうご"
32 : "よんびょうご"
33 : "ごびょうご"
34 : "ろくびょうご"
35 : "ななびょうご"
36 : "はちびょうご"
37 : "きゅうびょうご"
38 : "じゅうびょうご"
39 : "にじゅうびょうご"
40 : "さんじゅうびょうご"
41 : "よんじゅうびょうご"
42 : "ごじゅうびょうご"
43 : "ちいさなゆれが"
44 : "ものがたおれるぐらいのゆれが"
45 : "いのちにかかわるほどのゆれが"
46 : "もうまもなくきます"
47 : "まもなくきます"
48 : "すぐにきます"
49 : "つなみけいほうはつれい"
50 : "おおあめけいほうはつれい"
51 : "おおゆきけいほうはつれい"
52 : "ぼうふうはろうけいほうはつれい"
53 : 効果音 1 ピ
54 : 効果音 2
55 : 効果音 3
56 : 効果音 4
57 : 効果音 5
58 : 効果音 6
59 : 効果音 7
60 : 効果音 8
61 : 効果音 9
62 : 効果音 10
63 : 効果音 11
64 : 効果音 12
65 : 効果音 13
66 : 効果音 14
67 : 効果音 15 警告音
68 : 効果音 5
69 : 効果音 10
70 : 効果音 15 警告音
71 : 効果音 16
72~255 : なし


・ArduinoでML2216再生テストプログラム


//ML2216再生 テストプログラム
//https://oykenkyu.blogspot.com/2024/10/sh200-j.html
//©oy

#include <avr/pgmspace.h> //プログラムフラッシュから文字データを読み込むのに必要

#define SERIALSPEED 38400 //UARTのボーレート38400bps@16MHz

//ピン
#define GPIO_MOSI 11 //ML2216 : 29pin
#define GPIO_CLK 13 //ML2216 : 28pin
#define GPIO_CS 10 //ML2216 : 27pin
#define GPIO_RST 9 //ML2216 : 26pin
//ML2216の25番ピンDIPHは常にLにしておく

unsigned char input_num_buf[64];//数値入力バッファ

void setup()
{
  pinMode(GPIO_CLK, OUTPUT);//CLK
  pinMode(GPIO_MOSI, OUTPUT);//MOSI
  pinMode(GPIO_CS, OUTPUT);//CS
  pinMode(GPIO_RST, OUTPUT);//RST
 
  digitalWrite(GPIO_CLK, 0);//CLK
  digitalWrite(GPIO_CS, 0);//CS
  digitalWrite(GPIO_RST, 0);//RST
  delay(500);
 
  digitalWrite(GPIO_RST, 1);//RST

  Serial.begin(SERIALSPEED);
 
}
void loop()
{
 
  long input_num = 0;
 
  Serial.print(F("ML2216 PLAY TEST\r\n"));
  Serial.print(F("\r\n"));
 
  spi_out(0b00000000);//パワーオン
 
  //再生したい番号を入力してEnter
  while (1)
  {
    Serial.print(F("PLAY.NO 0~255?\r\n"));
    input_num = serial_get_dec();//数値を入力してEnter
    Serial.print(F("\r\n"));

    spi_out(0b01100000);//音声停止
    spi_out(0b10100000 | 14);//音量 値が小さいほど大きい音量となる
   
    spi_out(0b01000000);//再生
    spi_out(input_num);//再生するサンプリング番号

    spi_out(0b10000000);//ループ再生有効
   
  }

  //1秒ごとに再生するサンプリングIDを切り替えるやつ
  /*
  for (int i = 0; i < 256; i++)
  {
    spi_out(0b01100000);//音声停止

    spi_out(0b10100000 | 14);//音量
    spi_out(0b01000000);
    spi_out(i);
    delay(1000);
  }
  */

}

//SPI出力
void spi_out(unsigned char data)
{
  delayMicroseconds(100);
  digitalWrite(GPIO_CS, 0);
  delayMicroseconds(10);
  send_data_msbf(data, 8);
  delayMicroseconds(10);
  digitalWrite(GPIO_CS, 1);
  delayMicroseconds(20);

}


//UART10進数値入力待ち
long serial_get_dec()
{
  int i;
  unsigned char inByte = 0x30;
 
  unsigned char in_pos = 0;
  unsigned long ret_num = 0;
  while ((inByte != '\n') && (inByte != '\r') && (in_pos < 128))
  {
    if (Serial.available())
    {
      inByte = Serial.read();
      Serial.write(inByte);
      if((inByte != '\n') && (inByte != '\r'))
      {
        input_num_buf[in_pos] = inByte;
        in_pos++;
      }
    }
  }
  Serial.print(F("\r\n"));
  for(i=0;i<in_pos;i++)
  {
    if((input_num_buf[i]>='0') && (input_num_buf[i]<='9'))
    {
      ret_num = (ret_num*10) + (input_num_buf[i] - '0');
    }
    else{
      ret_num = -1;
      break;
    }
   
  }
  ret_num = (ret_num < 0) ? -1 : ret_num;

  //現在までに入力されたバッファを破棄
  while (Serial.available())
  {
    Serial.read();
  }
  return ret_num;

}

//任意のビット数送信(MSB側から送信、最大32bit)
void send_data_msbf(unsigned long data, char len)
{
  len--;
  for(int i=len;i>=0;i--)
  {
    digitalWrite(GPIO_MOSI, (data>>i) & 0x00000001);
    delayMicroseconds(4);
    digitalWrite(GPIO_CLK, 1);
    delayMicroseconds(4);
    digitalWrite(GPIO_CLK, 0);

  }

}







/*検索エンジン用単語リスト*/
SH200J
SH200 J
earthquake
alarm device
disassembly
disassemble







0 件のコメント:

コメントを投稿