本帖最后由 eagler8 于 2019-6-19 17:39 编辑
接线方法(以提供的程序为准,可以接任意IO口,在程序中修改端口定义即可):
VCC→+5V/3.3V
GND→GND
CLK→7
DAT→6
RST→5
/*
【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);
}
总算通过了一个程序,就是不知道如何调整为当前时间?
/*
【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-20 09:11 编辑
试了不少串口调试工具,只有这二款能同步打印即使时间
本帖最后由 eagler8 于 2019-6-20 09:12 编辑
实验三十:光敏二极管传感器模块(英语:photodiode )
光敏二极管
也叫光电二极管。光敏二极管与半导体二极管在结构上是类似的,其管芯是一个具有光敏特征的PN结,具有单向导电性,因此工作时需加上反向电压。无光照时,有很小的饱和反向漏电流,即暗电流,此时光敏二极管截止。当受到光照时,饱和反向漏电流大大增加,形成光电流,它随入射光强度的变化而变化。当光线照射PN结时,可以使PN结中产生电子一空穴对,使少数载流子的密度增加。这些载流子在反向电压下漂移,使反向电流增加。因此可以利用光照强弱来改变电路中的电流。常见的有2CU、2DU等系列。
工作原理
光敏二极管是将光信号变成电信号的半导体器件。它的核心部分也是一个PN结,和普通二极管相比,在结构上不同的是,为了便于接受入射光照,PN结面积尽量做的大一些,电极面积尽量小些,而且PN结的结深很浅,一般小于1微米。
光敏二极管是在反向电压作用之下工作的。没有光照时,反向电流很小(一般小于0.1微安),称为暗电流。当有光照时,携带能量的光子进入PN结后,把能量传给共价键上的束缚电子,使部分电子挣脱共价键,从而产生电子---空穴对,称为光生载流子。
它们在反向电压作用下参加漂移运动,使反向电流明显变大,光的强度越大,反向电流也越大。这种特性称为“光电导”。光敏二极管在一般照度的光线照射下,所产生的电流叫光电流。如果在外电路上接上负载,负载上就获得了电信号,而且这个电信号随着光的变化而相应变化。
光敏二极管与光敏电阻的区别
光敏电阻又称光敏电阻器或光导管常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。还有另一种入射光弱,电阻减小,入射光强,电阻增大。根据光敏电阻的光谱特性,可分为三种光敏电阻器:紫外光敏电阻器、红外光敏电阻器、可见光光敏电阻器。和光敏二极管不同,光敏电阻测量的时候,没有正反,2面的电阻是一样的。
光敏电阻和光敏二极管相比,光敏电阻内部的光电效应和电极无关(光电二极管才有关),即可以使用直流电源,灵敏度和半导体材料、以及入射光的波长有关,环氧树脂胶封装,可靠性好, 体积小, 灵敏度高,反应速度快,光谱特性好。但是光敏电阻受温度影响较大,响应速度不快,在ms到s之间,延迟时间受入射光的光照度影响(光电二极管无此缺点,光电二极管灵敏度比光敏电阻高)最后光敏电阻是耗材。