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

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

ABOUYAGINE
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2012
المشاركات: 61
نشاط [ ABOUYAGINE ]
قوة السمعة:0
قديم 22-07-2015, 02:22 AM المشاركة 1   
ha مساعدة في حفظ min,sec على eeprom !!! Twitter FaceBook Google+



السلام عليكم
لدي كونتر عداد بسيط به ثواني و دقائق min,sec واريد ان احفظ قيمتهما على eeprom_write وeeprom_read عند فصل الكهرباء,
ممكن تساعدوني من فضلكم
شكرا

اعلانات

walid nadim
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2015
المشاركات: 92
نشاط [ walid nadim ]
قوة السمعة:0
قديم 22-07-2015, 04:57 AM المشاركة 2   
افتراضي


السلام عليكم
لدي كونتر عداد بسيط به ثواني و دقائق min,sec واريد ان احفظ قيمتهما على eeprom_write وeeprom_read عند فصل الكهرباء,
ممكن تساعدوني من فضلكم
شكرا
وعليكم السلام و رحمة الله تعالى و بركاته
تكونة من أربع خانات تحفظ كل رقم في خانة من ثمة تقوم بحفظ تلك المصفوفة في EEPROM إليك هذا المثال :

char TextToWrite[4], TextToRead[4];
// هنا تقوم بحفظ البيانات في مصفوفة
TextToWrite[0] = minutes/10 + '0';
TextToWrite[1] = minutes%10 + '0';
TextToWrite[2] = seconds/10 + '0';
TextToWrite[3] = seconds%10 + '0';
// هنا تقوم بحفظ بيانات تلك المصفوفة في الإيبروم
for(x=0; x<4; x++) Eeprom_write(x, TextToWrite[x]);
// هنا تقوم بإستدعاء تلك البيانات و وضعها في مصفوفة أخرى
for(x=0; x<4; x++) TextToRead[x] = Eeprom_read(x);
// و هنا تقوم بقراءة محتوى تلك المصفوفة ليتم عرضه
Lcd_Out(1, 1, TextToRead);


التعديل الأخير تم بواسطة : walid nadim بتاريخ 22-07-2015 الساعة 05:03 AM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

zoro39
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 69
نشاط [ zoro39 ]
قوة السمعة:0
قديم 22-07-2015, 08:41 AM المشاركة 3   
افتراضي


أهلا بك أخي في المنتدى
هذان موضوعان ربما يساعدانك على اتمام مشروعك الموضوع الأول يتحدث عن انشاء ساعة رقمية حقيقية أي أنها تعمل بالوقت الحقيقي باستعمال الــ PIC16F877A والمتكاملة DS1307
والموضوع الثاني يتحدث عن ربط الميكروكنترولر PIC16F877A بالايبروم 24C08 وكيفية تخزين وقراءة المعلومات من الايبروم

http://elecnote.blogspot.com/2015/02...lock-with.html

http://elecnote.blogspot.com/2015/03...ller-with.html

بالتوفيق


ABOUYAGINE
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2012
المشاركات: 61
نشاط [ ABOUYAGINE ]
قوة السمعة:0
قديم 22-07-2015, 10:57 PM المشاركة 4   
افتراضي


وعليكم السلام و رحمة الله تعالى و بركاته
تكونة من أربع خانات تحفظ كل رقم في خانة من ثمة تقوم بحفظ تلك المصفوفة في EEPROM إليك هذا المثال :

char TextToWrite[4], TextToRead[4];
// هنا تقوم بحفظ البيانات في مصفوفة
TextToWrite[0] = minutes/10 + '0';
TextToWrite[1] = minutes%10 + '0';
TextToWrite[2] = seconds/10 + '0';
TextToWrite[3] = seconds%10 + '0';
// هنا تقوم بحفظ بيانات تلك المصفوفة في الإيبروم
for(x=0; x<4; x++) Eeprom_write(x, TextToWrite[x]);
// هنا تقوم بإستدعاء تلك البيانات و وضعها في مصفوفة أخرى
for(x=0; x<4; x++) TextToRead[x] = Eeprom_read(x);
// و هنا تقوم بقراءة محتوى تلك المصفوفة ليتم عرضه
Lcd_Out(1, 1, TextToRead);
السلام عليكم أخي walid nadim,
المشروع عبارة عن (external interrupt (RB0 للبك 16F877a وعند الانتربت يقوم بـ :

1-توصل الطرف الريلاي RA0.
2-يظهر العداد min1,sec على الـ 7segment ويبدأ بالعد التنازلي وصولا للقيمة 00:00.
3-لقد استعملت 7segment و ليس الـLCD .

يجب أن يكون باستطاعتي التعديل في قيمة الـ min1 ,sec وحفظها في internal eeprom للميكروكنترولر
لقد قمت بكتابة كود ولكنني اضعت البوصلة قليلا


كود:
#define seg_data          portc
#define seg_data_dir      trisc
#define seg1_en           portd.f0
#define seg1_en_dir       trisd.f0
#define seg2_en           portd.f1
#define seg2_en_dir       trisd.f1
#define seg3_en           portd.f2
#define seg3_en_dir       trisd.f2
#define seg4_en           portd.f3
#define seg4_en_dir       trisd.f3
#define inc_sw_dir        trisb.f1
#define dec_sw_dir        trisb.f2
#define inc_sw            portb.f1
#define dec_sw            portb.f2
#define set_sw            portb.f3
#define set_sw_dir        trisb.f3
#define select_sw         portb.f4
#define select_sw_dir     trisb.f4
#define Ldr_sw_dir        trisb.f0
#define Ldr_sw            portb.f0
///////////////////////////////////////
#define motor             porta.f0
#define motor_dir         trisa.f0
///////////////////////////////////////
#define output            0
#define input             1
#define on                1
#define off               0
#define is                ==
#define pressed           0
//////////////////////////////////////
const char segment[]={63,6,91,79,102,109,125,7,127,111};
int min1;
int sec;
char i;
char select=0;
char gg;
char old_value=0;
//////////////////////////////////////
void init()  {
adcon1=7;
INTCON=144;
OPTION_REG=128;
portd=1;
trisd=0;
Ldr_sw=on;
Ldr_sw_dir=input;
motor=off;
motor_dir=output;
seg_data=off;
seg1_en=seg2_en=seg3_en=seg4_en=on;
seg_data_dir=output;
seg1_en_dir=output;
seg2_en_dir=output;
seg3_en_dir=output;
seg4_en_dir=output;
select_sw_dir=set_sw_dir=inc_sw_dir=dec_sw_dir=input;
select_sw=set_sw=inc_sw=dec_sw=on;
/////////////////////
if(eeprom_read(0)!=0xff){ old_value=eeprom_read(0); }
////////////////////
                                                      }
///////////////////////////////////////
void show_number() {
seg1_en=0;
seg2_en=1;
seg3_en=1;
seg4_en=1;
seg_data=segment[min1/10];
delay_ms(2);
seg_data=0;

seg1_en=1;
seg2_en=0;
seg3_en=1;
seg4_en=1;
seg_data=segment[min1%10];
delay_ms(2);
seg_data=0;

seg1_en=1;
seg2_en=1;
seg3_en=0;
seg4_en=1;
seg_data=segment[sec/10];
delay_ms(2);
seg_data=0;

seg1_en=1;
seg2_en=1;
seg3_en=1;
seg4_en=0;
seg_data=segment[sec%10];
delay_ms(2);
seg_data=0;
               }
/////////////////////////////
void setting_menu(){

               while(1){
                        show_number();
if(select_sw is pressed)
               {for(gg=0;gg<=30;gg++)show_number;//..............delay_ms(250);
                select++;
               if(select==2)select=0;}
if(inc_sw is pressed) {for(gg=0;gg<=100;gg++)show_number;//......delay(250);
               if(select is 0){sec++; if(sec is 60)sec=0;}
               if(select is 1){min1++;if(min1 is 60)min1=0;} }

if(dec_sw is pressed) {for(gg=0;gg<=30;gg++)show_number;//.......delay_ms(250);
               if(select is 0){sec--; if(sec is -1)sec=59;}
               if(select is 1){min1--;if(min1 is -1)min1=59;}
                             }
if(set_sw is pressed){
                      return; }
               }}
 ///////////////////////////
void show_number_1_sec(){ for(i=0;i<=50;i++) {show_number();if(set_sw is pressed)setting_menu();} }
////////////////////////////

char flag = 0;
void interrupt()  {
if(INTCON.INTF == 1 )
  {
    flag = 1;              // set flag
    INTCON.INTF = 0;       // Clear Interrupt Flag
  }
}
///////////////////////////
void main() {
init();

while(1)
{    if (flag == 1)
    { motor=on;
      for(min1=59;min1>=0;min1--){for(sec=old_value;sec>=0;sec--)show_number_1_sec();}

       flag = 0;
       motor=off;    // reset flag, ready for new interrupt...
     }


if(set_sw is pressed){ setting_menu();}
} }


ABOUYAGINE
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2012
المشاركات: 61
نشاط [ ABOUYAGINE ]
قوة السمعة:0
قديم 22-07-2015, 11:25 PM المشاركة 5   
ha


وعليكم السلام و رحمة الله تعالى و بركاته
تكونة من أربع خانات تحفظ كل رقم في خانة من ثمة تقوم بحفظ تلك المصفوفة في EEPROM إليك هذا المثال :

char TextToWrite[4], TextToRead[4];
// هنا تقوم بحفظ البيانات في مصفوفة
TextToWrite[0] = minutes/10 + '0';
TextToWrite[1] = minutes%10 + '0';
TextToWrite[2] = seconds/10 + '0';
TextToWrite[3] = seconds%10 + '0';
// هنا تقوم بحفظ بيانات تلك المصفوفة في الإيبروم
for(x=0; x<4; x++) Eeprom_write(x, TextToWrite[x]);
// هنا تقوم بإستدعاء تلك البيانات و وضعها في مصفوفة أخرى
for(x=0; x<4; x++) TextToRead[x] = Eeprom_read(x);
// و هنا تقوم بقراءة محتوى تلك المصفوفة ليتم عرضه
Lcd_Out(1, 1, TextToRead);
السلام عليكم أخي walid nadim,
المشروع عبارة عن (external interrupt (RB0 للبك 16F877a وعند الانتربت يقوم بـ :

1-توصل الطرف الريلاي RA0.
2-يظهر العداد min1,sec على الـ 7segment ويبدأ بالعد التنازلي وصولا للقيمة 00:00.ويفصل عن الريلاي .
3-لقد استعملت 7segment و ليس الـLCD .

يجب أن يكون باستطاعتي التعديل في قيمة الـ min1 ,sec وحفظها في internal eeprom للميكروكنترولر
لقد قمت بكتابة كود ولكنني اضعت البوصلة قليلا


كود:
#define seg_data          portc
#define seg_data_dir      trisc
#define seg1_en           portd.f0
#define seg1_en_dir       trisd.f0
#define seg2_en           portd.f1
#define seg2_en_dir       trisd.f1
#define seg3_en           portd.f2
#define seg3_en_dir       trisd.f2
#define seg4_en           portd.f3
#define seg4_en_dir       trisd.f3
#define inc_sw_dir        trisb.f1
#define dec_sw_dir        trisb.f2
#define inc_sw            portb.f1
#define dec_sw            portb.f2
#define set_sw            portb.f3
#define set_sw_dir        trisb.f3
#define select_sw         portb.f4
#define select_sw_dir     trisb.f4
#define Ldr_sw_dir        trisb.f0
#define Ldr_sw            portb.f0
///////////////////////////////////////
#define motor             porta.f0
#define motor_dir         trisa.f0
///////////////////////////////////////
#define output            0
#define input             1
#define on                1
#define off               0
#define is                ==
#define pressed           0
//////////////////////////////////////
const char segment[]={63,6,91,79,102,109,125,7,127,111};
int min1;
int sec;
char i;
char select=0;
char gg;
char old_value=0;
//////////////////////////////////////
void init()  {
adcon1=7;
INTCON=144;
OPTION_REG=128;
portd=1;
trisd=0;
Ldr_sw=on;
Ldr_sw_dir=input;
motor=off;
motor_dir=output;
seg_data=off;
seg1_en=seg2_en=seg3_en=seg4_en=on;
seg_data_dir=output;
seg1_en_dir=output;
seg2_en_dir=output;
seg3_en_dir=output;
seg4_en_dir=output;
select_sw_dir=set_sw_dir=inc_sw_dir=dec_sw_dir=input;
select_sw=set_sw=inc_sw=dec_sw=on;
/////////////////////
if(eeprom_read(0)!=0xff){ old_value=eeprom_read(0); }
////////////////////
                                                      }
///////////////////////////////////////
void show_number() {
seg1_en=0;
seg2_en=1;
seg3_en=1;
seg4_en=1;
seg_data=segment[min1/10];
delay_ms(2);
seg_data=0;

seg1_en=1;
seg2_en=0;
seg3_en=1;
seg4_en=1;
seg_data=segment[min1%10];
delay_ms(2);
seg_data=0;

seg1_en=1;
seg2_en=1;
seg3_en=0;
seg4_en=1;
seg_data=segment[sec/10];
delay_ms(2);
seg_data=0;

seg1_en=1;
seg2_en=1;
seg3_en=1;
seg4_en=0;
seg_data=segment[sec%10];
delay_ms(2);
seg_data=0;
               }
/////////////////////////////
void setting_menu(){

               while(1){
                        show_number();
if(select_sw is pressed)
               {for(gg=0;gg<=30;gg++)show_number;//..............delay_ms(250);
                select++;
               if(select==2)select=0;}
if(inc_sw is pressed) {for(gg=0;gg<=100;gg++)show_number;//......delay(250);
               if(select is 0){sec++; if(sec is 60)sec=0;}
               if(select is 1){min1++;if(min1 is 60)min1=0;} }

if(dec_sw is pressed) {for(gg=0;gg<=30;gg++)show_number;//.......delay_ms(250);
               if(select is 0){sec--; if(sec is -1)sec=59;}
               if(select is 1){min1--;if(min1 is -1)min1=59;}
                             }
if(set_sw is pressed){
                      return; }
               }}
 ///////////////////////////
void show_number_1_sec(){ for(i=0;i<=50;i++) {show_number();if(set_sw is pressed)setting_menu();} }
////////////////////////////

char flag = 0;
void interrupt()  {
if(INTCON.INTF == 1 )
  {
    flag = 1;              // set flag
    INTCON.INTF = 0;       // Clear Interrupt Flag
  }
}
///////////////////////////
void main() {
init();

while(1)
{    if (flag == 1)
    { motor=on;
      for(min1=59;min1>=0;min1--){for(sec=old_value;sec>=0;sec--)show_number_1_sec();}

       flag = 0;
       motor=off;    // reset flag, ready for new interrupt...
     }


if(set_sw is pressed){ setting_menu();}
} }

ملف المحاكاة مع ملف الهيكس :
"]http://www.up-00.com/?sRIB[/URL]


التعديل الأخير تم بواسطة : ABOUYAGINE بتاريخ 22-07-2015 الساعة 11:30 PM
إضافة رد

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

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

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


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

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