adc yardım

Başlatan freewalks, 30 Temmuz 2006, 18:57:13

freewalks

arkadslar geçen soru sordum kimse cevap vermedi :(

yine soruyorum :)

16f876a adc ile 10 bitlik sayısal veri olusturuyorsa, unu nasıl tek pinden çıkış yapabilirim..

yardımlarınız lütfennn

Önceki Mesajınız;

arkadaslar daha yeni ilgilenmeye basladım bu islerle

pic 16f876a ile analog sesi digtale cevirip çıkıs almak istiyorum aşağıdaki kodlar yanlıs mı bir baksanız


#include<16f876a.h>
#use delay(clock=4000000)
#include <STDLIB.H>

   VOID main()
   {


   int value;
   setup_adc_ports(ALL_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);
   set_tris_b(0x00);

   FOR(;;)
   {
      value=read_adc();
      output_b(value);

   }
   }


Mod Notu:Aynı konu için farklı başlık açmayalım, eksik soruldu ise edit yapalım veya altına devam edelim.

stlg

Sevgili freewalks

Eger picten analog cıkıs yapmak istiyorsan bu belirttigin 16f876 ile mumkun değil bu pic ile 10 bit cozunurlukte sadece analog sinyali okuyabilirsin yani bu analog bilgileri pinden dısarıya analog olarak veremezsin yani cıkıslar dijital port yapısındadır illaki analog sinyal istiyorum dersen buna uygun bir işlemci kullanmalısın yada dısarıda d/a cevirici entegreleri kullanman gerekir kolay gelsin
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

tnen

http://picproje.com/index.php/topic,11151&highlight=

forum içinde bu konu daha once konusulmus. Derleyici CCS değil ama mantık aynı . Sana yukarıdaki linktede cevap verilmiş eğer board da daha dikkatli inceleme yaparsan bulabilirsin.

zafzaf82

yapabilirsin şu şekilde ilk önce 10 bitlik sanat port olusturman lazım
Code:
#if defined(__PCM__)
#include <16F876a.h>
#device ADC=10
#use delay(clock=4000000,RESTART_WDT)
#use fast_io (B)
#use fast_io (C)


#bit RB0 = 0x06.0
#bit RB1 = 0x06.1
#bit RB2 = 0x06.2
#bit RB3 = 0x06.3
#bit RB4 = 0x06.4
#bit RB5 = 0x06.5
#bit RB6 = 0x06.6
#bit RB7 = 0x06.7

#bit RC0 = 0x07.0
#bit RC1 = 0x07.1
#bit RC2 = 0x07.2
#bit RC3 = 0x07.3
#bit RC4 = 0x07.4
#bit RC5 = 0x07.5
#bit RC6 = 0x07.6
#bit RC7 = 0x07.7

///////////////////////////// sanal port //////////////////////////////////////////


#define  sanal_port(x) \
RB0 = x & 1; \
RB1 = (x >> 1) & 1; \
RB2 = (x >> 2) & 1; \
RB3 = (x >> 3) & 1; \
RB4 = (x >> 4) & 1; \
RB5 = (x >> 5) & 1; \
RB6 = (x >> 6) & 1; \
RB7 = (x >> 7) & 1; \
RC0 = (x >> 8) & 1; \
RC1 = (x >> 9) & 1; \

////////////////////////////////////////////////////////////////////////////////

VOID main()
   {


   int16 value;
   setup_adc_ports(ALL_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);
   set_tris_b(0x00);
   set_tris_c(0x00);

       while(true)
       {
        value=read_adc();
        sanal_port(value);

        }
   }


yukarıdaki programla sadece paralel çıkış alabilirsin.
en düşük bit RB0 en yüksek bit ise RC1 pini dir....
Mikroişlemci bi araçtır, amaç değil.....

freewalks

arkadslar cevaplarınız için tesekkür ederim

öncelikle bir yeri aydınlatmam gerekiyor söyleki ben analog sesi digitale çevirip onun çıkışını almak istiyordum yani analog çıkış değil.

Verilen kodu inceledim ve paralel çıkış yapılmıs arkadasın dediği gibi ama tek pinden sıra ile çıkışına ihtiyacım var ve verilen kod üzerinden programa devam edicem.


tekrardan tesekkürler

rf

KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/

OG

Basit bir V/F mi yapmak istiyorsunuz? Öyle ise LM331.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

freewalks

pdf ye baktım konuyu anlama açısından için iyi olacak

zafzaf82 arkadasım

verdiğin kodu su sekilde devre üzerinde inceledim

mikrofondan çıkan analog sinyalleri yükseltip pic verdim
bağlantılar tamam
ama hala 1 0 şeklinde bir sey göremedim sorun nedir sizce

thelastares

arkadaşlar anladığım kadarıyla siz bu ccs ile adc olayını çözmüşsünüz.ben siteye konuda açmıştım fakat hazır adc konusu açılmışken buraya da yazayım dedim.benim 16f877 ye seri bi adc olan 3202 adlı entegreden 12 bit alma lazım.ilk olarak entegrenin cs si 0 olacak ve data in ine 1101 gönderilecek sonra oradan gelen 12 bit bi de başında gelen boşbit le 13 bit kaydedilip üstünde işlem yapılacak bunu bana anlatabilecek ve elinde varsa örnek kodları benle paylaşacak birileri var mı acaba benim için çok önemli ve fazla zamanım kalmadı.zorunlu bişi değil ama okula döneceğim 2 hafta içinde bitirmem lazım.yardımlarınızı bekliyorum..

oyhan

Merhaba 877 için aradığın kod bu linkdeki örnek kod olmasın. Mcp3202 için. Kolay gelsin..

MCP3202
BİRLİKTEN KUVVET DOĞAR:

Wild_Wolf

Anladığım kadarı ile sen sinyali seri olarak çıkmak istiyorsun.  :)
Aşağıda gecenin bir vakti basit bir kod yazdım.Hata olursa yaz tekrar bakarız.



#if defined(__PCM__)
#include <16F876a.h>
#device ADC=10
#use delay(clock=4000000,RESTART_WDT)
#use fast_io (B)
#use fast_io (C)


#define seri_bit_sayisi 8
#define bitin_aktif_kalma_suresi 5 //5 ms


void partoserial(signed int16 deger)
{
unsigned char i;

for(i=0;i<seri_bit_sayisi;i++)
{

output_bit( PIN_B0, (int1)(deger>>i));
delay_ms(bitin_aktif_kalma_suresi);
}


}


VOID main()
  {


  int16 value;
  setup_adc_ports(ALL_ANALOG);
  setup_adc(ADC_CLOCK_INTERNAL);
  set_adc_channel(0);
  set_tris_b(0x00);
  set_tris_c(0x00);

      while(true)
      {
       value=read_adc();
       partoserial(value);
       delay_ms(100);
       }
  }
İşi çok olanların gözyaşları için vakitleri yoktur.

z

Ses uretmek icin seri yada paralel DAC'a yada PWM teknigine cok da ihtiyac yok. Delta modulasyon teknigi bu ise cok uygun.

Ses sinyalinin o anki degeri bir oncekinden buyukse 1, kucuk yada esitse 0 kodlamasini yaparsan tekrardan sesi olusturman cok kolay olur. Muzik kalitesinde ses dahi uretebilirsin. Kalite ornekleme sayisi ile orantili.

Sozkonusu kodlamayi ister delta modulatorle dogrudan, istersen ADC ile sayisallastirilmis verileri bilgisayara atip bilgisayarda matematiksel olarak da elde edebilirsin.

Ses olustururken orneklenmis bitleri RC filitreden gecirmen yeterlidir.

Bu teknikte de ihtiyacin olan pin sayisi sadece birdir.

Sozunu ettigim teknik buyuk ihtimalle isini gorecektir. Gormezse degisken egimli delta modulasyona gecebilirsin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Wild_Wolf

Delta modülasyonu fikri gerçekten güzel bir fikir bunalmis.Bende ilerde lazım olursa projelerimde kullanabilirim.Ama dediğin gibi örnekleme sayısı çok önemli.Modüle edilecek sinyalin frekansı programın döngü süresine çok bağlı olacak.10Khz bir sinyal için en az onun yarı frekansına eşdeğer örnek almalısınki sinyali tekrar elde edebilesin.Yani 5KHz için süre 0.2ms ediyor buda program döngünün 200 mikrosaniyeyi geçmemesi gerekirki örnekleri alabilesin.Bu arada nyquist kriterini yanlış hatırlamış olabilirim :) Yanlışım varsa uyarırsanız sevinirim çükü okuldan mezun olalı çok oldu ....
İşi çok olanların gözyaşları için vakitleri yoktur.

bbs2006

Merhaba
Arkadaşlar 16f877 ile adc devresi yapmak istiyorum. ancak  yazılımını yapamadım. yardımlarınızı bekliyorum.

XX_CİHAN_XX

Alıntı yapılan: "bbs2006"Merhaba
Arkadaşlar 16f877 ile adc devresi yapmak istiyorum. ancak  yazılımını yapamadım. yardımlarınızı bekliyorum.
Bu konuda sitede bolca örnek kod var biraz arama yapalım lütfen.
Hatta birkaç mesaj yukarıda bile var  8O
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.