PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : برنامه روشن کردن ال ای دی با کلید



kendab
02-03-2013, 00:50
سلام
برنامه زیر رب برای اینکه زمانی کلید زده میشود ال ای دی روشن شود زمانی صفر هست خاموش بشود
ولی در عمل کار نمیکند

$regfile = "m8def.dat"
$crystal = 1000000
Config Portb.0 = Output
Config Portc.5 = Input
Config Portd.0 = Output
Do

Debounce , Portc.5 , 1 , Af
Q:
Set Portd.0



Loop
End
Af:
Do
Set Portb.0
Loop Until Portc.5 <> 1
Goto Q

Ma3ood
02-03-2013, 01:29
من بیسیک کار نمیکنم ولی خوب برنامه را فکر نمی کنی باید اینطوری مینوشتی !



Debounce , Portc.5 , 1 , Af
Q:
reset Portb.0

kendab
02-03-2013, 10:56
من بیسیک کار نمیکنم ولی خوب برنامه را فکر نمی کنی باید اینطوری مینوشتی !



debounce , portc.5 , 1 , af
q:
Reset portb.0



سلام
اره این خط رو اشتباه نوشتم ولی مشکلم اینجاست که اصلا روشن نمیشود
اگر با کد ویژن کار میکنید امکان دارد یه نمونه برام بدید ببینم مشکل کجاست
البته فایل هگز باشه چ.ن با نرم افزارش کار نکردم
ممنون

sarbaz13
02-03-2013, 11:09
#include <mega32.h>
#include <delay.h>
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x02;

PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

while (1)
{
if ( PINC.0==1 ){
PORTC.1=1;
delay_ms(80);
}
else{
PORTC.1=0;
}

};
}



فایل هگز و برنامه اصلی را ضمیمه می کنم.
مشکل شما اینجاست که با پایه ی مورد نظر خودتون رو به صورت Pull up یا Pull down به صورت زیر ببندی.

ali_h
02-03-2013, 11:18
سلام
Portc.5 برای خواندن مقدار پین نیست. بجای Portc.5 از pinc.5 استفاده کنید.

پ.ن : چرا از یه Do..Loop و یک if ساده واسه اینکار استفاده نمی کنید. (قانون کلی : هیچ وقت از Goto در برنامه نویسی استفاده نکنید. هروقت مجبور به استفاده از Goto شدید ، مطمئن باشید که راه بهتری برای پیاده سازی برنامتون وجود داشته.)

kendab
02-03-2013, 12:46
سلام
Portc.5 برای خواندن مقدار پین نیست. بجای Portc.5 از pinc.5 استفاده کنید.

پ.ن : چرا از یه Do..Loop و یک if ساده واسه اینکار استفاده نمی کنید. (قانون کلی : هیچ وقت از Goto در برنامه نویسی استفاده نکنید. هروقت مجبور به استفاده از Goto شدید ، مطمئن باشید که راه بهتری برای پیاده سازی برنامتون وجود داشته.)
سلام
از pin هم استفاده کردم باز مشکل حل نشد
قبلا با پورت نوشته بود درست عمل میکرد ولی الان کار نمیکنه
امکان داره کل برنامه را با میکرو 8 برام بنویسید
شرمنده

Ma3ood
02-03-2013, 13:33
اینجوری بنویسی جواب نمیده






$regfile = "m8def.dat"
$crystal = 1000000
config portb.0 = output
config portc.5 = input
do

if pinc.5=1 then
set portb.0

if pinc.5=0 then
reset portb.0

loop
end

kendab
02-03-2013, 15:05
اینجوری بنویسی جواب نمیده






$regfile = "m8def.dat"
$crystal = 1000000
config portb.0 = output
config portc.5 = input
do

if pinc.5=1 then
set portb.0

if pinc.5=0 then
reset portb.0

loop
end



سلام
نوشتم جواب نداد
برنامه زیر را هم نوشتم جواب نداد
دیگه دارم میریزم بهم نمیدونم مشکل کجاست

$regfile = "m8def.dat"
$crystal = 1000000
Config Portd.0 = Output
Config Portc.0 = Input
Config Portc.1 = Input
Config Portd.1 = Output
Dim G As Word
Dim H As Word

Do
If Portc.0 = 1 Then
Do

Set Portd.0
Waitms 1
Loop Until Portc.0 <> 1
Reset Portd.0
End If
If Portc.1 = 1 Then
Do

Set Portd.1
Loop Until Portc.1 <> 1
Reset Portd.1
End If
Loop
End

sarbaz13
02-03-2013, 17:08
سلام
نوشتم جواب نداد
برنامه زیر را هم نوشتم جواب نداد
دیگه دارم میریزم بهم نمیدونم مشکل کجاست

$regfile = "m8def.dat"
$crystal = 1000000
Config Portd.0 = Output
Config Portc.0 = Input
Config Portc.1 = Input
Config Portd.1 = Output
Dim G As Word
Dim H As Word

Do
If Portc.0 = 1 Then
Do

Set Portd.0
Waitms 1
Loop Until Portc.0 <> 1
Reset Portd.0
End If
If Portc.1 = 1 Then
Do

Set Portd.1
Loop Until Portc.1 <> 1
Reset Portd.1
End If
Loop
End

سلام آقای kendab
شما اگر با انجام این کار ها بازم موفق نشدی مشکل از یک جای دیگه است و ربطی به برنامه نویسی نداره.
یا میکروت مشکل داره یا فیوز بیتهای میکروت رو دست کاری کردی
چک کن اگر میکروت سالم هست و فیوز بیت هات دستکاری نکردی و درست تنظیم شدن یک بار کلا میکروتو پاک کن برنامه های داخلش رو و بعد دوباره کامپایل کن.
مدارت رو طبق عکسی که گذاشتم باید وصل کنی تا جواب بگیری.

Ma3ood
02-03-2013, 19:10
دوست عزیز فایل شبیه سازی برنامه تون را قرار بدهید + هگز برنامه

kendab
02-03-2013, 23:26
دوست عزیز فایل شبیه سازی برنامه تون را قرار بدهید + هگز برنامه
سلام
دوستان از صب نشستم تا الان تونستم جواب بگیرم
نمیدونم چرا میکرو به pin و portحساس هست یه جاش باید pin یجا دیگه پورت نوشت

Ma3ood
02-03-2013, 23:31
منظورتو متوجه نشدم خوب هرکجا شما میخوای از ورودی بخونی مقداری را (صفر یا یک ) pin استفاده میکنی
و هر کجا بخوای به پایه های میکرو فرمان بدی (صفر یا یک ) port استفاده میکنی
اصلا امکان پذیر نیست همین طوری جاشونو عوض کنیا :mrgreen:

kendab
02-03-2013, 23:32
شرمنده دوستان برا اینکه تایپک اضافی نزنم میخاهم یه فرسنده گیرنده با hmt ,rبسازم برا ارسال چی باید نوشت
ممنون

kendab
02-03-2013, 23:35
منظورتو متوجه نشدم خوب هرکجا شما میخوای از ورودی بخونی مقداری را (صفر یا یک ) pin استفاده میکنی
و هر کجا بخوای به پایه های میکرو فرمان بدی (صفر یا یک ) port استفاده میکنی
اصلا امکان پذیر نیست همین طوری جاشونو عوض کنیا :mrgreen:
یعنی اگه بخاهم یک پایه را فرمان بدهم مثلا باید بنویسمportc.0

Ma3ood
03-03-2013, 00:05
شرمنده دوستان برا اینکه تایپک اضافی نزنم میخاهم یه فرسنده گیرنده با hmt ,rبسازم برا ارسال چی باید نوشت
ممنون
فرستنده گیرنده میخوای بسازی باید با پورت سریال کار بکنی یه کانفیگ ساده داره
قبلا کار کردی تجربه ای داری؟


یعنی اگه بخاهم یک پایه را فرمان بدهم مثلا باید بنویسمportc.0

بله دقیقا :0013:

kendab
03-03-2013, 01:17
فرستنده گیرنده میخوای بسازی باید با پورت سریال کار بکنی یه کانفیگ ساده داره
قبلا کار کردی تجربه ای داری؟



بله دقیقا :0013:
سلام
نه قبلا کار نکردم
امکان دارد بیشتر توضیح بدهید
ممنون

kendab
03-03-2013, 16:16
سلام
برا فرستنده اینو نوشتم

$regfile = "m8def.dat"
$crystal = 1000000
$baud = 9600

Config Pinc.0 = Input
Config Pinc.1 = Input

Dim C0 As String * 13
Dim C1 As String * 13
C0 = "canal1"
C1 = "canal2"
Do
Do
Print C0 ; Chr(13);
Loop Until Pinc.0 <> 1
Print C0 ; Chr(13);

Do
Print C1 ; Chr(13);
Loop Until Pinc.1 <> 1
Print C1 ; Chr(13);


Loop
End

و برای گیرنده:

$regfile = "m8def.dat"
$crystal = 1000000
$baud = 9600
Config Portb.0 = Output
Config Portb.1 = Output
Dim S As String * 13
Do
Input S
If S = "canal1" Then
Do
Set Portb.0
Loop Until S <> "canal1"
End If
Reset Portb.0

If S = "canal2" Then
Do
Set Portb.1
Loop Until S <> "canal2"
End If
Reset Portb.1
Loop

مشکلاتش کجاست ممنون

kendab
03-03-2013, 23:16
دوستان کجاید کمککککککککککککککککککککککک ککککککک

Ma3ood
04-03-2013, 18:40
دوست عزیز پیشنهاد میکنم کتاب الکترونیکی نوشته سبحان سروری را با عنوان انتقال دیتا بین میکرو -میکرو ،میکرو -رایانه را از نت بگیرید بسیار مفصل در مورد فرستنده و گیرنده با hmt -hmr توضیح داده و تمامی نکات هم داخل این PDF موجود هست موفق باشید .:0013:

kendab
04-03-2013, 21:10
دوست عزیز پیشنهاد میکنم کتاب الکترونیکی نوشته سبحان سروری را با عنوان انتقال دیتا بین میکرو -میکرو ،میکرو -رایانه را از نت بگیرید بسیار مفصل در مورد فرستنده و گیرنده با hmt -hmr توضیح داده و تمامی نکات هم داخل این pdf موجود هست موفق باشید .:0013:
ممنون
لطف کردید
من هم اونو خوندم
هم کتاب اقای کاهه
و...
ولی واقعا نفهمیدم شاید از خنگی خودم هست
موفق باشید

Ma3ood
04-03-2013, 22:56
برنامه هاش خیلی روان و گویا هست کجاش مشکل دارید ؟
مدار را عملی تست کردید ؟
شبیه سازی کردید ؟

kendab
04-03-2013, 23:39
برنامه هاش خیلی روان و گویا هست کجاش مشکل دارید ؟
مدار را عملی تست کردید ؟
شبیه سازی کردید ؟
من این برنامه نوشتم با استفاده از کتاب سروی
تو شبیه سازی هر کلید را میزنیم فقط ال ای دی یک روشن میشود
تو عمل هم اصلا کار نمیکند

Ma3ood
05-03-2013, 00:41
دوست عزیز همون طور که قبلا گفتم من بیسک کار نمی کنم ولی برنامه فرستنده را اینطوری بنویسی بهتره
به نظرم برنامه های اون PDF را اول اجرا کن و جواب بگیر بعدا تغییرات را در اون اعمال کن در عمل چطوری میبندی
توضیح بده شماتیک بزار




$regfile = "m8def.dat"
$crystal = 1000000
$baud = 9600

Config Pinc.0 = Input
Config Pinc.1 = Input

Dim C0 As String * 13
Dim C1 As String * 13
C0 = "canal1"
C1 = "canal2"
Do
IF Pinc.0=1 then
Print C0 ; Chr(13);

IF Pinc.1=1 then
Print C1 ; Chr(13);

waitms 50
Loop
End

kendab
05-03-2013, 01:15
دوست عزیز همون طور که قبلا گفتم من بیسک کار نمی کنم ولی برنامه فرستنده را اینطوری بنویسی بهتره
به نظرم برنامه های اون pdf را اول اجرا کن و جواب بگیر بعدا تغییرات را در اون اعمال کن در عمل چطوری میبندی
توضیح بده شماتیک بزار




$regfile = "m8def.dat"
$crystal = 1000000
$baud = 9600

config pinc.0 = input
config pinc.1 = input

dim c0 as string * 13
dim c1 as string * 13
c0 = "canal1"
c1 = "canal2"
do
if pinc.0=1 then
print c0 ; chr(13);

if pinc.1=1 then
print c1 ; chr(13);

waitms 50
loop
end


سلام
این فایل پرتیوس و کد هگز میباشد
تو عمل 5 ولت با رگلاتور ایجاد میکنم

Ma3ood
05-03-2013, 17:32
دوست عزیز مشکل شما چیه شما برنامه ای برای گیرنده نوشته اید به صورت لحظه ای هست یعنی تا زمانی کلید فشرده شده باشه لامپ متناظرش روشنه دستو که برداری خاموش میشه و برای کلید دوم هم همین طور مشکلی در عمل نداره
الان شما میخواستید این طوری کار کنه یا نه؟
در عمل پایه enable را در گیرنده متصل کردید ?

kendab
05-03-2013, 23:16
دوست عزیز مشکل شما چیه شما برنامه ای برای گیرنده نوشته اید به صورت لحظه ای هست یعنی تا زمانی کلید فشرده شده باشه لامپ متناظرش روشنه دستو که برداری خاموش میشه و برای کلید دوم هم همین طور مشکلی در عمل نداره
الان شما میخواستید این طوری کار کنه یا نه؟
در عمل پایه enable را در گیرنده متصل کردید ?
سلام
اره من میخاهم دست از روی کلید برداشتم ال ای دی خاموش شود
در مورد پایه enable چیزی نمیدونم فقط تو کتاب دیدم یکش کردم منم یکش کردم
مشکلن اینکه در عمل کار نمیکنه
فک کردم شاید مال مازول باشه چطور باید تستش کنم؟

ramin.st
05-03-2013, 23:40
سلام این برنامتون اشتباه بود اینطوری باید مینوشتید
در کل برای دستور if اگر بعد از اینکه شرط برقرار بود بخواین یک دستور اجرا بشه میتوننین جلوش بعد از then بنویسید ولی اگر دستورات زیاد بودن در خط های بعدی میتوننین وارد کنین وباید پایان شرط رو هم مشخص کنین با end if مثل:
If pinc.0=1 then
"print "x
portb.0 = 1
end if

kendab
05-03-2013, 23:53
سلام این برنامتون اشتباه بود اینطوری باید مینوشتید
در کل برای دستور if اگر بعد از اینکه شرط برقرار بود بخواین یک دستور اجرا بشه میتوننین جلوش بعد از then بنویسید ولی اگر دستورات زیاد بودن در خط های بعدی میتوننین وارد کنین وباید پایان شرط رو هم مشخص کنین با end if مثل:
If pinc.0=1 then
"print "x
portb.0 = 1
end if
سلام ممنون
در مورد تست ماژول چکار باید بکنم
ممنون

Mirhabibi
10-09-2013, 20:34
سلام دوستان
من می خواهم با زدن یک کلید که به یکی از پین های میکرو وصل است پورت دیگری یک شود و با رها کردن کلید اون پورت صفر شود

من اومدم در atmega8A و در codevision wizard پین PC0 رو input و در حالت pull up تنظیم کردم پورت PC1 رو هم به صورت OUT و 0 تنظیم کردم

در برنامه هم در داخل while(1) نوشتم

PORTC.1=PINC.0;


در مدارم هم PC0 رو به یک سر کلید فشاری و اون یکی سر کلید فشاری رو هم به GND وصل کردم

مشکل اینجاست که وقتی یک LED به PC1 و GND وصل می کنم می بینم LED روشن هست و با فشردن کلید خاموش می شود من می خواهم عکس این عمل باشد یعنی PC1 صفر باشد و وقتی کلید را فشار دادم یک بشود و در نتیجه LED روشن شود

امیدوارم توانسته باشم منظورمو برسونم
در ضمن می خواهم حتما به زبان c و در کدویژن بنویسمش

منتظر راهنمایی دوستان هستم

sobhan537
10-09-2013, 21:01
سلام دوستان
من می خواهم با زدن یک کلید که به یکی از پین های میکرو وصل است پورت دیگری یک شود و با رها کردن کلید اون پورت صفر شود

من اومدم در atmega8A و در codevision wizard پین PC0 رو input و در حالت pull up تنظیم کردم پورت PC1 رو هم به صورت OUT و 0 تنظیم کردم

در برنامه هم در داخل while(1) نوشتم

PORTC.1=PINC.0;


در مدارم هم PC0 رو به یک سر کلید فشاری و اون یکی سر کلید فشاری رو هم به GND وصل کردم

مشکل اینجاست که وقتی یک LED به PC1 و GND وصل می کنم می بینم LED روشن هست و با فشردن کلید خاموش می شود من می خواهم عکس این عمل باشد یعنی PC1 صفر باشد و وقتی کلید را فشار دادم یک بشود و در نتیجه LED روشن شود

امیدوارم توانسته باشم منظورمو برسونم
در ضمن می خواهم حتما به زبان c و در کدویژن بنویسمش

منتظر راهنمایی دوستان هستم

پین PC0 رو Pull Down کنید و اون یکی سر کلید فشاری رو هم به VCC وصل کنید تا مشکلتون حل بشه...

sobhan537
10-09-2013, 21:07
هر کجا شما میخوای از ورودی بخونی مقداری را (صفر یا یک ) از pin استفاده میکنی و هر کجا بخوای به پایه های میکرو فرمان بدی (صفر یا یک ) از port استفاده میکنی.
اصلا امکان پذیر نیست همین طوری جاشونو عوض کنیا :mrgreen:
درسته. اما آیا ابتدای برنامه برای config کردن یک پایه به عنوان ورودی یا خروجی هم این بحث صادقه؟ یعنی اگه بخوایم پینA.0 رو بصورت ورودی تعریف کنیم باید از دستور Config PinA.0=Input و اگه بخوایم پینA.0 رو بصورت خروجی تعریف کنیم باید از دستور Config PortA.0=Output استفاده کنیم؟؟؟

Ma3ood
11-09-2013, 00:51
بله باید قبل از استفاده اونو کانفیگ کنی
فرقی نداره مثل زبان سی که با رجیستر ddrx کار میکنی