Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: halit28 - 27 Şubat 2012, 16:33:34

Başlık: Arm I2C ve ADC protokolünün kullanımı
Gönderen: halit28 - 27 Şubat 2012, 16:33:34
STM32F4 - Discovery I2C arayüz/interface ile bilgisi olan var mı ?
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: SpeedyX - 27 Şubat 2012, 21:16:11
Bu böyle olmaz, ARM demişsinde sarı çizmeli mehmet ağa...

Hangi işlemci?

Hem ADC protokolü diye birşey yok, I2C ise bir arayüz/interface, yine protokol değil.

İşlemcinin user manual inde herşey yazıyor, belirli registerlardan modülün ayarlarını yapıp başka registerlardan da okuma (varsa yazma) yapıyorsun. Örnek kod istersen işlemcinin üreticisinin genellikle "code bundle" adlı bir örnek kodlar arşivi bulunur, oradan ilgilendiğin konunun programını katalog eşliğinde inceleyerek çok güzel anlarsın.
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: halit28 - 01 Mart 2012, 13:16:21
Eyvallah.
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: KABO - 07 Mart 2012, 21:21:08
   Arkadasım.Ben LPC1769 cortex M3 serisi ARM ile ADC uygulaması yaptım.kodları asagıda veriyorum
/*************************************************************/
// -****** ADC INITIAL(ADC Kurulur)
/*************************************************************/
   void adc_initial()
   {      
      LPC_PINCON->PINSEL1 |= (1U<<16);   //AD0.1 aktif
      LPC_SC->PCONP |=1<<12;              //ADC guc koruması acik
      
      LPC_ADC->ADCR=1<<1|1<<8|1<<21;      //SEL=1,CLKDIV=1,burst=0,PDN=1    
   }
/*******************************************************************/
//***** ADC START YAPILIR

void adc_basla(void)
{
   LPC_ADC->ADCR |=(1<<24);     //Burst =0 iken adc start

//***************** ADC STOP
void adc_dur(void)
{
   LPC_ADC->ADCR &=~(1<<24);    // adc yi durdurur
}
//******************** ADC OKU
void adc_sonuc_al(void)
{
   if (LPC_ADC->ADDR1&(1UL<<31))
   {
         adc_sonuc=LPC_ADC->ADDR1;      
      adc_sonuc=(adc_sonuc>>4)& 0xFFF;
      hesap=((adc_sonuc*3300)/(4096));
      adc_dur();
      adc_basla();
   }
}

insallah bu kodlar işine yarar.hepsi denendi ve çalışıyor.
I2C protokolunu daha denemedim denedigimde sitede paylasıtrım.

Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: SpeedyX - 07 Mart 2012, 23:40:42
Alıntı yapılan: halit28 - 01 Mart 2012, 13:16:21
O kadar iyi bilmiyoruz :) ders olarak görüyoruz ama bu konularda Türkçe kaynak varsa çok yardımcı olursunuz :))
Okulda ingilizce öğretmiyorlar mı?
İngilizceyi beğenmediysen rusça kaynak verelim?

Şimdi sen en azından okulda hangi işlemciyi öğrettiklerini bilmiyor musun yani? Çünkü ARM çekirdeğinin ADC si yok, işlemcinin ADC modülü var, onlar da farklılık gösteriyor.
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: cagrisma - 08 Mart 2012, 00:12:15
Alıntı yapılan: SpeedyX - 07 Mart 2012, 23:40:42
Okulda ingilizce öğretmiyorlar mı?
İngilizceyi beğenmediysen rusça kaynak verelim?

Şimdi sen en azından okulda hangi işlemciyi öğrettiklerini bilmiyor musun yani? Çünkü ARM çekirdeğinin ADC si yok, işlemcinin ADC modülü var, onlar da farklılık gösteriyor.

Okulda ingilizce öğretiyolar o konuda sorun yok. Şimdili rusçayada gerek yok.
Kullanılan mikrodenetleyici STM32F4 Discovery kit,
şuandaki tek kaynak ST firmasinin verdigi datasheet. Bu konuda yeni oldugumuz icin arkadaş somuş acaba ilgilen bu konuda çalışan varmı diye. Zaten bunalmis hoca bu kit üzerinde çalışıyor, onun dışında türkçe kaynak yok şimdilik.
Bu şartlarda belirtilmiş bir istekti...
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: halit28 - 08 Mart 2012, 00:53:58
Alıntı yapılan: SpeedyX - 07 Mart 2012, 23:40:42
Okulda ingilizce öğretmiyorlar mı?
İngilizceyi beğenmediysen rusça kaynak verelim?

Şimdi sen en azından okulda hangi işlemciyi öğrettiklerini bilmiyor musun yani? Çünkü ARM çekirdeğinin ADC si yok, işlemcinin ADC modülü var, onlar da farklılık gösteriyor.
Öğretiyorlar ben felsefik açıdan öğrenmek istemiyorum.  Rusça gönder uyar bana. Bordun ismini de  düzenleyip yazdım. Unutmuşum yazmayı.
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: halit28 - 08 Mart 2012, 00:56:16
Alıntı yapılan: KABO - 07 Mart 2012, 21:21:08
   Arkadasım.Ben LPC1769 cortex M3 serisi ARM ile ADC uygulaması yaptım.kodları asagıda veriyorum
/*************************************************************/
// -****** ADC INITIAL(ADC Kurulur)
/*************************************************************/
   void adc_initial()
   {      
      LPC_PINCON->PINSEL1 |= (1U<<16);   //AD0.1 aktif
      LPC_SC->PCONP |=1<<12;              //ADC guc koruması acik
      
      LPC_ADC->ADCR=1<<1|1<<8|1<<21;      //SEL=1,CLKDIV=1,burst=0,PDN=1    
   }
/*******************************************************************/
//***** ADC START YAPILIR

void adc_basla(void)
{
   LPC_ADC->ADCR |=(1<<24);     //Burst =0 iken adc start

//***************** ADC STOP
void adc_dur(void)
{
   LPC_ADC->ADCR &=~(1<<24);    // adc yi durdurur
}
//******************** ADC OKU
void adc_sonuc_al(void)
{
   if (LPC_ADC->ADDR1&(1UL<<31))
   {
         adc_sonuc=LPC_ADC->ADDR1;      
      adc_sonuc=(adc_sonuc>>4)& 0xFFF;
      hesap=((adc_sonuc*3300)/(4096));
      adc_dur();
      adc_basla();
   }
}

insallah bu kodlar işine yarar.hepsi denendi ve çalışıyor.
I2C protokolunu daha denemedim denedigimde sitede paylasıtrım.


Eyvallah. En azından dediğimi anladı bir kişide olsa. Protokol filan dert etmedi.
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: SpeedyX - 08 Mart 2012, 13:54:11
O zaman o kodun yardımı hiç dokunmaz, bunalmis hocanın notlarında istedikleriniz var, eminim bu işlemcinin code bundle ı da vardır. Kitin üzerinde ortadaki chipin üstünde chipin adı yazıyor, oraya bakarak öğrenebilirsiniz. Malesef bu konuda türkçe kaynak aramak bile çok yanlış adım olur.
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: MC_Skywalker - 08 Mart 2012, 14:04:37
Chip'i üreten firmanın web sitesini ziyaret etmeyi alışkanlık haline getirmekte fayda var kanâtindeyim.

STM32F1 için bir ADC uygulmama notun dan yolaçıkılabilir.
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00258017.pdf (http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00258017.pdf)
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: cseb - 26 Mart 2012, 23:41:24
Alıntı yapılan: KABO - 07 Mart 2012, 21:21:08
   Arkadasım.Ben LPC1769 cortex M3 serisi ARM ile ADC uygulaması yaptım.kodları asagıda veriyorum
/*************************************************************/
// -****** ADC INITIAL(ADC Kurulur)
/*************************************************************/
   void adc_initial()
   {      
      LPC_PINCON->PINSEL1 |= (1U<<16);   //AD0.1 aktif
      LPC_SC->PCONP |=1<<12;              //ADC guc koruması acik
      
      LPC_ADC->ADCR=1<<1|1<<8|1<<21;      //SEL=1,CLKDIV=1,burst=0,PDN=1    
   }
/*******************************************************************/
//***** ADC START YAPILIR

void adc_basla(void)
{
   LPC_ADC->ADCR |=(1<<24);     //Burst =0 iken adc start

//***************** ADC STOP
void adc_dur(void)
{
   LPC_ADC->ADCR &=~(1<<24);    // adc yi durdurur
}
//******************** ADC OKU
void adc_sonuc_al(void)
{
   if (LPC_ADC->ADDR1&(1UL<<31))
   {
         adc_sonuc=LPC_ADC->ADDR1;      
      adc_sonuc=(adc_sonuc>>4)& 0xFFF;
      hesap=((adc_sonuc*3300)/(4096));
      adc_dur();
      adc_basla();
   }
}

insallah bu kodlar işine yarar.hepsi denendi ve çalışıyor.
I2C protokolunu daha denemedim denedigimde sitede paylasıtrım.

Ben bu kodları deniyorum ama LCD de ADC değeri devamlı 0 görünüyor. Kodlarda bi terslik mi var acaba. LCD ye aşağıdaki gibi yazdırıyorum:


        adc_basla();
   adc_sonuc_al();
   adc_dur();
   sprintf(adc_bilgisi,"ADC=%d   ",adc_sonuc);
        lcd_gotoxy(2,1);
   lcd_yaz(adc_bilgisi);
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: muhittin_kaplan - 27 Mart 2012, 09:06:01
yukardaki kodları eğer STM32F4 ile deniyorsanız Boşuna denemeyin.
Kouyu Tekrar Okuyun...
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: cseb - 27 Mart 2012, 13:28:32
lpc1769 ile deniyorum.
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: cseb - 27 Mart 2012, 22:44:07
Arkadaşlar aşağıdaki gibi kendim yazmaya çalıştım ama yine lcd de değer hep sıfır görünüyor, yardım edebilirmisiniz.

int main (void)
{

    SystemInit ();
   SysTick_Config(12000000/1000);

    LPC_PINCON->PINSEL1=0x00010000;     /* binary: 00000000_00000001_00000000_00000000 */
    LPC_PINCON->PINMODE1=0x00000000;
    LPC_SC->PCONP = (LPC_SC->PCONP & 0xEFEFF7DE) | 0x1000;      /* Enable peripheral clock for ADC (default is disabled) */
    LPC_ADC->ADCR=0x01200102;     /* binary: 00000001_00100000_00000001_00000010 */
   //LPC_ADC->ADINTEN=0x00000100;   
   LPC_GPIO0->FIODIR = 0x00000000;              
   LPC_GPIO2->FIODIR = 0xFFFFFFFF;  // GPIO'ların hepsi çıkış oluyor


   lcd_init();
   
   DelayMs(1500);
   lcd_clear();
   lcd_gotoxy(2,1);
   lcd_yaz("ADC okunuyor....");
   DelayMs(500);
   
   while(1){
   

   LPC_ADC->ADCR |= 0x01000000;   
   while (LPC_ADC->ADGDR & 0x80000000 == 0);
   adc =(LPC_ADC->ADGDR >> 4)&0x00000FFF;
   sprintf(adc_bilgisi,"ADC=%4d        ",adc);
   lcd_gotoxy(2,1);
   lcd_yaz(adc_bilgisi);
   DelayMs(250);
   }
}
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: KABO - 29 Mart 2012, 20:49:46
Ben sana kucuk calıstırıp denedigim bir programı gonderiyorum.umarım işine yarar.Program Analog girişteki bilgiye göre porta baglı bir ledin parlaklıgını degiştiriyor



#include <LPC17xx.h>

short a;
uint32_t adc_sonuc;
uint32_t hesap;
/*****************************************************************/
void init_PLL(void)
{
   LPC_SC->SCS |= 0X20;
   while((LPC_SC->SCS &( 1<<5))==0);
   LPC_SC->CCLKCFG = 3;
   LPC_SC->PCLKSEL0 = 0;
   LPC_SC->PCLKSEL1 = 0;
   LPC_SC->CLKSRCSEL = 1;
   LPC_SC->PLL0CFG = 0X40063;
   LPC_SC->PLL0CON   = 0X01;
   LPC_SC->PLL0FEED = 0XAA;
   LPC_SC->PLL0FEED = 0X55;
   while(!(LPC_SC->PLL0STAT & (1<<26)));
   LPC_SC->PLL0CON   = 0X03;
   LPC_SC->PLL0FEED = 0XAA;
   LPC_SC->PLL0FEED = 0X55;
}
/********   TIMER 1 INITIAL********************************/
void tmr1_initial()
{
   LPC_TIM1->PR    = 0x00000000;                   // On Bolme ( Bolucu )
   LPC_TIM1->TCR   = 0x00000002;                  // Timer Kontrolde Sayiciyi temizle
   LPC_TIM1->MCR   = 0x00000003;                   //mach kontrol register        //  ???????   
   LPC_TIM1->MR0   = 6000000;                              
   LPC_TIM1->TCR   = 0x00000001;                   //Timer0'i baslat
   NVIC_EnableIRQ(TIMER1_IRQn); // Enable timer interrupt
}
  /********   TIMER 0 INITIAL**********************************/

void tmr0_initial()
{

   LPC_PINCON->PINSEL7 |=0x280000;
   LPC_TIM0->TCR   = 0x2;
   LPC_TIM0->PR    = 0x00000000;                   // On Bolme ( Bolucu )
   LPC_TIM0->EMR    = 0x00F3;
   LPC_TIM0->MCR   = 0x1B;    
   NVIC_EnableIRQ(TIMER0_IRQn); // Enable timer interrupt
}
/********   TIMER 2 INITIAL**********************************/
void tmr2_initial()
{
   LPC_SC->PCONP |=0X400000;
   LPC_PINCON->PINSEL0 |= 0XFF000;               // MAT2.0 ,MAT2.1 ,MAT2.2 ,MAT2.3 ,
   LPC_TIM2->TCR   = 0x2;
   LPC_TIM2->PR    = 0x00000000;                   // On Bolme ( Bolucu )
   LPC_TIM2->MCR   = 0x1B;        
   LPC_TIM2->EMR   = 0x0F3;
   NVIC_EnableIRQ(TIMER2_IRQn); // Enable timer interrupt
}
/********   TIMER 3 INITIAL**********************************/
void tmr3_initial()
{
   LPC_SC->PCONP |=1<<23;
   LPC_PINCON->PINSEL0 |= 0XF00000;               // 
   LPC_TIM3->PR    = 0x00000000;                   // On Bolme ( Bolucu )
   LPC_TIM3->TCR   = 0x2;                  // Timer Kontrolde Sayiciyi temizle
   LPC_TIM3->MCR   = 0x1B;                   //mach kontrol register        //  ???????   
   LPC_TIM3->EMR   = 0xF3;
   NVIC_EnableIRQ(TIMER3_IRQn); // Enable timer interrupt
}
/*************************************************************/
/*************************************************************/


/*****************************************************/
//********************************************************
/**********************************************************/
/*             TIMER 1 KESME ALT PROGRAMI                 */
/*            SOFTSTART - SOFTSTOP                 */
void TIMER1_IRQHandler (void)
{
      if (a==0)   
        {      
      LPC_GPIO0->FIOSET0=1<<1;
      LPC_GPIO0->FIOCLR0=1<<0;
      a=1;
      }
     else
        {
        LPC_GPIO0->FIOSET0=1<<0;
      LPC_GPIO0->FIOCLR0=1<<1;   
      a=0;
      }
   LPC_TIM1->MR0   =100+(hesap*1500);   
   /*********************************************************/   
   LPC_TIM1->IR |= 1 << 0; // Clear MR0 interrupt   
   LPC_TIM1->IR |= 1 << 1;

}
/*********************************************************/
//*******  TIMER-2
/*********************************************************/
void TIMER0_IRQHandler (void)
{

    LPC_TIM0->IR |= 1 << 1; // Clear MR1 interrupt
    LPC_TIM0->IR |= 1 << 0; // Clear MR0 interrupt
}   
/*********************************************************/
//*******  TIMER-2
/*********************************************************/
void TIMER2_IRQHandler (void)
{
   LPC_TIM2->IR |= 1 << 1; // Clear MR1 interrupt   
   LPC_TIM2->IR |= 1 << 0; // Clear MR0 interrupt
}   
/*********************************************************/
// ******   TIMER-3
/*********************************************************/
void TIMER3_IRQHandler (void)
{      
   //*****************************************************
   LPC_TIM3->IR |= 1 << 0; // Clear MR0 interrupt
   LPC_TIM3->IR |= 1 << 1; // Clear MR1 interrupt   
}
   
/**********************************************************/

/*************************************************************/
// -****** ADC INITIAL
/*************************************************************/
   void adc_initial()
   {      
      LPC_PINCON->PINSEL1 |= (1U<<16);   //AD0.1 aktif
      LPC_SC->PCONP |=1<<12;              //ADC guc koruması acik
      
      LPC_ADC->ADCR=1<<1|1<<8|1<<21;      //SEL=1,CLKDIV=1,burst=0,PDN=1    
   }
/*******************************************************************/
//***** ADC START

void adc_basla(void)
{
   LPC_ADC->ADCR |=(1<<24);     //Burst =0 iken adc start
}
//***************** ADC STOP
void adc_dur(void)
{
   LPC_ADC->ADCR &=~(1<<24);    // adc yi durdurur
}
//******************** ADC OKU
void adc_sonuc_al(void)
{
   if (LPC_ADC->ADDR1&(1UL<<31))
   {
         adc_sonuc=LPC_ADC->ADDR1;      
      adc_sonuc=(adc_sonuc>>4)& 0xFFF;
      hesap=((adc_sonuc*3300)/(4096));
      adc_dur();
      adc_basla();
   }
}
//**********************************************************
////////////////////////////////////////////////////////////
/*                 MAIN                            */
//////////////////////////////////////////////////////////
//********************************************************
int main()
{
   LPC_SC->PCONP=LPC_SC->PCONP & 0xFBF7FF3F;

   LPC_PINCON->PINSEL1=LPC_PINCON->PINSEL1 & 0x03;
   LPC_PINCON->PINSEL2=0;
   LPC_PINCON->PINSEL3=0;
   LPC_PINCON->PINSEL4=0;

   init_PLL();   

   tmr1_initial();
   adc_initial();



/**********************************************************************/
    LPC_GPIO4->FIODIR3 |=0x30;
    LPC_GPIO0->FIODIR0 |=0x30;
    LPC_GPIO1->FIODIR1 |=0xC7;
    LPC_GPIO1->FIODIR0 |=0x10;
    LPC_GPIO1->FIODIR2 |=0x3;
    LPC_GPIO2->FIODIR0 |=0xFC;

   LPC_GPIO0->FIODIR0 = 0x00FF;
   LPC_GPIO2->FIODIR |=0xFFF;
   adc_basla();
   while(1)
   {
   
      adc_sonuc_al();
   
   }
}
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: halit28 - 03 Nisan 2012, 20:04:19
Yok mu rusça kaynak?
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: SpeedyX - 04 Nisan 2012, 16:06:42
Google a ilk kelimeyi yazdım bu çıktı:
https://github.com/yigiter/Sample-STM32F4-codes/tree/master/I2CLib/Src

Siz de başarabilirsiniz.

ADC örneği de forumda var
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: halit28 - 04 Nisan 2012, 21:39:12
Alıntı yapılan: SpeedyX - 04 Nisan 2012, 16:06:42
Google a ilk kelimeyi yazdım bu çıktı:
https://github.com/yigiter/Sample-STM32F4-codes/tree/master/I2CLib/Src

Siz de başarabilirsiniz.

ADC örneği de forumda var

Eyvallah. Ama konuyu anlasam kodları bende yazabilirim sanırım. Tahminlerim bu yönde en azından.
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: CoşkuN - 01 Haziran 2012, 11:09:32
Alıntı yapılan: cagrisma - 08 Mart 2012, 00:12:15
Okulda ingilizce öğretiyolar o konuda sorun yok. Şimdili rusçayada gerek yok.
Kullanılan mikrodenetleyici STM32F4 Discovery kit,
şuandaki tek kaynak ST firmasinin verdigi datasheet. Bu konuda yeni oldugumuz icin arkadaş somuş acaba ilgilen bu konuda çalışan varmı diye. Zaten bunalmis hoca bu kit üzerinde çalışıyor, onun dışında türkçe kaynak yok şimdilik.
Bu şartlarda belirtilmiş bir istekti...

Hangi okul bu merak ettim doğrusu, bu kart üzerinden ders veren okullar olduğunu duymak sevindirici...
Başlık: Ynt: Arm I2C ve ADC protokolünün kullanımı
Gönderen: aykerme - 01 Haziran 2012, 15:46:22
Arkadaşların da söylediği gibi öncelikle kullanmaya çalıştığınız işlemcinin üreticisinin ilgili web sayfasına bakmanız gerekir. İşlemcinin sayfasında ilgili tüm dokümanları veriyorlar. ayrıca ST nin işlemcisini kullanmaya çalışıyorsunuz. ST nin hemen hemen tüm ARM işlemcileri için Standart peripheral Library diye kütüphaneleri var. bu kütüphaneleri kullanarak entegrenin bütün register lerini öğrenmeye gerek kalmadan bütün çevre birimleri kullanabilirsiniz.