ADUC7026 ile genişletilebilir veri toplama projesi yapıyor

Başlatan Ziya, 12 Ağustos 2006, 15:40:11

Ziya

http://www.ontrak.net/commands.htm bahsettiğim kartların komutları. Bu kartlar labview ile de kullanılıyor.

Bu da bir örnek:
10 OPEN "COM1:9600,N,8,1,CS,DS,RS" AS#1
20 CLS
30 LOCATE 1,1
40 PRINT#1, "RD0"
50 INPUT#1, POT1
60 PRINT#1, "RD1"
70 INPUT#1, POT2
80 POT1=(POT1/255)*100 :PRINT "POT#1 IS AT"POT1, "PERCENT"
90 POT2=(POT2/255)*100 :PRINT "POT#2 IS AT"POT2, "PERCENT"
100 GOTO 40  
     

The following test programs outline the proper syntax for using the commands in simple applications. The first program retrieves the status of analog port 0 and displays the data on the video screen. The second program configures PORT A as output, sets the port to decimal 255, reads back the port status and displays the data on the video screen.

/* PROGRAM EXAMPLE ONE - ANALOG PORT TEST PROGRAM */ 

#include <stdio.h>        
#include <bios.h>        
#define com1 0        
#define settings (0xE3)         
main( )         
{ /* declare an0 as a floating point number */         
float an0 ;         
/* configure com1 9600 baud, 8 bit words, no parity */         
bioscom (0,settings,com1);         
/* send RA0 command to ADR101 on com1 */         
fprintf(stdaux,"RA0 \xD");         
/* initialize com1 buffer */         
fscanf (stdaux,"%e",&an0);         
/* print data on screen */         
rewind (stdaux);         
/* read data from com1 and store it at address of an0 */         
printf ("ANALOG PORT 0= %e PERCENT \n",an0); }
       


A complete BASIC program which reads analog port 0 and sets PA0 if the analog port is above 50% ( 2.5 volts ) is shown below;

10 OPEN "COM1:9600,n,8,1,CS,DS,RS" AS#1	;opens and configures serial file
20 PRINT#1, "CPA11111110"		;configures PA0 as output
30 REM  FORCES 
40 PRINT#1, "RESPA0"			;resets PA0
50 REM FORCES 					
50 PRINT#1, "RA0"			;sends RA0 command 
60 INPUT#1, AN0				;receives data into variable AN0
70 IF AN0>50% then PRINT#1, "SETPA0"'	;sends SETPA0 command if
80 GOTO 50				AN0>50% and returns to line 50 
90 PRINT#1, "RESPA0" : GOTO 50		;resets PA0 and returns to 50

         
Örnekler hep aynı mantık üzerine. Demekki Labview de bu komutlarla sorgulama yapıyor :D
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

picusta

TDMI'yi az çok anladim gibi (Thumb mode, debuger, long multiply, ICE), benim merak ettgim philips'in -S neyi ifade ediyor?
çevirme odasindakileri göremiyorum, indan dogrudan datasheet'ten okuyorum.
FIQ'ler için interruptun nerden geldigini ögrenmek için FIQsta'ya bakildigina neredeyse eminim.
Ben ADuC'un datasheet'in interrupt vector görmedim. Gerçi önemli okadar önemli bisi değil ama olsaydi fena sayilmazdi bence. En son Renesas'la çalistigim için IRQ'lerin vektörlenmesinin ve öncelik koymanin  faydalarini gördüm.
Bi tane C++ ile standart arayüz yapalim.
Benim esinlendigim sey bikaç ay önce gördügüm datalogger.
içine baktigimda USB PIC koymuslar bir opamp, voltaj referans, oldu sana 4 kanal 8bit datalogger (en kisa örnekleme zamanini hatirlamiyorum tam,  100ms veya 10ms olabilir ). Yanina kendi yazdiklari bir arayüz koymuslar, verileri görüntülemeyi sagliyor ve dosyaya kaydediyor. Ayrica dll vermisler ve bununla istediginizi arayüzü yapin demislerdi.
Bende bunun gibi esnek yapiya sahip bisey istiyorum (bir arayüz değil, uygulamaya göre birçok arayüz kullanalim).

Bide merak ettigim, o data loggerda kademe ayari vardi, 0..30V 0..15V 0..5V 0..3V gibi seçilebiliyordu. Bunu elektronik olarak nasil yapmislar acaba? Gerçi benim bi fikrim var, o da open collector çikislarini opamp devresinde kullanmak. Ama o zaman fazla parazit olmazmi?

ground

Alıntı yapılan: "picusta"çevirme odasindakileri göremiyorum, indan dogrudan datasheet'ten okuyorum.

@picusta üstadım artık görebiliyorsun..  ;)
⌒╮'╭⌒╮⌒╮.
╱◥██◣                  
| 田︱田田|              
╬╬╬╬╬╬╬╬╬

Picproje - Sözde değil özde paylaşım..

Ziya

http://www.hemenpaylas.com/download/78401/lpc-ARM-book_srn.pdf.html

Bu kitaptan bahsetmiştim. Bunun küçük bir kısmını çevirdik. Sayfa 70 te vectored interruptı anlatıyor. 16 adet vektör tanımlanabiliyor. Hatta öncelikleri de atanabiliyor. Sanıyorum bu Philipse özel bir durum değil. ARM7 datasheetine bakmak lazım. Bunlar ADuC datasheetinde olmayabilir.


Çeviri yaptığım kısmın bağlantısı çeviri odasında vardı. 20 sayfa kadar çevirdikten sonra interruptlar önemli diye oraya öncelik vermiştim. Sanıyorum 3-4 sayfa da oradan çevirmiştim.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

Ziya

Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

mp3dragon

@Ziya
kitabın çevirdiğin kısmı kadarını gönderebilirmisin?
İyilik Yap, Denize At, Balık Bilmezse, Halik Bilir.

Ziya

Alıntı yapılan: "mp3dragon"@Ziya
kitabın çevirdiğin kısmı kadarını gönderebilirmisin?
Henüz düzeltme yapılmadı. Olduğu kadarını göndereyim. Ortak çalışma yaptığımız arkadaşlar ve çeviri grubu üyeleri haricinde başka isteyen olursa maalesef düzeltme yapmadan ve dergide yayınlamadan göndermeyeceğimi peşinen söyleyeyim.

Hocam, pm den mail adresini gönderebilirmisin. Ya da akşam msn den göndereyim.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

kurumahmut

@Ziya

Bu ara bende bu kaynağı ve LPC2138 datasheetini kullanaraktan çalışmalar(doğrusu öğrenme) yapıyorum. Keil yazılımı ve LPC2138 kullanaraktan birşeyler öğrendim. Timer, UART, RTC, Kesmeler, SPI(gelişmekte) filan... Staj defterimde ARM anlatmayı düşünüyordum. Katkı sağlayabilirim. Çeviri grubunun CCS ile uğraştığını biliyordum. ARM a ne zaman başlandı. Üyelik kapalı. Ama bu konu da dahil olabilirim...

Ziya

Alıntı yapılan: "kurumahmut"@Ziya

Bu ara bende bu kaynağı ve LPC2138 datasheetini kullanaraktan çalışmalar(doğrusu öğrenme) yapıyorum. Keil yazılımı ve LPC2138 kullanaraktan birşeyler öğrendim. Timer, UART, RTC, Kesmeler, SPI(gelişmekte) filan... Staj defterimde ARM anlatmayı düşünüyordum. Katkı sağlayabilirim. Çeviri grubunun CCS ile uğraştığını biliyordum. ARM a ne zaman başlandı. Üyelik kapalı. Ama bu konu da dahil olabilirim...
Hocam sen bizden ilerdeymişsin :D Çeviri grubunda ARM7 çevirisine başlamıştım. CCS ile uğraşan grup başkaydı. Katkı sağlamana memnun oluruz.

Ground hocam, mahmut kardeşimizi de çeviri grubuna dahil edebilirmiyiz?
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

picusta

Dediginiz ARM lpc'yi anlatan kitabi daha önce download edip lpc VIC ile ilgili olan bölüme bakmistim.
Ayrica Coskun'un vermis oldugu ARM SoC kitabina da baktim. çikardigim sonuç ise su:
ARM çekirdeginde olan istisna exceptions vector (Reset, FIQ, IRQ, Abort, SWI).  Philips'de MCU'nun içine AMBA AHP (Advanced High performance Bus ) bus'u sayesinde ayriyeten IRQ'ler için Vectorized Interrupt Controller koymuslar, 16 çevrebiriminin interruptu vektörleniyor.
ADuC'ta maalesef böyle bir kontrolör yok.
Bizde onsuz yapacagiz, belki interrupt latency performansi düsecek o kadar.
LPC ile ADuC karsilastirmasinda son bisey daha :
ADuC'un 3 faz kontrol çevre birimi gayet güzel. LPC'nin de SPP (SPI) çevrebiriminin hünerleri saymakla bitmez : iste 512 × 240 pixel çözünürlüklü osiliskop (SPP ve interrupt'u kullanilarak yapilmis) http://www.jandspromotions.com/philips2005/Winners/AR1755.htm

Konumuza dönersek MCU'ya komut gönderebiliriz ( parametre ayari, konfigürasyon...) veri gönderebiliriz (DAC degerleri) o da bilgisayara kendi verilerini gönderecek (kendi durumu, ölçümler).
örneklerde sadece 1 bayt okudugu için is biraz daha kolay.

Matlab'da GUI editör kullnarak nasil veri toplama yaptigimi anlatayim:
seri porttan okumak için 2 alternatif var :
ya fscanf kullanmak o zaman okumayi yapana kadar bilgisayar orda bloke oluyor yada callback fonksyon (event üzerine çagriliyor) kullanmak event 'da 2 çesit: ya belli sayida karakter alana kadar yada belli bir karakteri (örnegin [CR][LF]) alinca olusuyor.
Ayrica degerleri grafige çizsin diye 0.5 saniyelik timer eventine bagli bir çizme fonksyonu var.
Arayüzü Visual BASIC'te MSCOMM kullanarak yazmaya benziyor.

Matlab'da Simülink içinde çalistirmak içinde RS232 bloklari kullanilabilir (Bu bloklar internette open-source olarak veriliyor ).

Bu arada Mahmut kardesim hosgeldin, bu projeye katki yapacagindan süphe yok. Hatta bu projenin LPC 2138'li versiyonuda yapilabilir.

Ziya

Çok fazla interruptların derinine inmemiştim. Aslında karşılaştırmalı olarak incelemek baya fikir veriyor işlemciler hakkında.

Ben de ADuC seri portuna kıl oldum. Modem kontrollerini kullanmak istersem spi ve 2 adet i2c kullanılamaz oluyor. Uzakta kurulacak bir sistem için modem kullanmak gerekirse spi kullanamayacağım. Tabi MMC kar ta. Bu nasıl tasarım anlayamadım. SPI ve i2c kullanılsın isterse bu sefer de seri port gönderme ve alma bacaklarının yeri değişiyor. Neyse bu işi daha sonra düşüneceğiz.

Nokia 6110 ceptel (3100 için philips idi sanırım benimki) için Atmel işlemcide yazılmış bir programı aktardım ADuC7026'ya. Çalıştı çalışmasına da iki sorun var. Ekran ledleri 6.5 volt vermezsen sönük kalıyor ve renkler anlaşılmıyor (bir de ekran biraz yamulmuş olarak hediye edilmişti bana). Diğeri bir bacağı 1 ya da 0 yapmak için 3 assembler komutu derlemiş Keil. Bunun tek komutluk versiyonu olması gerekir. Yoksa öyle karmaşık işlemleri tek assembler komutunda yapanbir çekirdek bir bacağı 1 yada 0 yapmak için 3 komut harcamamalı. C de kullandığım yöntemi değiştirerek deneyeceğim.

Bu gün aklımdan bu ekranla mini bir osiloskop yapayım diye geçmişti. Pişti yaptınız :D

Bir de basit bir pid kontrolör koyup parametrelerini ekrandan girebileceğim bir şey yapacağım. Derginin 3. sayısı için.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

picusta

Evet sonuç olarak ADuC haberlesme konusunda zayif.

Benim blinky kodundan çikan LST bu:
Port read/modify/ write (toggle)
  42:     GP4DAT ^= 0x00040000;               /* toggle P4.2 LED                   */
 LDR         R2,=0x40000
 LDR         R0,=0xFFFFF460
 LDR         R1,[R0,#0x0]
 EOR         R1,R2
 STR         R1,[R0,#0x0]


Sanki önce portun adresi yükleniyor, sonra dolayli adresleme ile port registeri okunuyor sonra degistirilip dolayli olarak yaziliyor.

  44:   deger++;
 LDR         R0,= deger; deger
 LDR         R1,[R0,#0x0] ; deger
 ADD         R1,#0x1
 STR         R1,[R0,#0x0] ; deger

burda yine ayni sey oluyor. Acaba dogrudan yazmaçin degeri yükleyip (R0'dan geçmeden) degistirip onu yazmanin bi yolu yok mu? compiler seçenegi olarak olmasi lazim diye düsünüyorum. Bi de ayni kodu IAR'da derlesek acaba ne çikar?
Cep osiloskopu çok güzel bir fikir.
Demek derginin 3. sayisini simdiden düsünüyorsunuz. Ilk 2 sayi simdiden doldu  8O .

Ziya

Alıntı yapılan: "picusta"Evet sonuç olarak ADuC haberlesme konusunda zayif.
Evet
Alıntı Yap...
Sanki önce portun adresi yükleniyor, sonra dolayli adresleme ile port registeri okunuyor sonra degistirilip dolayli olarak yaziliyor.
Datasheet sayfa 33 te Memory Mapped Registers kısmında dolaylı adresleme yapılır diyor  :(  Ayrıca Advanced Peribleral Bus (APB) ye erişim2 cycle deniyor. Fakat GPIO, Flash/EE hafıza ve PWM Advanced High Performance Bus üzerinde imiş.
Alıntı Yapburda yine ayni sey oluyor. Acaba dogrudan yazmaçin degeri yükleyip (R0'dan geçmeden) degistirip onu yazmanin bi yolu yok mu? compiler seçenegi olarak olmasi lazim diye düsünüyorum. Bi de ayni kodu IAR'da derlesek acaba ne çikar?
Bu sanırım ADuC'un yamukluğu.  Philips'in örneklerine bakmak lazım
Alıntı Yap
Cep osiloskopu çok güzel bir fikir.
Aslında 100 YTLye renkli kranlı, 1 GB hafızalı mp3 playerlar var. Birini alıp bozup osiloskop ve mp3 player mı yapsak. içerisinde kullanılan çin yapımı işlemcinin de derleyicisi mevcuttu biryerlerde (S1mp3 ?)
Alıntı YapDemek derginin 3. sayisini simdiden düsünüyorsunuz. Ilk 2 sayi simdiden doldu  8O .
Demek istediğim malzeme dolmasından ziyade o kadar çok şey çıkartılabilir ki pek çok sayı için yazı hemen bulunabilir demek istedim.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

picusta

Performasi etkileyen diger bir unsur da su:
ARM modda flashtan 32 bit'i okumak için (ARM modda 1 komut) 2 clock gerekiyor. Yani 41.78MHz çalisan ADuc'te Flash'tan ARM komut çalistirinca hiz 20.89 MHz'e düsüyor. Bunu önlemek için ya o kodu Ram'a atmak gerekiyor yada Thumb moddunda flashtan çalistirmak. Universal programlayici projesinde kullanmayi düsünüyosaniz bunu mutlaka gözönünde bulundurmalisiniz.
Ben simdi buraya bir iki elektronik sema koyayim, mesela -10V.. +10V'u 0....3.33V 'a çevirme devresi (ve tersi). Projede somut gelisimeler olsun. Kurumahemet ve Analyzer arkadaslarimiz da ARM + PC programina el atsalar bu proje 1. sayiya bile yetisir.

Ziya

Alıntı yapılan: "picusta"Performasi etkileyen diger bir unsur da su:
ARM modda flashtan 32 bit'i okumak için (ARM modda 1 komut) 2 clock gerekiyor. Yani 41.78MHz çalisan ADuc'te Flash'tan ARM komut çalistirinca hiz 20.89 MHz'e düsüyor. Bunu önlemek için ya o kodu Ram'a atmak gerekiyor yada Thumb moddunda flashtan çalistirmak. Universal programlayici projesinde kullanmayi düsünüyosaniz bunu mutlaka gözönünde bulundurmalisiniz.
Memory Accelerator Module LPC2100 serisinin bir özelliği oluyor bu durumda. Gerçi Thumb modunda ADuC ta 1 komut 1 ic da işleniyorsa bu durumda ADuCta da MAM var ama 64 bitlik olsa gerek. LPC2100lerde 128 bitlik 2 bank var. Birinin okuduğu komutları işlemci kullanırken diğeri flashtan okumaya geçiyor. Universal programlayıcıda ADuC kullanılmayacak. Bir de sanıyorum yazılım Thumb modda yapılacak. Mümkün olduğunca çok algoritmayı gömmek için.

Hocam sende ne cevher varmış öyle :D çok ilginç tespitlerin var. Bundan bile bir makale çıkar yani :)

Alıntı YapBen simdi buraya bir iki elektronik sema koyayim, mesela -10V.. +10V'u 0....3.33V 'a çevirme devresi (ve tersi). Projede somut gelisimeler olsun. Kurumahemet ve Analyzer arkadaslarimiz da ARM + PC programina el atsalar bu proje 1. sayiya bile yetisir.
Şimdilik yukarıda verdiğim bağlantıda anlatılan komutları işleyen bir algoritma kurulabilir. Elimizde kartlarımız olduğuna göre biz ADuC kısmına el atalım o zaman. PC kısmında Analyser ve Kurumahmut hocam o komutları gönderebilecek şekilde bir program hazırlasa da haftaya deneme yapsak. En azından bir aşama kaydedilir senin de dediğin gibi.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey