Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Kütüphane yazma

Başlatan sifirzero, 01 Ekim 2023, 00:00:44

sifirzero

Merhaba arkadaşlar. BMP180 basinc sesnorunun datasheetine bakarak. nasil kutuphane yazabiliriz. ve diger sensorlerde kutuphane yazmak istesek hangi methot yontem kullaniliyor. Hic yazmadim bilmiyorum yazi veya video varmi ogrenmek istiyorum.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

Mucit23

Normalde sensörün haberleşmesi için protokoller teknik dökümanda anlatılır. Kütüphanelerde bu haberleşmenin gerçekleşmesi için gerekli protokoller gerekli matematiksel hesaplar yapılır. Bunn fonksiyonlar yazılır. Bmp180 için sıfırdan kütüphane yazmaya gerek yoktur. Hazır birçok kütüphane bulabilirsiniz. Bu kütüphaneleri inceleyip mantığını kavramak ve kendi platformunuza uydurmanız daha doğru olur.

sifirzero

Sıfırdan yazmak için neleri öğrenmem gerekli. herhangi bir sensörün kütüphanesini yazmak istesek. video veya belge var mı. örnek bakabileceğimiz
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

fahri-

Hangi dili hangi derleyiciyi kullanıyorsun?
CCS C kullanıyorsan kütüphanesinde yüzlerce örnek var. O örneklerdeki kodları ve kodları yazılan malzemelerin datasheetlerini inceleyebilirsin.

alikeskinkilic

#4
Asm kullananların sürekli yaptığı şey aslında tamda bu her program için harici donanıma kütüphane yazmak.ilk önce harici donanımın hangi haberleşme yöntemini kullandığını bilmeli ve ona hakim olmalısın daha sonrasında harici donanımın zorunlu "register,At,gibi" ayarlarını yapacak kadar bilgiyi ürünlerin data sayfasında bulabilirsin onları bir alt program ile yazar ve ana program başlangıcında çağırırsın Pic asm için örnek koyayım aşağıya belki işine yarar
;//////////////////////ADXL345//////// STANDART AYARLAR///////////////////////////
;////////////////////////////////////////////////////////////////////////////////////////////
;
ADXL_BEGIN    MACRO          ;    CSN PORT VE BACAK SEÇİMİ

        BANKSEL    TRISA
    ;    MOVLW    0X10
    ;    IORWF        TRISB    ,F
        BSF        TRISB    ,4
        BCF        TRISB    ,6    
        BCF        TRISC    ,7
        BCF        TRISC    ,6
        
        MOVLW    0XC0
        MOVWF    SSPSTAT
        BANKSEL    SSPCON
        MOVLW    0X30
        MOVWF    SSPCON
        
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN    
        MOVLW    0XFF
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        CALL        ADXL_PAUS100
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0X27
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X00
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        BSF        CSN            ;100 HZ DATA ÇIKIŞ HIZI
        CALL        ADXL_PAUS1        ;DOKUNMA SENSÖRÜ İPTAL
        BCF        CSN
        MOVLW    0X2D
        MOVWF    SSPBUF            ;SÜREKLİ ÖLÇÜM MODU
        CALL        ADXL_SEND
        MOVLW    0X08
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0X31                ;2G ÖLÇÜM. / SAĞA YASLI 10 BİT ÇÖZÜNÜRLÜK/4 KABLO SPİ MODU
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X00
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        BSF        CSN
        CALL        ADXL_PAUS100
        GOTO        ADXL_EXT    
ADXL_PAUS100:        
              movlw          .186
                movwf          R0
                movlw          .4
                movwf          R1
                movlw          .2
                movwf          R2
                decfsz          R0,F
                goto            $-1
                decfsz          R1,F
                goto            $-3
                decfsz          R2,F
                goto            $-5
        RETURN
ADXL_PAUS1:    

                movlw      .6
                movwf      R0
                decfsz      R0,F
                goto        $-1
                nop
        RETURN
ADXL_SEND:
        BTFSS      PIR1 ,SSPIF
            GOTO        $-1  
            BCF            PIR1  ,SSPIF
            RETURN
ADXL_EXT:
        ENDM    
;******************************************************************************************
;//////////////////ADXL OKUMA///////////////////////////////////////////////////////
;/////////////////ADXL_READ        X,Y,Z    
ADXL_READ MACRO    ?0,?1,?2
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB2
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?0                    ;X
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB3
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?0+1                ;X+1
;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY    
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB4
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88                ;DUMMY        
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?1                    ;Y
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB5
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?1+1                ;Y+1
;ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ    
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB6
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?2                    ;Z
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB7
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?2+1                ;Z+1
        BSF        CSN
        CALL        ADXL_PAUS100
        ENDM
kodda SPI ile haberleşen ADXL345 için ayarlar ve okuma makrosu yer alıyor dosyayı .inc dosyası olarak kaydedip ana programa INCLUDE "sensor.INC" olarak eklediğimizde artık ana programda sadece" ADXL_BEGIN"yazdığımızda adxl nin ayarları yapılır.ADXL_READ x,y,z yazdığımızda x,y,z değişkenlerimize okunan veriler yazılır .kütüphane böyle olur.bu diğer diller için de aynı aşağı yukarı donanımın pdf sini okumak anlamak ve ayarlarını yapabilecek kadar iletişim protokolüne hakim olmak zorundasınız.tabi hazır kütüphaneler de çözüm
Hep meraktan

alikeskinkilic

Tabi birde C cilerin körelmiş pdf okuma paradoksunu aşmaları gerekir. ;)  ::op
Hep meraktan

sifirzero

#6
Nettenden arastirdim. kimse bu konu hakkinda yazi veya video cekmemis. Çok onemli alan diye dusunuyorum. örnek ds18b20 veri tablosuna gore bir kutuphane gerekli. bunu yazmam icin asama asama ilerleme ve yazilan bir örnek bilgi.

04 Ekim 2023, 10:58:27
Hazir kutuphaneler isimize tabiki yariyordur. ama kendimiz neden yazamiyoruz.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

gevv

 

alikeskinkilic

bunun ayrı bir eğitimi yok da ondan paylaşmıyor kimse birde Arduino, c falan hazır kütüphaneleri çok olduğu için kimse uğraşmıyor.ASM için kütüphane çalışması ben yapıyorum videolar da çekiyorum ama o da belliki işinize yaramayacak. Ama bir programlama dili biliyorsanız kullanacağınız harici ekipmanla iletişimi zaten  kütüphane olmadan da sağlayabilmeniz gerekiyor. kütüphane kullanmadan bağlantı yapabilmek için de kullanacağınız harici donanımı mecburen tanımanız gerekiyor .bilgi sayfasında iletişimi nasıl kuracağınız hangi registerlere hangi değerleri vereceğiniz açıkça yazılı oluyor. bence açın pdf dosyasını bir dil biliyorsanız en fazla 1 haftanızı alır ama sonrasında rahat edersiniz.
Hep meraktan

kudretuzuner

#9
Merhaba,
Kütüphane nedir bilmem. Bir işi yapacaksam kafamda tasarlar yaparım. Örneğin geçmiş yıllarda MPX57xx basınç sensörünü kullandım. 0-5 volt arası Analog çıkış vermektedir. Hangi basınç değerinde hangi değeri veriyor bilmiyordum. Ben de 0-6 bar arasında çıkan analog değerleri 00-FF arası dijitale çevirip kurduğum düzenekle okudum ve de hangi barda ne göstermem gerektiğinin programını yazdım. Böylece dijital bir manometre ortaya çıkmıştı. Tabiidir ki bayağı bir yazılım ortaya çıktı. Kütüphane dediğiniz bu mudur?   videoda displayin ondalık (nokta) ledi yanmamaktadır                                                               https://www.youtube.com/shorts/L2-pvJRkWcE   
Amatör

mehmet

Alıntı yapılan: alikeskinkilic - 04 Ekim 2023, 10:52:09Tabi birde C cilerin körelmiş pdf okuma paradoksunu aşmaları gerekir. ;)  ::op

Her "C" ci değildir.  8-)
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

alikeskinkilic

#11
Alıntı yapılan: mehmet - 04 Ekim 2023, 14:38:00Her "C" ci değildir.  8-)
söylediklerinin %20 diyelim mehmet hocam.aslında kastettiğim her sensöre,mikro işlemciye özel birileri video çekip nasıl reg ayarlarının yapıldığını anlatmazki.işin mantığı bellidir mevcut kütüphane isteklerini karşılamıyor ve kütüphane yazmak istiyorsan.donanımın isterleri bellidir kütüphanenin farklı bir dili yokki programını yazdığın aynı dil ile bir alt program yazmalısın ha bunu üniversal tüm işlemcilerde çalışacak falan gibi birşey yapacaksan dile ve algoritma kurmaya  iyi derecede hakimiyet gereklidir farklı osc değerleri için farklı gecikmeler kurmalı falan tatavası çok,asıl önemli olan ise mecburen kullanacağın donanımın nasıl çalıştığını bilmelisin.yoksa başka birinin bildiği karadı ile yetinmeli ve onun kütüphanesini kullanmalısın. tavsiyem üniversal kütüphanelerin birsürü parametreyi if leyerek kontrol etme zorunluluğundan çok yavaş olması yüzünden işlemciye özel kütüphaneyi kendiniz yazmanız
Hep meraktan

kimlenbu

İyi bir kütüphane farklı işlemcilerle kullanılacak şekilde tasarlanmalı. Gene de ben sadece STM32 ile çalıştığım için bir kütüphane arayacak olursam direkt STM32 için olanı bulmaya çalışıyorum. Buglarını kontrol ediyorum, özellikle programımın çakılmasına sebep olacak "while" döngülerine timeout ekliyorum, hardfaulta sebep olabilecek sıkıntılar varsa önlemini alırım, gereksiz delay'lerden kurtulurum. Donanım hazır olmadan okuma/yazmanın sıkıntı çıkaracağı durumların önlemini alırım.

Örneğin i2c kullanan bir sensör için STM32'ye kütüphane yazacak olalım. Kolaya kaçarsak HAL Library için basitçe sadece init fonksiyonuna hangi i2c'yi kullanacağımızı parametre vererek yazabiliriz. Geri kalan her fonksiyonda bu parametreyi kullanırız. Sensör iletişimi nasıl olacaksa komutlar tek tek yanlarında açıklamalarıyla "define" edilir. örneğin kodda 0x07 adresine bir şeyler yolladığınızı veya okuduğumuzu düşünelim, okuyan adam ne olduğunu anlamakta zorlanır, ama yukarıda #define SICAKLIK_REGISTERI 0x07 derseniz kodu okuması da kolaylaşır.

Son olarak fonksiyolara @brief, @param, @return gibi açıklamarı da mutlaka yazmak gerekiyor, 3 ay sonra kendiniz yazdıysanız bile bir şey anlaşılmıyor.

sifirzero

Cok guzel bilgiler. Tesekkurler arkadaslar.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

Tagli

ASM'yi bırakalı çok oldu. Zamanında garip garip şeylerle uğraşmışım demek :)

Konu hakkındaki güncel görüşüm şu: Gömülü sistemlerde işlemci donanımına bağlı şeylerin kütüphanesi yazmak pek mümkün değil. Bu ancak işlemciniz belli ve sabit ise, veya altta STM32 HAL veya Arduino gibi ek bir donanım soyutlama katmanı varsa yapılabilir. Onu da zaten bir yerden diğerine taşıyamazsınız. Yani mesela Arduino için yazılmış MCP4922 DAC çipi kütüphanesi STM32 HAL altyapısı üzerinde çalışmayacak, çünkü SPI'ya erişim tamamen farklı.

Kaldı ki ben artık tüm gömülü sistem projelerimi olay tabanlı düşündüğüm ve inşaa ettiğim için kütüphanelerde alışık olduğumuz fonksiyon çağrısı mantığı işimi görmüyor. Bu tür sistemlerde fonksiyon çağrılarının yerini, bir "olay" (event) oluşturup bunu ilgili state machine'e atmak alıyor.

Bu arada bence üreticiler de sadece kendi işlemcileri için bile her derde deva kütüphane oluşturamıyorlar çünkü tek bir firmanın işlemcileri bile kendi içlerinde aileden aileye epey değişiklik gösterebiliyor. CubeMX gibi sistemlerin çıkmasının sebebi de bu bence: Parametrelere göre kütüphane sentezlemek. Ben sevemedim bir türlü bu tür şeyleri. İşe yararlıkları da tartışılır.

Donanımdan bağımsız şeylerin kütüphanesi olabilir tabi. Örneğin bir JSON string'i içinden belirli bir parametreyi falan çekmek veya CRC hesaplama gibi işler, donanımdan bağımsız fonksiyon çağrıları şeklinde ifade edilebilir.
Gökçe Tağlıoğlu