DS18B20 - 20mhz

Başlatan XX_CİHAN_XX, 24 Haziran 2007, 13:22:20

XX_CİHAN_XX

Arkadaşlar 4mhz de calısan programı zamanlamaları ile oynayarak 20mhz de çalıştırmayı denedim ama ne kadar uğraştıysam beceremedim.
ASM veya C fark etmez.DS18B20 yi 20mhz de çalıştıran varsa örnek kod rica edicem.
Saygılar.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Cetinal

bu arada hangi C,,,,, ccs ile mi denediniz daha net belirtirseniz yardımcı olmaya çalışırım bu arada DS18B20 datasheet ine baktınızmı çalışma frekansı min ve max değeri nedir ???

XX_CİHAN_XX

asm,c fark etmez.Bunun da bir sürü çeşidi var tabi hepsini tek tek yazmama gerek yok sanırm CCS,high tech vs.. fark etmez :D
20mhz de çalışan bir yazılım olsun yeterli.Ds18b20 nin çalışma timing leri belirlidir.Datasheet indede anlatılıyor.Bunu kullanılan osilatörle bir alakası yok.Ama her nedense 4mhz de çalıştırıyorum.Aynı zamanlamaları 20mhz ye uyarladığımda çalışmıyor.Ben asm de yazmıştım daha oncede siteye koymuştum hatta.Fakat dediğim gibi 20mhz de bir türlü sonuç alamadım.Örnek teşkil etmesi açısından çalıştıran varsa kod arıyorm tercihen asm ve ya CCS ama diğerleride olur yeterki örnek çalışan bir kod olsun.Umarım yeterince açık olmuştur :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

erdinch

bir de besleme ile toprak arasına 100nf atarak çalıştırmayı dene.Belki bir çözüm olabilir.

Klein

#pragma INTERRUPT  ta0int
void  far ta0int (void) {
       ow_delaycounter++;
   switch(ow_eventcounter){
      case 0:
         switch(ow_delaycounter){
            case 1  : owdir=out; owpin=0; break;
            case 33 : owpin=1; break;
            case 38 : owdir=in;break;
            case 39 : ow_presence=owpin;break;
            case 67 : ow_delaycounter =0;ow_eventcounter++; break;
         } break;
      case 1:
         switch(ow_delaycounter){
            case 1  : owdir=out;break;
            case 2  : owpin =1;owpin=0;break;
            case 9  : owpin =1;owpin=0;break;
            case 16 : owpin =1;owpin=0;owpin=1;break;
            case 23 : owpin =1;owpin=0;owpin=1;break;
            case 30 : owpin =1;owpin=0;break;
            case 37 : owpin =1;owpin=0;break;
            case 44 : owpin =1;owpin=0;owpin=1;break;
            case 51 : owpin =1;owpin=0;owpin=1;break;
            case 66 : ow_delaycounter=0;ow_eventcounter++;break;
         } break;
      case 2:
         switch(ow_delaycounter){
//            case 1  : owdir=out;break;
            case 2  : owdir=out; owpin =1;owpin=0;break;
            case 9  : owpin =1;owpin=0;break;
            case 16 : owpin =1;owpin=0;owpin=1;break;
            case 23 : owpin =1;owpin=0;break;
            case 30 : owpin =1;owpin=0;break;
            case 37 : owpin =1;owpin=0;break;
            case 44 : owpin =1;owpin=0;owpin=1;break;
            case 51 : owpin =1;owpin=0;break;
            case 58 : owpin=1;break;
//            case 66 : ow_delaycounter=0;ow_eventcounter++;break;
            case 0xFFFF : ow_delaycounter=0;ow_eventcounter++;break;
         } break;
      case 3:
         switch(ow_delaycounter){
            case 1  : owdir=out; owpin=0; break;
            case 33 : owpin=1; break;
            case 38 : owdir=in;break;
            case 39 : ow_presence=owpin; break;
            case 74 : ow_delaycounter =0;ow_eventcounter++; break;
         } break;
      case 4:
         switch(ow_delaycounter){
            case 1  : owdir=out;break;
            case 2  : owpin =1;owpin=0;break;
            case 9  : owpin =1;owpin=0;break;
            case 16 : owpin =1;owpin=0;owpin=1;break;
            case 23 : owpin =1;owpin=0;owpin=1;break;
            case 30 : owpin =1;owpin=0;break;
            case 37 : owpin =1;owpin=0;break;
            case 44 : owpin =1;owpin=0;owpin=1;break;
            case 51 : owpin =1;owpin=0;owpin=1;break;
            case 66 : ow_delaycounter=0;ow_eventcounter++;break;
         } break;
      case 5:
         switch(ow_delaycounter){
            case 1  : owdir=out;break;
            case 2  : owpin =1;owpin=0;break;
            case 9  : owpin =1;owpin=0;owpin=1;break;
            case 16 : owpin =1;owpin=0;owpin=1;break;
            case 23 : owpin =1;owpin=0;owpin=1;break;
            case 30 : owpin =1;owpin=0;owpin=1;break;
            case 37 : owpin =1;owpin=0;owpin=1;break;
            case 44 : owpin =1;owpin=0;break;
            case 51 : owpin =1;owpin=0;owpin=1;break;
            case 66 : ow_delaycounter=0;ow_eventcounter++;
                    ow_lsb=0; ow_msb=0;
                    break;
         } break;
      case 6:
         switch(ow_delaycounter){
            case 1  : owdir=out;owpin=0;owdir=in;break;
            case 2   : if(owpin) ow_lsb |=0x01;break;
            case 10 : owdir=out;owpin=0;owdir=in;break;
            case 11   : if(owpin) ow_lsb |=0x02;break;
            case 19 : owdir=out;owpin=0;owdir=in;break;
            case 20   : if(owpin) ow_lsb |=0x04;break;
            case 28 : owdir=out;owpin=0;owdir=in;break;
            case 29   : if(owpin) ow_lsb |=0x08;break;
            case 37 : owdir=out;owpin=0;owdir=in;break;
            case 38   : if(owpin) ow_lsb |=0x10;break;
            case 46 : owdir=out;owpin=0;owdir=in;break;
            case 47   : if(owpin) ow_lsb |=0x20;break;
            case 55 : owdir=out;owpin=0;owdir=in;break;
            case 56   : if(owpin) ow_lsb |=0x40;break;
            case 64 : owdir=out;owpin=0;owdir=in;break;
            case 65   : if(owpin) ow_lsb |=0x80;break;
            case 73 : ow_delaycounter=0;ow_eventcounter++;break;
         } break;
      case 7:
         switch(ow_delaycounter){
            case 1  : owdir=out;owpin=0;owdir=in;break;
            case 2   : if(owpin) ow_msb |=0x01;break;
            case 10 : owdir=out;owpin=0;owdir=in;break;
            case 11   : if(owpin) ow_msb |=0x02;break;
            case 19 : owdir=out;owpin=0;owdir=in;break;
            case 20   : if(owpin) ow_msb |=0x04;break;
            case 28  : owdir=out;owpin=0;owdir=in;break;
            case 29   : if(owpin) ow_msb |=0x08;break;
            case 37  : owdir=out;owpin=0;owdir=in;break;
            case 38   : if(owpin) ow_msb |=0x10;break;
            case 46 : owdir=out;owpin=0;owdir=in;break;
            case 47   : if(owpin) ow_msb |=0x20;break;
            case 55 : owdir=out;owpin=0;owdir=in;break;
            case 56   : if(owpin) ow_msb |=0x40;break;
            case 64 : owdir=out;owpin=0;owdir=in;break;
            case 65   : if(owpin) ow_msb |=0x80;break;
            case 73 : ow_delaycounter=0;ow_eventcounter=0;ow_convert=1;ta0s=0;
                     break;
         } break;
   
   }
}// end of time 0 service funcTion

temp_test=((ow_lsb+(ow_msb * 256))*0.0625);

timer rutini 5uS de çağırılacak.

Klein

Rutinin uzun olmasının sebebi , programın hiçbir noktasında beklemeye sebep olmamasıdır. bazı kısımlar optimize edilebilir. 16Mhz de test edildi.

zafzaf82

Mikroişlemci bi araçtır, amaç değil.....

ahmet2004

CCS drivers klasöründe touch.c var onu incele?

CCS Ds1820_Tek Proje...


tnen

pici programlarken osilator seçeneğini hs yaparak dene derim.