XC8 Yeni başlayanlar için basit sorular

Başlatan Extreme, 02 Mart 2015, 15:50:54

Extreme

tskler Emin hocam o sorunu hallettik.

Yeni bir sorunum var.
#define TRA_0   LATDbits.LATD0
#define TRA_1   LATDbits.LATD1
#define TRA_2   LATDbits.LATD2
#define TRA_3   LATDbits.LATD3
#define TRA_4   LATDbits.LATD4
#define TRA_5   LATDbits.LATD5
#define TRA_6   LATDbits.LATD6
#define TRA_7   LATDbits.LATD7

unsigned char Degerler

bu TRAları direkt olarak Degerler değişkene nasıl aktarırım ?


Emin Aydın EROĞLU

Hocam öncelikle eğer sen portu olduğu gibi okumak istiyorsan bu kadar farklı tanımlamaya ihtiyacın yok. Tek tanımlama yeterli. Sonra eğer sen portun değerini okuyacaksan o portu giriş olarak tanımlamalısın. Daha sonrada tanımlamanı PORTD şekilde yapmalısın. LATA çıkış için kullanılır.

#define TRA PORTD

unsigned char Degerler;

Degerler=TRA;

Şeklinde okuyabilirsin. Bunun sonucunda 8 bitlik D portunu Degerler değişkeninne atmış olursun.

Extreme

Peki emin hocam ben bit bit işlem yapmak istiyorum.

net olarak bitlerden Rd7,Rd6,Rd5,Rd4,Rd3 bitlerine bir değişkene aktarmak istiyorum nasıl yapabilirim. ?Rd2 ve Rd1 ve Rd0 ile ilgilenmeden

Gökhan BEKEN

Özel mesaj okumuyorum, lütfen göndermeyin.

Extreme

Emin hocam,
18F4620 için

#define TRA LATD

unsigned char Degerler;

TRA=Degerler;

DEDİĞİMİZDE TRA içeriğini Degerler içeriğiyle dolduracak mı ? binary şeklinde

Extreme

#define TRMA_0   LATCbits.LATC0
#define TRMA_1   LATCbits.LATC1
#define TRMA_2   LATCbits.LATC2
#define TRMA_3   LATCbits.LATC3

ben bunları aynı anda bir değer atamam gerekiyor

TRMA_3=0; TRMA_2=0; TRMA_1=0; TRMA_0=0;  // bu şekilde degil aynı anda vermek istiyorum

TRMA=14; deyince hepsini ataması gibi ..

Böyle bir yöntem var mı arkadaşlar ?

Gökhan BEKEN

Özel mesaj okumuyorum, lütfen göndermeyin.

Kabil ATICI

Birden fazla kullanacaksan, fonksiyon olarak yaz.

void fonksiyon (int degisken)
{
//fonksiyon yapması gereken iş.,
}

kullanımda
fonksiyon (14); //şeklinde kullanabilirsin
ambar7

Extreme

Merhaba Benim bir sorum olucak.

watchdog timer hesabını öğrenmek istiyorum. sadece hesabını kullanmasını biliyorum.

#pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)

10mhz osilatör ile benim ne kadar süre CLRWDT(); komutunu kullanmazsam pic resetlenir.

Hesabını öğretebilecek var mı ?

RaMu

Osilator farketmez,
wdt nin kendi rc osilatörü var picin içinde.
Ayarladığın (ayarlayabileceğin belli değerler var) değer kadar milisaniye
sonra resete sebep olur, yani
#pragma config WDTPS = 32768
için 32768 milisaniye içinde wdt yi clear yapmazsan pic resetlenir.

Datasheeti incelemen çok faydalı olur,
wdt timer0 ın prescaler ını kullanabiliyor,
timer0 ve wdt beraber kullanıldığında dikkat etmek gerekir.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Gökhan BEKEN

#25
WDTCON: WATCHDOG TIMER CONTROL REGISTER
diye bir register var, orda hangi ayarları yaptığınıza göre değişir.

bu registerın ilk 4 bitinin(WDTPS) değerleri, Prescale Rate değeridir, bunlar direkt olarak süreyi etkiler
WDTPS<3:0>: Watchdog Timer Period Select bits
Bit Value = Prescale Rate
0000 = 1:32
0001 = 1:64
0010 = 1:128
0011 = 1:256
0100 = 1:512 (Reset value)
0101 = 1:1024
0110 = 1:2048
0111 = 1:4096
1000 = 1:8192
1001 = 1:16384
1010 = 1:32768
1011 = 1:65536
1100 = reserved
1101 = reserved
1110 = reserved
1111 = reserved
Özel mesaj okumuyorum, lütfen göndermeyin.

Extreme

#26
ramazan hocam,

pic 18f4620 datashetti inceledim cok anlayamadım.

32768msn = 9 saniye yapar.

ama burda 1 saniye demiş

ben 32768 kullanırken 140saniye olarak uygulamada test ettim.

hangisi doğru hocam ?

RaMu

32768 ms =32768/1000 = 32,768 yaklaşık 33 saniye yapar.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Extreme

Ramazan hocam

20mhz osilatörlede 10mhz osilatörlede

33saniye mi ?

RaMu

#29
Daha önceki mesajdada söyledim ya
wdt nin kendi osilatörü var, mcuya bağladığın osilatörden bağımsız olarak çalışıyor.

Gökhan ın bahsettiği şeylere dikkat etmen gerekebilir,
kullandığın derleyici wdt ayarını kendi yapıyor mu bilmiyorum,
ccsc de basit bir satırla istediğin değeri veriyor ama
xc8 mplabx için registerları tek tek ayarlamak gerekeiliyor,
şurada Ramazan Subaşı nın bir yazısı var, 18f içinde temel oluşturabilir;
http://ramazansubasi.net/xc8-wdt-ve-sleep-uygulamasi/

mesaj birleştirme:: 10 Nisan 2015, 16:46:17



Yalnız benim çıkarımım şu;
kullandığın mcu nun 18F4620
en düşük WDT zamanı 4ms
ve xc8 de yazdığın
#pragma config WDTPS = X
X defa 4ms kadar bekleyip WDT resetlemesine sebep oluyor.

Yani
#pragma config WDTPS = 32768
dediğinde
32768 x 4 =  131072 ms yani  yaklaşık 130 saniye sonra WDT reset gerçekleşiyor.

İstersen
#pragma config WDTPS = 256
gibi deneyip 1 saniyede bir wdt reseti gerçekleşiyormu şeklinde test et,
sonra diğer değerleride test et,
tabi neden böyle olduğunuda araştırabilirsin.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html