pic c ile tek tus start/stop
selam arkadaşlar :ben elektronikle uğraşıyorum.
elektronik bilgim fena sayılmaz ama programlama ile ilgili
fazla bir bilgim yok.şu an bazı kitaplarla pic programlama ya
çalışıyorum ama daha en basit bir led i tek bir butonla yakıp söndüremedim. aslında kod çalışıyor ama kararlı değil .
yani tuşa basar basmaz led yanıyor . ama tusa tekrar bastığım zaman
sönmüyor bazen yanıyor bazen yanmıyor bir kararzızlık var .
acaba bu konu ile ilgili yardım edecek arkadaşlar varsa
yardım edebilirmisiniz teşekkür ederim .yazdığım kod aşağıda.
#include<pic.h>
#define svic RA1// RA1 svic adlı bir ğişkene atandı
// RA1 (18) nolu bacak 10 k dirençle
// 5 volt a bağlanmış tuş basılınca
// RA1(18) bacak şaselenecek şekilde
// ayarlanmış.
main(void)
{
TRISA=1;
TRISB=0;
svic=1;
{
if(svic==0)
{
RB1=1;// RB1(7) nolu bacağa led bağlanmış
while(svic==0);
}
if(svic==0)
{
RB1=0;
while(svic==0);
}
}
}
dediğim gibi bu kod çalışıyor ama kararlı değil.
tuşa basınca bazen yanıyor bazen yanmıyor .
ilgilenen arkadaşlara şimdiden teşekkür ederim.
Hosgeldin JOKERAS,
Anlattigin durum butonun mekanik problemlerinden kaynaklanmaktadir.
Yani buton cikisi cok kararli bir sekilde 1 ve 0 olmaz. Gecis asamasinda birkac kez konum degistirir.
Yani buton 0 iken basalim ve sonucu gorelim.
000000000000001010100110011111111111111111
Gordugun gibi. 0 dan 1 e gecis cok basit olmuyor biraz karmasik.
Ama bu sure cok kisa belki 5-10 mS. Tabii PIC bu degisimi bahsi gecen zaman araliginda binlerce kez okuyabilir.
Onun icin butonda okudugun her degisiklikten sonra mesela 20 mS sure ile PIC in okuma rutinini geciktirmen gerekiyor.
Alıntı yapılan: "Erol"Hosgeldin JOKERAS,
Anlattigin durum butonun mekanik problemlerinden kaynaklanmaktadir.
Yani buton cikisi cok kararli bir sekilde 1 ve 0 olmaz. Gecis asamasinda birkac kez konum degistirir.
Yani buton 0 iken basalim ve sonucu gorelim.
000000000000001010100110011111111111111111
Gordugun gibi. 0 dan 1 e gecis cok basit olmuyor biraz karmasik.
Ama bu sure cok kisa belki 5-10 mS. Tabii PIC bu degisimi bahsi gecen zaman araliginda binlerce kez okuyabilir.
Onun icin butonda okudugun her degisiklikten sonra mesela 20 mS sure ile PIC in okuma rutinini geciktirmen gerekiyor.
ilgilendiğin çok teşekkür ederim .
onu düşündüm ama kod olarak yapamadım mümkünse kodu yazabilirmisn ...
Hi-tech dosta calismasi ve fonksiyon fakiri olmasi sebebi ile tarafimdan kullanilmiyor. Onun yerine CCS i tavsiye ederim. CCS i kullaninca Hi-Tech ile ugrasmayacaksin. Onun icin CCS icin ornek bir kod yazdim.
Derleyicisini bulup deneyebilirsin. Ayrica CCS te cok fazla ornek te var.
#include <16F84A.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#define TUS PIN_B0
#define LED PIN_B3
void main()
{
output_low(LED);
delay_ms(100);
while(TRUE)
{
if(input(TUS)==0) // Tusa bastigin an !
{
output_toggle(LED);
delay_ms(20);
while(input(TUS)==0); // Tusu birakincaya kadar bekle !
}
}
}
Kodu denemedim ama mantigi anladiysan istedigin gibi duzeltip kullanabilirsin...
@erol
Bende CCS ögrenmeye karar verdim cünkü Kod akisi tam anlayacagim mantikta.
Acaba senden rica etsem bana CCS icin gerekli derleyeciyi Full olarak indirebilecegim bir Link verirmisin?
Yada elinde varsa herhangi bir yere yükleyebilirmisin?
saygilarimla
senide CCS başlığına alalım aradığın orda....hehe
selam erol dediğin gibi CCS derleyicisini buldum
ve yazmış olduğun kod u küçük bir editleme yaparak çalıştırdım
ve şu an mükemmel tam istediğim gibi oldu sana çok teşekkür ederim.
***saygılar ***
#include <16F84A.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#define TUS PIN_A1
#define LED PIN_B1
void main()
{
output_low(LED);
delay_ms(200);
while(TRUE)
{
if(input(TUS)==0) // Tusa bastigin an !
{
output_toggle(LED);
delay_ms(200);
while(input(TUS)==0); // Tusu birakincaya kadar bekle !
}
}
}