ADC bir soru ?

Başlatan bulut_01, 30 Nisan 2012, 19:32:27

bulut_01

öncelıkle butun arkadaslara ıyı aksamlar şöyle bir sorunum var bitane saksı ıcıne yerlestırdıgım probla gerılım ölcerek saksının susuz kaldıgında devre calısarak sulama görevı yapacagım yanlız code yazdım gerılım okuyorum hersey tamam code ufak bı eklentı yapmam lazım kod asagıda devre topragın geregından fazla kuru oldugunu anladıgında ledler kayarak yanıyor buraya kadar tamam kayma işlemını yaparkan AN0 yanı adc okudugum portuda etklıyor bu leddler kayarken bu portu etkılememesı ıcın kodda nasıl bi değişiklik yapmam lazım ? bide leddler kayarken flaşöru nasıl eklerım ? bu dedıklerımı yapmak ıcın ugrasdım ama işin ıcınden cıkamadım yardımlarınızı beklıyorum sımdıden tsk ederım sema ve code asagıdadır.
probu temsilen pot vardır şemada.



#include <12F675.h>

#device ADC=10  
#fuses INTRC_IO
#FUSES NOWDT                    //No Watch Dog Timer
#fuses INTRC_IO                     
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin disabled
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)

unsigned long int x=0;
int z,led;

void main()
{
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
 setup_timer_1(T1_DISABLED);
 setup_comparator(NC_NC_NC_NC);
 setup_vref(FALSE);
 
setup_adc(adc_clock_div_32);
 setup_adc_ports( AN0_analog); 
 set_adc_channel(0);
 set_tris_a(0x01);
 delay_us(20);
 output_a(0x00) ;

   while(TRUE)
   {
          led=1;
          x=Read_adc();
          delay_ms(10);
           if(x>43)
           {
           for (z = 0; z <=6; z++)
           {
           output_a(led);
           led=led<<1;
           delay_ms(150);
         
           }
           }
           }
           }
YENİLMEZ..

z

1. Ledleri seri direnç olmadan kullanmaman gerekir.
2. Sistemin pille çalıştığını varsayalım. ADC ile ölçüm yapmaya başlamadan önce ledleri söndürür ardından ölçüm yapar daha sonra da yanması gereken ledleri enerjilersen ADC ledlerin akım yüklemelerinden etkilenmez.

ADC ölçümü çok hızlı yapıldığından, yanan bir ledi ADC ölçümü esnasında söndürüp ardından yakman görsel olarak farkedilemez.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

bulut_01

bulent hocam cvp ıcın teşekkür ederım sema temsılı ledler önunde 330R drenc var pcb de burda koymadım sadece sımılasyonda  devre 9v pille calısıyor 7805 var bu devreyı ılk etapda nemlı toprakda calısmaya baslatacagım ıcın toprak kurudukca cıcek suyu emdıkce bellı degere geldıgınde toprak nem oranı baya azaldıgında devre çalıyor ve ledler kaymaya baslayıp buzzer ötüyor benım sorunum leddleri kaydırırken AN0  adc portuda yanıp sönüyo ledlerı kaydırdıgım ıcın benım sorum şu komut nasıl yazarımkı ledler kayarken an0 adc portu etkılenmez output_a(led); komutunda led değişkenı cıkıs portlara aktarılyor ama hepsıne ben bu komutta nasıl değişiklik yapmam lazımkı cıkısa aktarırken int led değişkenını AN0 adc portu  harıc diyebılmem için bunun yerıne şöyle yazdım calısmadı
örnek: output_bit((pin_a1);(pin_a2);(pin_a4);(pin_a5),led) seklinde led int bit olarak dedıgım portlara aktarım dedım olmadı bunu nasıl yaparım ? AN0 ADC portu katmamak ıcın cıkısa ? bıde led flasör ıcın nasıl kod eklemem lazım hem kayacak ve flasor gıbı cakacak ledler ? sorum bu.
YENİLMEZ..

bulut_01

yardım edecek kımse yok mu ? :(
YENİLMEZ..

justice_for_all

donguyu 5 e kadar saydir ve led =2 yap
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

bulut_01

Alıntı yapılan: justice_for_all - 30 Nisan 2012, 21:22:18
donguyu 5 e kadar saydir ve led =2 yap

eyw kardesım oldu :D cok basıtmıs hıc aklıma gelmedı sayma rakamı degıstırmek son olarak kayan leddlere nasıl flaşör eklerız ?
YENİLMEZ..

justice_for_all

Alıntı yapılan: bulut_01 - 30 Nisan 2012, 21:35:51
eyw kardesım oldu :D cok basıtmıs hıc aklıma gelmedı sayma rakamı degıstırmek son olarak kayan leddlere nasıl flaşör eklerız ?

ledlerin kaydigi donguden hemen sonra yapabilirsin kac kez flash yapcak.bise sorcak ledleri neden kaydiriyosun?kac ledin var?
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

bulut_01

#7
3 tane ledım var onlar kayıyor flasor ıcın nasıl dongu eklemem lazım ? semada gıbı devre ledler kaydıgı surece daıma flash yapacak. ledlerı kaydırmamın ve flas seklınde cakmasının ıstememın sebebı anımasyon olsun dıye
YENİLMEZ..

justice_for_all

peki ledleri kaydirmak yerine ledlerle topragin nemlilik oranini gostersen daha iyi olmazmi ? vuumetre gibi.soruna gelince flash nasil yapilir su sekilde ledler yakilir ve hemen sondurulur yani yanma suresi cok kisa olmasi gerek.

mesela soyle burda bekeleme surelerini kafama gore yaptim sen istedigim sekilde degistirebilirsin.

output_high(pin_a1);
delay_us(100);
output_low(pin_a1);
delay_ms(1);
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

bulut_01

bu kodu tam olarak nereye eklıcem yazdıgım kodda ?
YENİLMEZ..

justice_for_all

for dongusunden sonra
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

bulut_01

Alıntı yapılan: justice_for_all - 30 Nisan 2012, 21:59:43
for dongusunden sonra
dediğin sekılde ekledım tam flasor olarak yanmıyor dengesız yanıyor
YENİLMEZ..

justice_for_all

bekleme surelerini degisik sekillerde ayarlaman gerek mesela bide soyle dene birince delaya 1ms ver ikinci delaya 10 ms ver bakalim
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

bulut_01

Alıntı yapılan: justice_for_all - 30 Nisan 2012, 23:17:46
bekleme surelerini degisik sekillerde ayarlaman gerek mesela bide soyle dene birince delaya 1ms ver ikinci delaya 10 ms ver bakalim


yapdım şöyle bi manzara çıkdı.


#include <12F675.h>

#device ADC=10  
#fuses INTRC_IO
#FUSES NOWDT                    //No Watch Dog Timer
#fuses INTRC_IO                     
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin disabled
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)

unsigned long int x=0;
int z,led;

void main()
{
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
 setup_timer_1(T1_DISABLED);
 setup_comparator(NC_NC_NC_NC);
 setup_vref(FALSE);
 
 setup_adc(adc_clock_div_32);
 setup_adc_ports( AN0_analog); 
 set_adc_channel(0);
 set_tris_a(0x01);
 delay_us(20);
 output_a(0x00) ;

   while(TRUE)
   {
          led=2;
          x=Read_adc();
          delay_ms(100);
           if(x>43)
           {
           for (z = 0; z <=5; z++)
           {
           output_high(pin_a1);
           delay_us(500);
           output_low(pin_a1);
           delay_ms(5);
           
           output_high(pin_a2);
           delay_us(500);
           output_low(pin_a2);
           delay_ms(10);
           
           output_high(pin_a4);
           delay_us(500);
           output_low(pin_a4);
           delay_ms(15);
           
           output_a(led);
           led=led<<1;
           delay_ms(150);
         
           }
           }
           }
           }
YENİLMEZ..

justice_for_all

#include <12F675.h>

#device ADC=10  
#fuses INTRC_IO
#FUSES NOWDT                    //No Watch Dog Timer
#fuses INTRC_IO                     
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin disabled
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)

unsigned long int x=0;
int z,led;

void main()
{
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
 setup_timer_1(T1_DISABLED);
 setup_comparator(NC_NC_NC_NC);
 setup_vref(FALSE);
 
 setup_adc(adc_clock_div_32);
 setup_adc_ports( AN0_analog); 
 set_adc_channel(0);
 set_tris_a(0x01);
 delay_us(20);
 output_a(0x00) ;

   while(TRUE)
   {
          led=2;
          x=Read_adc();
          delay_ms(100);
           if(x>43)
           {
           for (z = 0; z <=5; z++)
           {

           
           output_a(led);
           led=led<<1;
           delay_ms(150);
         
           }

           for (z = 0; z <=5; z++)
           {

                output_a(0x16);
                delay_us(500);
                output_a(0x00);
                delay_ms(5);
           }
           
           }
           }
           }


boyle dene bakalim
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay