Merhaba Arkadaşlar,
Aşağıdaki ATMEGA644PA için yapılmış olan tanımlamaları CCS C de 18F8772 için kullanmak istiyorum ama CCS e çeviremedim,
Bukonuda yardımcı olabilir misiniz?
#define I2C_SDA_DDR DDRC
#define I2C_SDA_PIN PINC
#define I2C_SDA_NR PC1 //ISR: PCINT17
#define I2C_SCL_PIN PINB
#define I2C_SCL_NR PB2 //ISR: INT2
#define BTN1_PIN PIND
#define BTN1_NR PD3 //ISR: INT1
#define BTN2_PIN PIND
#define BTN2_NR PD2 //ISR: INT0
#define SDA_SET I2C_SDA_DDR &= ~(1<<I2C_SDA_NR)
#define SDA_RESET I2C_SDA_DDR |= (1<<I2C_SDA_NR)
#define SDA_READ ((I2C_SDA_PIN & (1<<I2C_SDA_NR))>>I2C_SDA_NR)
#define SDA_IS_RESET (!(I2C_SDA_PIN & (1<<I2C_SDA_NR)))
#define SDA_IS_SET (I2C_SDA_PIN & (1<<I2C_SDA_NR))
#define SCL_IS_RESET (!(I2C_SCL_PIN & (1<<I2C_SCL_NR)))
#define SCL_IS_SET (I2C_SCL_PIN & (1<<I2C_SCL_NR))
#define BTN1_IS_RESET (!(BTN1_PIN & (1<<BTN1_NR)))
#define BTN1_IS_SET (BTN1_PIN & (1<<BTN1_NR))
#define BTN2_IS_SET (BTN2_PIN & (1<<BTN2_NR))
CCS direk I2C yi destekler.
#use I2C(Master,SDA = PIN_C4, SCL = PIN_C3,force_sw,fast=50000)
bu şekilde tanımlayın.
SDA = PIN_C4, SCL = PIN_C3 bularada istediginiz pinleri yazın.
Tanımladığınız pinlerde donanımsal I2C varsa "force_sw" yi "force_hw" yapabilirsiniz.
Sonra bu komutları kullanabilirsiniz
i2c_start()
i2c_write();
c =i2c_read();
i2c_stop();
Bu şekilde tanımlayıp yapmam lazım hocam,
S.a,
Aşağıdaki tanımlamamın anlamı nedir?
#define SET DDRC &= ~(1<<I2C_SDA_NR)
#define RESET DDRC |= (1<<I2C_SDA_NR)
#define READ ((PINC & (1<<PC1))>>PC1)
S.a,
Aşağıdaki tanımlamanın anlamı nedir?
#define SET DDRC &= ~(1<<PC1)
#define RESET DDRC |= (1<<PC1)
#define READ ((PINC & (1<<PC1))>>PC1)
Alıntı yapılan: thenorthstar - 16 Temmuz 2020, 09:42:58S.a,
Aşağıdaki tanımlamanın anlamı nedir?
#define SET DDRC &= ~(1<<PC1)
#define RESET DDRC |= (1<<PC1)
#define READ ((PINC & (1<<PC1))>>PC1)
SET makrosu ile C1 pini giriş yapılır
RESET makrosu ile C1 pini çıkış yapılır
READ makrosu ile C1 pininin durumu okunur
Alıntı yapılan: run - 16 Temmuz 2020, 13:36:54SET makrosu ile C1 pini giriş yapılır
RESET makrosu ile C1 pini çıkış yapılır
READ makrosu ile C1 pininin durumu okunur
@run , Teşekkür ederim hocam.
Hocam, (PINC & (1<<PC1)) buda pinin durumunu okumuyor mu? RED makrosu ile bu aynı mı?
Avr 'de pin okurken PINx, yazarken
PORTx, pin durumunu değiştirmek için
de DDRx kullanılıyor. İlgili mcu 'nun
kataloğuna bakın.
Bir de "George Boole" ile tanışın.
https://www.yandex.com.tr/turbo/s/tr.wikipedia.org/wiki/George_Boole
Alıntı yapılan: thenorthstar - 16 Temmuz 2020, 19:36:42@run , Teşekkür ederim hocam.
Hocam, (PINC & (1<<PC1)) buda pinin durumunu okumuyor mu? RED makrosu ile bu aynı mı?
read makrosu sonucu sadece 1 ve 0 olarak döndürür yani doğru olan okuma şekli
(PINC & (1<<PC1)) ise 0 ve 2 olarak döner
(PINC & (1<<PC3)) olarak kullanırsan bu kez de 0 ve 8 olarak döner
Teşekkür ederim