CCS C ile 12F675 buton ve led hakkında

Başlatan akcanumut, 23 Mart 2014, 23:22:12

akcanumut

CCS C ile 12F675 kullanarak basit bir devre yapmaya çalışıyorum. Butona basınca led 2,5 saniye yanıp sonra sönecek. Aşağıdaki kodu proteus'da deniyorum çalışıyor istediğim gibi ama pic'e yükleyince led sürekli yanıyor. anlamadım gitti bir bakar mısınız nerede sorun var ? proteusta çalışan neden pic'de çalışmıyor..

---
#include <12F675.h>
#device ADC=10
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD,NOMCLR
#use delay(clock=4000000)
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
#byte OSCCAL = 0x90

Void init()
{
OSCCAL = 0x80; // set internal oscillator to mid frequency
set_tris_a( 0b11111101 ); // set GP1 output, all other inputs
setup_comparator( NC_NC_NC_NC ); // disable comparators
setup_adc_ports( NO_ANALOGS ); // disable analog inputs
setup_adc( ADC_OFF ); // disable A2D
}

Void main()
{
basla:

init();
while ( TRUE ) // blink LED
{

If (input(pin_a0))
{
output_high( GP1 );
delay_ms( 2500 ); // wait 250ms
output_low( GP1 );
GOTO basla;
}

}
}
---

sadogan

#1
basla : etiketi ve" goto baslayı" kaldırmanız gerekli
A0 pininde pull down direnci varmı ?

akcanumut

basla ve goto ları kaldırdım yine aynı
a0'a da direnç yok direk bağlı powera

polleme

a0 direk VCC'ye bağlı olunca tuş da bu ucu VCC'ye anahtarlıyorsa tuşun hiçbir işlevi olmaz. Tuşu GND'ye bağlarsanız da tuşa basılınca kısa devre oluşur. a0 ucunu 10K gibi bir dirençle GND'ye bağlayın ve tuşu da a0 ile VCC arasına bağlayın. Büyük ihtimalle çalışacaktır.

RaMu

If (input(pin_a0))
{
output_high( GP1 );                          //  *1*   led yanmaya başladı
delay_ms( 2500 ); // wait 250ms     //2500 ms boyunca led yanıyor
output_low( GP1 );                          // ledi söndürdün
GOTO basla;                                    //BURAYI DEĞİŞTİRDİĞİNİ SÖYLEDİN BU HALİYLEDE AYNI DURUM ŞÖYLE;

*1* İLE İŞARETLEDİĞİM YERE GEÇİYOR PROGRAMIN DİREK VE TABİKİ LED SÖNER SÖNMEZ TEKRAR YANIYOR,
output_low( GP1 ); in hemen altına delay_ms( 2500 ); eklemelisinki ledin sönük olduğu görülsün,
ayrıca kod derlenirken hata veriyorsa GP1 yerine pin_a1 yaz.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

sadogan

while ( TRUE ) // blink LED 
{ 

If (input(pin_a0))
{
output_high( GP1 );
delay_ms( 2500 ); // wait 250ms 
}
output_low( GP1 );

@RaMu dikkat çektiği hatayı bu şekilde aşabilirsin

RaMu

@sadoğan ben soruyu eksik-yanlış okumuşum,
buton olduğunu farketmedim,
hatta neden cevaplarda butondan bahsedilmiş diye düşünüyordum yazarken,
benim cevabım kafa karıştırmasın YOKSAYın.

@akcanumut
Şema paylaşırsan iyi olur,
hatta butonu gerçekte nasıl bağladın fotosunu çekip eklemelisin.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

polleme

Şema olmadan anlamaya çalışmak bulmaca çözmek gibi oluyor.