قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

abuislam
:: مهندس ::
تاريخ التسجيل: Apr 2016
المشاركات: 23
نشاط [ abuislam ]
قوة السمعة:0
قديم 19-07-2016, 03:49 PM المشاركة 1   
افتراضي مشروع مفيد Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركاته

كيف اربط أوامر البيك بوقت الساعة ؟

مثلا صباحا على الساعة 8 يعمل البراد و على الساعة 9 يعمل المكيف و هكذا برنامج يومي .
.
يعني حتى لو انقطعت الكهرباء و عادت يكمل الميكروكنترولر عمله بتوقيت الساعة

اعلانات

الصورة الرمزية ياسين الحانوتي
ياسين الحانوتي
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2013
المشاركات: 164
نشاط [ ياسين الحانوتي ]
قوة السمعة:0
قديم 19-07-2016, 04:12 PM المشاركة 2   
افتراضي


وغليكم السلام
لدي نفس المشكلة،،
فكرت في ربطه بساعة يد صغيرة .. اربطها بالبيك عبر مكان 7seg لكنها أكثر تعقيد ومعظمها يعمل بال multiplexage ,, وكذلك مشاكل اللحام وغيرها,,,
في انتظار الخبراء

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

ahmed idris
:: مهندس متميز ::
تاريخ التسجيل: Jul 2015
المشاركات: 453
نشاط [ ahmed idris ]
قوة السمعة:0
قديم 19-07-2016, 05:26 PM المشاركة 3   
افتراضي


لدي نفس المشكلة،،
فكرت في ربطه بساعة يد صغيرة .. اربطها بالبيك عبر مكان 7seg لكنها أكثر تعقيد ومعظمها يعمل بال multiplexage ,, وكذلك مشاكل اللحام وغيرها,,,
في انتظار الخبراء

السلام عليكم
أخي ياسين
منذ فنرة أصبح هذا المشروع ممكنا وميسرا بظهور العنصر DS1307
هذا مثال للدائرة:

DS1307 ساعة حقيقية ينقصها فقط عرض النتائج وأزرار الضبط
هذا النقص يعوضه المتحكم المرافق لها
التواصل بينهما تسلسلي ب طرفين (إضافة الى الارضي المشترك طبعا)
طريقة التواصل مشهورة وتدعى I2C
DS1307 تحفظ الوقت باستمرار لأنها تعمل ببطاريتها المستقلة 3 فولت
والتي تدوم طويلا
أما تخزين توقيتات تشغيل الاجهزة التي تريد فيتم في ذاكرة EEPROM الداخلية للمتحكم
وفي كل لغة برمجة تعليمات خاصة بذلك
مواضيع وأمثلة مشروحة موجودة بالقرية في هذا القسم
وفي النت بالعشرات وبمختلف اللغات البرمجية


التعديل الأخير تم بواسطة : ahmed idris بتاريخ 19-07-2016 الساعة 11:24 PM

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:394
قديم 19-07-2016, 05:27 PM المشاركة 4   
افتراضي


باستخدام ساعة الزمن الحقيقي I2C

حيدر علاج حسن

abuislam
:: مهندس ::
تاريخ التسجيل: Apr 2016
المشاركات: 23
نشاط [ abuislam ]
قوة السمعة:0
قديم 19-07-2016, 09:29 PM المشاركة 5   
افتراضي


الله يهديك و يصلح بالك و شكرا لك


abuislam
:: مهندس ::
تاريخ التسجيل: Apr 2016
المشاركات: 23
نشاط [ abuislam ]
قوة السمعة:0
قديم 22-07-2016, 02:19 AM المشاركة 6   
افتراضي


الحمد لله نجحت بفضل الله من تركيب الساعة ds3231

الآن كيف أكتب أمر لكي يعمل الليد في وقت محدد حسب الساعة

مثلا أن يضيء الليد على الساعة 09 صباحا و يطفئ الساعة 09 و 20 ثانية ثم ينتظر ثانية ثم يضيء
بعدها أي على الساعة 09 و 21 ثم يطفئ على الساعة 09 و 41 ثانية و هكذا إلى ما لا نهاية.



كود:
#include <Wire.h>
#include "ds3231.h"
#include "rtc_ds3231.h"

#define BUFF_MAX 128

uint8_t time[8];
char recv[BUFF_MAX];
unsigned int recv_size = 0;
unsigned long prev, interval = 5000;

void setup()
{
    Serial.begin(9600);
    Wire.begin();
    DS3231_init(DS3231_INTCN);
    memset(recv, 0, BUFF_MAX);
    Serial.println("GET time");
}

void loop()
{
    char in;
    char buff[BUFF_MAX];
    unsigned long now = millis();
    struct ts t;

    // show time once in a while
    if ((now - prev > interval) && (Serial.available() <= 0)) {
        DS3231_get(&t);

        // there is a compile time option in the library to include unixtime support
#ifdef CONFIG_UNIXTIME
        snprintf(buff, BUFF_MAX, "%d.%02d.%02d %02d:%02d:%02d %ld", t.year,
             t.mon, t.mday, t.hour, t.min, t.sec, t.unixtime);
#else
        snprintf(buff, BUFF_MAX, "%d.%02d.%02d %02d:%02d:%02d", t.year,
             t.mon, t.mday, t.hour, t.min, t.sec);
#endif

        Serial.println(buff);
        prev = now;
    }

    if (Serial.available() > 0) {
        in = Serial.read();

        if ((in == 10 || in == 13) && (recv_size > 0)) {
            parse_cmd(recv, recv_size);
            recv_size = 0;
            recv[0] = 0;
        } else if (in < 48 || in > 122) {;       // ignore ~[0-9A-Za-z]
        } else if (recv_size > BUFF_MAX - 2) {   // drop lines that are too long
            // drop
            recv_size = 0;
            recv[0] = 0;
        } else if (recv_size < BUFF_MAX - 2) {
            recv[recv_size] = in;
            recv[recv_size + 1] = 0;
            recv_size += 1;
        }

    }
}

void parse_cmd(char *cmd, int cmdsize)
{
    uint8_t i;
    uint8_t reg_val;
    char buff[BUFF_MAX];
    struct ts t;

    //snprintf(buff, BUFF_MAX, "cmd was '%s' %d\n", cmd, cmdsize);
    //Serial.print(buff);

    // TssmmhhWDDMMYYYY aka set time
    if (cmd[0] == 84 && cmdsize == 16) {
        //T355720619112011
        t.sec = inp2toi(cmd, 1);
        t.min = inp2toi(cmd, 3);
        t.hour = inp2toi(cmd, 5);
        t.wday = cmd[7] - 48;
        t.mday = inp2toi(cmd, 8);
        t.mon = inp2toi(cmd, 10);
        t.year = inp2toi(cmd, 12) * 100 + inp2toi(cmd, 14);
        DS3231_set(t);
        Serial.println("OK");
    } else if (cmd[0] == 49 && cmdsize == 1) {  // "1" get alarm 1
        DS3231_get_a1(&buff[0], 59);
        Serial.println(buff);
    } else if (cmd[0] == 50 && cmdsize == 1) {  // "2" get alarm 1
        DS3231_get_a2(&buff[0], 59);
        Serial.println(buff);
    } else if (cmd[0] == 51 && cmdsize == 1) {  // "3" get aging register
        Serial.print("aging reg is ");
        Serial.println(DS3231_get_aging(), DEC);
    } else if (cmd[0] == 65 && cmdsize == 9) {  // "A" set alarm 1
        DS3231_set_creg(DS3231_INTCN | DS3231_A1IE);
        //ASSMMHHDD
        for (i = 0; i < 4; i++) {
            time[i] = (cmd[2 * i + 1] - 48) * 10 + cmd[2 * i + 2] - 48; // ss, mm, hh, dd
        }
        uint8_t flags[5] = { 0, 0, 0, 0, 0 };
        DS3231_set_a1(time[0], time[1], time[2], time[3], flags);
        DS3231_get_a1(&buff[0], 59);
        Serial.println(buff);
    } else if (cmd[0] == 66 && cmdsize == 7) {  // "B" Set Alarm 2
        DS3231_set_creg(DS3231_INTCN | DS3231_A2IE);
        //BMMHHDD
        for (i = 0; i < 4; i++) {
            time[i] = (cmd[2 * i + 1] - 48) * 10 + cmd[2 * i + 2] - 48; // mm, hh, dd
        }
        uint8_t flags[5] = { 0, 0, 0, 0 };
        DS3231_set_a2(time[0], time[1], time[2], flags);
        DS3231_get_a2(&buff[0], 59);
        Serial.println(buff);
    } else if (cmd[0] == 67 && cmdsize == 1) {  // "C" - get temperature register
        Serial.print("temperature reg is ");
        Serial.println(DS3231_get_treg(), DEC);
    } else if (cmd[0] == 68 && cmdsize == 1) {  // "D" - reset status register alarm flags
        reg_val = DS3231_get_sreg();
        reg_val &= B11111100;
        DS3231_set_sreg(reg_val);
    } else if (cmd[0] == 70 && cmdsize == 1) {  // "F" - custom fct
        reg_val = DS3231_get_addr(0x5);
        Serial.print("orig ");
        Serial.print(reg_val,DEC);
        Serial.print("month is ");
        Serial.println(bcdtodec(reg_val & 0x1F),DEC);
    } else if (cmd[0] == 71 && cmdsize == 1) {  // "G" - set aging status register
        DS3231_set_aging(0);
    } else if (cmd[0] == 83 && cmdsize == 1) {  // "S" - get status register
        Serial.print("status reg is ");
        Serial.println(DS3231_get_sreg(), DEC);
    } else {
        Serial.print("unknown command prefix ");
        Serial.println(cmd[0]);
        Serial.println(cmd[0], DEC);
    }
}


التعديل الأخير تم بواسطة : abuislam بتاريخ 22-07-2016 الساعة 02:32 AM

abuislam
:: مهندس ::
تاريخ التسجيل: Apr 2016
المشاركات: 23
نشاط [ abuislam ]
قوة السمعة:0
قديم 23-07-2016, 10:47 AM المشاركة 7   
افتراضي


السلام عليكم حيدر علاج حسن


التعديل الأخير تم بواسطة : abuislam بتاريخ 23-07-2016 الساعة 03:08 PM

abuislam
:: مهندس ::
تاريخ التسجيل: Apr 2016
المشاركات: 23
نشاط [ abuislam ]
قوة السمعة:0
قديم 24-07-2016, 09:04 PM المشاركة 8   
افتراضي


اين المهندسون

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 10:32 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025