hi-tech mi?

Başlatan Fixxer, 13 Ocak 2009, 00:35:24

Fixxer

Özellikle hi-tech başlığıda bahsetmek istediğim bir konu.
Efendim, bende bir çoğunuz gibi pic programlama olayını "assembly" halk arasında bilinen adıyla "hasan bilir"  ile başladım. İlk zamanlar hiç bir zaman anlaşılamıyacak bir dil olarak geldi "hala aynı" sonra nasıl bir boşluğa düşmüşüm ki, basic'e atmışım kendimi. İlk olarak 2x16 lcd ye bişiler yazdırmanın orgazmını basicte yaşamıştım. neden ? - çünkü üstesinden gelebilceğimi düşüyordum.  günlerden bir gün " bu basic'in adında meymenet yok!" dedim.  - ne olur? - ne olur ? hadi bakalım sil basic'i   hurraa... hoş geldin Ccs dedik, aslında basicte ciddi sorunlar yaşadığımda söylenemez.  ileri seviyede bir dile başlamış oldum. çat-pat  C öğrenmeye koyuldum ve başarılı olucamı düşündüm  komutlar vs. filan derken iyicene alıştım Ccs ye -derken dış seslerde hep şu yankılandı: " bi halta yaramaz! Sil bunu.  Ossursan hata veriyor " vs. vs. gibi  bunu farklı kişilerden de duyunca insan kulak kabartmaya başlıyor haliyle, dedim" ben bu ccs yide silerim ulan!"  mis gibi hi-tech kur rahatına bak "milyonlarca sinek yanılıyor olamaz" bir kaç arkadaşımızın msjlarını filan okudum hi-tech bölümünde gerçekten ağzım sulandı "diyemiycem" gözlerim sulandı efendim.  Bu ne?  ben ne yapıcam şimdi, 2 satırlık kodu bile yazamıyorum... ama sonucunda ciddi bişeyler olacağını ve işime çok yarayacağını düşünerek "kendini ne olarak görmek istiyorsun!?" sorusunun cwbı olarak gördüm . Eğer gerçekten yazılımcı olup bu konuda kendimi ispatlamak istiyorsam bu (basic) ile olmaz.  Ccs ile de olmaz! bu iş nasıl olur biliyormusunuz ?  - bu iş: öncelikle chipleri iyi tanımak, datasheet okuyabilmek, algoritma çıkartmak , pratik düşüncelere dayalı sistematik çalışmak, iyi sayılacak düzeyde matematik bilgisine sahip olmak  (takdir edersinizki elinize alacağınız her sensör  lineer olmayabilir ) şimdi burdan ne çıkaracağız? Herşeyden önce basic diyip geçmeyin arkadaşlar, ben basic ile yapılmış sorunsuz çalışan bir çok cihaz gördüm. forumdada buna benzer bir çok örnek var . olay kullanılan  compiler veya dil değil! Olay tamamı ile ne yapıcağını bilmek ile alakalı sen zaten belirli kriterleri yerine koyabiliyorsan zaten gerisi puzzle gibi gelicektir, size kalan sadece gerekli parçaları gerekli yerlere koymaktır.  Noldu ? şimdide başa döndük dimi ? evt!  O compiler - şu bilmem ne -bu programlama dili derken kafanız allak bullak oldu dimi ?  ve eliniz kolunuz bağlandı hiçbir eylemde bulunamıyorsunuz .  Şimdi soğuk bir duş alıp ardından kendinize güzel bir algoritma çıkartıp işe kendinizi programlamak ile başlayın.
Not: Sevgili  okur,  sonuna kadar sıkılmadan bu yazıyı okuduğun için sana minnettarım ve umarım duştayken kulağına su kaçırabilmişimdir…
Alpay ZEREN.
...............................

teknikelektronikci

alpay hocam elinize saglik güzel yazi olmuş :) bu arada askerlik ne zaman hocam ?
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Tagli

Ben ters bir sırayla gittim o zaman :). Önce PicBasic Pro ile başladım, şimdi Assembly ile yazıyorum. Vakit sınırlaması yoksa ASM ile her şey yapılabilir. Bu işlerle hobi amaçlı uğraştığım için acele etmeden rahat rahat yazıyorum, işin zevkine vararak. ASM'nin sunduğu esnekliği derleyicilerin sunması mümkün değil. Ve program yazarken adeta bulmaca çözüyor gibi hissediyor kendini insan. Ama olaya diğer yönüyle bakarsak, ticari amaçlı bir projede, özellikle zaman açısından fazla maliyetli olduğu için ASM ile yazmak iyi bir fikir değil. Özellikle ASM ile kod yazmada PIC18 uç sınır bence, daha gelişmiş PIC'ler için C tabanlı bir derleyici şart.

Konudan bir miktar sapıp daha çok "ASM şöyle iyidir, böyle iyidir..." demeye başlamışım ama aslında anlatmaya çalıştığım şey Fixxer'ın da dediği gibi olayın kullanılan dille değil, kişinin "temel yapı taşları"nı nasıl kullandığıyla ilgili. ASM'nin artısı yapı taşlarının küçüklüğü sebebiyle esnekliği arttırması. Eksisi ise yine aynı sebepten üretimi yavaşlatması.

Şunu da eklemeliyim ki her ne kadar bilgisayarda program yazma konusunda iyi kötü bir deneyimim olmasına ve bu işi de genelde C ile yapmama (okuldaki dersler sebebiyle) rağmen; PIC'i ASM ile programlamaya o kadar alıştım ki yüksek seviye bir dille nasıl programlanabileceğini hayal edemez oldum.
Gökçe Tağlıoğlu

gokhanbas

Alıntı yapılan: "Fixxer"Özellikle hi-tech başlığıda bahsetmek istediğim bir konu.
Efendim, bende bir çoğunuz gibi pic programlama olayını "assembly" halk arasında bilinen adıyla "hasan bilir"  ile başladım. İlk zamanlar hiç bir zaman anlaşılamıyacak bir dil olarak geldi "hala aynı" sonra nasıl bir boşluğa düşmüşüm ki, basic'e atmışım kendimi. İlk olarak 2x16 lcd ye bişiler yazdırmanın orgazmını basicte yaşamıştım. neden ? - çünkü üstesinden gelebilceğimi düşüyordum.  günlerden bir gün " bu basic'in adında meymenet yok!" dedim.  - ne olur? - ne olur ? hadi bakalım sil basic'i   hurraa... hoş geldin Ccs dedik, aslında basicte ciddi sorunlar yaşadığımda söylenemez.  ileri seviyede bir dile başlamış oldum. çat-pat  C öğrenmeye koyuldum ve başarılı olucamı düşündüm  komutlar vs. filan derken iyicene alıştım Ccs ye -derken dış seslerde hep şu yankılandı: " bi halta yaramaz! Sil bunu.  Ossursan hata veriyor " vs. vs. gibi  bunu farklı kişilerden de duyunca insan kulak kabartmaya başlıyor haliyle, dedim" ben bu ccs yide silerim ulan!"  mis gibi hi-tech kur rahatına bak "milyonlarca sinek yanılıyor olamaz" bir kaç arkadaşımızın msjlarını filan okudum hi-tech bölümünde gerçekten ağzım sulandı "diyemiycem" gözlerim sulandı efendim.  Bu ne?  ben ne yapıcam şimdi, 2 satırlık kodu bile yazamıyorum... ama sonucunda ciddi bişeyler olacağını ve işime çok yarayacağını düşünerek "kendini ne olarak görmek istiyorsun!?" sorusunun cwbı olarak gördüm . Eğer gerçekten yazılımcı olup bu konuda kendimi ispatlamak istiyorsam bu (basic) ile olmaz.  Ccs ile de olmaz! bu iş nasıl olur biliyormusunuz ?  - bu iş: öncelikle chipleri iyi tanımak, datasheet okuyabilmek, algoritma çıkartmak , pratik düşüncelere dayalı sistematik çalışmak, iyi sayılacak düzeyde matematik bilgisine sahip olmak  (takdir edersinizki elinize alacağınız her sensör  lineer olmayabilir ) şimdi burdan ne çıkaracağız? Herşeyden önce basic diyip geçmeyin arkadaşlar, ben basic ile yapılmış sorunsuz çalışan bir çok cihaz gördüm. forumdada buna benzer bir çok örnek var . olay kullanılan  compiler veya dil değil! Olay tamamı ile ne yapıcağını bilmek ile alakalı sen zaten belirli kriterleri yerine koyabiliyorsan zaten gerisi puzzle gibi gelicektir, size kalan sadece gerekli parçaları gerekli yerlere koymaktır.  Noldu ? şimdide başa döndük dimi ? evt!  O compiler - şu bilmem ne -bu programlama dili derken kafanız allak bullak oldu dimi ?  ve eliniz kolunuz bağlandı hiçbir eylemde bulunamıyorsunuz .  Şimdi soğuk bir duş alıp ardından kendinize güzel bir algoritma çıkartıp işe kendinizi programlamak ile başlayın.
Not: Sevgili  okur,  sonuna kadar sıkılmadan bu yazıyı okuduğun için sana minnettarım ve umarım duştayken kulağına su kaçırabilmişimdir…
Alpay ZEREN.

Alpay, güzel yazmışsın, insan sıkılmadan okuyor.
Ben nasıl program yazılmalıdır, chip tanınmalıdır, matematik bilimelidir gibi konulara girmeyeceğim, zira o konu başlı başına saatlerce konuşulacak bir konu.
Ben sadece küçük bir örnek ile kendi çapımda compilerları karşılaştırmak istiyorum;
BASIC; "atlı karınca" sadece inip binme kontrolü sende :)
CCS C; "otomatik vitesli otomobil" gaz, fren, direksiyon!!
Hi-Tech; "motosiklet" denge, vites, gaz fren, tüm kontrol sende! hız var heyecan var tutku var!!!
ASM; "bisiklet" tüm yük sende, hız yok :(

Not: Yukarıda yazdığım dillerin hepsini kullandım. Hi-Tech'in verdiği hazzı başka bir compiler veremez.
Son bir şey söylemek istiyorum, PICASM, BASIC, CCS C ile sadece microchip pic programlarken, Hi-Tech ile ANSI-C olduğu için msp, arm gibi diğer micro familyalarını da programlayabilirsiniz.

hasangurlek

Alıntı yapılan: "gokhanbas"
BASIC; "atlı karınca" sadece inip binme kontrolü sende :)
CCS C; "otomatik vitesli otomobil" gaz, fren, direksiyon!!
Hi-Tech; "motosiklet" denge, vites, gaz fren, tüm kontrol sende! hız var heyecan var tutku var!!!
ASM; "bisiklet" tüm yük sende, hız yok :(

Alıntı YapAssembly dili karmaşık programlar yazmak için kullanılan düşük seviyeli bir programlama dilidir. Assembly insanlar tarafından anlaşılması zor olan makina dilinin sayısal ifadelerini, insanlar tarafından anlaşılarak programlanması daha kolay olan alfabetik ifadelerle değiştirerek düşük seviyede programlama için bir ortam oluşturur. Assembly kullanmanın amacı, ilk bilgisayarlarda yazılan programların daha az hata içermesi ve daha az zaman almasını sağlamaktır.

Assembly dili bir zamanlar programlamada çok fazla kullanılmaktaydı, ancak günümüzde daha az kullanılma eğilimindedir, öncelikle doğrudan donanım manipülasyonunun veya anormal performans hususları söz konusu olduğu zaman bu dil kullanılmaktadır. Tipik uygulamaları cihaz sürücüleri, alt seviyeli dahili (embedded) sistemleri ve gerçek zaman uygulamalarıdır.

Assembly dilindeki komutlar (emirler) yüksek seviyeli bir dilin aksine genellikle oldukça basittirler. Her bir komut tipik olarak bir operasyon kodundan veya opcode'dan (veya, sadece, komut) artı sıfır veya daha fazla "operand" lardan ( işlem faktörlerinden) ibarettir. Komutların pek çoğu tek bir değere veya değer çiftine atıfta bulunurlar. Dilde kodlanan bir komut genellikle doğrudan yerine getirilebilir makine dili komutuna tekabül eder.

İlk bilgisayarların geliştirilmesi aşamasında maalesef belli komutlara sahip bir dil yoktu ve yazılım kaynaklı çok fazla hata meydana geliyordu, bunun için 0 ile 1 lerin yerine daha anlaşılır olan bu dil geliştirildi. Ne yazıkki o hataları yapan kişiler gibi ileri seviye dilleri geliştiren kişilerde bazı özellikleri gözardı ettiler veya çözüm mantığını bulamadılar. Bazı dillerin kesme durumunda kodları işleme mantığı bunun çok açık bir örneğidir.

Aynı programı farklı dillerde yazın ve sonuçları değerlendirin;

BASIC : 60 dakikada kod yaz, 1500 milisaniyede kodu işlesin, 850 byte kaynak tüketsin
MIKRO C : 60 dakikada kod yaz, 1000 milisaniyede kodu işlesin, 1500 byte kaynak tüketsin
CCS C : 90 dakikada kod yaz, 800 milisaniyede kodu işlesin, 600 byte kaynak tüketsin
HI-TECH : 90 dakikada kod yaz, 700 milisaniyede kodu işlesin, 500 byte kaynak tüketsin
ASM : 180 dakikada kod yaz, 200 milisaniyede kodu işlesin, 150 byte kaynak tüketsin

Hepsinin kendine göre avantajı ve dezavantajı var ama hiç birisi programcının mantık hatasını çözecek teknolojiye sahip değil. Aynı kodu 100 satırda yazabilecekken veya aynı kodu program içinde fonksiyon olarak kullanabilecekken, mantığı kuramayıp sayfalarca kod yazan bir programcı için ileri seviye diller gerçekten daha uygun.

Ayrıca program çalışırken MCU da neler olup bitiyor tam olarak görmenin ve tam olarak ona hükmetmenin tek yolu yine asm. Ayrıca en basit en öğrenilebilir olan aslında assembly dır ve programınızı kodda yapacağınız ufak tefek değişikliklerle istediğiniz MCU ya taşıyabilirsiniz.

Şu varki çoğumuz ileri seviye dillerininde arka planda assembly komutlarını kullandığını zanneder. Oysa bu derleyiciler asm kodlarına çevrim yapmadan ve assembler kullanmadan kodları direk makine diline çevirirler.

Önemli diğer konu ise sınırlı kapasite kullanımı, kaynak tüketimi en düşük derleyiciyi kullanmak daha mantıklı. Eğer her şey ileri seviye dillerle halledilebilseydi derleyiciler asm kodlarının kullanılmasına (Inline assembly) kesinlikle izin vermezlerdi. Bence bunu düşünmek lazım.

Sonuçta "ASM; "bisiklet" tüm yük sende, hız yok :"  AMA GİTTİĞİN YERDE NASA'NIN  X-43A SI BEKLİYOR
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

Tagli

Alıntı yapılan: "hasangurlek"Şu varki çoğumuz ileri seviye dillerininde arka planda assembly komutlarını kullandığını zanneder. Oysa bu derleyiciler asm kodlarına çevrim yapmadan ve assembler kullanmadan kodları direk makine diline çevirirler.
Kesinlikle yanlış. Belki ortada görülebilir bir .asm dosyası oluşmuyor olabilir, ama makine dili zaten assembly dili ile hemen hemen aynı şeydir. Sadece gösterimi farklıdır. İşlemcinin içinde çalışabilecek her kod assembly komutları ile ifade edilmek zorundadır.
Gökçe Tağlıoğlu

chaconne

Assembler kullanılmadığı kısmı doğru sonuçta :).

serdararikan

1-2 haftadır hitech egöz atıyorum.henüz oturup tek satır kod yazmış değilim.manualine bakıyorum.elimde ansi c kitabı var onada bakıyorum.hitech de ansi c de olmaya bir sürü tanımlama falan filan var.kafam karışmaya başladı:( ccs de ise durum öyle değil.onda da ansi c komutları var.herşeye hata verirmi bilmiyorum ama veriyorsa da onun verdiği hataları hitech görünce hata vermiyormu? burasını anlayamadım.hitech de donanıma hakim olduğu söylenmiş.ccs de donanıma hakim olunmuyormu? eğer canın isterse kod yazmak senin zevkin haline gelmişse açarsın datasheet i istediğin chip e kod yazarsın donanımda senin olur kodda:) hitech in manualine bakıyorum 100 sayfasına baktım daha bir tek kod şöyle yazılır şu komut şöyle kullanılır diye bir açıklama görmedim.ama herkes hitech i övüyor açıkçası bu yüzden çokda merak ediyorum.ilerleyen zamanlarda üzerinde çalışacağım.ama bana her chip için driver yazmak fikri hiç mantıklı gelmiyor.örneğin ccs de bir sürü driver var.şimdi hitech ci arkadaşlar diyecekki otomatik araba gibi:) anlamadığım nokta ccs nin driver kodları ile ilgili bir problemmi var? neden insanlar bu şekilde hazır kod kullanmayı tuhaf karşılıyorlar?insanı tembelleştirimi bu kodlar? bence tembelleştirmez.o kodu sen yazmaya uğraşsan bir sürü zamanın gidecek.zamandan daha değerli ne varki? o zamanı başka bir chip üzerinde araştırma yaparak harcayabilirsin veya başka projeler geliştirmek için.şuan tam bi bilgiye sahip değilim ama bence ccs ile hitech arasındaki tek fark birisi ccs firmasının ürünü diğeri microchip. yetenek açısından bi farklarının olduğunu sanmıyorum.ama önyargılı değilim araştırıp görecez fark varmı.....

chaconne

Ben ccste şöyle bir sorunla karşılaşmıştım.

int8 x, y;
int1 a;

x = 0;
y = z; // z 0 olmayan bir değer

if(x & y)
{
     a = 1;
}


Program oldukça uzun bir programdı. Timer ve rs485 için kesmeler vardı. rs485 olayını ekledikten sonra bir problem oldu. Bu a biti x tüm program boyunca 0 iken(ya da normalde öyle olması gerekirken), a biti rastgele bir zaman sonra (ki bu zaman 5 dakika ile 2-3 saat arasında değişiyor) set oluyordu. Dedim nasıl olur, belki de başka bişeyden benim farkedemediğim birşeyden dolayı bu x değişkeni 0'dan farklı bir değer mi alıyor acaba diye düşündüm. Kesmeler ile ilgili bir sorun da olabilir dedim. Sonra denemek için kodu aşağıdaki gibi değiştirdim:

x = 0;
y = z; // z 0 olmayan bir değer

if(x & y)
{
     if(x != 0)
     {
          a = 1;
     }
}


Yani x ancak 0'dan farklı bir değer ise a biti set olacak. Bunu yazınca sorun çözülmüş oldu. Ancak zaten yukarıdaki koşulun tek başına yeterli olması lazım. Bir süre önce birileri ccs derleyicisinde yanlış kod derleme sorununa rastladıklarını söylemişti. Direk çamur atmak istemem derleyiciye, sonuçta benim göremediğim birşeyler olabilir tabi, rs485 olayını eklemeden önce ve önceki yazdığım programlarda böyle birşeye rastlamamıştım. Yine de şüphelenmedim değil :).

Bu nedenden ötürü bu aralar hitech kasmaktayım mesela. Başka bu tarz problemler yaşayanlar var mıdır acaba?

serdararikan

Alıntı yapılan: "FxDev"

En basitinden şu soruyu kendinize sorduğunuzda neden ANSII C diye insanların önem verdiğini anlarsınız...

CCS'te driver'ı olan bir proje yaptınız. Harika çalışıyor. Peki hadi bunu atmel ya da 8051'de uygula dediler. İşte o zaman ne yapacaksınız.
ANSII C'de output_x(...) diye bir komut yok, fakat CCS driverında bu var şimdi olay neye döndü, tekrar o kodları ANSII C'ye çevirmeye.

Hitech'te A portunu yüksek seviyede yapmak istiyorsanız

PORTA=0xFF;

yazarsınız.

CCS'te ise

output_A(0xFF);

output_x'in ne demek olduğunu bilmeden A portuna ne oluyor bilemeyiz, fakat diğer tarafta oldukça basittir çünkü datasheeti açar bakar ve dersiniz ki PORTA registerinin hepsini 1 yaparsam A portunun çıkışları bir olur.

Ben de bu işe CCS ile başladım, lcd ile bir çok proje yaptım, fakat bu sene 8051 gördüğümde anladım ki aslında ben pic falan bilmiyorum, sadece compiler'ın nasıl kullanılacağını öğrenmişim. Onun içindir ki Hi-tech'e geçtim. Şimdi pic'in hangi registeri ne yapar, ne olunca nasıl değişir biliyorum...

Sizin için registerler önemli değilse, işimi görsün yeter diyorsanız CCS en uygunudur, fakat CCS bilirken compiler'a bağlı kaldığınızı lütfen unutmayın...

Kolay gele...

şimdi ccs de portu yüksek seviyede tutmak istiyorsan illaki output komutunu kullanmana gerek yok.dediğin gibi bu bir ccs fonksiyonu.eğer ansi c kodu olmasını istiyorsan bir pointer ile o portu tanımlarsın örneğin
#define PORTA  *5 şeklinde
daha sonra PORTA=0xff    dersin porta nın tüm bitleri 1 olur.fonksiyon kullanmak istersen fonksiyon kullanırsın.

hasangurlek

Alıntı yapılan: "Tagli"Kesinlikle yanlış. Belki ortada görülebilir bir .asm dosyası oluşmuyor olabilir, ama makine dili zaten assembly dili ile hemen hemen aynı şeydir. Sadece gösterimi farklıdır. İşlemcinin içinde çalışabilecek her kod assembly komutları ile ifade edilmek zorundadır.

Eğer MCU lara yükleyeceğimiz hex dosyasını makine dilinde binary olarak yazmaya kalksaydık "GOTO Etiket" yerine 101 ve ardından yine etikete ait ilk kodun başladığı satırın adresini 00000001000 gibi yazmamız gerekirdi.( 10100000001000 = 8.adrese git)  Assembly komutlarının MCU içinde nasıl ifade edildiğini katologlarda "INSTRUCTION SET" bölümünde "Opcode" altında görebilirsiniz. "Makine diline yakın" ifadesindeki kasıt donanım kontrolünün tam olmasından dolayıdır. Yoksa MCU içinde BTFSC ler MOVF ler koşturmaz.

Ben size başımdan geçen bir olayı anlatayım; Bir basınç sisteminde sürekli değişen akışkan basıncı 1/saniye periyotta test etmem gerekti. Basınç sürekli değiştiği için örnekleme hızının yüksek olması gerekiyordu. Çözünürlükten dolayı 12 bit olan MCP3202 yi kullandım. Bu ADC SPI protokole ve 1.8 mhz de 100 ksps örnekleme hızına sahip ama aşağıda okuyacağınız nedenlerle bu hızda kullanmam mümkün olmadı.

İstenen ölçüm aralığı saniyede bir defa (yani günde 86.400 ölçüm) sistem sürekli çalışacak ve belirlenen değerlerin altında ve üstünde değerler bulunursa basınç sistemine otomatik müdahale edilerek basınç ayarlanacak. Müdahale süresi ise en fazla 3 saniye. Ölçümler kesinlikle hatasız olmalı ve ölçüm sonucu belirlenen set değerlerinden farklı çıkarsa tekrar test etmek ve müdahale etmek için 3 saniye zamanınız var. Bundan dolayı algoritmayı biliyorsunuzdur ama yine izah edeyim ölçüm mantığı şu şekilde kuruldu;

12 bit 32 ölçüm yapılacak
sonuçlar küçükten büyüğe (veya tersi) sıralanacak
alt ve üstte kalan 8 er sonuç dışarda bırakılacak ortada kalan 16 sonucun ortalaması alınacak
bu sonuc üst değerlendirme için ayrıca kaydedilecek
32 defa yukarıdaki prosedürler tekrarlanacak

alt prosedurde elde edilen 32 ortalama sıralanacak
alt ve üstte kalan 8 er sonuç dışarda bırakılacak ortada kalan 16 sonucun ortalaması alınacak
bu sonuc en üst değerlendirme için ayrıca kaydedilecek

8 defa  yukarıdaki prosedürler yapılana dek devam edilecek
elde edilen 8 sonucun ortalaması alınacak

Toplam 8192 ölçüm sonrası elde edilen hatasız tek değer belirlenen alt ve üst limitlerle karşılaştırılacak. Limitler geçildiyse müdahale edilecek, problem yoksa teste devam edilecek.

Ben bu sistemi assembly kullanarak yaptım, çünkü diğerlerinde bu işlem için süre artışını göz ardı etmem imkansızdı. Tam hatırlamamakla birlikte yukarıdaki kodu 877 nin 20mHz de işleme süresi 0,6 saniyeden kısaydı.


Açıkca söylemek isterimki C dili ile hiçbir MCU için kod yazmadım ve yazmayı düşünmüyorum ama bu dili PC programları için çok kullandım. Ama şöyle bir proje geliştirsek bence herkese faydalı olur. Benim aynı konuda biraz değişik bitmek üzere bir projem var. USB gerekliliği nedeniyle 4550 ye taşıyacağım bir proje. Projenin ADC kısmını açık kodlarla ve proteus çizimiyle paylaşabilirim. HI_TECH, CCS C, Basic vs. diğer ileri seviye dilleri iyi bilen arkadaşlardan birer kişi belirleyelim böyle bir kod yazılsın. Sonucta hızlı diller ve birkaç read_adc ile biter :)

Benim proje yine MCP3202 kullanıyor ama proteus olacağı için MCP3204 yapalım, iki kanaldan 8192 şer defa yani 16.384 ölçüm yapalım, her iki kanalın sonuçlarını sadece üstüste toplayalım ve ortalamasını alalım. Yukarıdaki kodun assembly ile 877 de ve 20 mhz de işlem süresi 616.754 us.

Böylelikle tüm dillerde kaynak kullanımını nedir görebilir ve gerçek işlem hızlarını test edebiliriz, çoğu kişiye yol gösterici bir proje olur.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

Erol YILMAZ

Merhaba HasanGürlek,
ADC okumalarına dikkat ederim.
Sizin ADC okuma prosedürünüz çok hoşuma gitti,
Tebrikler :)

Tagli

Alıntı yapılan: "hasangurlek"Eğer MCU lara yükleyeceğimiz hex dosyasını makine dilinde binary olarak yazmaya kalksaydık "GOTO Etiket" yerine 101 ve ardından yine etikete ait ilk kodun başladığı satırın adresini 00000001000 gibi yazmamız gerekirdi.( 10100000001000 = 8.adrese git)  Assembly komutlarının MCU içinde nasıl ifade edildiğini katologlarda "INSTRUCTION SET" bölümünde "Opcode" altında görebilirsiniz. "Makine diline yakın" ifadesindeki kasıt donanım kontrolünün tam olmasından dolayıdır. Yoksa MCU içinde BTFSC ler MOVF ler koşturmaz.
Sanırım burada tanımlardan kaynaklanan bir yanlış anlaşılma olmuş. PIC'in içinde işlemlerin opcode'lar ile yapıldığını biliyorum, hatta onun altında da digital logic denen daha karmaşık işlemler var ki ayrıntılarını bilmiyorum. Bence "asm komutu = opcode", burada bir yanlışım varsa düzeltin. Her programın asm kodları ile ifade edilmesi gerektiğini söylerken aslında programların opcode'lar ile ifade edilebilir olması gerektiğini söylemek istemiştim.

Bu arada, USB konusunun assembly ile nasıl çözülebileceği konusunda deneyimlerinizi paylaşırsanız sevinirim. Ben bir ara bu konuyu araştırmıştım ama pek ilerleme kaydedemeden araya başka işler girdi, ara vermek zorunda kaldım. Uğraştığım kısıtlı süre içinde bu işin baya karmaşık olduğunu farkettim. PIC'i programlamak da yetmiyor, ayrıca bir de bilgisayar tarafında sürücü yazmak gerekli.
Gökçe Tağlıoğlu

hasangurlek

Alıntı yapılan: "Allegro"Merhaba HasanGürlek,
ADC okumalarına dikkat ederim.
Sizin ADC okuma prosedürünüz çok hoşuma gitti,
Tebrikler :)

Teşekkür ederim.

Alıntı yapılan: "tagli""asm komutu = opcode"

asm komutu = asm komutu (C komutu = C komutu gibi)
opcode = makine dili = hex dosyası içindeki program kodu

sample.c = C programı / derlemeden sonra ise sample.hex = makine diline çevrilmiş program

sample.asm = Asm programı / derlemeden sonra ise sample.hex = makine diline çevrilmiş program

Yani kod derlendikten sonra hangi dilde yazıldığının bir önemi kalmaz. Sadece hız ve kaynak kullanımı fark oluşturur.


Eğer böyle olmasaydı disassembler gibi disC disBasic gibi dönüşümlerde olurdu. Disassembler her derleyicinin hex dosyasını asm koduna çevirebilir. Ama dönüştürülen asm dosyasında etiketlere, değişkenlere verdiğiniz isimler yerine sayısal değerler görürsünüz. Bunun sebebi derleme işleminde programın kullandığı değişken sayısına, etiket durumuna, bank ve bellek kullanımına göre derleyicinin atadığı benzersiz ifadelerin aynen geri okunmasıdır.

Assembly kodlaması ile yapılamayan bir iş hiç bir dille yapılamaz. Asm ile USB bağlantısı için nette uygulama örnekleri yeteri kadar var. Her zaman olduğu gibi biraz fazla kod yazıyorsunuz o kadar :)

ASM ile USB örnek kod

main.asm deki include dosyaları USB_DEFS.INC (tanımlamalar) ve ENGR2210.INC (makrolar) dosyalarıda aynı sitede var. Ayrıca PC tarafındaki sürücüleride aynı sitede bulabilirsiniz. Özellikle makrolardaki direktifleri incelemenizi tavsiye ederim. MPLAB ın bu özelliği assembly kullanmanıza rağmen programınızı yönlendirmenize olanak tanıyacak şekilde if while gibi temel programlama komutları kullanmanıza imkan veriyor.

PC tarafında .dll .sys dosyaları ve iletişim programını yazmak ve derlemek hiç problem değil, asıl problem BU :) Bu yüzden iş ticari olmayacaksa, tüm dünyaya ürün pazarlamayacaksınız başkalarının yazdığı sürücüleri kullanmak daha cazip.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

hasangurlek

Alıntı yapılan: "FxDev"Assembly'ın yapamadığı bir işlemi, diğer hiç bir dilin yapamamasındaki temel unsur burada. Assembly=Opcode çünkü, sadece 1-0 ların insan dillerine okunuş biçimi desek yeterli olur sanırım.

Assembly=Opcode

Arkadaşlar niçin aynı şeyde ısrar ediyorsunuz ? Yaptığınız işe yeni başlayan arkadaşlara yanlış bilgi vermekten başka bir şey değil.

Assembly bir programlama dilidir, Aynen C gibi, Basic gibi.

Anlaşılır olması için sanırım biraz daha bilgi vermek gerekecek.

Nasıl Basic Ve picBasic gibi bir ayrım varsa, Assembly ve PicAssembly diye bir ayrımda vardır. Aslında üzerinde konuştuğumuz picAssembly dir. Gerçek Assembly de MOVF komutu yoktur MOV komutu vardır. SUBWF komutuda yoktur, SUB komutu vardır. Ayrıca MUL, DIV gibi MCU ların bazılarında kullanamadığımız çok sayıda komutda vardır. MCU ların sınırlı işletme kapasitesi nedeniyle çoğu assembly komutu picAssemblyde kullanılamaz. Picde kullandığımız W registerin windows altında hemen hemen karşılığı AX (16bit), EAX (32bit) ve EDX (64bit)  tir.

Windows altında GERÇEK assembly ile neler yapılabiliyor bakmak isterseniz : MASM Forum

Ayrıca www.intel.com dan IA-32 manual ide indirebilirsiniz.

Instruction Set Reference, A-M : 812 sayfa PDF
Instruction Set Reference, N-Z : 796 sayfa PDF

Trojanlar, Key logger ler ve virüslerin pek çoğu işte bu dille yazılmıştır ve yazılmaya devam ediyorlar. Düşünsenize 40kb büyüklüğünde bir kod, sizin tüm tuşlamalarınızı, fare pozisyonlarınızı kaydediyor ve internet bağlantsını yakaladığı anda sizin PC deki kernel programlarını kumanda ederek 25.portunuzu açıp istenen mail adreslerine posta atıyor. Tüm bunlar olup biterkende kullanıcıların ruhu duymuyor :)
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!