PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : درخواست مشاوره - راه اندازی ساعت دیحیتال با ماژول ساعت دقیق ds1307، سون سگمنت tm1637



DesironnA
09-09-2017, 15:06
درود
نمی دونم جای درستی تاپیک زدم یا خیر..

چون برای نخستین باری بود که قصد داشتم ساعت دیجیتال بسازم، لذا بجای خریدن ماژول ساعت دقیق DS3232، ماژول ساعت دقیق DS1307 و سون سگمنت TM1637 رو از فروشگاه آفتاب رایانه خریدم. امّا در اینترنت آموزش و کدی که مناسب با اکوئیپمنت من باشه پیدا نکردم، تا اینکه در سایت Arduino.cc (You can see links before reply) یک آموزش به زبان فکر کنم فرانسوی (یا زبانی دیگر) پیدا کردم. پس از اسمبل سخت افزار و آپلود کد مربوط در آردوینو، ساعت کار نکرد. در بخش Serial Monitor عملکرد رو چک کردم و دیدم ساعت کار می کنه. پس متوجه شدم که خروجی به سون سگمنت انجام نمیشه. چون آردوینو دست ساز خودم بود، روی آردوینو Uno اصلی (اورجینال نیست) تست کردم که شاید مشکل از آردوینوی خودم بوده باشه ولی نتیجه یکی بود.
سیم ها، کانکشن ها، ماژول ها، و همه چیز رو چک و تست کردم. همه چیز سالمه و خوب کار می کنه. ولی وقتی طبق آموزش (که خیلی خیلی هم ساده ست) قطعات رو اسمبل می کنم، باز هم سون سگمنت روشن نمیشه و ساعت رو نشون نمی ده..
در زیر، لینک آموزش مورد بحث هست :
4-digit RTC Clock (You can see links before reply)

تصویر آموزش اسمبل سخت افزار :

You can see links before reply

تصویر ساعت اسمبل شده من :

You can see links before reply
این هم از کدی که در آموزش آورده شده :





// Reloj digital mostrado a través de un display de 4 dígitos (digitaltube), y con el tiempo
// proporcionado por un Tiny RTC de Catalex.

// Software programado por PentiumCadiz 7-1-17, basado en el ejemplo de la librería DS1307RTC
// y en el ejemplo de uso del display de Prometec You can see links before reply



#include "Wire.h"
#include "Time.h"
#include "DS1307RTC.h"
#include "TM1637.h"
#define CLK 9
#define DIO 8

TM1637 Display1(CLK, DIO);
int8_t Digitos[] = {0,1,2,3};
int horas;
int minutos;
boolean alterna;

void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println("DS1307RTC Read Test");
Serial.println("-------------------");
Display1.init();
Display1.set();


}

void loop() {
tmElements_t tm;

if (RTC.read(tm)) {
Serial.print("Ok, Time = ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();

horas = tm.Hour;
minutos = tm.Minute;
CalculaDigitos(horas, minutos);
if (alterna)
{
Display1.point(POINT_OFF);
alterna = false;
}
else
{
Display1.point(POINT_ON);
alterna = true;
}

} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(9000);
}
delay(1000);
}

void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}

void CalculaDigitos( int hor, int minu)
{
int8_t Digit0 = minu %10 ;
int8_t Digit1 = (minu % 100) / 10 ;
int8_t Digit2 = hor % 10 ;
int8_t Digit3 = (hor % 100) / 10 ;

Digitos[3] = Digit0 ;
Digitos[2] = Digit1 ;
Digitos[1] = Digit2 ;
Digitos[0] = Digit3 ;

Display1.display(Digitos);
}


ابتدا ماژول ساعت دقیق DS1307 رو توسط اسکچ Set Time از کتابخاته DS1307RTC دقیق کردم، و بعد کد فوق رو آپلود کردم..
لطفاً، بفرمائید مشکل کار از کجاست، و چطور ساعت به راه می افته.

پیشاپیش، سپاس..

DesironnA
11-09-2017, 15:04
کسی نمی دونه ؟

DesironnA
15-09-2017, 00:47
درود
مشکلم حل شد..
اوّل اینکه بجای پین های 8 و 9 دیجیتال، 5 و 6 رو جایگزین کردم.
و دوّم اینکه کلّیه سیم های بردبورد رو جدا کردم، و بجاشون سیم های رشته ای رو به هردو ماژول لحیم کردم..
شاید برخی بخوان مثل من از این دو ماژول بخصوص (ماژول ساعت دقیق DS1307 و ماژول سون سگمنت TM1637) برای ساخت ساعت استفاده کنند.
پیشنهاد می کنم این کد رو برای آموزش جداگانه قرار بدید.
سپاسم بسیار
کد :

// Reloj digital mostrado a través de un display de 4 dígitos (digitaltube), y con el tiempo
// proporcionado por un Tiny RTC de Catalex.
// Software programado por PentiumCadiz 7-1-17, basado en el ejemplo de la librería DS1307RTC
// y en el ejemplo de uso del display de Prometec Display con interface | Tutoriales Arduino (You can see links before reply)
#include <TM1637.h>
#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
#define CLK 6
#define DIO 5
TM1637 Display1(CLK, DIO);
int8_t Digitos[] = {0,1,2,3};
int horas;
int minutos;
boolean alterna;
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println("DS1307RTC Read Test");
Serial.println("-------------------");
Display1.set();
Display1.init();

}
void loop() {
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print("Ok, Time = ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
horas = tm.Hour;
minutos = tm.Minute;
CalculaDigitos(horas, minutos);
if (alterna)
{
Display1.point(POINT_OFF);
alterna = false;
}
else
{
Display1.point(POINT_ON);
alterna = true;
}

} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(9000);
}
delay(1000);
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}
void CalculaDigitos( int hor, int minu)
{
int8_t Digit0 = minu %10 ;
int8_t Digit1 = (minu % 100) / 10 ;
int8_t Digit2 = hor % 10 ;
int8_t Digit3 = (hor % 100) / 10 ;
Digitos[3] = Digit0 ;
Digitos[2] = Digit1 ;
Digitos[1] = Digit2 ;
Digitos[0] = Digit3 ;
Display1.display(Digitos);
}