خواهشا کمک کنید

ALUK

عضو جدید
چگونگی ساختن ساعت دیجیتال با avr(برنامه نویسی c)؟
 

سعید گروسی

عضو جدید
کاربر ممتاز
چگونگی ساختن ساعت دیجیتال با avr(برنامه نویسی c)؟
ساعت روی چی باشه؟lcdیاسون سگمنت؟

برای برنامه نویسی بایدابتدانمایشگرروفعال کنین یاال سی دی یاسون سگمنت
بعدش یک ثانیه روبسازی باتایمرکانترمیکرو
سپس الگوریتم ساعت روبنویسین بفرسین روی نمایشگربه همین راحتی.
الگوریتم ساعت :
وقتی یک ثانیه روساختی توسط وقفه ی تایمرپرش کنی به الگوریتم ساعت.
یه متغییربه نام ثانیه تعریف میکنی بعدتا59 بشماره وقتی 59 شد بعدیه واحدبه متغییردقیقه اضافه بشه اگرمتغییردقیقه 59 شدبه متغییرساعت یک واخداضافه بشه
وقتی هم متغییرثانیه ودقیقه 59 شدن صفرشون کن وازاول بشماره
متغییرساعتم نیزبایدمثلاتایه عددخاص بشماره یا12 یا24 بعدش 0 بشه.
 
  • Like
واکنش ها: ALUK

ALUK

عضو جدید
ساعت روی چی باشه؟lcdیاسون سگمنت؟

برای برنامه نویسی بایدابتدانمایشگرروفعال کنین یاال سی دی یاسون سگمنت
بعدش یک ثانیه روبسازی باتایمرکانترمیکرو
سپس الگوریتم ساعت روبنویسین بفرسین روی نمایشگربه همین راحتی.
الگوریتم ساعت :
وقتی یک ثانیه روساختی توسط وقفه ی تایمرپرش کنی به الگوریتم ساعت.
یه متغییربه نام ثانیه تعریف میکنی بعدتا59 بشماره وقتی 59 شد بعدیه واحدبه متغییردقیقه اضافه بشه اگرمتغییردقیقه 59 شدبه متغییرساعت یک واخداضافه بشه
وقتی هم متغییرثانیه ودقیقه 59 شدن صفرشون کن وازاول بشماره
متغییرساعتم نیزبایدمثلاتایه عددخاص بشماره یا12 یا24 بعدش 0 بشه.

عزیز قراره رو 7seg باشه. ممنون میشم بیشتر راهنمایی کنی
 

22adel

اخراجی موقت
برنامه نویسی بیسیک

برنامه نویسی بیسیک

*نقشه مدار فرستنده

*برنامه فرستنده
$regfile= "m8def.dat"

$crystal = 100000

$baud =9600

Dim TAs Byte , C As Byte , A As Byte , B As Byte , M As Byte

ConfigPind.5 = Input

ConfigPind.6 = Input

ConfigPind.7 = Input

ConfigPinb.7 = Input

Do

IfPind.5 = 0 Then

Rc5sendo , 1 , 7

End If

IfPind.6 = 0 Then

Rc5send0 , 1 , 4

End If

Loop

End
*نقشه مدار گیرنده

*برنامه گیرنده
$regfile= "m8def.dat"

$crystal = 100000

$baud =9600

ConfigRc5 = Pind.0

Dim AAs Byte , B As Bit , C As Byte , D As Byte , L As Bit

ConfigTimer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up ,Prescale = 8

EnableTimer1

StartTimer1

EnableInterrupts

ConfigPortc.5 = Output

Do

GetRc5(a, c)

If C =7 Then

ResetPortc.5

End If

If C =4 Then

SetPortc.5

Pwm1a =5

Pwm1b=250

End If

Loop

End
سلام بچه های باهوش برقی لطفا به من یه راهنمایی برسونید من این برنامه فرستنده و گیرنده رو دارم که کارکردش به این صورته که در فاصله 5 متری باید موتور را خاموش و روشن کند اما جواب نمیده مقدار کریستالش را زیاد کردم 8000000 این را زدم که برای بالا بردن سرعت برنامه است و حتی وقفه هم بین دو دستور آر سی 5 قرار دادم اما جواب نمیده از سالم بودن قطعاتم هم مطمئنم اگه کسی با برنامه بیسیک آشنایی دارد لطفا منو راهنمایی کنه در ضمن این برنامه را هم در نرم افزار بسکام نوشتم اما ارور ندارد
 
آخرین ویرایش:

سعید گروسی

عضو جدید
کاربر ممتاز
*نقشه مدار فرستنده

*برنامه فرستنده
$regfile= "m8def.dat"

$crystal = 100000

$baud =9600

Dim TAs Byte , C As Byte , A As Byte , B As Byte , M As Byte

ConfigPind.5 = Input

ConfigPind.6 = Input

ConfigPind.7 = Input

ConfigPinb.7 = Input

Do

IfPind.5 = 0 Then

Rc5sendo , 1 , 7

End If

IfPind.6 = 0 Then

Rc5send0 , 1 , 4

End If

Loop

End
*نقشه مدار گیرنده

*برنامه گیرنده
$regfile= "m8def.dat"

$crystal = 100000

$baud =9600

ConfigRc5 = Pind.0

Dim AAs Byte , B As Bit , C As Byte , D As Byte , L As Bit

ConfigTimer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up ,Prescale = 8

EnableTimer1

StartTimer1

EnableInterrupts

ConfigPortc.5 = Output

Do

GetRc5(a, c)

If C =7 Then

ResetPortc.5

End If

If C =4 Then

SetPortc.5

Pwm1a =5

Pwm1b=250

End If

Loop

End
سلام بچه های باهوش برقی لطفا به من یه راهنمایی برسونید من این برنامه فرستنده و گیرنده رو دارم که کارکردش به این صورته که در فاصله 5 متری باید موتور را خاموش و روشن کند اما جواب نمیده مقدار کریستالش را زیاد کردم 8000000 این را زدم که برای بالا بردن سرعت برنامه است و حتی وقفه هم بین دو دستور آر سی 5 قرار دادم اما جواب نمیده از سالم بودن قطعاتم هم مطمئنم اگه کسی با برنامه بیسیک آشنایی دارد لطفا منو راهنمایی کنه در ضمن این برنامه را هم در نرم افزار بسکام نوشتم اما ارور ندارد
ماژول فرستنده گیرندت چیه؟
معمولاماژول هانویزمیگیرندبایداطلاعات کدگذاری بشه ودرگیرنده دیکد
اینجااین کاروکردم نگاه کن بعدش خودت برنامه ات روادیت کن
http://www.www.www.iran-eng.ir/showthread.php/387649-ربات-کنترلی-بدون-سنسور
موفق باشی
 

22adel

اخراجی موقت
سلام تشکر از پاسختون- در شکل سخت افزاری که دارم ماژول مادون قرمز رو SFH506
است اما چیزی که من از مغازه تعمیرات تلویزیون خریدم رویش چیزی ننوشته بود از صاحب مغازه پرسیدم گفت درسته خودمم تو تلویزیون بکارش می برم
منظور از کد گذاری چیست؟ ( مگه دستور آرسی 5 خودش بصورت کد نمینویسد؟ ببخشی در ضمن سایتی که فرمودید برا ما باز نمیشه چه طوری بهش دسترسی پیدا کنیم )
 

سعید گروسی

عضو جدید
کاربر ممتاز
سلام تشکر از پاسختون- در شکل سخت افزاری که دارم ماژول مادون قرمز رو SFH506
است اما چیزی که من از مغازه تعمیرات تلویزیون خریدم رویش چیزی ننوشته بود از صاحب مغازه پرسیدم گفت درسته خودمم تو تلویزیون بکارش می برم
منظور از کد گذاری چیست؟ ( مگه دستور آرسی 5 خودش بصورت کد نمینویسد؟ ببخشی در ضمن سایتی که فرمودید برا ما باز نمیشه چه طوری بهش دسترسی پیدا کنیم )
خب من توضیحی که دادم درباره ی ماژول مخابراتی بودکه فرکانس کاری مختلفی داره بایداطلاعات کدگذاری بشه توی برنامه بیسیک اگه نگاه کنی متوجه میشی
البته ديكد كردن همه ريموتها كه يكم پيچيده ميشه ، اول شما بايد بدوني چه پروتكلي رو ميخواي ديكد كني.
پروتكل RC5 :اگر با كامپايلر بسكام كار ميكنيد يه فرمان واسه دريافت پروتكل RC5 داره (GET RC5 ). كه من در ادامه برنامه اي رو گذاشتم كه خيلي ساده و البته با دقت فوقلاده بالا اين كنترلها رو آشكار سازي كرده ه توضيحات كاملي به زبان اصلي در بين متن برنامه داده شده .من خودم اين رو امتحان كردم و بايد بگم اين فرمان هم عدد فرمان رو مشخص ميكنه و هم نوع دسگاهي رو كه ريموت مربوط به اون هست كه در اينجا كد دستگاه 0 هست يعني دستگاه تلوزيون رنگي CRT .كد دستگاها حدودا 36 تا هست مثل ويدئو و ديسك پلير و رسيور و .... اكثرا كنترل تلوزيون هاي پارس ،دوو ، سامسونگ ، ان اي سي از اين پروتكل استفاده ميكنه
البته پروتكلهاي ديگه اي براي ريموتهاي مادون قرمز هست مثل SONY,TOSHIBA,MATSOSHITA,PHILIPS كه براي آشكار سازيشون كافيه اطلاعات مربوط به اونا رو مثلا تو گوگل با اسم خودشون جستجو كنيد اما فكر كنم ديكد كردن بقيشون با زبان بيسيك ديگه مقدور نباشه چون مثلا براي SONY بايد از اينتراپتهاي خارجي استفاده كنيد و به ازاي هر يك از 48 بيت سري اطلاعاتي كه از ريموت به ازاي فشردن فقط يك دكمه دريافت ميشه حد اقل يك بار پيكر بندي وقفه هاي ميكرو رو عوض كنيد.از فرستنده SFH485 و گيرنده SFH506 استفاده کن.

RC5.BAS
' (c) 1999-2003 MCS Electronics
' based on Atmel AVR410 application note
'-------------------------------------------------------------------
'use byte library for smaller code
$lib "mcsbyte.lbx"

'This example shows how to decode RC5 remote control signals
'with a SFH506-35 IR receiver.

'Connect to input to PIND.2 for this example
'The GETRC5 function uses TIMER0 and the TIMER0 interrupt.
'The TIMER0 settings are restored however so only the interrupt can not
'be used anymore for other tasks


'tell the compiler which pin we want to use for the receiver input

Config Rc5 = Pind.2

'the interrupt routine is inserted automatic but we need to make it occur
'so enable the interrupts
Enable Interrupts

'reserve space for variables
Dim Address As Byte , Command As Byte
Print "Waiting for RC5..."

Do
'now check if a key on the remote is pressed
'Note that at startup all pins are set for INPUT
'so we dont set the direction here
'If the pins is used for other input just unremark the next line
'Config Pind.2 = Input
Getrc5(address , Command)

'we check for the TV address and that is 0
If Address = 0 Then
'clear the toggle bit
'the toggle bit toggles on each new received command
'toggle bit is bit 7. Extended RC5 bit is in bit 6
Command = Command And &B01111111
Print Address ; " " ; Command
End If
Loop
End


البته در مورد مثالهاي بيشتر ميتونيد به سايت بيسكام مراجعه كنيد :
http://mcselec.com/


 

سعید گروسی

عضو جدید
کاربر ممتاز
سلام تشکر از پاسختون- در شکل سخت افزاری که دارم ماژول مادون قرمز رو SFH506
است اما چیزی که من از مغازه تعمیرات تلویزیون خریدم رویش چیزی ننوشته بود از صاحب مغازه پرسیدم گفت درسته خودمم تو تلویزیون بکارش می برم
منظور از کد گذاری چیست؟ ( مگه دستور آرسی 5 خودش بصورت کد نمینویسد؟ ببخشی در ضمن سایتی که فرمودید برا ما باز نمیشه چه طوری بهش دسترسی پیدا کنیم )
راستی کدوم سایت بازنمیشه ......واسه من که همش بازمیشه

توضیحات بیشتر:

rc5 پروتكلي براي فرستنده گيرندههاي شركت فيليپس هست.این دستور به خوبي هم كار ميكند. اما من از پروتكل شركت سوني و از كنترلهاي اين شركت استفاده كردم و از دستورات RC5 استفاده نكردم.چون اين دستورات كمي كند كار ميكند. براي اين كار شما به يك گيرنده مادون قرمز سه پايه احتياج داريد.شما ميتوانيد از گيرنده هاي CD يا تلويزونهاي اوراقي نيز استفاده كنيد.اين گيرنده ها دوپايه براي تغذيه و يك پايه نيز براي ديتا دارند.در مرحله بعد بايد يك عدد ريموت از بازار تهيه كنيد .

در مرحله بعد شما بايد يا از دستورات RC5 استفاده كنيد كه كاملا در HELP نرم افزار BASCOM توضيح داده يا بايد با استفاده ازشكل موج ريموت برنامه آن را بنويسيد. براي اين كار شما بايد از يك LOGIC ANALYZER ويا اوسيلوسكوپ استفاده كنيد. اين هم شكل موج ريموتهاي سوني حاضر و آماده :
http://www.ustr.net/infrared/sony.shtml
اين نوع شكل موج همان طور كه توضيح داده شده براي ريموتهاي سوني از قبيل RM-Y123 و RMT-V124B وغيره كار ميكند. دراين نوع ريموتهابيت اول START BIT
هست كه طول آن 2.4MS است . بيتهاي 1 طول آن 1.8MS است وبيتهاي صفر طول آن 1.2MS است.7 بيت اول مربوط به دستورات (كد هر دكمه )و پنج بيت دوم مربوط به آدرس (كد ريموت ) است. در زير يك نمونه برنامه كه براي ريموتهاي سوني نوشته شده آورده شده:

http://mcselec.com/index.php?option=com_content&task=view&id=199&Itemid=57

من اين برنامه را براي فركانس 8MHZ بهينه سازي كرده ام . براي فركانسهاي ديگر بايد اعداد قرمز تغيير كند
$regfile = "m16def.dat" 'the chip type, subtitutes with the one you like
$crystal = 8000000 'the crystal speed i used

Config Timer0 = Timer , Prescale = 256 'config timer0 for data trap timer
Stop Timer0 'stop timer0 first for other process

Config Pind.3 = Input 'configure the int pin , i used int1 pin
Set Portd.3 'set the pull up resistor
Pin_ir Alias Pind.3 'alias for easy naming

Config Int1 = Falling 'configure int1 on falling edge
On Int1 Isr_int1 'the isr label

Dim Data_ir As Word 'the variabel need for the purpose
Dim Cnt_ir As Byte
Dim Flag_ir_start As Bit
Dim Flag_ir_ok As Bit

Print "SONY REMOTE DECODER" 'print some output to rx

Enable Interrupts 'enable global interrupt
Enable Int1 'enable int1 interrupt

Do 'main program start here
If Flag_ir_ok = 1 Then 'wait flag_ir_ok=1
Reset Flag_ir_ok 'reset the flag
Disable Int1 'disable the int1, so ignore all ir data from here

Print Data_ir 'print the data
Reset Flag_ir_ok 'reset the flag

Enable Int1 'enable the int1 interrupt to receive ir sony again
End If
Wait 1 'wait for sometime
Loop

'isr for infrared sensor
Isr_int1:

Timer0 = 0 'start timer0 to count
Start Timer0
Bitwait Pin_ir , Set 'wait the pin_ir to high again
Stop Timer0 'stop timer0

If Cnt_ir = 0 Then 'if this is the 1st data
If Timer0 > 36 And Timer0 < 40 Then 'check for a start bit, with prescale=256 and
Set Flag_ir_start 'crystal 11,0592MHz, got timer0 value between 111 and 114
Incr Cnt_ir 'as the correct ir start bit. Measure all the neccessary bit first
End If ' if you want to change it
End If

If Flag_ir_start = 1 And Cnt_ir > 0 Then 'a start bit found -> start sampling for next 12 bit

Decr Cnt_ir
If Timer0 < 18 Then 'timer0<18 then it is a zero(0), else it is a one (1)
Data_ir.cnt_ir = 0 'assign it to a word value for easy recording
Else
Data_ir.cnt_ir = 1
End If

Cnt_ir = Cnt_ir + 2
If Cnt_ir > 11 Then 'got all 12 bit
Shift Data_ir , Right , 1 'get rid of the start bit
Reset Flag_ir_start 'reset the start bit flag
Set Flag_ir_ok 'the data is ready to be read
Cnt_ir = 0 'reset the counter
End If

End If

Return
براي ريموتي كه در بالا معرفي كردم در 8MHZ بايد 36 به 80 و 40 به 90 و 18 به 30 تغيير كند.
در ضمن برد آن هم بسيار بالا و تا 30 متر بسيار عالي جواب میده.
 
آخرین ویرایش:

ALUK

عضو جدید
*نقشه مدار فرستنده

*برنامه فرستنده


*نقشه مدار گیرنده

*برنامه گیرنده
$regfile= "m8def.dat"

$crystal = 100000

$baud =9600

ConfigRc5 = Pind.0

Dim AAs Byte , B As Bit , C As Byte , D As Byte , L As Bit

ConfigTimer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up ,Prescale = 8

EnableTimer1

StartTimer1

EnableInterrupts

ConfigPortc.5 = Output

Do

GetRc5(a, c)

If C =7 Then

ResetPortc.5

End If

If C =4 Then

SetPortc.5

Pwm1a =5

Pwm1b=250

End If

Loop

End
سلام بچه های باهوش برقی لطفا به من یه راهنمایی برسونید من این برنامه فرستنده و گیرنده رو دارم که کارکردش به این صورته که در فاصله 5 متری باید موتور را خاموش و روشن کند اما جواب نمیده مقدار کریستالش را زیاد کردم 8000000 این را زدم که برای بالا بردن سرعت برنامه است و حتی وقفه هم بین دو دستور آر سی 5 قرار دادم اما جواب نمیده از سالم بودن قطعاتم هم مطمئنم اگه کسی با برنامه بیسیک آشنایی دارد لطفا منو راهنمایی کنه در ضمن این برنامه را هم در نرم افزار بسکام نوشتم اما ارور ندارد

دوست عزيز ممنون از لطفت اما من با برنامه نويسي c ميخوام .
 

simica

عضو جدید
درود بی انتها
کدامین شخص میتواند یاریمان کند
پرسشی داریم اندر درس مدار مخابراتی
لطفا لطف بنمایید
 

simica

عضو جدید
ککککککککککککککککککککککککککککککککککککککککککککککککککککککمک
 
سلام ببخش من دیربه دیر میام توسایت. در خدمت هستم بفرما دقیقا چی می خوای تا عرض کنم.نمیگم علامه ام ولی حداقلش برا بچه های خودمون وقت میزارم، میرم مطلبو گیر میارم میزارم رو سایت
 

22adel

اخراجی موقت
سلام آقای گروسی من قبلا یه برنامه مادون قرمز داده بودم که مشکلی توش داشتم شماهم محبت کرده بودید پاسخ هایی بهش داده بودید حالا سوال من اینه که: کد RC5 و این نوع تایمر که در برنامه گذاشتین برا اولین باره که می بینم و کد RC5 رو فقط می دانم برا ارسال کد است و نیز در یه مقاله دیدم که از اعدادی که جلوی کد RC5 نوشته صفر سطح شروع ارسال پالس است (حالت استانداردش صفر است یا 32 )و عدد یک نشان دهنده آدرس(حالت استاندارد باید شماره آدرس بین شماره صفر تا 31 باشد) و عدد 7 عددی آزاد می باشد هر عددی می تواند باشد به این دلیل چیزهایی که شما گفتید را بدرستی متوجه نمی شوم و نمی دانم ایراد برنامه ام از کجاست که جواب نمی دهد خواهشا یه راهنمایی گام به گام بفرمایید شاید ما از شر این پروژه راحت شدیم
 
بالا