Sürekli timer da kalmasının sebebi senin oradan okuduğun veriyse konu nasıl mcp olmuyor onu anlamadım. Normal fonksiyon içinde çalışıp timer içinde çalışmıyorsa belli ki bi problem var. init ve mcp fonksiyonlarını paylaşırsan belki sorunu bulabiliriz. Veri görmeden sadece tahmin yürütebilirim.Init olayını her haberleşme başlangıcında yapıyorum. O sadece kısa süreli pulse üretiyor. Başladığını bildirmek için. Konu mcp değil zaten ben değer okuyorum sürekli. Dc bara Voltajını kestiğim zaman b portu çıkışlarıda sıfıra çekiliyor. Problem sürekli timer da kalması yada main de işlem yapmaması.
Sürekli timer da kalmasının sebebi senin oradan okuduğun veriyse konu nasıl mcp olmuyor onu anlamadım. Normal fonksiyon içinde çalışıp timer içinde çalışmıyorsa belli ki bi problem var. init ve mcp fonksiyonlarını paylaşırsan belki sorunu bulabiliriz. Veri görmeden sadece tahmin yürütebilirim.
void MCP3202_init() {
//Haberletmeyi batlat:
/*optolu*/
output_low(cs);
delay_us(t);
output_high(cs);
delay_us(t);
}
int16 MCP3202()
{
int16 deger=0;
/*OPTOLU*/
//start biti
output_low(din);
output_low(clk);
delay_us(sure);
output_high(clk);
output_high(din);
delay_us(sure);
//sgl/diff
output_high(din);
output_low(clk);
delay_us(sure);
output_high(clk);
output_high(din);
delay_us(sure);
//odd/sign
output_high(din);
output_low(clk);
delay_us(sure);
output_high(clk);
output_high(din);
delay_us(sure);
//msbf
output_high(din);
output_low(clk);
delay_us(sure);
output_high(clk);
output_high(din);
delay_us(sure);
//null biti
for(int i=0;i<12;i++)
{
output_low(clk);
delay_us(sure);
output_high(clk);
if (input(dout))
{
bit_clear(deger,11-i);
}
else if (input(dout)==0)
{
bit_set(deger,11-i);
}
delay_us(sure);
}//For bititi
return (deger);
}
Anlamadım ne demek istediğini. Main içinde Lcd arayüz tasarımı ile parametre değerlerinin değiştiriebilmesi için kod bulunmakta. Benim için ne kadar kısa sürede voltaj okuyup çıkışı o kadar kısa sürede aç kapa yapmam gerekli. Loop kısmındaki süreye mi bırakacağım işlemi? Yani neye göre yok?Ortada interrupt kullanmayı gerektiren bir durum yok.
T1_DIV_BY_1
T1_DIV_BY_8
With an internal clock at 20mhz and with the T1_DIV_BY_8 mode, the timer will increment every 1.6us. It will overflow every 104.8576ms.
set_timer1(6250)
Orada ki gecikmeler mikrosaniye cinsinden. Max 300 us de bitiyor. Timer kesme süresini değiştirdim. Yani 100ms üzerine de çıkarttım. Yine aynı durum. Ayrıca belirli bir süre sonra donuyor. Başlangıçta değil de belirli süre sonra main iptal. Olmadı wdt vs. bakacağım bi şekilde. İlginiz için teşekkür ederim.Kodun içinde çok fazla delay var bence senin timer kesme anında işlemi bitiremiyor diğer kesme devreye giriyor bu yüzden ana döngü çalışamıyor ekrana o yüzden bilgi gitmiyorç
Kod:T1_DIV_BY_1
kısmını
Kod:T1_DIV_BY_8
olarak değiştir.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?