Professional Documents
Culture Documents
İleri Mikro 9 H
İleri Mikro 9 H
• Bir tümdevre çıkışının kaynak ve almaç modunda (source and sink) kullanımını anlama
ve açıklama
• TTL-CMOS ve CMOS-TTL arayüz devrelerini anlama ve tasarlama
• Sesli uyarıcılar, röleler, motorlar ve solenoidler için hem TTL hem de CMOS IC arayüz
devrelerinin çalışmasını açıklama.
• Optoizolatör arabirim devrelerini anlama.
• Bir servo motoru darbe genişliği modülasyonu (PWM) kullanılarak nasıl kontrol
edileceğini anlama.
• Bir step motorun birincil özelliklerini sıralama step motor sürücü devrelerinin çalışmasını
anlama.
• Açık kollektör çıkışları ve arayüzlerini anlama.
• Basit bir mantık devreleri ile ilgili sorunları giderebilme.
Hemen her elektronik devre dış dünya ile veri alışverişinde bulunmaktadır.
Kullanıcının bir butona basmasını algılama veya kullanıcıya bir sonucu göstermek için
bir LEDi yakma buna basit bir örnek olarak verilebilir.
Bu bölümün ilk kısmında temel giriş ve çıkış elemanlarının, ikinci kısmında ise farklı
lojik ailelere ait (CMOS, TTL...) devre ve sistemlerin birbirleriyle pratik ve basit şekilde
arayüzlenmesini öğreneceğiz.
Temel giriş elemanları olarak mekanik butonları, anahtarları, tuş takımlarını (keypad),
optik ve manyetik anahtarları, sinyal üreteçlerini, kodlayıcıları (encoder), analog ve
digital sensörleri sayabiliriz.
Bunlar dış dünya ile elektronik devre arasında ilişki kurmak için yaygın olarak
kullanılan cihazlardır.
Yani kullanıcı bir yıkama programını bir butona basarak seçer ve sonrasında başlat
butonuna basarak yıkama işlemini başlatır.
Sistem; yıkamanın başladığını, sürdüğünü, bittiğini veya bir hata olduğunu kullanıcıya
genelde ilgili LEDleri yakarak bildirir.
Kullanıcı; bir anahtar kullanarak, bir düğmeye basarak veya bir mıknatısı hareket
ettirerek girişin durumunu basitçe değiştirebilir
İŞ GÜVENLİĞİ UZMANLIĞI
İleri Mikrodenetleyiciler
TEMEL EĞİTİM PROGRAMI
pinMode(pin,mode); fonksiyonu
• Sentaks : pinMode(pin, mode);
• Parametreler : pin: Pin numarası.
mode: INPUT, OUTPUT, INPUT_PULLUP.
• Dönüş değeri : Yok
ÖRNEK KOD
void setup() {
pinMode(13, OUTPUT); // digital pin 13 çıkış
}
• ATMega serisi denetleyicilerde; bir digital I/O ucu pinMode(pin,mode); fonksiyonuyla giriş olarak ayarlanır.
Mode parametresi olarak INPUT belirlenirse ilgili pin giriş olarak ayarlanır ve yüksek empedans durumuna
(float=HiZ) geçer. Bu modda olan bir girişi boşta bırakmamalı, boşta kalacaksa harici dirençlerle yükseğe
veya düşüğe çekmeliyiz. Özellikle buton okumalarında bu husus önemlidir.
ÖRNEK KOD
void setup() {
pinMode(5, INPUT); // digital pin 5 giriş (float)
}
• ATMega serisi denetleyicilerde; bir digital I/O ucu giriş olarak ayarlandığında yüksek empedans durumuna
(float=HiZ) geçer. Pin float durumundayken eğer pin dışarıdan herhangi bir lojik seviyeye çekilmemiş ise
gürültüye açık halde olur ve gürültülü bir ortamda pin ucunda sahte sinyaller oluşabilir. Giriş olarak
ayarlanmış bir pini boşta bırakmak istemezsek ya dışarıdan bir dirençle yukarı veya aşağı çekmeli ya da
dahili yukarı çekme direncini programla aktif etmeliyiz.
• Dahili yukarı çekme direncini programla aktif etmenin iki yolu vardır.
1. Pin giriş olarak ayarlandıktan sonra yükseğe çekilir.
2. INPUT-PULLUP moduna alınır.
ÖRNEK KOD
void setup() {
pinMode(5, INPUT); // digital pin 5 giriş (float) Dahili
pinMode(8, INPUT_PULLUP); // digital pin 8 giriş pull-up pul-up
} direnci
Not:
1. Arduino port pinlerine besleme geriliminden daha yüksek
ve toprak seviyesinden daha düşük yani negatif gerilim
verilmemelidir.
2. PU direnci 20k-50k arasında bir değerde olur.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME
• Arduino’da herhangi bir digital I/O pininden farklı formatlarda dijital çıkış üretmek mümkündür. Bu amaç
için üç fonksiyon kullanılır.
1. digitalWrite()
2. tone()
3. shiftOut()
ÖRNEK KOD:
void setup() {
pinMode(13, OUTPUT); //digital pin 13 çıkış
}
void loop() {
digitalWrite(13, HIGH); // digital pin 13 Lojik 0
delay(1000); // 1000mS= 1 saniye bekle
digitalWrite(13, LOW); // digital pin 13 Lojik 0
delay(1000); // 1 saniye bekle
}
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME
Digital pinlerin başlangıç (default) durumları:
• AVR chipli arduinolarda tüm port pinleri başlangıç durumunda yüksek
empedans (float) durumundadır.
• Bu durum pinlerin çalışmaya giriş olarak başladıkları anlamına da gelir.
• Daha sonra pinMode (pin, OUTPUT); yaparsanız, pin OUTPUT LOW'a
döner.
• Bununla birlikte, pini önce INPUT_PULLUP'a ve ardından OUTPUT'a
ayarlarsanız, pin, OPUTPUT HIGH durumuna geçer.
• Bazen, pinlerin OUTPUT'a çevrildiğinde sahip olacakları durumu tam olarak
garanti altına almak istersiniz.
• Örneğin, bir pini OUTPUT olarak ayarladığınızda HIGH durumundan
kaçınmak istediğiniz durumda en güvenli yol, pini OUTPUT'a değiştirmeden
önce çıkış seviyesini LOW’a çekmektir.
digitalWrite (pin, LOW); // önce bunu yap
pinMode (pin, OUTPUT);
• Yukarıdaki kodda pini OUTPUT olarak ayarlamadan önce pine LOW yazdık.
OUTPUT olarak ayarlanmamış bir pin üzerinde digitalWrite ()
gerçekleştirmenin bir yan etkisi, pine LOW’ yazarsanız INPUT'a (float), HIGH
yazarsanız INPUT_PULLUP'a geçmesidir. Eğer bir pin harici olarak düşük bir
seviyeye bağlı iken INPUT_PULLUP'a geçirilirse pinden dışarıya doğru akım
akacaktır. Bu durumlar, AVR IO bağlantı noktalarının bir özelliğidir.
• Kodunuzun okunabilir ve taşınabilir olmasını istiyorsanız, bu durumu dikkate
alarak kodlama yapmalısınız.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO DIGITAL ÇIKIŞ ÜRETME tone() FONKSİYONU
• tone() fonksiyonu, herhangi bir dijital I/O pininde belirlenen frekansta belirlenen süre boyunca %50 görev
döngüsüne sahip kare dalga üretmeyi sağlar. Süre sınırı isteğe bağlıdır. Bu sebeple tone() fonksiyonunu iki
prototipi vardır. Birinde süre parametresi yoktur birinde vardır.
• Bir süre belirtilebilir, aksi takdirde sinyal, noTone() fonksiyonu çağrılana kadar kadar devam eder. Pin, tonları
çalmak için bir piezo veya başka bir hoparlöre bağlanabilir.
• Bir seferde yalnızca bir ton üretilebilir. Zaten farklı bir pin üzerinde bir ton çalıyorsa, ton çağrısının () bir etkisi
olmayacaktır. Ton aynı pin üzerinde çalıyorsa, çağrı frekansını ayarlayacaktır.
• 3 ve 11 pinlerinde tone() işlevinin kullanılması, (Mega dışındaki kartlarda) PWM çıkışını engelleyecektir.
• 31Hz-65535Hz aralığında tonlar üretilebilir.
• Birden fazla pin üzerinde farklı tonlar çalmak istiyorsanız, sonraki pin için tone() çağırmadan önce mevcut
pin için noTone()'u çağırmanız gerekir.
Fonksiyon yapısı ve detayları aşağıdaki gibidir.
Sentaks :
tone(pin,frekans);
tone(pin,frekans,süre);
Dönüş değeri : Yok
Parametreler :
pin: Pin numarası,
frekans: 31-65535
süre: Milisaniye cinsisnden unsigned long
ÖRNEK KOD:
void setup() {
tone(8, 330, 500);
delay(1000);
noTone(8);
}
void loop() {
void setup() {
//set pins to output because they are addressed
in the main loop
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
//count up routine
for (int j = 0; j < 256; j++) {
//ground latchPin and hold low for as long as
you are transmitting
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, j);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(latchPin, HIGH);
delay(1000);
}
}
Q7’1->DS1
int pin = 7;
unsigned long darbe_suresi;
void setup() {
Serial.begin(9600);
pinMode(pin, INPUT);
}
void loop() {
darbe_suresi = pulseIn(pin, HIGH);
Serial.println(darbe_suresi);
}
int pin = 7;
unsigned long darbe_suresi;
void setup() {
Serial.begin(9600);
pinMode(pin, INPUT);
}
void loop() {
darbe_suresi = pulseInLong(pin, HIGH);
Serial.println(darbe_suresi);
}
void setup()
{
// Setup Serial Monitor
Serial.begin(9600);
• Analogdan Dijitale Dönüştürücü bir giriş voltajını dijital bir değere dönüştürür.
• Arduino ADC standart olarak 0V ile 5V arasındaki gerilimleri 4.88mV çözünürlükle dijitale dönüştürür,
int val;
val = analogRead (A4);
• Gördüğünüz gibi giriş ucunun (A0 ~ A5) seçimi programla otomatik olarak yapılmaktadır.
ADC'lerde, ideal giriş eşik değeri ile belirli bir çıktı kodunun
ölçülen eşik değeri arasındaki sapmadır.
• Arduino ADC'nin 10 bitlik bir dönüştürücüsü vardır ve bu, ADC'nin çıkışında 210=1024 farklı değer olacağı
anlamına gelir:
• Vref; 5 voltluk Arduino kartlarında 5V, 3.3 voltluk Arduino kartlarında 3.3V’tur.
• Dolayısıyla, Vref = 5V için, 1 LSB bitlik bir ADC adımı, 4.88mV'lik bir Voltaj adımıyla sonuçlanır.
• Yani Arduino ADC çözünürlüğü 4.88mV’tur.
• Bununla birlikte, maksimum ADC çıkış değerinin 1023 olduğunu ve bu nedenle ölçülebilecek maksimum
ADC analog giriş voltajının şu şekilde olduğunu unutmayın:
• Yukarıdaki frekans 16MHz kristalli Arduino’nun maksimum örnekleme frekansıdır, ancak bir sinüs
dalgasını yeniden üretmek için örnekleme frekansı sinyal frekansının en az iki katı olmalıdır (Nyquist
ktiteri).
• Bir başka deyişle, güvenle yeniden üretebileceğiniz sinyalin bant genişliği örnekleme frekansının en
fazla yarısı olmalıdır.
• Uyarı: 9.615kHz örnekleme hızı ile en yüksek 4.8kHz sinyalleri örnekleyebiliriz.
• Ancak bu sadece sinüs dalgaları ile ilgilidir.
• 4.8kHzlik bir kare dalgayı yeniden üretemezsiniz çünkü kare dalganın kenarları çok daha yüksek
frekanstadır
• Aslında 4.8kHz'lik bir kare dalgayı dönüştürerek yeniden oluşturmaya çalışırsanız 4.8kHz'lik bir sinüs
dalgası elde edersiniz.
• Dijital osiloskopların istenen maksimum çalışma frekansından yaklaşık 10 kat daha yüksek örnek
hızlarına sahip olmasının nedeni budur.
• Uyarı: Referans pinine harici bir voltaj uygularken asla dahili referansı açmayın.
• Dahili referansı açmadan önce, uygulanan harici voltaj olmadığını kontrol edin. Varsa, muhtemelen bir
şeyi patlatacaksınız (ADC blok şemasına bakın).
• 'Dahili 1V1 referans' voltajı ve AVCC voltajı, bir MUX aracılığıyla ve ardından bir MOSFET aracılığıyla
kontrol edilir ve ardından AREF'e bağlanır. Harici bir voltaj uygulanır ve referans veya AVCC seçilirse,
MOSFET (ve MUX) voltaj farkı yanmaya sebep olur!
• NOT: Bazı kartlarda başka dahili voltaj referans seviyeleri mevcuttur. Daha fazla bilgi için Arduino
analogReference() sayfasına bakın.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
analogRead() FONKSİYONU
• Belirtilen analog pinden değeri okur. Arduino kartları çok kanallı, 10-bit analogdan dijitale dönüştürücü içerir.
Bu, 0 ile çalışma voltajı (5V veya 3.3V) arasındaki giriş voltajlarını 0 ila 1023 arasındaki tam sayı değerlerine
eşleyeceği anlamına gelir.
• Örneğin bir Arduino UNO'da bu, 5 volt / 1024 birim veya birim başına 0,0049 volt (4,9 mV).
• Giriş aralığı analogReference () kullanılarak değiştirilebilirken çözünürlük analogReadResolution ()
kullanılarak değiştirilebilir (yalnızca Zero, Due ve MKR kartları için).
• ATmega tabanlı kartlarda (UNO, Nano, Mini, Mega), bir analog girişi okumak yaklaşık 100 mikrosaniye
(0.0001 sn) sürer, bu nedenle maksimum okuma hızı saniyede yaklaşık 10.000 kezdir.
• Fonksiyon yapısı ve detayları aşağıdaki gibidir.
Sentaks :
analogRead(pin)
Dönüş değeri : int tipinde 0-1023 aralığında tamsayı,
Parametreler :
pin: Okunacak analog giriş pininin adı (çoğu kartta A0 ila A5, MKR kartlarında A0 ila A6, Mini ve
Nano'da A0 ila A7, Mega üzerinde A0 ila A15).
void setup() {
Serial.begin(9600);
}
void loop() {
val = analogRead(analogPin);
Serial.println(val);
}
Normal açık tek kutup tek yol anahtar (Normally open SPST switch)
Negatif Lojik
Pozitif Lojik
Thinkercad
void setup()
{
pinMode(c1, OUTPUT);
int r1=11;
pinMode(c2, OUTPUT);
int r2=10;
pinMode(c3, OUTPUT);
int r3=9;
int r4=8;
pinMode(c4, OUTPUT);
int c1=7; pinMode(r1, INPUT);
int c2=6; pinMode(r2, INPUT);
int c3=5; pinMode(r3, INPUT);
int c4=4; pinMode(r4, INPUT);
int rd1; digitalWrite(r1,HIGH);
int rd2;
digitalWrite(r2,HIGH);
int rd3;
digitalWrite(r3,HIGH);
int rd4;
digitalWrite(r4,HIGH);
Serial.begin(9600);
}
• MM74C922 kodlayıcı, 16 tuşlu bir anahtar matrisini dijital bir sisteme bağlamak için
gerekli tüm mantığı sağlar.
• Kodlayıcı çipi bir tuşa basmayı bekleyen tuş takımını sürekli olarak tarar.
• Bir anahtara basıldığında, çıkış uçları D, B, C ve A'da basılmış anahtara karşılık
gelen 4 bitlik bir nibble sağlar.
• Çip, çalıştırmak için Keybounce Mask pinine (6) tek bir harici kapasitörün
bağlanmasını gerektiren dahili bir debounce devresi içerir.
• Kondansatörün değeri, gerekli debounce süresine bağlıdır.
• Geçerli bir tuşa basma algılandığında ve tuş debounce devresi zaman aşımına
uğradığında, kodlanan veriler çıkış bağlantı noktasına kilitlenir ve Veri Kullanılabilir
(DAV) pini (11) yükselir.
• Basılan tuş bırakıldığında DAV pini alçalır. DAV çıkışı, böylece bir tuş vuruşu
olduğunda işlemci için bir kesme sinyali olarak kullanılabilir.
• Mandallı (Latch) çıkış, anahtar bırakıldıktan sonra bile A-D pinlerinde aktif kalır.
• Yeni veriler yeni bir tuşa basıldığında oluşur.
• Çip ayrıca, aktif bir tuş vuruşu sırasında herhangi bir ikinci tuşa basmayı göz ardı
eden iki tuşlu rollover özelliğine sahiptir.
• Tuş takımı tarama hızı, Osilatör pinine (5) bağlı harici bir kondansatör ile de
yapılandırılabilir.
• Aşağıdaki grafikler, bekleme süresi ve tarama hızının ilgili kapasitör değerlerine
bağımlılığını göstermektedir.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
74922 TUŞ TAKIMI KODLAYICISI
Bacak yapısı:
• Bu bölümde, bir matris tuş takımının bir ana mikro denetleyiciye 74922 ile nasıl
arayüzleneceğini göreceğiz.
• Burada Arduino platformunu kullanıyoruz ama aynı mantık başka bir
mikrodenetleyici platformuna uygulanabilir.
• Tuş takımı Arduino kartından 5V besleme ile çalışır.
• DAV çıkış pini, Arduino kartının INT0 (dijital I / O pin 2) pinine gider.
• Bu, bir tuş vuruşu algılandığında, Arduino'nun basılan tuş değerini okumak için ilgili
kesme rutinine dallanacağı anlamına gelir.
• Enkoder çıkış pinleri A, B, C ve D, sırasıyla Arduino dijital I / O pimlerine 7, 6, 5 ve 4
bağlanır.
• Aşağıdaki resim bu projenin tüm kurulumunu göstermektedir.
• Algılanan tuş vuruşu PC'deki Seri Monitör penceresinde görüntülenir.
𝑉𝑐𝑐
𝐼=
𝑅𝑡𝑜𝑝
𝑉𝑎𝑑𝑐𝑛 = 𝐼 ∗ 𝑅𝑥
𝑉𝑐𝑐
𝑉𝑎𝑑𝑐𝑛 = ∗ 𝑅𝑥
𝑅𝑡𝑜𝑝
Vadc0 = 0
𝑉𝑐𝑐 ∗ 𝑅1
Vadc1=
𝑅𝑐𝑐+𝑅1
𝑉𝑐𝑐 ∗ (𝑅1+𝑅2)
Vadc2=
𝑅𝑐𝑐+𝑅1+𝑅2
𝑉𝑐𝑐 ∗ (𝑅1+𝑅2+𝑅3)
Vadc3=
𝑅𝑐𝑐+𝑅1+𝑅2+𝑅3
𝑉𝑐𝑐 ∗ (𝑅1+𝑅2+𝑅3+𝑅4)
Vadc4=
𝑅𝑐𝑐+𝑅1+𝑅2+𝑅3+𝑅4
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ADC Girişi ile buton çoklama
• Örneğin bir döner kodlayıcıyı okumak, sensörleri veya tuşları taramak, haberleşme
portlarından ver beklemek gibi zaman harcanan uygulamalarda kesme kullanmak
iyi bir çözümdür.
Kesmeli Çalışma
• Bekçi zamanlayıcısı (örn. 8 saniye sonra hiçbir şey olmazsa, beni durdur)
• Seri bağlantı noktası, SPI bağlantı noktası veya I2C bağlantı noktasından veri
gönderilirken veya alınırken bir programın başka bir şey yapmasına izin vermek için
kullanılabilir.
• pin değişim kesmeleri, tuş takımında veya benzeri bir tuşa basıldığında işlemciyi
uyandırmak için kullanılabilir.
• İşlemci ayrıca bir zamanlayıcı kesmesi (örn. Belirli bir değere ulaşan veya taşan bir
zamanlayıcı) ve gelen I2C mesajı gibi diğer bazı olaylarla da uyandırılabilir.
interrupts ();
veya
sei (); // set interrupts flag
noInterrupts ();
veya
cli (); // clear interrupts flag
Her iki yöntem de aynı etkiyi yaratır, "interrupts" / "noInterrupts" komutunu kullanmanın
nasıl bir yol olduğunu hatırlamak biraz daha kolaydır.
Ayrıca çok baytlı alanlar bir ISR tarafından güncelleniyorsa, verileri "atomik olarak" almak
için kesintileri devre dışı bırakmanız gerekebilir. Aksi takdirde, bir bayt okunurken diğeri
ISR tarafından güncellenebilir.
• Bir kerede birden fazla kesme olayı meydana gelebilir veya en azından biri, bir
öncekinin işlenmesinden önce gerçekleşebilir.
• Böylece, örneğin, Harici Kesme İsteği 1'den (pin D3) önce bir Harici Kesme İsteği 0'a
(pin D2) servis yapılır.
PARAMETRELER:
Bir kesmeyi kullanmak için o kesmeye ait önceden tanımlı sabiti (kesme vektörleri)
bilmemiz gerekir. Kesme vektörlerini ezberlemek yerine:
• Örneğin, Uno'da, kesme 0, D2 pinindedir ve aşağıdaki iki satır aynı etkiye sahiptir.
• Ancak ikincisinin okunması daha kolay ve farklı Arduino tiplerine daha taşınabilirdir.
• Dış kesmeler, Arduino'nun özel pinlerinde gerçekleşen voltaj değişimlerini takip eden
kesmelerdir.
• Örneğin Arduino'nun dış kesme pinine bağlanmış bir düğmeye basıldığında, dış kesme
Arduino'ya otomatik olarak haber verir.
• Bu kesme sayesinde Arduino sürekli olarak düğmeye basılıp basılmadığını kontrol etmek
zorunda kalmaz, bu sırada başka işlemleri yerine getirebilir.
• Bu fonksiyonun içinde kullanılacak olan sayı, pinin numarası değil, kesme vektör
numarasıdır.
• Örneğin Arduino Uno kullanıcısı 2. pindeki kesmeler için 0, 3. pindeki kesmeler için
1 değerini kullanmalıdır.
• Bundan kurtulmak için digitalPinToInterrupt (pin) foksiyonunu kullanırız.
• Butona basıldığında Arduino'nun 13. pinine bağlanmış olan LED yakılıp söndürülür.
• Dış kesme kullanılması Arduino'nun sürekli buton durumunu kontrol etmek zorunda
kalmasını engeller.
• Butona basıldığında Arduino kesme birimi otomatik olarak tetiklenir ve kesme servis
fonksiyonu çalışır.
• Böylece; butona basılmadığı sürece Arduino butonu okumak zorunda kalmadan diğer
işlemleri yerine getirebilir.
void loop ()
{
for(i=0;i<1000000;i++){
Serial.println(i);
}
}
• Kullanıcı butondan elini çektiğinde yine dış kesme kullanılarak, LED otomatik olarak
söndürülür.
• Dış kesme kullanılması Arduino'nun sürekli buton durumunu kontrol etmek zorunda
kalmasını engeller.
• Butona basıldığında veya butondan el çekildiğinde, Arduino kesme birimi otomatik olarak
tetiklenir ve kesme servis fonksiyonu çalışır.
• Böylece; butona basılmadığı sürece Arduino butonu okumak zorunda kalmadan diğer
işlemleri yerine getirebilir.
void loop()
{
Serial.println("Arduino burada baska islemler yapabilir");
delay(100);
}
Örneğin 1 saniyede bir kodda nerede olursak olalım sensörden veri okumak istersek bu kesmeyi
kullanabiliriz. Kod o sırada delay fonksiyonu içinde bile olsa sensörden veri almaya devam
edecektir.
Örneğin bir LED'in belli aralıklarla yakılıp söndürülmesi gerekmektedir. Bu işlem için loop
fonksiyonunun kullanılması yerine, zamanlayıcı kesmesinin kullanılması Arduino programının
rahatlamasını sağlayacaktır. Kullanılan kesme belirlenen zaman dolunca işlemciye haber vererek,
LED'in yakılıp söndürülmesini sağlayacaktır.
Zamanlayıcı kesmesi kullanımı için zaman sayıcısının değerleri ayarlanmalıdır. Zaman sayıcısı,
her saat sinyalinde 1 artan sayaç gibi düşünülebilir ve taşma değerine ulaştığında sıfırlanır ve
sürenin dolduğu anlaşılır ve Arduino'ya sürenin dolduğunu, kesmenin yapılması gerektiğini bildirir.
İşlemcimiz kesme fonksiyonu içerisine girer.
Normal Mod:
Saat kaynağı (dahili saatten veya harici bir kaynaktan) darbeleri ön ölçekleyiciye gönderir ve ön
ölçekleyici darbeleri belirli bir oranda bölerek kontrol devresine iletir. Kontrol devresi, TCNTn
yazmacını 1 artırır. TCNTn son değere ulaştığında (8 bit zamanlayıcılarda 0xFF ve 16 bit
zamanlayıcıda 0xFFFF) 0'a döner, TIFR yazmacındaki TOVn bitini set ederek kesmeyi tetiklemek
için kullanılabilecek (zamanlayıcı taşması) sinyali gönderir.
Normal Mod ile ilgili sorun, kesin bir aralık için kullanmanın çok zor olmasıdır, çünkü bu Normal
Mod yalnızca spesifik olmayan bir zaman aralığına ihtiyacınız varsa yararlıdır. Bu sınırlama
nedeniyle, birçok programcı zamanlayıcılar için CTC modunu kullanmayı seçer.
CTC Modu:
CTC, "Clear Timer on Compare" anlamına gelir ve aşağıdakileri yapar.
Saat kaynağı (dahili saatten veya harici bir kaynaktan) darbeleri ön ölçekleyiciye gönderir ve ön
ölçekleyici darbeleri belirli bir oranda bölerek kontrol devresine iletir. Kontrol devresi, TCNTn
yazmacını 1 arttırır. TCNTn yazmacı, her artımdan sonra OCRn yazmacı ile karşılaştırılır. Bir
eşleşme gerçekleştiğinde TIFR yazmacındaki TOVn biti set edilerek kesmeyi tetiklemek için
kullanılabilecek (zamanlayıcı taşması) sinyali gönderilir.
OCRn bir tam sayı olmak zorunda. Ondalık bir sayı olursa, istediğiniz süre kesin olmayacaktır.
Ayrıca sayınız OCRn’ sığmalıdır.
8bit zamanlayıcılar için en fazla 255 ve 16bit zamanlayıcı için en fazla 65535.
• Timer1 – 16-bit bir zamanlayıcıdır. Counter değişkeni maksimum 65535 değerini alır. Servo
kütüphanesi bu zamanlayıcıyı kullanmaktadır.
• Timer2 – 8-bit bir zamanlayıcıdır. Counter değişkeni maksimum 255 değerini alır. tone()
fonksiyonu bu zamanlayıcıyı kullanmaktadır.
• Kullandığınız işlemcide bunların dışında farklı Timer3, Timer4, Timer5 gibi zamanlayıcılar
bulunabilir. Gerekli bilgilere onların pdfleri üzerinden ulaşabilirsiniz. Genel anlamda yapacağımız
ayarlamaların hepsi birbiri için geçerli olacaktır.
OCRn = 15,624
void setup(){
cli();
pinMode(LED,OUTPUT); // set up LED for OUTPUT
TCCR1A = 0; // Timer1 A kontrol yazmacını temizle
TCCR1B = 0; // Timer1 B kontrol yazmacını temizle
TCCR1B |= (1 << WGM12); // CTC mode bitini set et
TCCR1B |= (1 << CS12) | (0 << CS11) | (1 << CS10);// ön ölçek 1024
OCR1A = 15624; // 15624 (1 saniye)
TIMSK1 |= (1 << OCIE1A); // OCR1A üzerindeki kesmeyi aktif et
TCNT1 = 0; // Sayıcıyı sıfırla
sei();
}
void loop(){
delay(10000); // uzun bir görev
}
void setup(){
cli();
pinMode(LED,OUTPUT); // set up LED for OUTPUT
TCCR1A = 0; // Timer1 A kontrol yazmacını temizle
TCCR1B = 0; // Timer1 B kontrol yazmacını temizle
TCCR1B |= (1 << WGM12); // CTC mode bitini set et
TCCR1B |= (1 << CS12) | (0 << CS11) | (1 << CS10);// ön ölçek 1024
OCR1A = 23437; // ( 23437 1.5 saniye için)(2 sn için 31249)
TIMSK1 |= (1 << OCIE1A); // OCR1A üzerindeki kesmeyi aktif et
TCNT1 = 0; // Sayıcıyı sıfırla
sei();
}
void loop(){
delay(10000); // uzun bir görev
}
https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/arduino-401/zaman-kesmesi-timer-interrupt
https://maker.robotistan.com/arduinoda-kesme-islemleri/
https://sites.google.com/site/qeewiki/books/avr-guide/timers-on-the-atmega328
https://www.instructables.com/id/Arduino-Timer-Interrupts/
• Optik eleman; ışığa duyarlı eleman olup üzerine düşen ışık miktarındaki değişimleri elektriksel
değişimlere dönüştürürler.
• Optik eleman çeşitleri şunlardır
• https://uk.rs-online.com/web/c/displays-optoelectronics/optocouplers-photodetectors-photointerrupters/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OPTİK ANAHTARLAR (PHOTO INTERRUPTER)
OPTICAL SWITCH
• Optik Anahtarlar (veya opto anahtarlar), giriş arabirimi olarak kullanılabilecek bir tür optik
elemandır.
• Bunlardaki avantaj; optik anahtarların, nesne algılarken; mikrodenetleyicilerin ve diğer
dijital devrelerin giriş pinlerini zararlı voltaj seviyelerinden korumasıdır.
• Çünkü optik anahtarlar, birbirinden elektriksel olarak yalıtılmış olan ve ışıkla haberleşen
iki bileşenden oluşmaktadır ve izolasyon gerilimleri 2-5kV civarındadır.
• Optik anahtarlar, çeşitli arabirim uygulamalarında kullanım için farklı tip ve tasarımlarda
olur.
• Optik-anahtarlar için en yaygın kullanım, hareketli veya sabit nesnelerin tespit
edilmesidir.
• Fototransistör ve photodarlington konfigürasyonları, optik-anahtarlar için gereken
özelliklerin çoğunu sağlar ve bu nedenle çok yaygın olarak kullanılır.
• Bir yanında DC giriş sinyalini kızılötesi ışık enerjisine dönüştüren bir ışık yayan diyot (LED)
bulunur.
• Bu ışık, izolasyon boşluğunun diğer tarafındaki fototransistör tarafından toplanır ve çıkış
sinyaline dönüştürülür.
• https://www.electronics-tutorials.ws/io/input-interfacing-circuits.html
• Oluklu optik sensörler, konumsal enkoderler, şaft enkoderler ve hatta bilgisayar farenizin döner
tekerleğinde yaygın olarak kullanılırlar ve mükemmel giriş arayüz cihazlarıdırlar.
• Döner disk, opak bir tekerlekten kesilmiş eşit aralıklı bir dizi yuvaya sahiptir ve yuvaların sayısı
dönme derecesi başına çözünürlüğü temsil eder.
• Diskin dönmesi sırasında LED'den gelen kızılötesi ışık, yuvadan geçerek fototransistöre çarpar
ve disk döndükçe bloke edilir. Böylece yuvanın her geçişinde transistörü “AÇIK” ve ardından
“KAPALI” duruma getirir.
• Çıkış bir dijital sayaca bağlanırsa, şaftların dakika başına devir sayısını (rpm) vermek, şaftların
konumunu belirlemek veya birim zaman başına şaft devir sayısını saymak mümkün olacaktır.
• Ayrıca doğrusal pozisyon belirleme, nesne algılama da yapılabilir.
𝑰𝒇 ∗ 𝑪𝑻𝑹
𝑰𝒄 =
𝟏𝟎𝟎
• Örnek: If=20mA için CTR= %10 ile %20 arasında olduğuna göre çıkış transistörünün kollektör
akımı kaç mA olacaktır.
• Çözüm: CTR, çalışma sıcaklığı ve yaş arttıkça azalacağı için minimum değerle maksimum
değer arasında seçilmelidir.
• CTR=%15 alırsak
𝑰𝒇 ∗𝑪𝑻𝑹
• 𝑰𝒄 =
𝟏𝟎𝟎
20∗15
• 𝐼𝑐 =
100
• 𝑰𝒄 = 𝟑𝒎𝑨
𝑽𝒄𝒄 − 𝑽𝑪𝑬𝑺𝑨𝑻
𝑹𝒄 =
𝑰𝑪
𝟓−𝟎,𝟒
𝑹𝒄 = _ =1533Ω=1600 Ω
𝟑∗𝟏𝟎 𝟑
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLARIN ARAYÜZ TASARIMI
• https://www.electronics-tutorials.ws/io/input-interfacing-circuits.html
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OLUKLU TİP OPTİK ANAHTARLARIN ARAYÜZ TASARIMI
• AKIMI AZALTMA
• Çıkış kısmındaki fototransistörün akımı, LED'den ne kadar ışık geldiğine bağlıdır.
• Rc yi büyüterek Rc'den geçen akımı olabildiğince azaltıp daha sonra transistör hala yeterli ışık
alana kadar LED akımını azaltabiliriz.
• Fakat bu durumda transistörün kapatma süresiyle ilgili bir sorun ortaya çıkar.
• Transistörün kollektör akımı düşük olduğunda kapatma süresi çok artar.
• Devrenizin yüksek empedansı nedeniyle ek gürültü problemleri alabileceğiniz için Rc'yi çok
artırmayınız.
• Gerçek uygulamanızda, güvenli ve kararlı çalışma için LED akımını yaklaşık% 30…% 50
artırmayı düşünün.
• Gerçekte, aynı tipte olsalar bile, bireysel fotosel kesicilerin farklı performansları vardır.
• Performans sıcaklık ve zamanla da değişir.
https://www.vishay.com/docs/81147/tcst2103.pdf
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR
https://sites.google.com/site/myscratchbooks/home/projects/project-11-infrared-speed-sensing-module
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR
https://sites.google.com/site/myscratchbooks/home/projects/project-11-infrared-speed-sensing-module
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR
https://androminarobot.blogspot.com/2016/04/tutorial-sobre-el-encoder-fotoelectrico.html
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR
https://sites.google.com/site/myscratchbooks/home/projects/project-11-infrared-speed-sensing-module
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR
https://sites.google.com/site/myscratchbooks/home/projects/project-11-infrared-speed-sensing-module
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
OUKLU TİP OPTİK ANAHTARLAR
int encoder_pin = 2; // encoder pin
unsigned int rpm; // rpm
volatile byte darbeSayisi; // pulse sayısı
unsigned long zamanilk;
unsigned int yarikSayisi = 20; //Disk yarık sayısı
• https://www.electronics-tutorials.ws/io/input-interfacing-circuits.html
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
YANSITICI TİP OPTİK ANAHTARLAR
• https://osoyoo.com/2018/12/21/arduino-lesson-ir-obstacle-avoidance-module/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
YANSITICI TİP OPTİK ANAHTARLAR
• https://osoyoo.com/2018/12/21/arduino-lesson-ir-obstacle-avoidance-module/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
YANSITICI TİP OPTİK ANAHTARLAR
• https://osoyoo.com/2018/12/21/arduino-lesson-ir-obstacle-avoidance-module/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
YANSITICI TİP OPTİK ANAHTAR ARDUINO UYGULAMASI
• https://osoyoo.com/2018/12/21/arduino-lesson-ir-obstacle-avoidance-module/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
YANSITICI TİP OPTİK ANAHTAR ARDUINO KODU
int LED = 13;
int engelPin = 2; // This is our input pin
int engelVarmi = HIGH;
void setup() {
pinMode(LED, OUTPUT);
pinMode(engelPin, INPUT);
Serial.begin(9600);
}
void loop() {
engelVarmi = digitalRead(engelPin);
if (engelVarmi == LOW){
Serial.println("ENGEL!!, ENGEL!!");
digitalWrite(LED, HIGH);
}else{
Serial.println("TEMIZ");
digitalWrite(LED, LOW);
}
delay(200);
}
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
PWM TEKNİĞİ
• Mikrodenetleyici ve lojik entegre gibi dijital çıkış veren elektronik elemanların çıkışlarına, DC
motor, LED, lamba, analog aktüatör veya hoparlör gibi analog cihazları bağlamak ve onları
verimli bir şekilde kontrol etmek sık sık ihtiyaç duyulan uygulamalardır.
• Analog devreleri dijital olarak kontrol etmek, sistem maliyetlerini ve güç tüketimini büyük
ölçüde azaltabilir.
• Yani PWM, dijital bir kaynak kullanarak analog bir sinyal üretme yöntemidir.
• PWM sinyalleri çok çeşitli kontrol uygulamaları için kullanılır. Ana kullanım alanları DC
motorları ve LEDleri kontrol etmektir, ancak vanaları, pompaları, hidrolikleri ve diğer mekanik
parçaları kontrol etmek için de kullanılabilir.
• Yüke aktarılan ortalama voltaj (ve akım) değeri, besleme kaynağı ile yük arasındaki anahtarın
hızlı bir şekilde açılıp kapatılmasıyla kontrol edilir.
• Anahtarın kapalı ve açık kalma süreleri, yüke aktarılan ortalama gücü ayarlar. Anahtar, kapalı
kalma sürelerine kıyasla ne kadar uzun süre açık kalırsa, yüke sağlanan toplam güç o kadar
yüksek olur.
• PWM sinyalinin frekansı yani anahtarlama hızı (veya frekans), uygulamaya ve çalıştırılan
sistemin yanıt süresine bağlı olacaktır. PWM anahtarlama frekansı yükü etkilemeyecek kadar
yüksek olmalıdır, yani yük tarafından algılanan dalga formunun mümkün olduğunca pürüzsüz
olması gerekir.
• Örneğin, elektrikli bir ocakta dakikada birkaç ile 100 Hz arasında veya daha yüksek, bir lamba
dimmerinde 120 Hz veya daha yüksek, bir motor sürücüsü 5-10 kHz veya daha yüksek, güç
kaynakları veya ses amplifikatörlerinde 20-200 kHz veya üstü olmalıdır.
• Bazı sistemler, istenen yanıt türüne bağlı olarak burada listelenenlerden daha hızlı frekanslara
ihtiyaç duyabilir.
• Dijital bir sinyali belirli bir görev döngüsüyle yeterince hızlı şekilde kapatıp açarsak, çıkış
cihazlarına sağlanan güç, analog bir sinyal gibi davranacaktır.
• Çıkışta oluşan sinyalin analog değerini Görev Döngüsü belirler.
• Örnek: 5V yüksek (açık) ve 0V düşük (kapalı) olan bir dijital kaynaktan, 3V analog sinyal
oluşturmak için, 5V un % 60'ını veren % 60 görev döngülü bir PWM kullanabiliriz.
• Dijital sinyalin frekansı yeterince yüksek olursa, çıkışta ortalama voltaj görünür.
• Dijital düşük 0V ise (genellikle durum budur), çıkışın ortalama voltaj değeri, dijital yüksek
voltajın görev döngüsü ile çarpımı olacaktır. Yani 5V x 0.6 = 3V hesaplanır.
• % 80'lik bir görev döngüsünün seçilmesi çıkışta 5V x 0.8= 4V, % 20‘lik seçilmesi 1V verir vb.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
PWM DALGA ŞEKLİ
ANALOG
PWM SİNYALİ DEĞER
int PWMPin = 9;
int analogGirisPin = 0;
int deger = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
deger = analogRead(analogGirisPin);
analogWrite(PWMPin, deger / 4);
Serial.println(deger/4);
}
10 İleri 01 Geri
10 İleri 01 Geri
http://qqtrading.com.my/stepper-motor-driver-module-L298N
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO VE L298N İLE DC MOTOR SÜRME
int IN1 = 4; // Motor B ileri
int IN2 = 5; digitalWrite(IN3, HIGH);
int speedPinA = 9; digitalWrite(IN4, LOW);
int IN3 = 6; delay(2000);
int IN4 = 7;
int speedPinB = 10; // Motor B dur
digitalWrite(IN3, HIGH);
void setup(){ digitalWrite(IN4, HIGH);
pinMode(IN1, OUTPUT); delay(500);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT); // Motor A geri
pinMode(IN4, OUTPUT); digitalWrite(IN1, LOW);
pinMode(speedPinA,OUTPUT); digitalWrite(IN2, HIGH);
pinMode(speedPinB,OUTPUT); delay(2000);
}
// Motor A dur
void loop(){ digitalWrite(IN1, HIGH);
// Hız digitalWrite(IN2, HIGH);
analogWrite(speedPinA, 255); delay(500);
analogWrite(speedPinB, 255);
//Motor B geri
// Motor A ileri digitalWrite(IN3, LOW);
digitalWrite(IN1, HIGH); digitalWrite(IN4, HIGH);
digitalWrite(IN2, LOW); delay(2000);
delay(2000);
// Motor B dur
// Motor A dur digitalWrite(IN3, HIGH);
digitalWrite(IN1, HIGH); digitalWrite(IN4, HIGH);
digitalWrite(IN2, HIGH); delay(500);
delay(500); }
http://qqtrading.com.my/stepper-motor-driver-module-L298N
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
ARDUINO VE L298N İLE NEMA 17 Bipolar ADIM MOTOR
SÜRME
Adım motorunuzu bir tur ileri bir tur geri döndürecek olan fonksiyonlar aşıdaki gibidir.
Kodunuzu yükleyin ve çalıştırın.
void setup()
{
// set the speed at 60 rpm:
myStepper.setSpeed(60);
// initialize the serial port:
Serial.begin(9600);
}
void loop()
{
Serial.println("Saat yönü");
myStepper.step(stepsPerRevolution);
delay(500);
Serial.println("Saati tersi");
myStepper.step(-stepsPerRevolution);
delay(500);
}
• İşlemci ve mikrodenetleyiciler, aynı veri yolu (bus) üzerinden, birden çok çevre birimiyle
(peripheral) haberleşebilmelidir. Çevre birimlerine örnek olarak, sensörler, EEPROM, Analog
Sayısal Dönüştürücü (ADC), LCD sürücü ve zamanlayıcı (Real Timer) aygıtlarını gösterebiliriz.
Ayrıca başka işlemciler de çevre birimi olabilmektedir.
• Aynı veri yolu birden çok birim tarafından kontrollü bir şekilde paylaşılmalı ve iletişim kurulacak
çevre birimi, işlemci tarafından, herhangi bir yöntemle seçilebilmelidir. Bu seçim ayrı bir adres
yolu üzerinden yapılabilir. Fakat bu durumda işlemcinin, normalde başka amaçlarla
kullanabileceği bazı uçların, sadece adresleme için tahsis edilmesi zorunluluğu ortaya
çıkacaktır. Ayrıca bu adres yolları sebebiyle, PCB'nin karmaşıklığı da artacaktır.
• Yukarıda bahsettiğimiz dezavantajları gidermek için Philips, yakın mesafelerde düşük band
genişliği ile çalışan, 2 kablolu (2 Wired), I2C protokolünü geliştirmiştir. I2C protokolü, biri clock
diğeri de veri olmak üzere 2 adet iletişim hattına sahiptir. Bu hatlar, SCL (Serial Clock) ve SDA
(Serial Data) olarak isimlendirilmektedir. SDA veri iletişimi için kullanılmakta, SCL ile ise
gönderen ve alan taraflar veri senkronizasyonunu sağlamaktadır.
• SDA ve SCL veri yolları üzerinde birçok aygıt bulunabilir. Bu aygıtlar, düğümleri (node)
oluşturmaktadır. İletişimi başlatan taraf (CPU, mikrodenetleyici) master, karşı taraf ise slave
olarak isimlendirilir. SCL master'ın kontrolündedir ancak slave de, ihtiyaç halinde, SCL'deki
elektriksel seviyeyi değiştirebilmektedir.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik Üniversitesi
https://demirten.gitbooks.io/gomulu-linux/i2c_protokolunun_tanitilmasi.html
ve Araştırma Merkezi Temel Eğitim Programı
I2C SMBus PROTOKOLÜ
• Slave aygıtlar genel olarak, bir bölümü sabit diğerleri ise programlananabilen 7 bit'lik adreslere
sahiptir. Örneğin, ilk 4 bit üretim aşamasında belirlenirken diğer 3 bit ise elektriksel olarak
programlanabilir. Bu kullanıma ileride değineceğiz. Master, bu adres üzerinden slave aygıta
ulaşabilmektedir. Adresleme, veri transferinde olduğu gibi, SDA üzerinden seri biçimde
olmaktadır.
• I2C, standard 100kHz, fast 400kHz ve high speed 3.4MHz olmak üzere 3 farklı hızı
desteklemektedir.
• Not: Protokole sonradan yapılan eklentilerle beraber 10bit'lik adreslerin de kullanılabilmesi
mümkündür.
• Örnek bir I2C bağlantısı aşağıdaki gibidir.
• Not: I2C veri yolu üzerindeki birimler open drain veya open collector özelliği göstermektedir.
Bu birimler tarafından, SDA ve SDC üzerindeki elektriksel seviye ancak aşağıya yani lojik 0
seviyesine çekilebilir, lojik 1 yapılamaz. Bu sebeple SDA ve SDC hatları birer pull-up direnciyle
lojik 1 seviyesine çekilmelidir. Pull-up direnci olarak 1K ile 10K aralığında dirençler
kullanılabilmektedir.
• I2C ile ilgili temel özellikleri maddeler halinde aşağıdaki gibi özetleyebiliriz.
• I2C birçok aygıt arasında, ayrı bir adres yoluna ihtiyaç duymaksızın, 2 kablolu bir iletişim
kanalı oluşturur. Ayrıca referans olarak ortak bir toprak hattına (ground) ihtiyaç vardır.
• I2C, SDA ve SDC olmak üzere 1 adet veri ve 1 adet clock kanalına sahiptir.
• CPU ve mikrodenetleyici gibi, iletişimi başlatan birim master olarak isimlendirilir ve saat
frekansını (clock) master üretir. Ayrıca iletişim yine master tarafından sonlandırılır.
• Slave çevre birimleri genellikle 7 bitlik adreslere sahiptir ve bu birimlere bu adresler üzerinden
erişilir. Aynı veriyolu üzerine 112 tane aygıt bulunabilir. Bazı adresler rezerve edilmiş
durumdadır bu sebeple 7 bitlik adres alanının tamamı aygıtlar için kullanılamamaktadır. (CBUS
adres desteği, Start Byte, General Call, 10 bit adresleme desteği için ayrılmış adresler, farklı
bus formatlarını desteklemek için ayrılmış adresler gibi rezerve adresler bulunmaktadır)
• Master ve slave arasındaki iletişim çift yönlüdür (bidirectional). İletişimin yönünü master
belirler.
• İletişim yolu üzerinde birden çok master bulunabilir.
• İletişim hızını, SCL üzerinden, master dikte etmektedir. Fakat slave, bu hızda veri
gönderemediği veya işleyemediği durumda SCL'nin elektriksel seviyesini değiştirerek (lojik 0
yaparak) iletişimi belli bir süre bloklayabilmektedir. Bu işlem clock stretching olarak
isimlendirilir.
• I2C ile aynı kart üzerinde olduğu gibi kartlar arasında da iletişim mümkündür, maksimum
iletişim kanal uzunluğu yaklaşık 4m'dir.
• I2C veriyolu herhangi bir anda ya iletişim modundandır yada idle konumdadır.
1. Hattın boşta olması durumu (Idle): Herhangi bir veri transferinin gerçekleşmediği
durumdur. Bu aşamada SCL ve SDA hatları lojik 1 seviyesindedir.
2. Başlangıç aşaması: SCL lojik 1 iken, SDA'nın lojik 1'den 0 çekilmesiyle oluşur. Bu işlem
master tarafından yapılmaktadır.
3. Adresleme aşaması: Bu aşamada, master tarafından, slave’e, aygıt adresi ve iletişim modu
gönderilmektedir. İletişim modu, master tarafından okuma mı yoksa yazma işlemi mi
yapılacağını belirler (R / W).
4. Veri iletim aşaması: Bit düzeyinde veri iletişiminin yapıldığı aşamadır. SCL’nin her sıfır
durumunda 1 bit gönderilir.
5. Sonlandırma aşaması: SCL lojik 1 iken, SDA'nın lojik 0'dan 1'e çekilmesiyle oluşur. Bu
işlem master tarafından yapılmaktadır, başlangıç aşamasının tersi olarak düşünülebilir.
6. Başlangıç aşamasının tekrarlanması (Repeated start): Bazen, bir iletişim kurulmuş olmasına
karşın, iletişim sonlandırılmadan, yeni bir başlangıç durumu oluşturulmakta ve slave yeniden
adreslenmektedir. Bu sayede hattın kullanımı kaybedilmemekte ve aygıtlar arasındaki
iletişim kesilmeden, birbirini takip eden okuma ve yazma işlemleri (combined read/write)
yapılabilmektedir. Ayrıca EEPROM gibi çevre birimlerine yeni komutlar gönderebilmek için
başlangıç durumunun yeniden oluşturulması gerekebilmektedir. EEPROM ancak başlangıç
sinyalinden sonra bazı komutları anlayabilmektedir.
Yukarıda görüldüğü gibi START işaretinden sonra 7 bit adres ve beraberinde yazma yapılacağını
bildiren 8. bit gönderilmiş.
Bu durumdan sonra SCL ile clock gönderilmeye devam eder . 7 bit adres ve 1 bit işlem
işaretinden sonra gönderilen clock ile iletişime geçtiğimiz slave SDA pinini sıfıra çekerek ACK
yani onay gönderir. Onay gelmez ise iletişim yenilenmelidir. Bu durumdan sonra gönderilecek
yada okunacak tüm veriler başta adresi belirtilen slave ile yapılacaktır.
Adres slave tarafından onaylandı ve yazma yapacağımızı belirtmiştik. Şimdi 8 bit verimizi
gönderiyoruz ve yine 9. bitte onay kodunu bekliyoruz slave yine SDA pinini sıfıra çekiyor ve veri
yazmanın başarılı olduğunu onaylıyor.
NOT: Eğer yazma değilde okuma yaparsak ACK kodunu biz oluşturuyoruz yani 8 bit veriyi
okuduktan sonra SDA pinini sıfıra çekiyoruz böylece okuma işlemi devam ediyor. Okuma
biteceği zaman son okunan 8 bitin ardından bu sefer NACK gönderiyoruz yani SDA yı 1
durumunda bırakıp sadece clock gönderiyoruz böylece slave okuma işleminin bittiğini anlıyor.
Ardından STOP işareti ile iletişim sonlandırılıyor. İstenirse arka arkaya durmaksızın veri
yazılmaya devam edebilir bunda bir kısıtlama yoktur.
Yazma yaparken birden okuma yapmak istersek yine START işareti ile beraber aynı yolu takip
ediyoruz.
Karadeniz Teknik Üniversitesi https://www.ercankoclar.com/2018/01/i2c-iletisim-protokolu-ve-mikroc-kutuphanesi/ İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
I2C İLE 1 BYTE VERİ GÖNDERME ÖRNEĞİ
• wire.begin(): I2C haberleşmesini başlatan fonksiyondur. Bu fonksiyon parametre olarak slave cihazın
adresini alır. Eğer cihaz master olarak tanımlanacak ise bu fonksiyona herhangi bir parametre
atanmaz.
• Örneğin haberleşme hattında '1' adresine sahip slave bir Arduino tanımlanmak isteniyorsa,
wire.begin(1); yazılır. Eğer bu Arduino haberleşme hattının master cihazı olarak tanımlanmak
istenseydi fonksiyon, wire.begin(); olarak çağırılmalıydı.
• wire.available(): Fonksiyon hat üzerinden Arduino'ya ulaşmış veri paketlerinin sayısını döndürür. Eğer
fonksiyonun değeri 0'dan büyükse Arduino'ya gelen yeni veri paketi vardır.
• wire.write(): Fonksiyona yazılan parametreyi veri hattına aktarır. Kısaca veri yollamak için kullanılır.
• wire.requestFrom(): Master tarafında kullanılan bu fonksiyon ile slave cihazdan veri istenir.
Fonksiyonun ilk parametresi, slave cihazın adresini belirler. İkinci parametre ise slave cihazdan kaç
byte'lık veri beklendiğini belirler. Üçüncü ve son parametre ise hattın istekten sonraki durumunu
belirler.
• wire.onRequest(): Slave tarafında kullanılan bu fonksiyon, master cihazdan veri isteği geldiğinde
çalıştırılacak fonksiyonu belirler. Bu fonksiyon parametre olarak çalıştırılacak fonksiyonun ismini alır.
https://protosupplies.com/product/gy-906-mlx90614-non-contact-precision-thermometer-module/
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
GY-906 MLX90614 IR TERM. MODÜLÜNÜN TEMEL ÖZELLİKLERİ
• Sensör ölçtüğü sıcaklığa maruz kalmadığı için geniş bir sıcaklık aralığını okuyabilir.
• Oda sıcaklığında 0,5 ° C hassasiyetle -70 ° C (-94 ° F) ila + 380 ° C (+ 720 ° F) aralığında
ölçüm yapar.
• Sensörün kendisi -40 ° C ila + 125 ° C arasında çalışabilir.
• Sensörün 90 derecelik bir görüş alanı vardır ve hesaplanan sıcaklık, bu görüş alanındaki
ortalama sıcaklıktır.
• Bu nedenle uygun ölçüm mesafesi, görüş alanının ne kadar genişlikte olmasının
istendiğine bağlıdır. IC veya döner şaft gibi bir nesnenin yüzey sıcaklığını ölçüyorsanız,
tipik olarak yaklaşık 1 cm'lik bir ölçüm mesafesi kullanılır.
• Sensör, okuma üzerindeki etkilerini en aza indirmek için görünür ve yakın kızılötesi ışığı
kesen dahili bir optik filtreye sahiptir.
1. I2C Modu: Bu modda I2C veri yolu kullanarak ayarların yapılandırılmasını ve sıcaklığın
okunması sağlanır.
2. PWM Modu: Bu modda sıcaklık bilgisi PWM sinyali ile kodlanır ve PWM pininden
sürekli olarak gönderilir.
3. Termal Anahtar Modu: Sıcaklık, önceden programlanmış bir noktaya geldiğinde çıkış
üretir.
• Ayrıca cihaz, 127 I2C adresinden birine sahip olacak şekilde arayüz üzerinden
programlanabilir, böylece cihazların 127'si tek I2C veriyolunda çalışabilir.
• PWM çıkışı veya termal anahtar çalışma modu gibi başka ayarlar da I2C arayüzü
kullanılarak yapılandırılabilir.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
GY-906 MLX90614 IR TERM. MODÜLÜNÜN TEMEL ÖZELLİKLERİ
• Güç Sağlama
• Modül üzerinde 662K (LM6206-3.3) 3.3V gerilim regülatörü bulunur. 5V tipik olsa da, VIN
güç giriş pininden maksimum 6V'a kadar gerilim uygulanabilir. Modül VIN pininden 3.3V
ile beslenirse, voltaj regülatörden minimum voltaj düşüşüyle geçer, bu nedenle modül
hem 5V hem de 3.3V MCU'larla uyumludur.
• Modül Bağlantıları
• MCU ile eşleşmek için VIN = 3,3 veya 5V
• GND = Toprak
• SCL = I2C Saat
• SDA = I2C Veri
• PROGRAM:
• Aşağıdaki program, sıcaklık verilerini sensörden Seri Monitör Penceresine yazdıran basit
bir test programıdır.
• MLX90614 sensörü için birkaç kütüphane bulunmaktadır. Buradaki örnekte, kullanımı çok
kolay olan Adafruit kütüphanesi kullanılmıştır. Ancak bu kütüphane, MLX90614ün temel
özelliklerini destekliyor, gelişmiş özelliklerini desteklemiyor. Kütüphane, Arduino IDE
Kütüphane Yöneticisi'nden indirilebilir.
• Çalıştırmak için VIN'i MCU ile ortak 5V veya 3.3V'ye bağlayın. GND'yi MCU ile ortak
toprağa bağlayın. Ayrıca SCL'yi MCU'daki SCL'ye ve SDA'yı MCU'daki SDA'ya bağlayın.
https://create.arduino.cc/projecthub/SurtrTech/contactless-temperature-sensor-mlx90614-1e7bc7
• Yıllar içinde, gömülü sistemlerin özel ihtiyaçlarını karşılamak için düzinelerce seri
protokol hazırlanmıştır. USB (evrensel seri veri yolu) ve Ethernet, daha iyi bilinen bilgi
işlem seri arabirimlerinden birkaçıdır. Diğer çok yaygın seri arayüzler arasında SPI, I2C
ve bugün konuşacağımız UART seri standart yer alıyor. Bu seri arayüzlerin her biri iki
gruptan birine ayrılabilir:
• Senkron seri haberleşmede veri bitleri bir saat sinyali eşliğinde, saat sinyali ile
senkronize olarak gönderilir ve alınır. Yani eşzamanlı seri arabirim her zaman veri
hatlarını bir saat sinyali ile eşleştirir, bu nedenle eşzamanlı seri veri yolundaki tüm
cihazlar ortak bir saati paylaşır. Bu, daha basit, genellikle daha hızlı bir seri aktarımı
sağlar, ancak iletişim aygıtları arasında en az bir ekstra kablo gerektirir. Senkron
arayüzlere örnek olarak SPI ve I2C verilebilir.
• Bu iletim yöntemi, gerekli kabloları ve G/Ç pinlerini en aza indirmek için mükemmeldir.
Ancak bu, verileri güvenilir bir şekilde aktarmak ve almak için fazladan çaba sarfetmemiz
gerektiği anlamına gelir. Asenkron haberleşmede iki cihazın arasındaki uyum veri
paketlerinin başına ve sonuna konulan başlama ve durma bitleri ile sağlanır. Bunun
yanında, asenkron seri haberleşen iki cihazın haberleşme hızları yani saniyede
gönderilip alınacak bit sayıları (baud rate) eşit olmalıdır.
• Basit hata denetimi ve düzeltme için parity bit yöntemi de seçimlik olarak
kullanılmaktadır.
• Eşzamansız seri protokol, sağlam ve hatasız veri aktarımını sağlamaya yardımcı olan bir
dizi yerleşik kurala ve mekanizmaya sahiptir. Harici saat sinyalinden kaçınmak için
kullanılan bu mekanizmalar şunlardır:
• Veri bitleri,
• Senkronizasyon bitleri,
• Eşlik bitleri,
• Baud hızı.
• Kritik kısım, seri veri yolundaki her iki cihazın da aynı protokolleri kullanacak şekilde
yapılandırıldığından emin olmaktır.
• Baud hızı, verinin seri hat üzerinden ne kadar hızlı gönderileceğini belirtir. Genellikle
saniyede bit (bps) birimi cinsinden ifade edilir. Baud hızını ters çevirirseniz, tek bir bit
iletmenin ne kadar sürdüğünü öğrenebilirsiniz.
• Bu değer, vericinin bir seri hattı ne kadar yüksek / düşük tutacağını veya alıcı cihazın
hattı ne zaman örneklediğini belirler.
• Baud hızları, akıldaki herhangi bir değer olabilir. Tek şart, her iki cihazın da aynı hızda
çalışmasıdır.
• Özellikle hızın kritik olmayan basit işler için daha yaygın baud hızlarından biri 9600
bps'dir. Diğer "standart" baud, 1200, 2400, 4800, 19200, 38400, 57600 ve 115200'dür.
• Bir baud hızı ne kadar yüksek olursa, veri o kadar hızlı gönderilir / alınır, ancak verilerin
ne kadar hızlı aktarılabileceğine dair sınırlamalar vardır.
• Genellikle 115200'ü aşan hızlar görmezsiniz - bu çoğu mikrodenetleyici için hızlıdır. Çok
yükseğe çıktığınızda, saat hızları ve örnekleme peryotları yetmeyeceği için alıcı uçta
hatalar görmeye başlayacaksınız.
• İletilen her veri bloğu (genellikle bir bayt) aslında bir paket veya bit çerçevesinde
gönderilir. Çerçeveler, verilerimize senkronizasyon ve eşlik bitleri eklenerek oluşturulur.
• Veri Bitleri
• Her seri paketin gerçek veriyi taşıdığı kısmıdır. Bu veri bloğunu belirsiz bir şekilde yığın
olarak adlandırıyoruz, çünkü boyutu özellikle belirtilmemiştir. Her paketteki veri miktarı 5
ila 9 bit arasında bir değere ayarlanabilir. Elbette, standart veri boyutu temel 8 bit
baytınızdır, ancak diğer boyutların kullanımları vardır. 7 bitlik bir veri yığını, özellikle 7
bitlik ASCII karakterleri aktarıyorsanız, 8'den daha verimli olabilir.
• Veri uzunluğunu belirledikten sonra, her iki seri cihazın, verilerin endianitesi yani önce en
anlamlı bitin mi (MSB), yoksa en anlamsız bitin mi (LSB) gönderileceği üzerinde
anlaşması gerekir. Aksi belirtilmedikçe, genellikle verilerin önce en az anlamlı bitin (LSB)
aktarıldığını varsayabilirsiniz.
• Senkronizasyon bitleri
• Senkronizasyon bitleri, her bir veri paketiyle aktarılan iki veya üç özel bittir.
• Her zaman yalnızca bir başlangıç biti vardır, ancak durdurma bitlerinin sayısı bir veya iki
olarak yapılandırılabilir (genellikle bir olarak bırakılır).
• Başlangıç biti her zaman 1'den 0'a giden boş bir veri hattıyla gösterilirken, durdurma bit
(ler)i, hattı 1'de tutarak tekrar boşta (Idle) durumuna geçer.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
VERİLERİ ÇERÇEVELEME (DATA FRAMING)
• ASCII 'O' ve 'K' karakterlerini ileten bir cihazın iki veri paketi oluşturması gerekir. O'nun
ASCII değeri (bu büyük harf) 79'dur ve bu değer, 8 bitlik ikili bir 01001111 değerine
ayrılırken, K'nin ikili değeri 01001011'dir. Geriye kalan tek şey senkronizasyon bitleri
eklemek.
• "OK" Paketi
• 9600 bps'de aktardığımızdan, bu bitlerin her birini yüksek veya düşük tutmak için
harcanan süre, bit başına 1 / (9600 bps) veya 104 µs'dir.
• İletilen her veri baytı için aslında 10 bit gönderilir: bir başlangıç biti, 8 veri biti ve bir
durdurma biti. 9600 bps'de saniyede 9600 bit veya saniyede 960 (9600/10) paket
gönderiyoruz.
Karadeniz Teknik Üniversitesi İş Güvenliği Uzmanlığı
Uzaktan Eğitim
Karadeniz Uygulama
Teknik ve Araştırma Merkezi
Üniversitesi Temel Eğitim Programı
SERİ HABERLEŞME DONANIM VE BAĞLANTI YAPISI
• Bir seri veri yolu; biri veri göndermek için diğeri almak için olmak üzere sadece iki
kablodan oluşur. Bu nedenle, seri cihazların iki seri pini olmalıdır: Alıcı, RX ve verici, TX.
• Seri Kablolama
• Bu RX ve TX etiketlerinin cihazın kendisiyle ilgili olduğunu belirtmek önemlidir. Bu
nedenle, bir cihazdaki RX, diğerinin TX'ine gitmeli ya da tam tersi. VCC'yi VCC'ye,
GND'den GND'ye bağlamalısınız.
• Her iki cihazın da veri gönderip alabileceği seri arabirim, tam çift yönlü veya yarı çift
yönlüdür. Tam çift yönlü, (full dublex) her iki cihazın aynı anda gönderip alabileceği
anlamına gelir. Yarı çift yönlü (half dublex) iletişim, seri cihazların sırayla gönderme ve
alma yapması gerektiği anlamına gelir.
• Bazı seri cihazlar sadece alıcıdır. Örneğin bir LCD. Sadece alçıdır. Simpleks seri iletişim
olarak bilinen şey budur. Tek ihtiyacınız olan, ana cihazın TX'inden dinleyicinin RX
hattına kadar tek bir kablo bağlamaktır.
• Kavramsal açıdan asenkron seriyi ele aldık. Hangi tellere ihtiyacımız olduğunu biliyoruz.
• Seriye ait birkaç popüler donanım uygulamasına bakalım: bir çok çeşit olsa da yaygın
olarak iki tür kullanılır. TTL ve RS-232.
• Mikrodenetleyiciler ve diğer düşük seviyeli IC'ler seri olarak iletişim kurduğunda bunu
genellikle bir TTL (transistör-transistör mantığı) seviyesinde yaparlar. TTL seri sinyalleri
mikrodenetleyicinin voltaj besleme aralığı arasında bulunur - genellikle 0V ila 3.3V veya 5V.
• VCC seviyesindeki bir sinyal (3.3V, 5V vb.), hattın boşta olduğunu (idle), 1 değerinde bir biti
veya bir durdurma bitini gösterir.
• 0V (GND) sinyali ise, başlangıç bitini veya 0 değeri olan veri bitini temsil eder.
• RS-232 sinyalleri genellikle -13V ve 13V arasında değişir, ancak spesifikasyon +/- 3V ila
+/- 25V arasında herhangi bir seviyeye izin verir.
• Bu sinyallerde düşük bir voltaj (-5V, -13V, vb.), hattın boşta olmasını, bir durdurma bitini
veya 1 değerine sahip bir veri bitini gösterir.
• Yüksek bir RS-232 sinyali bir başlangıç bitini veya 0 değerli veri bitini gösterir.
RS-232 TTL
RS-232 TTL
• Bir mikrodenetleyicide bir UART yoksa (veya yeterli değilse), seri arabirimi yazılımla
yapabilirsiniz ve seri haberleşme doğrudan işlemci tarafından kontrol edilebilir.
• Baud hızları, seri iletişim dilleri gibidir. İki cihaz aynı hızda konuşmuyorsa, veriler yanlış
yorumlanabilir veya tamamen gözden kaçabilir. Alıcı cihazdan anlamsız karakterler
alıyorsanız, baud hızlarının uyuşup uyuşmadığını kontrol edin.
• Arduino’da modeline göre bir veya birden çok seri port bulunmaktadır.
• Arduino kart üzerindeki CH340, CP2112, FT232 gibi entegrelerin görevi budur.
• Arduino Uno’da tek donanım seri portu vardır ve hem PC ile haberleşmede kullanılır hem
de istenirse Tx Rx uçları ile başka bir Arduino’ya ya da cihaza bağlanabilir.
• Arduino’da modeline göre bir veya birden çok seri port bulunmaktadır.
• Arduino Uno’da tek donanım seri portu vardır ve hem PC ile haberleşmede kullanılır hem
de istenirse Tx Rx uçları ile başka bir Arduino’ya ya da cihaza bağlanabilir.
• Serial.begin(speed)
• Serial.begin(speed, config)
• SERIAL_5N1
• SERIAL_6N1
• SERIAL_7N1
• SERIAL_8N1 (the default)
• SERIAL_5N2
• SERIAL_6N2
• SERIAL_7N2
• SERIAL_8N2
• SERIAL_5E1: even parity
• SERIAL_6E1
• SERIAL_7E1
• SERIAL_8E1
• SERIAL_5E2
• SERIAL_6E2
• SERIAL_7E2
• SERIAL_8E2
• SERIAL_5O1: odd parity
• SERIAL_6O1
• SERIAL_7O1
• SERIAL_8O1
• SERIAL_5O2
• SERIAL_6O2
• SERIAL_7O2
• SERIAL_8O2