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

   

د حسين
:: عضو فضى ::
تاريخ التسجيل: Feb 2012
الدولة: لبنان حاليا
المشاركات: 223
نشاط [ د حسين ]
قوة السمعة:
قديم 23-06-2017, 06:32 PM المشاركة 9   
افتراضي كلنا معك



هيا ايها الناس نريد اكبر عدد من متابعي الموضوع كي نكمل
تفضل يا عبودي :: كلنا آذان صاغية وعيون مفتوحة وعقول متابعة .... تحية طيبة وكامل احترامنا

اعلانات

الصورة الرمزية abdoo_sy
abdoo_sy
:: مهندس ::
تاريخ التسجيل: Jul 2016
الدولة: سوريا
المشاركات: 31
نشاط [ abdoo_sy ]
قوة السمعة:
قديم 24-06-2017, 03:09 AM المشاركة 10   
Red face


السلام عليكم
تستطيع نشر ووضع ملفاتك من خلال فتح حساب mediafire
ثم تحميل الملفات الموجودة عل جهازك
تم وضع الروابط بعد الإنتهاء من التحميل
شكراً لك اخي ما ان احمل الملفات حتى اشاركها معكم

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

الصورة الرمزية abdoo_sy
abdoo_sy
:: مهندس ::
تاريخ التسجيل: Jul 2016
الدولة: سوريا
المشاركات: 31
نشاط [ abdoo_sy ]
قوة السمعة:
قديم 24-06-2017, 03:22 AM المشاركة 11   
attension مقدمة ....


اولاً بعض المعلومات الهامة كي نكمل:
.< الرجاء عذري عن اي خطاً املائي او قواعدي>.
. 1 انا اسمي عبد اللطيف الميهوب عمري 14 سنة مبرمج ممتاز بالنسبة لعمري اسكن في محافظة حمص في سوريا واعاني من انقطاع مستمر قد يمتد طويلاً للنت و الكهرباء.
.الرجاء عدم النظر لي على عمري فانا مبرمج ممتاز كما قلت.
.هذا المشروع صممته بنفسي بغية الربح منه.
ملاحظات هامة جداً :
.المشروع لم يطبق بعد على الحقيقة ولكنه ليس معقد جداً.
.المكونات متوفرة في اي مكان.
.ستحتاج على ان تكون بدراية بلغة مايكرو سي و ان تكون عالماً ببرتوكول i2c .
.هذه الماتركس لا تشبه اي ماتركس وضعت هنا يوما بحسب علمي ففكرتها مختلفة قليلاً.
.................................................. .................................................. .............
في المنشور القادم سوف انشر كيف سيظهر البرنامج بالنسبة للمستخدم او المشتري وكيف بامكانه الكتابة على الماتركس وحفظ ما كتبه حتى بدون كهرباء او اي خبرة برمجية. يكفي ان يعلم كيف يستخدم الحاسوب.


التعديل الأخير تم بواسطة : abdoo_sy بتاريخ 24-06-2017 الساعة 04:06 AM

الصورة الرمزية abdoo_sy
abdoo_sy
:: مهندس ::
تاريخ التسجيل: Jul 2016
الدولة: سوريا
المشاركات: 31
نشاط [ abdoo_sy ]
قوة السمعة:
قديم 24-06-2017, 03:40 AM المشاركة 12   
sun الملفات


https://www.mediafire.com/folder/365.../led.matrix.v2


روابط الملفات


الصورة الرمزية abdoo_sy
abdoo_sy
:: مهندس ::
تاريخ التسجيل: Jul 2016
الدولة: سوريا
المشاركات: 31
نشاط [ abdoo_sy ]
قوة السمعة:
قديم 24-06-2017, 07:21 PM المشاركة 13   
Arrow المبدأ


السلام عليكم
مبدأ الماتركس:
المستخدم يرسل الحروف على شكل اسكي كود
. عبر السيريال ليستقبلها المتحكم ويخزنها في الايبروم الداخلية الخاصة به.
.بعدما ينتهي المستخدم من كتابة الحروف يبداً المتحكم بقراءة الحروف من الايبرومة الداخلية الخاصة به من البداية ثم يقوم بتحويل ما قرءه الى مصفوفة بايتات والتي هي المصفوفة التي سوف تعرض الى الماتركس.

قم بأضافة رد عن اي نقطة غير مفهومة


الصورة الرمزية abdoo_sy
abdoo_sy
:: مهندس ::
تاريخ التسجيل: Jul 2016
الدولة: سوريا
المشاركات: 31
نشاط [ abdoo_sy ]
قوة السمعة:
قديم 26-06-2017, 12:29 AM المشاركة 14   
x4


فلنبدأ بالشرح :

الكود:
كود:
// leeters address in the eeprom

// 74c595 pins
#define shiftp PORTb.F7
#define latchp PORTb.F6
#define dc PORTb.F5
//74hc595 functinon
#define latch latchp=1;latchp=0;
#define shift shiftp=1;shiftp=0;
//74hc164 functinon
#define ser porta.f6
#define clk     porta.f7=1;porta.f7=0;
//some leds
#define led1 porta.f0
#define led2 porta.f1
//delay<s> :::
#define del  delay_us(1);
//------------------------------------------------------------------------------
sbit Soft_I2C_Scl           at Ra2_bit;
sbit Soft_I2C_Sda           at Ra3_bit;
sbit Soft_I2C_Scl_Direction at TRISa2_bit;
sbit Soft_I2C_Sda_Direction at TRISa3_bit;

//------------------------------------------------------------------------------
unsigned char symbol,symbol2,symbol_1=32;
unsigned char ch[64],txt[5];
unsigned char addres,i2c_addres;
unsigned char eow;                     //end of the wtiteing
unsigned char speed;                  //scrolling speed
unsigned char bs;                    //buffer size

unsigned char arabic_e_letters=0;
//scrollingmode = 0 = from the left to the right (for the english words)
//scrollingmode = 1 = from the right to the left  (for the arabic words)



//------------------------------------------------------------------------------
 //senfing data to the 47hc595
void send(unsigned char _shiftdata){
unsigned char i=8;

while (i>0){
if (_shiftdata.F7==0)  {dc = 1;}
else                   {dc = 0;}
_shiftdata = _shiftdata<<1;
shift;
i--;        }  //while
}//send595
//------------------------------------------------------------------------------
void column_num(char cn ){
ser=0;

for(eow=0;eow<64;eow++){clk;}

ser=1;clk;ser=0;
while(cn>0)    {clk;
cn--;}
}

//------------------------------------------------------------------------------
void get_ch(){char llk=0xa0,temp,lc,fl=0;
unsigned char med;
if(symbol>'*'&&arabic_e_letters==0){
 med=symbol;med=med-65;if(symbol>=91){fl=1;med=med+64;}; i2c_addres=med*8;llk=0xa2 ;}// if page 1
 
if(symbol<='*'&&arabic_e_letters==0){med=symbol;med=med-32; i2c_addres=med*8;llk=0xa0 ;}// if page 0



if(arabic_e_letters==1){
if(symbol_1=='v'||symbol_1==']'||symbol_1=='`'||symbol_1=='.'||symbol_1==','||symbol_1=='_'||symbol_1=='*'||symbol_1=='^'){symbol_1=32;}
 if(symbol2=='_'||symbol2=='*'||symbol2=='^'){symbol2=32;};
switch (symbol) {
   case 32:if(addres>4){arabic_e_letters=0;}break;
   case '_':i2c_addres=0;llk=0xa0;break;
//-----------------------
case 'h':i2c_addres=16;llk=0xa4;break;   //alef

case 'f':if(symbol2==32){i2c_addres=32;llk=0xa4;}
else{i2c_addres=24;llk=0xa4;}break;


case 'j': i2c_addres=40;llk=0xa4;if(symbol2==32){i2c_addres=48;llk=0xa4;} break;;


case 'e':i2c_addres=56;llk=0xa4;if(symbol2==32){addres=64;llk=0xa4;}break;;


case '[':i2c_addres=72;llk=0xa4;if(symbol2==32){i2c_addres=80;llk=0xa4;} break;;

                         
case 'p':i2c_addres=88;llk=0xa4;if(symbol2==32){i2c_addres=96;llk=0xa4;} break;;


case 'o':i2c_addres=104;llk=0xa4;if(symbol2==32){i2c_addres=112;llk=0xa4;}break;;


case ']':i2c_addres=120;llk=0xa4;break;;

case '`':i2c_addres=128;llk=0xa4;break;

case 'v':i2c_addres=136;llk=0xa4;break;;

case '.':i2c_addres=144;llk=0xa4;break;;

case 's':
i2c_addres=152;llk=0xa4;
if(symbol2==32){i2c_addres=160;llk=0xa4;} break;


case 'a':i2c_addres=168;llk=0xa4;
if(symbol2==32){i2c_addres=176;llk=0xa4;} break;


case 'w':i2c_addres=184;llk=0xa4;
if(symbol2==32){i2c_addres=192;llk=0xa4;}break;


case 'q':i2c_addres=200;llk=0xa4;
if(symbol2==32){i2c_addres=208;llk=0xa4;}   break;


case 39: i2c_addres=216;llk=0xa4;break;;//  '

case '/':i2c_addres=224;llk=0xa4;break;;

case 'u':if(symbol_1==32){i2c_addres=232;llk=0xa4;}
else if(symbol2==32){i2c_addres=248;llk=0xa4;}
else{i2c_addres=240;llk=0xa4;}break;

case 'y':if(symbol2==32){i2c_addres=0;llk=0xa6;}
        if(symbol_1==32){i2c_addres=8;llk=0xa0;}
                    else{i2c_addres=0;llk=0xa0;}break;

case 't':i2c_addres=8;llk=0xa6;
if(symbol2==32){i2c_addres=16;llk=0xa6;}break;;


case 'r':i2c_addres=24;llk=0xa6;
if(symbol2==32){i2c_addres=32;llk=0xa6;}   break;



case ';': i2c_addres=40;llk=0xa6;
if(symbol2==32){i2c_addres=48;llk=0xa6;} break;

                         
case 'g':i2c_addres=56;llk=0xa6;
if(symbol2==32){i2c_addres=64;llk=0xa6;} break;

                         
case 'l':
i2c_addres=80;llk=0xa6;
if(symbol_1==32&&symbol2!=32){i2c_addres=152;llk=0xa6;}
if(symbol_1!=32&&symbol2!=32){i2c_addres=72 ;llk=0xa6;}
break;

                         
case 'k': i2c_addres=88;llk=0xa6;
if(symbol2==32){i2c_addres=96;llk=0xa6;} break;

                         
case 'i':
if(symbol_1==32&&symbol2==32){i2c_addres=144;llk=0xa6;}
if(symbol_1!=32&&symbol2==32){i2c_addres=112;llk=0xa6;}
if(symbol_1!=32&&symbol2!=32){i2c_addres=104;llk=0xa6;}
 break;

case 'm':
if(symbol_1==32&&symbol2==32){i2c_addres=144;llk=0xa6;}
if(symbol_1!=32&&symbol2==32){i2c_addres=112;llk=0xa6;}
if(symbol_1!=32&&symbol2!=32){i2c_addres=104;llk=0xa6;}
 break;
                         
case ',':i2c_addres=120;llk=0xa6;break;
                         
case 'd':i2c_addres=128;llk=0xa6;if(symbol2==32){i2c_addres=136;llk=0xa6;} break;


                         
}//end of case
}//end if id arabic_englis

if(symbol=='3'&&symbol2=='>'){i2c_addres=160;llk=0xa6;}
//DUME WRITE
Soft_I2C_Start();          //start signal
Soft_I2C_Write(llk);      //device addres
Soft_I2C_Write(i2c_addres);//start froma adress 0 to write

//real read
Soft_I2C_Start();//start signal
Soft_I2C_Write(llk+1);//eeprom adress  page (adress)

for(lc=0;lc<8;lc++){
ch[lc]=Soft_I2C_Read(1); }
Soft_I2C_Read(0);

Soft_I2C_Stop();

if(fl==1){
for(lc=0;lc<8;lc++){
temp=ch[lc];
ch[lc].f7=temp.f0;
ch[lc].f6=temp.f1;
ch[lc].f5=temp.f2;
ch[lc].f4=temp.f3;
ch[lc].f3=temp.f4;
ch[lc].f2=temp.f5;
ch[lc].f1=temp.f6;
ch[lc].f0=temp.f7;
} fl=0;
}
}//get_ch
//------------------------------------------------------------------------------
//main
void main(){
char x,z,fre,s;
cmcon=0x07;
trisa.f0=0;trisa.f1=0;
trisa.f4=1;trisa.f6=0;
trisa.f7=0;

trisb.f0=0;trisb.f1=1;
trisb.f2=0;trisb.f3=0;
trisb.f4=0;trisb.f5=0;
trisb.f6=0;trisb.f7=0;

//init uart
UART1_Init(9600);
delay_ms(100);
UART1_Write(0x0d);
//get hc595 ready
send(255);latch;
//get leds ready
led1=0;led2=0;

addres=0;
UART1_Write('r');
UART1_Write(0x0d);
UART1_Write_Text("the screen is ready ");
UART1_Write(0x0d);
delay_ms(100);
//get buffer size
UART1_Write_Text( "input how many units : ");
UART1_Write(0x0d);
while(UART1_Data_Ready()==0){;}UART1_Write(0x0d);
bs=UART1_Read();
bs=bs*8+16;
//get scrrolling speed
UART1_Write_Text("input speed : ");
UART1_Write(0x0d);
delay_ms(100);
while(UART1_Data_Ready()==0){;} UART1_Write(0x0d);
speed=UART1_Read();
speed=speed-47;
UART1_Write_Text("input words: ");
UART1_Write(0x0d);

//receive words & store it in the internal eeprom
if(porta.f4==0){goto len;};
for(;;){
led1=0;
while(UART1_Data_Ready()==0){;}
 led1=1;delay_ms(100);
 fre= UART1_Read();
 if(fre==0x0d){goto len;}
 EEPROM_Write(addres,fre);
 addres++;
 eow=addres;
   EEPROM_Write(127,1);
        }

len:
delay_ms(100);
led2=1;led1=0;
addres=0;
//-------------------------
loop:
//getting symbol
symbol=EEPROM_Read(addres);
delay_ms(5);
symbol2=EEPROM_Read(addres+1);
if(symbol2==0xff){symbol2=32;}
if(addres>0){symbol_1=EEPROM_Read(addres-1);}
if(symbol_1=='*'){symbol_1=32;}
if(addres>eow){symbol=32;};
if(symbol==0xff){symbol=32;};
if(arabic_e_letters==0){
if(symbol=='*'&&symbol2=='*'){symbol_1=32;symbol2=32;arabic_e_letters=1;addres++;addres++;goto loop;} ;}


UART1_Write(symbol);
//------------------------------------------------------------------------------
get_ch();
for(z=0;z<8;z++){
s=speed;
while(s>0){
for(x=0;x<64;x++){

send(ch[x]);
latch;symbol=symbol-32;
send(0);
latch;
column_num(x);

};
s--;
} //while




for(x=63;x>0;x--){ch[x]=ch[x-1];}   //move to right




} // for z
addres++;
goto loop;
;}
فلنبدأ من الدالة الرئيسية للبرنامج :
كود:
void main(){
char x,z,fre,s;
cmcon=0x07;
trisa.f0=0;trisa.f1=0;
trisa.f4=1;trisa.f6=0;
trisa.f7=0;

trisb.f0=0;trisb.f1=1;
trisb.f2=0;trisb.f3=0;
trisb.f4=0;trisb.f5=0;
trisb.f6=0;trisb.f7=0;

//init uart
UART1_Init(9600);
delay_ms(100);
UART1_Write(0x0d);
//get hc595 ready
send(255);latch;
//get leds ready
led1=0;led2=0;
كما يبدو واضحاً هنا نجد انني عرفت المداخل و المخارج و ابطلت الكومبارتور(لأني استخدم المتحكم pic16f628a) وقمت بتهيئة الusart1 الذي استخدمه بالتواصل مع الحاسوب الشخصي وهناك دالة send() التي سنشرحها بعد قليل, وستلاحظون اني كتبت led1=0 ; led2=0 ; وهذا لأني استخدمت دالة #define في بداية البرنامج وسترونها بعد قليل.
من ثم ننتقل الى :
كود:
addres=0;
UART1_Write('r');
UART1_Write(0x0d);
UART1_Write_Text("the screen is ready ");
UART1_Write(0x0d);
delay_ms(100);
//get buffer size
UART1_Write_Text( "input how many units : ");
UART1_Write(0x0d);
while(UART1_Data_Ready()==0){;}UART1_Write(0x0d);
bs=UART1_Read();
bs=bs*8+16;
//get scrrolling speed
UART1_Write_Text("input speed : ");
UART1_Write(0x0d);
delay_ms(100);
while(UART1_Data_Ready()==0){;} UART1_Write(0x0d);
speed=UART1_Read();
speed=speed-47;
وهنا ترون اني اقول للبيك ( المتحكم ) ان يرسل الى شاشة المستخدم عبر ال السريال جملة "input how many units" ومعناها ان يدخل المستخدم عدد الوحدات الموجودة في الماتركس امامه فمثلاً ان كانت الماتركس التي اشتراها مني بحجم 8*16 اي انها تتكون من وحدتين 8*8 بجانب بعضهما فسيكتب 2 وهي عدد وحدات ال8*8 الموجودة
قد يتسائل البعض لماذا اضفت هذا.
الحقيقة ان هذا ليس ضروري بس (فزلكة) ويمكن ان يفيدني في التطوير لاحقاً
فنحن كما نعلم نعرف عدد الاعمدة مسبقاًَ مثال char ch[عدد الأعمدة] ;
لهذا انا عرفت اكبر عدد ممكن من الاعمدة وعندها ان استخدمت ماتركس بحجم 8 اعمدة لن يوجد فرق عن استخدامي لماتركس 40 عامود من ناحية الكود اي يمكن في اي لحظة وصل الماتركس مع لي
دات اضافية ليتكون لدينا ماتركس اكبر بدون التعديل على الكود على ان لا يتجاوز عدد الاعمدة عدد المتغيرات المعرفة داخل الكود ( ولهذا عرفنا اكبر عدد ممكن)




ملاحظة : ان ارسلنا القيمة 0x0d باسيريال فسيتكون سطر جديد في شاشة الاستقبال ولهذا ارسل بعد كل جملة سطر جديد كي تتكوم الكتابات

----------------------------
الباقي في المنشورات القادمة ان شاء الله
///ان اعجبك المنشور فقط قم بالتفاعل ولو قليلا لأن هذا يسرني كثيراً\\\

***** عيد سعيد للجميع وكل عام وانتم بخير ****


الصورة الرمزية Sallam
Sallam
:: مهندس متميز ::
تاريخ التسجيل: Mar 2006
الدولة: Syria
المشاركات: 515
نشاط [ Sallam ]
قوة السمعة:
قديم 26-06-2017, 02:56 AM المشاركة 15   
افتراضي


مشكور على تعبك ومجهودك ومتابعين معك
بالتوفيق


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 26-06-2017, 04:41 AM المشاركة 16   
افتراضي السلام عليكم ورحمه الله ..


ممكن ترفع الملفات علي موقع أخر ...

ومشكور جدااا كل عام وانت بخير ...



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