89c51' de ADC0808 için clock sinyali oluşturma

Başlatan micelow, 03 Mart 2013, 17:36:00

micelow

Merhaba arkadaşlar,

89c51 ile seri porta veri gönderen bir uygulamada ADC0808 için 640KHz bir clock sinyali oluşturmaya çalışıyorum ama burdaki değerlerde ancak 53KHz oluşturabildim. 640KHz e nasıl ulaşabilirim. Yardımcı olursanız sevinirim. Teşekkür ederim.


void timer0() interrupt 1 {
CLOCK=~CLOCK;
}

void main() {
				   
TMOD=0x02;					
TH0=0xFD;
TL0=0xFD;
ET0=1;
EA=1;
TR0=1;
}

 
"Bir tek şeye ihtiyacımız var çalışkan olmak."

nusyil

http://www.8051projects.net/download.php?view.115

Ben zamanlayici veya kare dalga uretmek icin gerekli hesaplamalari bu hesaplayici program ile yapiyorum. Basit ama etkili. Bir incele.

Klein

#2
Yanlış hatırlamıyorsam, 89C51'de Timer2 yok, yani CCP yok. Bu da o frekansta clock üretmenizin mümkün değil demektir. 
8051 serisinde Saat iareti 12'ye bölünür. Timer de işaretini bu bölünmüş kaynaktan alır.  24MHz kristal kullansanız, Timer 2MHZ frekansında sayacak demektir.
CCP kullanmadan port tersleyerek 640KHZ darbe üretmek için saniyede 1280000 kez kesmeye gitmeniz gerekir. Timer taşma değeri olarak 1 bile verseniz saniyede 1000000 kez girebilirsiniz.
Kesmeye giderken, portu not yaparken , kesmeden dönerken gerekecek zamanı saymıyorum bile.
8051 serisi CISC işlemci. yani her komutun yürütülmesi birden fazla saykılda gerçekleşiyor.

kBunu ancak 89c52 ile Timer2 CCP modülünü kullanarak yapabilirsiniz.  Ancak orada da tam frekansı elde etmk için kristal frekansınızın özel bir değerde olması gerekebilir.


nusyil

Alıntı yapılan: Klein - 04 Mart 2013, 01:56:17
Yanlış hatırlamıyorsam, 89C51'de Timer2 yok, yani CCP yok. Bu da o frekansta clock üretmenizin mümkün değil demektir. 
8051 serisinde Saat iareti 12'ye bölünür. Timer de işaretini bu bölünmüş kaynaktan alır.  24MHz kristal kullansanız, Timer 2MHZ frekansında sayacak demektir.
CCP kullanmadan port tersleyerek 640KHZ darbe üretmek için saniyede 1280000 kez kesmeye gitmeniz gerekir. Timer taşma değeri olarak 1 bile verseniz saniyede 1000000 kez girebilirsiniz.
Kesmeye giderken, portu not yaparken , kesmeden dönerken gerekecek zamanı saymıyorum bile.
8051 serisi CISC işlemci. yani her komutun yürütülmesi birden fazla saykılda gerçekleşiyor.

kBunu ancak 89c52 ile Timer2 CCP modülünü kullanarak yapabilirsiniz.  Ancak orada da tam frekansı elde etmk için kristal frekansınızın özel bir değerde olması gerekebilir.


evet, klein hocanin dedigi gibi asagidaki link'teki 89s52 islemcisinin datasheet'inde sayfa 14 de "Programmable Clock Out" basligi altindaki formulu kullanarak istedigin frekans'ta p1.0 ucundan cikis alabilirsin.

http://www.keil.com/dd/docs/datashts/atmel/at89s52_ds.pdf

fgokcegoz

Bildiğim kadarıyla standart 8051 de saat işareti 12 ye bölünür. Çoğu gelişmiş 8051 veya 8052 lerde saat işareti bölünmeden kullanılır. Benim kullandığım Analog Devices ın ADuC841 leride öyleydi.

Ayrıca ADC0808 için saat frekansının typical değeri, 640kHZ imiş. İlla bu frekanstaki bir sinyal ile saat darbelerini üretmek zorunda değilsinki. Datasheet ine bakarsan, minimum değer için 10kHZ, maksimum değer için 1280kHZ değerini vermiş. Ürettiğin sinyalin bu aralıkta olması yeterli. İllaki 640kHZ üreteceğim diye boşa vakit harcama...
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

Kabil ATICI

harici osc kullan.89C51 saat hızı yetmeyebilir.
ambar7

micelow

#6
Değerli bilgileriniz için çok teşekkür ederim. Bir kaynakta adc0808' in en verimli 640KHz clock ile kullanılabildiğini okumuştum. Onun için üzerinde duruyordum ki Klein hocanında aydınlatmasıyla 89c51 ile mümkün olmadığını anlamış oldum. Artık harici bir osc veya 89c51 in maksimum port terslemesi son olarakta 89s52 alternatiflerini değerlendircem. Teşekkür ederim.
"Bir tek şeye ihtiyacımız var çalışkan olmak."