ايران ويج

نسخه‌ی کامل: کنترل مادون قرمز با PT2262
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5 6
یعنی دیگه الان هیچ مشکلی نیست اگه این فرستنده را با گیرنده زیری اجرا کنم 10 کاناله درست کار می کنه؟

فرستنده:
کد php:
$regfile = "m8def.dat"
$crystal = 4000000
Ddrd 
= &B11111100 : Portd = 7
Ddrd 
= &B11111100 : Portc = 3
Do
    
Debounce Pind.0 , 0 , Q , Gosub
    Debounce Pind.1 
, 0 , W , Gosub
    Debounce Pind.2 
, 0 , A , Gosub
    Debounce Pind.3 
, 0 , B , Gosub
    Debounce Pind.4 
, 0 , C , Gosub
    Debounce Pind.5 
, 0 , D , Gosub
    Debounce Pind.6 
, 0 , E , Gosub
    Debounce Pinc.0 
, 0 , F , Gosub
    Debounce Pinc.1 
, 0 , G , Gosub
    Debounce Pinc.2 
, 0 , H , Gosub
Loop

Q
:
    
Rc5send 7 , 0 , 0
    Waitms 100
Return

W:
    
Rc5send 7 , 0 , 1
    Waitms 100
Return

A:
    
Rc5send 7 , 0 , 2
    Waitms 100
Return

B:
    
Rc5send 7 , 0 , 3
    Waitms 100
Return

C:
    
Rc5send 7 , 0 , 4
    Waitms 100
Return

D:
    
Rc5send 7 , 0 , 5
    Waitms 100
Return

E:
    
Rc5send 7 , 0 , 6
    Waitms 100
Return

F:
    
Rc5send 7 , 0 , 7
    Waitms 100
Return

G:
    
Rc5send 7 , 0 , 8
    Waitms 100
Return

H:
    
Rc5send 7 , 0 , 9
    Waitms 100
Return 

گیرنده:
کد php:
$regfile = "m8def.dat" : $crystal = 4000000

Ddrd 
= 255 : Ddrc = 255

Config Rc5 
= Pinb.0 : Enable Interrupts

Dim Address 
As Word , Command As Word

Do

   
Getrc5(address , Command)

   If 
Address = 7 Then :

      If 
Command = 0 Then :
         
Portd = 1 : Portc = 0
      
Elseif Command = 1 Then :
         
Portd = 2 : Portc = 0
      
Elseif Command = 2 Then :
         
Portd = 4 : Portc = 0
      
Elseif Command = 3 Then :
         
Portd = 8 : Portc = 0
      
Elseif Command = 4 Then :
         
Portd = 16 : Portc = 0
      
Elseif Command = 5 Then :
         
Portd = 32 : Portc = 0
      
Elseif Command = 6 Then :
         
Portd = 64 : Portc = 0
      
Elseif Command = 7 Then :
         
Portd = 128 : Portc = 0
      
Elseif Command = 8 Then :
         
Portd = 0 : Portc = 1
      
Elseif Command = 9 Then :
         
Portd = 0 : Portc = 2
      End 
If

   
End If


Loop
End 


ببین در فرستنده این تیکه برنامه درسته:
کد php:
Ddrd = &B11111100 : Portd = 7
Ddrd 
= &B11111100 : Portc = 3 

پس کلا مادون قرمز فرستنده را به B.1 یا همون OC1A و گیرنده را هم به B.0 وصل کنم حله دیگه هااااا؟؟؟؟؟؟؟
مهندس خوب تست کن ببین درست کار می کنه یا نه !

به نظر درست میاد !

فقط منظور از اون تیکتو نفهمیدم !
واسه چی اونکارو کردی
دی صفر و دی یک الان پول آپشون فعاله و ورودی شدن و دی دو خروجی و یک هستش و سی صفر و سی یک هم پول آپ رو فعال کردی !!! ( البته اگه پورت سی رو تعریف نکرده باشی فابریکی ورودی هستش )
خب پس چی بنویسم که برای 10 تا شستی خودش مقاومت پول آپ بذاره یعنی برای پینهای D.0....D.7 و C.0...C2 ؟؟؟؟؟؟
این چطوره:
کد php:
ddrd = &b11111100 : portd = 3 
10 تا میشه 8+2 ! ( اخه اونوطر که گفتی میشه 11 تا )

نقل قول: یعنی برای پینهای D.0....D.7 و C.0...C2 ؟؟؟؟؟

یعنی پورت دی کامل و سی صفر و سی یک !

کد php:
Ddrd = 255 : Portd = 255
Ddrc 
= 3 : Portc = 3 
خب حالا در مورد قسمت سخت افزاری:
برنامه را کلا درست اجرا کرد و ...
حالا می خوام خروجیهای میکرو گیرنده رو یه کاری کنم که مثلا کانالهای TV قدیمی رو عوض کنه و ...
یعنی برایTV کنترل درست می کنم
از اونجایی که خروجی مثبته و ...من اونو به رله دادم (البته هرکدام از خروجی هارو به یک رله دادم) وخروجی رله را به قسمت انتخاب کانال TV (هرکدوم از شبکه ها دو نقطه داره که وقتی به هم وصل میکنم به اون شبکه میره واین کارو بارله براحتی انجام میده)
اما می خواستم بدونم غیر ازرله با چی میشه این دونقطه را به هم وصل کرد؟؟؟؟؟؟؟
البته با آی سی های 4066 و4016 هم امتحان کردم اما اونا توانشون پایینه و نمیتونه مثل رله اینارو به هم وصل کنه!!!!!!!!!!!!!!
از ترانزیستور(NPN ) هم استفاده کردم یعنی خروجی میکرو را با یک مقاومت به بیس ترانزیستور دادم وکلکتور و امیتر را هم به اون دونقطه TV دادم اما نشد چون در این حالت خود به خود به شبکه دیگه ای میپره و ...
در کل من فقط از رله خوب جواب گرفتم اما چون برای 10 کانال 10 تا رله می خواهد وهمچنین رله هم صدا می دهد و ... برای همین میخواستم ببینم راه دیگه ای نداره؟؟؟؟؟؟؟؟
کد php:
$regfile = "m8def.dat" : $crystal = 4000000

Ddrd 
= 255 : Ddrc = 255

Config Rc5 
= Pinb.0 : Enable Interrupts

Dim Address 
As Word , Command As Word

Do

   
Getrc5(address , Command)

   If 
Address = 7 Then :

      If 
Command = 0 Then :
         
Portd = 1 : Portc = 0
      
Elseif Command = 1 Then :
         
Portd = 2 : Portc = 0
      
Elseif Command = 2 Then :
         
Portd = 4 : Portc = 0
      
Elseif Command = 3 Then :
         
Portd = 8 : Portc = 0
      
Elseif Command = 4 Then :
         
Portd = 16 : Portc = 0
      
Elseif Command = 5 Then :
         
Portd = 32 : Portc = 0
      
Elseif Command = 6 Then :
         
Portd = 64 : Portc = 0
      
Elseif Command = 7 Then :
         
Portd = 128 : Portc = 0
      
Elseif Command = 8 Then :
         
Portd = 0 : Portc = 1
      
Elseif Command = 9 Then :
         
Portd = 0 : Portc = 2
      End 
If

   
End If


Loop
End 
این برنامه گیرنده وقتی یک شستی در فرستنده زده می شه در گیرنده هم بسته به برنامش یکی از کانالها روشن میشه وبا زدن کلید دیگر کانال دیگه ای روشن میشه وهمینطور باقی میمونه ....

دوتا سوال داشتم:
1- حالا اگه بخوام که کانالهای گیرنده فقط لحظه ای روشن بشه وبعد خود به خود خاموش بشه برنامشو چطوری تغییر بدم؟؟؟
2- همچنین حالت دیگه که وقتی شستی فشار داده شد در گیرنده کانال مورد نظر روشن بشه وباقی بمونه واگه همون شستی در فرستنده دوباره فشار داده شد کانال گیرنده خاموش بشه ... اینو چیکار کنم؟؟؟؟؟؟
1- خوب بعد اینکه یکش کردی یه تاخیر کوچولو بذار و بعدش صفرش کن !


2- بیشتر توضیح بده !
نفهمیدم چی شدش !!
برای لحظه ای کردن تاخیرو کجاش بذارم؟
اینجاها خوبه:
کد php:
If Command = 0 Then :
Portd = 1 : Portc = 0
Waitms 100
Portd 
= 0 , Portc = 0
Elseif Command = 1 Then :
Portd = 2 : Portc = 0
Waitms 100
Portd 
= 0 , Portc = 0
Elseif Command = 2 Then :
Portd = 4 : Portc = 0
Waitms 100
Portd 
= 0 , Portc = 0 


در مورد سوال دومم هم میگم که مثلا ما در فرستنده 10 تا شستی داریم ودر گیرنده هم 10 تا خروجی متناسب با فرستنده ...
حالا می خوام هر کدام از کانالها جدا باشن یعنی وقتی مثلا شستی 1 رافشار دادم خروجی 1 روشن شود وباقی بماند واگه شستی 1 را دوباره فشار دادم خروجی 1 خاموش شود وهمین روند برای کانالهای دیگه هم صادق باشد
در کل یعنی هرشستی دوحالت 0و1 (ON / OFF ) را انجام بده فقط برای خروجی خودش.
برنامه خودت درسته و البته یه خورده میشه ساده ترش کرد

2- با دستور تاگل :
کد php:
$regfile = "m8def.dat" : $crystal = 4000000

Ddrd 
= 255 : Ddrc = 255

Config Rc5 
= Pinb.0 : Enable Interrupts

Dim Address 
As Word , Command As Word

Do

   
Getrc5(address , Command)

   If 
Address = 7 Then :

      If 
Command = 0 Then :
         
Toggle Portd.0
      
Elseif Command = 1 Then :
         
toggle portd.1
      
Elseif Command = 2 Then :
         
Toggle Portd.2
      
Elseif Command = 3 Then :
         
Toggle Portd.3
      
Elseif Command = 4 Then :
         
Toggle Portd.4
      
Elseif Command = 5 Then :
         
Toggle Portd.5
      
Elseif Command = 6 Then :
         
Toggle Portd.6
      
Elseif Command = 7 Then :
         
Toggle Portd.7
      
Elseif Command = 8 Then :
         
Toggle Portc.0
      
Elseif Command = 9 Then :
         
Toggle Portc.1
      End 
If

   
End If

Loop
End 
ممنون
برنامه تاگل را تست کردم وبخوبی جواب داد.

اما تو حالت لحظه ای مشکل دارم ...
برنامشو بشکل زیر نوشتم که ارور میده:

کد php:
$regfile = "m8def.dat" : $crystal = 4000000

Ddrd 
= 255 : Ddrc = 255

Config Rc5 
= Pinb.0 : Enable Interrupts

Dim Address 
As Word , Command As Word

Do

   
Getrc5(address , Command)

   If 
Address = 7 Then :

      If 
Command = 0 Then :
         
Portd = 1 : Portc = 0
         Waitms 100
       Portd 
= 0 , Portc = 0

      
Elseif Command = 1 Then :
         
Portd = 2 : Portc = 0
         Waitms 100
      Portd 
= 0 , Portc = 0

      
Elseif Command = 2 Then :
         
Portd = 4 : Portc = 0
          Waitms 100
      Portd 
= 0 , Portc = 0

      
Elseif Command = 3 Then :
         
Portd = 8 : Portc = 0
         Waitms 100
      Portd 
= 0 , Portc = 0

      
Elseif Command = 4 Then :
         
Portd = 16 : Portc = 0
         Waitms 100
      Portd 
= 0 , Portc = 0

      
Elseif Command = 5 Then :
         
Portd = 32 : Portc = 0
         Waitms 100
      Portd 
= 0 , Portc = 0

      
Elseif Command = 6 Then :
         
Portd = 64 : Portc = 0
         Waitms 100
      Portd 
= 0 , Portc = 0

      
Elseif Command = 7 Then :
         
Portd = 128 : Portc = 0
         Waitms 100
        Portd 
= 0 , Portc = 0

      
Elseif Command = 8 Then :
         
Portd = 0 : Portc = 1
         Waitms 100
        Portd 
= 0 , Portc = 0

      
Elseif Command = 9 Then :
         
Portd = 0 : Portc = 2
         Waitms 100
        Portd 
= 0 , Portc = 0

      End 
If

   
End If


Loop
End 


در ضمن نمونه ای از عکس کنترل فرستنده که ساختمش را میذارم ( این کنترل 6 کاناله هستش):

[تصویر:  1273441958.jpg]
مهندس ایراد برنامه بالایی رو نمی گم تا خودت بفهمی !
غلط تایپی داری !
: : :
, , ,


چقدر فرستنده ات گنده شده !
خوب با وقفه کار کن که مصرف باتری هم کم بشه !!!
می تونی از مدار فرستنده زیر استفاده کنی که کوچیکتره و مصرف باتریش هم کمه !!
http://iranled.com/node/42
صفحه‌ها: 1 2 3 4 5 6