eagler8 发表于 2019-6-19 16:15:10

本帖最后由 eagler8 于 2019-6-19 17:39 编辑

接线方法(以提供的程序为准,可以接任意IO口,在程序中修改端口定义即可):
VCC→+5V/3.3V
GND→GND
CLK→7
DAT→6
RST→5

eagler8 发表于 2019-6-19 17:39:45

/*
【Arduino】37种传感器模块系列实验(29)
实验二十九:DS1302实时时钟模块(带电池CR2032 掉电走时)之一
*/

#define RST 5   
#define SCLK 7
#define IO 6
#define uchar unsigned char   

void setup() {   
pinMode(RST,OUTPUT);
pinMode(SCLK,OUTPUT);
pinMode(IO,OUTPUT);
Serial.begin(9600);
attachInterrupt(0, settm, FALLING );
}

void writeData(unsigned char addr,unsigned char dat){
pinMode(IO,OUTPUT);
digitalWrite(RST,LOW);   
digitalWrite(SCLK,LOW) ;
delayMicroseconds(1);
digitalWrite(RST,HIGH);

int i;
for(i =0;i<8;i++){
    digitalWrite(SCLK,LOW);
    digitalWrite(IO, addr&1);
    addr =addr>>1;
    digitalWrite(SCLK,HIGH);
    delayMicroseconds(1);
}

for(i =0;i<8;i++){
      digitalWrite(SCLK,LOW);
      digitalWrite(IO, dat&1);
      dat =dat>>1;
      digitalWrite(SCLK,HIGH);
      delayMicroseconds(1);
}
digitalWrite(RST,LOW);
}

uchar readData(uchar addr){            
addr = addr | 1;

pinMode(IO,OUTPUT);
digitalWrite(RST,LOW);
digitalWrite(SCLK,LOW) ;
delayMicroseconds(1);
digitalWrite(RST,HIGH);

int i;
for(i =0;i<8;i++){               
    digitalWrite(SCLK,LOW);
    digitalWrite(IO, addr&1);
    addr =addr>>1;
    digitalWrite(SCLK,HIGH);
    delayMicroseconds(1);
}
pinMode(IO,INPUT);               

int dat = 0;
for(i =0;i<8;i++){
      digitalWrite(SCLK,LOW);
      delayMicroseconds(10);
      uchar b = digitalRead(IO);
      dat = dat >>1;

      dat = dat | (b<<7);
      digitalWrite(SCLK,HIGH);
      delayMicroseconds(1);
}
digitalWrite(RST,LOW);
return dat ;
}

#define SECOND0x80   
#define MIN 0x82
#define HOUR 0x84
#define DAY 0x86
#define MONTH 0x88
#define YEAR 0x8C
#define WEEK 0x8A

void writeTimeUnit(uchar TYPE,uchar data){

uchar high = data / 10;
uchar low = data % 10;
uchar d = ((data /10) << 4) | (data % 10);
writeData(TYPE,data);
}

uchar readTimeUnit(uchar TYPE){
uchar r = readData(TYPE);
r = 10*(r >> 4)+ (r & 0xf);   
return r;
}

void writeAllTm(uchar tm[]){
uchar s = SECOND;
for(uchar i=0;i<5;i++){
    writeTimeUnit(s,tm);
    s+=2;
}
writeTimeUnit(YEAR,tm);
}

void readAllTm(uchar tm[]){
uchar s = SECOND;
for(uchar i=0;i<5;i++){
    tm = readTimeUnit(s);
    s+=2;
}
tm = readTimeUnit(YEAR);
tm = readTimeUnit(WEEK);
}


void printTm(uchar tm[]){
Serial.print(tm);
Serial.print("-");
Serial.print(tm);
Serial.print("-");
Serial.print(tm);
Serial.print(" ");

Serial.print(tm);
Serial.print(":");

Serial.print(tm);
Serial.print(":");

Serial.print(tm);
Serial.print(" week ");

Serial.print(tm);
Serial.println();
}
uchar st = 0;
void loop() {            
    uchar tm = {0};   
    readAllTm(tm);
    printTm(tm);
    delay(1000);
}

void settm()
{
    uchar tm[] = {11,12,13,4,5,6 ,0};
    Serial.println("set tm ...");
      writeAllTm(tm);
}

eagler8 发表于 2019-6-19 17:53:54

总算通过了一个程序,就是不知道如何调整为当前时间?

eagler8 发表于 2019-6-19 21:03:34

/*
【Arduino】37种传感器模块系列实验(29)
实验二十九:DS1302实时时钟模块(带电池CR2032 掉电走时)之二
*/

#include <DS1302.h>

DS1302 rtc(5, 6, 7);

void setup()
{
rtc.halt(false);
rtc.writeProtect(false);
Serial.begin(9600);
rtc.setDOW(FRIDAY);      
rtc.setTime(20, 49, 0);   
rtc.setDate(19, 6, 2019);
}

void loop()
{
Serial.print(rtc.getDOWStr());
Serial.print(" ");
Serial.print(rtc.getDateStr());
Serial.print(" -- ");
Serial.println(rtc.getTimeStr());
delay (1000);
}

eagler8 发表于 2019-6-19 21:05:54

eagler8 发表于 2019-6-20 06:44:25

eagler8 发表于 2019-6-20 06:44:41

eagler8 发表于 2019-6-20 08:49:47

本帖最后由 eagler8 于 2019-6-20 09:11 编辑

试了不少串口调试工具,只有这二款能同步打印即使时间

eagler8 发表于 2019-6-20 08:50:04

本帖最后由 eagler8 于 2019-6-20 09:12 编辑

eagler8 发表于 2019-6-20 13:22:14

eagler8 发表于 2019-6-20 13:22:32

eagler8 发表于 2019-6-20 13:36:31

实验三十:光敏二极管传感器模块(英语:photodiode )

光敏二极管
也叫光电二极管。光敏二极管与半导体二极管在结构上是类似的,其管芯是一个具有光敏特征的PN结,具有单向导电性,因此工作时需加上反向电压。无光照时,有很小的饱和反向漏电流,即暗电流,此时光敏二极管截止。当受到光照时,饱和反向漏电流大大增加,形成光电流,它随入射光强度的变化而变化。当光线照射PN结时,可以使PN结中产生电子一空穴对,使少数载流子的密度增加。这些载流子在反向电压下漂移,使反向电流增加。因此可以利用光照强弱来改变电路中的电流。常见的有2CU、2DU等系列。

eagler8 发表于 2019-6-20 13:48:46





eagler8 发表于 2019-6-20 13:53:37

工作原理
  光敏二极管是将光信号变成电信号的半导体器件。它的核心部分也是一个PN结,和普通二极管相比,在结构上不同的是,为了便于接受入射光照,PN结面积尽量做的大一些,电极面积尽量小些,而且PN结的结深很浅,一般小于1微米。
  光敏二极管是在反向电压作用之下工作的。没有光照时,反向电流很小(一般小于0.1微安),称为暗电流。当有光照时,携带能量的光子进入PN结后,把能量传给共价键上的束缚电子,使部分电子挣脱共价键,从而产生电子---空穴对,称为光生载流子。
  它们在反向电压作用下参加漂移运动,使反向电流明显变大,光的强度越大,反向电流也越大。这种特性称为“光电导”。光敏二极管在一般照度的光线照射下,所产生的电流叫光电流。如果在外电路上接上负载,负载上就获得了电信号,而且这个电信号随着光的变化而相应变化。

eagler8 发表于 2019-6-20 14:10:36

光敏二极管与光敏电阻的区别
光敏电阻又称光敏电阻器或光导管常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。还有另一种入射光弱,电阻减小,入射光强,电阻增大。根据光敏电阻的光谱特性,可分为三种光敏电阻器:紫外光敏电阻器、红外光敏电阻器、可见光光敏电阻器。和光敏二极管不同,光敏电阻测量的时候,没有正反,2面的电阻是一样的。

光敏电阻和光敏二极管相比,光敏电阻内部的光电效应和电极无关(光电二极管才有关),即可以使用直流电源,灵敏度和半导体材料、以及入射光的波长有关,环氧树脂胶封装,可靠性好, 体积小, 灵敏度高,反应速度快,光谱特性好。但是光敏电阻受温度影响较大,响应速度不快,在ms到s之间,延迟时间受入射光的光照度影响(光电二极管无此缺点,光电二极管灵敏度比光敏电阻高)最后光敏电阻是耗材。



页: 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38
查看完整版本: 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)