كيف اقوم باستخدام SEROUT او SEROUT2 في ارسال بيانات متسلسله؟ وما الفرق بينهما؟
اريد ارسال 3 بتات ثم 3 بتات ولكن بمعدل عالي 10 ميجاهرتز مثلا
هل ساستخدم DEFINE؟
كيف؟؟؟؟ :wacko:
كيف اقوم باستخدام 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.
و ما هو ال 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.
أولا لم تحدد في السؤال نوع موديل الميكروكنترولر (رقمه)
ثانيا يمكنك تحرير المشاركه الاولى وتعديل السؤال بدل من اضافة رد جديد
ثالثا لو نظرت في الداتا شيت الخاص بالمتحكم حتعرف المعلومات التي تحتاجها , وطبعا للتنفيذ من خلال PICBASIC تحتاج للـ docs الخاصه به
بعد مراجعة الداتا شيت و مصادر المعلومات حول الـ PICBASIC لأنهما الأغنى بالمعلومات الصحيحه يمكنك طرح استفساراتك على النقاط الغير واضحه
للعلم لو الموضوع يتوقف على PICBASIC , لأسف لن أستطيع مساعدتك ربما أحد الإخوه يستطيع - لأني لم اتعامل معه من قبل ولم افكر
اولا :أعفيك عن الأجابه يا 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.
فيما تريد استخدام ال 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
شكرا يا فارس .......
اما عن ما اريد استخدام ال 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.
انا افهمت منك انك موصل 3 مجسات (sensors) وليكن مقاومة ضوئية وكل مجس علي pin وانت تريد
انه المايكرو عندما تتحول حالته من 0 الي 1 يعني ان البورت تغيرت حالته نتيجة لحالة المجس صحيح ؟؟؟ وبالتالي تغير اتجاه
المتحكم لتنفيذ أمر اوامر معينة لوظيفة معينة صحيح ؟؟؟
طيب في هذه الحالة استخدم ال interrupt ومثل ما انت عارف عندك 4 بورتات ممكن يعملوا لك external interrup
وبكون عندك 3 روتينات interrupt
شو رايك بالفكرة؟؟؟؟
بلا انترابت استخدم subprogram لكل حالة
لعلمك امر ال serout لا ينفع في مطلبك لانه من الكلمة هي serial out يعني ترسل
مجموعة من 8 بيتات من المايكرو تسلسليا الي دائرة متعارفة علي هذا البروتوكول كما في ال serial LCD
يا فارس , واضح من مضمون كلام NUCLEAR (اللهم احفظنا :lol: ) انه حيستخدم المنفذ التسلسلي للاتصال بين 2 ميكروكنترولر , عين العقل , لكن قبل ما تنتقل الى هذه النقطه يا نووي , وضح ظروف المشكله يمكن يكون في حل لاستخدام متحكم واحد فقط بدل اثنين , يعني دورها في مخك شويه يمكن تكون مبالغ في استخدام متحكم آخر
ده طبعا ما يمنعش انك تعرف كيفية الاتصال بالمنفذ التسلسلي , لأنك أكيد بتحتاجها سواء هذه المره أو بعدين
وطالما أنك يا دوب في مرحلة التصميم يبقى ممكن تلاقي حل أبسط بدل استخدام اكثر من متحكم
صح يا فارس بس انت ناسي حاجه انا قولت ان الكنتروللر ال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.
علي فرض ما تريد وهو توصيل 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
شكرا يا فارس واريد ان اخبرك ان الجهاز الثانى هو كنترولر وانا قلت قبل كده كتيير
ما هواكبر بود؟
و ياريت لنك لشرح 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.
اكبر بود علي ما اعتقد وهو موجود بالمانويل 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
هذا الموضوع مغلق.