الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الارسال المتسلسل بPICBASIC

مغلق
بدأه NUCLEAR في 24 أكتوبر 2005 · 11 رد · 1,761 مشاهدة · في الميكروكنترولر (المتحكم) و الدوائر الرقمية و المنطقية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف اقوم باستخدام SEROUT او SEROUT2 في ارسال بيانات متسلسله؟ وما الفرق بينهما؟

اريد ارسال 3 بتات ثم 3 بتات ولكن بمعدل عالي 10 ميجاهرتز مثلا

هل ساستخدم DEFINE؟

كيف؟؟؟؟ :wacko:

تم تعديل هذه المشاركة بواسطة NUCLEAR في 24 أكتوبر 2005 في 15:13

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#2

و ما هو ال Mode؟

:blink:

شكرا على تعاونكم

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#3

أولا لم تحدد في السؤال نوع موديل الميكروكنترولر (رقمه)

ثانيا يمكنك تحرير المشاركه الاولى وتعديل السؤال بدل من اضافة رد جديد

ثالثا لو نظرت في الداتا شيت الخاص بالمتحكم حتعرف المعلومات التي تحتاجها , وطبعا للتنفيذ من خلال PICBASIC تحتاج للـ docs الخاصه به

بعد مراجعة الداتا شيت و مصادر المعلومات حول الـ PICBASIC لأنهما الأغنى بالمعلومات الصحيحه يمكنك طرح استفساراتك على النقاط الغير واضحه

للعلم لو الموضوع يتوقف على PICBASIC , لأسف لن أستطيع مساعدتك ربما أحد الإخوه يستطيع - لأني لم اتعامل معه من قبل ولم افكر

#4

اولا :أعفيك عن الأجابه يا asm4all

من الواضح من اسمك انك لن تحتاج الPICBASIC ابدا ولكن انا استخدمه لأنني مبتدئ

ثانيا:

لدي ال [docs] الخاصه ب PICBASIC ,ولكن لم استطع فهم المود

اقتباس

SEROUT2 PRO& STD

SEROUT2 DataPin{\FlowPin},Mode,{Pace,} {Timeout,Label,}[item...]

Send one or more Items to DataPin in standard asynchronous format. SEROUT2 is similar to the BS2 Serout command. DataPin is automatically made an output. The optional FlowPin is automatically made an input. DataPin and FlowPin may be a constant, 0 - 15, or a variable that contains a number 0 - 15 (e.g. B0) or a pin name (e.g. PORTA.0). The optional flow control pin, FlowPin, may be included to help keep data from overrunning the receiver. If it is used, the serial data will not be sent until FlowPin is in the proper state. This state is determined by the polarity of the data specified by Mode. An optional Timeout and Label may be included to allow the program to continue if the FlowPin does not change to the enabled state within a certain amount of time. Timeout is specified in units of 1 millisecond.

In some cases, the transmission rates of SEROUT2 instructions may present characters too quickly to the receiving device. It may not be desirable to use an extra pin for flow control. An optional Pace can be used to add character pacing to the serial output transmissions. This allows additional time between the characters as they are transmitted. The character pacing allows a delay of 1 to 65,535 milliseconds between each character transmitted. Mode is used to specify the baud rate and operating parameters of the serial transfer. The low order 13 bits select the baud rate. Bit 13 selects parity or no parity. Bit 14 selects inverted or true level. Bit 15 selects whether it is driven or open. The baud rate bits specify the bit time in microseconds - 20. To find the value for a given baud rate, use the equation:

(1000000 / baud) - 20

Some standard baud rates are listed in the following table.

Baud Rate

Bits 0 - 12

300

3313

600

1646

1200

813

2400

396

4800

188

9600

84

19200

32

Bit 13 selects even parity (bit 13 = 1) or no parity (bit 13 = 0). Normally, the serial transmissions are 8N1 (8 data bits, no parity and 1 stop bit). If parity is selected, the data is sent as 7E1 (7 data bits, even parity and 1 stop bit). Bit 14 selects the level of the data and flow control pins. If bit 14 = 0, the data is sent in true form for use with RS-232 drivers. If bit14 = 1, the data is sent inverted. This mode can be used to avoid installing RS-232 drivers. Bit 15 selects whether the data pin is always driven (bit 15 = 0), or is open in one of the states (bit 15 = 1). The open mode can be used to chain several devices together on the same serial bus. Some examples of Mode are: Mode = 84 (9600 baud, no parity, true, always driven), Mode = 16780 (2400 baud, no parity, inverted, driven), Mode = 60657 (300 baud, even parity, inverted, open).

A DEFINE allows the use of data bits other than 8 (or 7 with parity). SER2_BITS data bits may range from 4 bits to 8 (the default if no DEFINE is specified). Enabling parity uses one of the number of bits specified. Defining SER2_BITS to 9 allows 8 bits to be read and written along with a 9th parity bit. With parity disabled (the default):

DEFINE SER2_BITS 4 ' Set Serin2 and Serout2 data bits to 4

DEFINE SER2_BITS 5 ' Set Serin2 and Serout2 data bits to 5

DEFINE SER2_BITS 6 ' Set Serin2 and Serout2 data bits to 6

DEFINE SER2_BITS 7 ' Set Serin2 and Serout2 data bits to 7

DEFINE SER2_BITS 8 ' Set Serin2 and Serout2 data bits to 8 (default)

With parity enabled:

DEFINE SER2_BITS 5 ' Set Serin2 and Serout2 data bits to 4

DEFINE SER2_BITS 6 ' Set Serin2 and Serout2 data bits to 5

DEFINE SER2_BITS 7 ' Set Serin2 and Serout2 data bits to 6

DEFINE SER2_BITS 8 ' Set Serin2 and Serout2 data bits to 7 (default)

DEFINE SER2_BITS 9 ' Set Serin2 and Serout2 data bits to 8

SEROUT2 supports many different data modifiers which may be mixed and matched freely within a single SEROUT2 statement to provide various output formatting.

Modifier

Operation

{I}{S}BIN{1..16}

Send binary digits

{I}{S}DEC{1..5}

Send decimal digits

{I}{S}HEX{1..4}

Send hexadecimal digits

REP c\n

Send character c repeated n times

STR ArrayVar{\n}

Send string of n characters

1)      A string constant is output as a literal string of characters.

2)  A numeric value (either a variable or a constant) will send the corresponding ASCII character. Most notably, 13 is carriage return and 10 is line feed.

3)  A numeric value preceded by BIN will send the ASCII representation of its binary value. For example, if B0 = 8, then BIN B0 (or BIN 8) will send "1000". 

4)  A numeric value preceded by DEC will send the ASCII representation of its decimal value. For example, if B0 = 123, then DEC B0 (or DEC 123) will send "123". 

5)  A numeric value preceded by HEX will send the ASCII representation of its hexadecimal value. For example, if B0 = 254, then HEX B0 (or HEX 254) will send "FE".

6)  REP followed by a character and count will repeat the character, count time. For example, REP A0"\4 will send "0000". 

7)  STR followed by a byte array variable and optional count will send a string of characters. The string length is determined by the count or when a 0 character is encountered in the string. 

BIN, DEC and HEX may be preceded or followed by several optional parameters. If any of them are preceded by an I (for indicated), the output will be preceded by either a "%", "#" or "$" to indicate the following value is binary, decimal or hexadecimal. If any are preceded by an S (for signed), the output will be sent preceded by a "-" if the high order bit of the data is set. This allows the transmission of negative numbers. Keep in mind that all of the math and comparisons in PBP are unsigned. However, unsigned math can yield signed results. For example, take the case of B0 = 9 - 10. The result of DEC B0 would be "255". Sending SDEC B0 would give "-1" since the high order bit is sent. So with a little trickery, the unsigned math of PBP can yield signed results.

BIN, DEC and HEX may also be followed by a number. Normally, these modifiers display exactly as many digits as are necessary, zero blanked (leading zeros are not sent). However, if a number follows the modifier, SEROUT2 will always send that number of digits, adding leading zeros as necessary. It will also trim of any extra high order digits. For example, BIN6 8 would send "001000" and BIN2 8 would send "00". Any or all of the modifier combinations may be used at once. For example, ISDEC4 B0. SEROUT2 assumes a 4MHz oscillator when generating its bit timing. To maintain the proper baud rate timing with other oscillator values, be sure to DEFINE the OSC setting to the new oscillator value. While single-chip RS-232 level converters are common and inexpensive, thanks to current RS-232 implementation and the excellent I/O specifications of the PICmicro, most applications don't require level converters. Rather, inverted TTL (Mode bit 14 = 1) can be used. A current limiting resistor is suggested (RS-232 is suppose to be short-tolerant).

Example

' Send the ASCII value of B0 followed by a linefeed out Pin0 serially at 2400 baud

SEROUT2 0,16780,[dec B0,10]

' Send “B0 =” followed by the binary value of B0 out PORTA pin 1 serially at 9600 baud

SEROUT2 PORTA.1,84,["B0=", ihex4 B0]

See Also

SERIN2

SERIN

SEROUT

HSERIN

HSEROUT

Copyright © 1999 microEngineering Labs, Inc.

All rights reserved.

اردت ان اعلمك بانى احاول وابحث في الموضوع قبل السؤال وعندما اصل الى حل فسوف اضعه في المنتدى لأفادة الجميع

و بالطبع المتحكم هو PIC و من عائلة F16xx

و جزيل الشكر لك

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#5

فيما تريد استخدام ال serout ؟؟؟ اذا كنت تريد ارسال بيانات الي لوحة اظهار من النوع serial فان المهمة هنا

ارسال بيتات بمعدل يسمى ال baude وهو يعتمد علي نوع لوحة الاظهار في استقبال البيانات وهنا تحدد ذلك من ال mode

وهناك انواع من ال Mode منها driven true وال driven inverted وهما تعتمدان علي ما ستستقبله

لوحة الاظهر من منفذ المايكرو يعني

driven true يعني مثلا نريد ان نرسل 10001100 فسوف تظهر بشكلها السابق

driven inverted ترسل ال 8 بيت السابقة معكوسة يعني 01110011 وهي عكس السابقة

open true اعتقد ان البورت تكون في حالة بدون جهد وترسل البيانات كما في الحالة الاولى

open inverted نفس ما سبق ولكن البيتات معكوسة

استنتجت ذلك بالتجربة وليس من مصدر وقع بين يدي

جرب الاتي

serout 1,2,[25,13] driven true

serout 2,6,[25,13] driven inverted

serout 3,10,[25,13] open true

serout 4,14,[25,13] open inverted

وكما تعلم ال baud rate لرقم 2 هو 9600 وهذا علي حسب نوع لوحة الاظهار القابلة لاستقبال تلك البيتات وانت ابحث في الانترنت

علي لوحة اظهار معينة من النوع التسلسلي ولاحظ المواصفات

المهم من او سطر في الاوامر السابقة اجعله متصلا بلوحة الاظهار والمخرج الثاني من المايكرو يالي هو رقم 2 اجعله يتصل ب inverte gate ونها الي لوحة الاظهار

اما الثالثة وصل pullup resistor بقيمة 10 كيلو اوم

لا تسالني علي الرابعة انت بدورك استنتجها :D

من الاوامر السابقة سوف تستنتج المود

بالنسبة لامر serout2 فهو مثل السابق ولكن تم اضافة خيارات الكثر للامر ولكن الخيار flow pin لم استخدمه حتي الامثلة الموجودة في بعض الكتب لم الحظ اي اهتمام له ولكن من المانويل

يقول انه في حالة الارسال بسرعة عالية يستخدم هذا الخيار حتي يحافظ علي البيانات من الضياع

بالنسبة لارسالة 3 بيتات ثم 3 بيتات بمعدل معين فاحسن امر هو shiftout لكن اغلب تجاري علي برنامج proteus هو بالفعل انقاذ لي واعتمد عليه

انا لست خبيرا بعد ولكن اتعلم مثلك بدون معلم وانتظر رد من من اعلم مني

تم تعديل هذه المشاركة بواسطة فارس2005 في 24 أكتوبر 2005 في 20:20

#6

شكرا يا فارس .......

اما عن ما اريد استخدام ال SEROUT فيه فانا تقريبا تقريبا تقريبا يعني اريد توصيل ثلاثة سنسورز على ثلاثة بينات كنظام امنى[مثلا] بحيث اذا اصبح بين 1 عالى فان الكنتروللر يرسل 101 لكنتروللر اخر يقوم بAction معين طبقا للمصدر .....

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

لو عندك فكره تانيه احسن من SEROUT قوللي :o :unsure:

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#7

انا افهمت منك انك موصل 3 مجسات (sensors) وليكن مقاومة ضوئية وكل مجس علي pin وانت تريد

انه المايكرو عندما تتحول حالته من 0 الي 1 يعني ان البورت تغيرت حالته نتيجة لحالة المجس صحيح ؟؟؟ وبالتالي تغير اتجاه

المتحكم لتنفيذ أمر اوامر معينة لوظيفة معينة صحيح ؟؟؟

طيب في هذه الحالة استخدم ال interrupt ومثل ما انت عارف عندك 4 بورتات ممكن يعملوا لك external interrup

وبكون عندك 3 روتينات interrupt

شو رايك بالفكرة؟؟؟؟

بلا انترابت استخدم subprogram لكل حالة

لعلمك امر ال serout لا ينفع في مطلبك لانه من الكلمة هي serial out يعني ترسل

مجموعة من 8 بيتات من المايكرو تسلسليا الي دائرة متعارفة علي هذا البروتوكول كما في ال serial LCD

#8

يا فارس , واضح من مضمون كلام NUCLEAR (اللهم احفظنا :lol: ) انه حيستخدم المنفذ التسلسلي للاتصال بين 2 ميكروكنترولر , عين العقل , لكن قبل ما تنتقل الى هذه النقطه يا نووي , وضح ظروف المشكله يمكن يكون في حل لاستخدام متحكم واحد فقط بدل اثنين , يعني دورها في مخك شويه يمكن تكون مبالغ في استخدام متحكم آخر

ده طبعا ما يمنعش انك تعرف كيفية الاتصال بالمنفذ التسلسلي , لأنك أكيد بتحتاجها سواء هذه المره أو بعدين

وطالما أنك يا دوب في مرحلة التصميم يبقى ممكن تلاقي حل أبسط بدل استخدام اكثر من متحكم

#9

صح يا فارس بس انت ناسي حاجه انا قولت ان الكنتروللر الREMOTE هو اللي هينفذ الأكشن فلازم يروحله كود يقول له اعمل كذا

انا حاولت اشوف حل تانى غير 2 كنتروللر مالقيتش لان الموضوع طويييل و انا مبسطه لكم.

وياريت يا فارس تقوللي الMode ده اختاره ازاى و الBaud Rate

ولو في طريقه ثانيه لارسال البتات ياريت تقوللي عليها

اقتباس
ده طبعا ما يمنعش انك تعرف كيفية الاتصال بالمنفذ التسلسلي , لأنك أكيد بتحتاجها سواء هذه المره أو بعدين

اولا: انا محتاج اى طريقه ابعت بيها كود الأكشن (البين) 3 بتات بقى 190 بت المهم السرعه والمشكله ان ممكن اتنين بيت يعملو اكشن في نفس الوقت او بينهم فتره صغيره فلو الكنتروللر مالحقش يبعت الكود الأول هتبقى باظت العمليه ومافيش فايده من الكنتروللر اصلا

ثانيا : ياريت حد يفهمنى الأنترربت لأني حاسس انه مفيد بس مش عارف ازاى استخدمه بالذات انا مبتدئ كما هو واضح....

ماحدش يديني رابط الموضوع اياه لأني شفته بس عينك ماتشوف الا النور ناس معديه بيتكلموا وانا بطططيخ :wacko:

سؤال لو انا استخدمت الأنترربت ايه اللي هيحصل لو 2 بين عملو أنترربت في نفس الوقت او بينهم فتره صغيره؟

تم تعديل هذه المشاركة بواسطة NUCLEAR في 26 أكتوبر 2005 في 15:48

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#10

علي فرض ما تريد وهو توصيل 2 pic الاول يستقبل ما يحسه ثم يرسل كود لل pic الثاني الذي بدوره يقوم بأكشن معين

انت تريد ارسال 3 بيتات لل pic الثاني ككود وليكن كما قلت 101 خلاص استخدم واحد من الامرين اما serout

او shiftout

طيب انت بتقول علي فرض التصميم لنظام امني طيب لو انت مثلا تريد تصميم جهاز انذار يعني نضع مجس يستشعر حدوث حريق

وعندما المايكرو ينتبه في احد البورتات الموصلة للمجس فاننا نوصل باحد البورتات الاخري جهاز انذار يستقبل التغير في احد البورتات

اما اذا كان التصميم لغرض آخر ويلزم مايكروين فهذا موضوع تاني لكن في نقطة بالانسبة لامر serout2 يوجد به اوبشن

اضافية وهي ممكن تضع زمن بين كل بيت واخري

ال mode انت تختاره علي حسب الطرف الاخر الذي يتعرف علي سرعة هذا البروتوكول مثل لوحة الاظهار التسلسلية موجود فيها كونترولير يستقبل في حالة الاستقبال 8 بيت بسرعة مثلا 9600 بود ويرسل بنفس الكيفية ذلك المعدل وتختاره بالاطلاع علي ال datasheet للقطعة اللتي توصل

بالمايكرو حتي تعرف الموضوع بوضوح اطلع علي توصيل لوحة اظهار تسلسلية بأمثلة وغير في المود

مثال

serout portb.2,2,["Faris",10] تم توصيل المايكرو الي بورت 2 والمود driven true بسرعة 9600

وطالما انت تريد ارسالها بشكل متسلسل خلص الامر الاول يكون serout والثاني للاستقبال من المايكرو الاول هو serin وسيكون الارسال 8 بيت

بالنسبة للانترابت هو بسيط جدا وانا كنت مستفسر عنه في المنتدي وراجع مشاركتي والرد عليها من asm4all

اقتباس
سؤال لو انا استخدمت الأنترربت ايه اللي هيحصل لو 2 بين عملو أنترربت في نفس الوقت او بينهم فتره صغيره؟

لا يحدث انترابتين في وقت واحد لابد من احدهما ينتهي ثم يبدا الاخر ولو فرض ان بورتين خصصا لانترابت في وقت واحد فانه يدرس ما يسمي الاولية فيهم ايهم بدا في الطلب في هذا الرابط رسم توضيحي جميل لمفهوم الانترابت

http://www.mikroelektronika.co.yu/english/...2_07chapter.htm

وباختصار الك الانترابت هو برنامج فرعي مثل اي برنامج يبقي بلا حراك او بلا عمل باقي برنامج المايكرو يتجاهل الدخول في تنفيذه عندما يمر عليه وعندما يطلب من هذا البرنامج الفرعي نتيجة ايعاز من مصدر خارجي من بورتات يتم الاعلان عنها في بداية البرنامج بانها مخصص لذلك فان هذا البرنامج الفرعي يعمل مباشرتا وينفذ خطوات معينة وباقي البرنامج الرئيسي للمايكور يتوقف عن التنفيذ احترام وتقديرا لهذا

البرنامج الفرعي يستمع لمطلبه

تم تعديل هذه المشاركة بواسطة فارس2005 في 26 أكتوبر 2005 في 21:46

#11

شكرا يا فارس واريد ان اخبرك ان الجهاز الثانى هو كنترولر وانا قلت قبل كده كتيير

ما هواكبر بود؟

و ياريت لنك لشرح SEROUT2

و مثال كودى للأنتررابت بالPICBASIC

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#12

اكبر بود علي ما اعتقد وهو موجود بالمانويل 9600

المانويل التابع للكمبايلر سوجد به شرح عن الكود

هذه اكواد بسيطة يتم تفعيل البورت RB0/INT للعمل كانترابت خارجي حيث يعطي ايعاز للمايكرو بان يتوقف لحظة عن اشعال واطفاء ال led في البورت 5 ثم يتجه لاشعال ال led في البورت 6 لمدة 100 ملي ثانية ويطفئ ثم يعود المايرو لاستاناف عمله

هناك رجيستران مهمان لابد من الاطلاع عليهما في الرابط السابق لتحديد نوع الانترابت ومن اي بورت سوف يعطي ايعاز للمايكرو اذا كان الانترابت خارجي اما اذا كان داخلي فهناك اوبشن يتم التحكم فيها عن طريق ا لريجيستر باستخدام الامر

OPTION_REG

اما الامر INTCON فهو لتفعيل الانترابت عن طريق البيت رقم 7 ثم نوع المقاطعة من البيت رقم 4

انت اطلع علي الانترابت من الموقع يالي وضعته لك ثم ركز في المثال التالي

       
   
 trisb = %00000001
 INTCON = %10010000    
           

 On Interrupt Goto myint 
                    

loop:  
      
      high portb.5
      toggle portb.5
          
Goto loop               

Disable
                
myint:  
          
        high portb.6
        pause 500
        low portb.6
INTCON = %10010000 
         
        Resume                  
        Enable

تم تعديل هذه المشاركة بواسطة فارس2005 في 27 أكتوبر 2005 في 17:12

هذا الموضوع مغلق.

مواضيع مشابهة