Şimdi Ara

PSoC MUX8 (Çözüldü)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
6
Cevap
0
Favori
891
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Değişik bir problemim var.
    ADC ölçüm yaparken Mux8 ile bir sonraki pine geçiyorum ancak ya AnalogColumnMux1'e bağlı olan portları yada AnalogColumnMux2'ye bağlı olanların verilerini okuyabiliyorum.
    Dolayısı ile çift sayılı portlar ile tek sayılı portları aynı anda okuyamıyorum.

    Ancak datasheette gösterdiği örnek kodlara göre bütün pinleri gezebilmem gerekiyor. Nerede hata yapıyorum ?

    --------------------------------------------------------------------------------------------------------------------------------

    #include <m8c.h>
    #include "PSoCAPI.h"
    #include "AMUX81.h"

    void welcomeScreen(void);
    void rsout(void);
    int iData;
    BYTE bPortNumber;

    void main()
    {
    M8C_EnableGInt; // Enable global interrupts
    PGA_Start(PGA_HIGHPOWER);
    ADCINC14_Start(ADCINC14_HIGHPOWER); // Turn on Analog section
    ADCINC14_GetSamples(0); // Start ADC to read continuously
    UART_CmdReset();
    UART_IntCntl(UART_ENABLE_RX_INT);
    UART_Start(UART_PARITY_NONE);

    welcomeScreen();

    /*
    while(ADCINC14_fIsDataAvailable() == 0); // Wait for data to be ready
    iData = ADCINC14_iGetData(); // Get Data
    ADCINC14_ClearFlag(); // Clear data ready flag
    Data1 = iData;
    Data2 = iData;
    UART_PutSHexInt(iData);
    */

    for(;;)
    {
    //AInMux_n

    bPortNumber = AMUX8_PORT0_7;
    AMUX81_InputSelect(bPortNumber);
    UART_CPutString("\n\r0_7 - ");
    rsout();

    bPortNumber = AMUX8_PORT0_5;
    AMUX81_InputSelect(bPortNumber);
    UART_CPutString("\n\r0_5 - ");
    rsout();

    bPortNumber = AMUX8_PORT0_3;
    AMUX81_InputSelect(bPortNumber);
    UART_CPutString("\n\r0_3 - ");
    rsout();

    bPortNumber = AMUX8_PORT0_1;
    AMUX81_InputSelect(bPortNumber);
    UART_CPutString("\n\r0_1 - ");
    rsout();

    bPortNumber = AMUX8_PORT0_6;
    AMUX82_InputSelect(bPortNumber);
    UART_CPutString("\n\r0_6 - ");
    rsout();

    bPortNumber = AMUX8_PORT0_4;
    AMUX82_InputSelect(bPortNumber);
    UART_CPutString("\n\r0_4 - ");
    rsout();

    bPortNumber = AMUX8_PORT0_2;
    AMUX82_InputSelect(bPortNumber);
    UART_CPutString("\n\r0_2 - ");
    rsout();

    bPortNumber = AMUX8_PORT0_0;
    AMUX82_InputSelect(bPortNumber);
    UART_CPutString("\n\r0_0 - ");
    rsout();
    }
    }

    void rsout()
    {
    while(ADCINC14_fIsDataAvailable() == 0); // Wait for data to be ready
    iData = ADCINC14_iGetData(); // Get Data
    ADCINC14_ClearFlag(); // Clear data ready flag
    UART_PutSHexInt(iData);
    UART_PutChar(12);
    }

    void welcomeScreen()
    {
    UART_CPutString("\n\r**********Welcome**********");
    }

     PSoC MUX8 (Çözüldü)


     PSoC MUX8 (Çözüldü)



    < Bu mesaj bu kişi tarafından değiştirildi koby -- 12 Kasım 2008; 0:00:09 >







  • psoc ta 8li mux yapısı yok ( en azından verdiğin resime göre ) hepsi 4 lüdür.
    yanlız AMUX81.h adında bir dosya include etmiş.
    AMUX81.h dosyasının içerisinde ne halt ettiğini bilmiyorum ama InputSelect1 yapısınıda anahtarlıyor olabilir çünki bu şekilde ancak port0 ın tüm pinlerinden analog giriş alabilirsin...
  • PSoCtaki yardımların için sağol öncelikle.
    Sende olmasan bu konuda kimseye danışamayacağım.
    Yukarıda yazılı olan AMUX81.h değil AMUX8.h olacaktı, denemelerden dolayı kalan ufak bir yazım hatası.

    8 kanalıda kullanabilmek için aşağıdaki kodlar ile ColumnInput Select Yapmak gerekiyormuş.
    Yani iki tane mux4'u başka bir blokta switch yapıyoruz.

    ABF_CR0 &= ~0x80; //Set AnalogColumnInputSelect1 input to AnalogColumn1 mux
    ABF_CR0 |= 0x80; //Set AnalogColumnInputSelect1 input to AnalogColumn0 mux.

    şuan problemsiz çalıştı. Böyle olması gerekiyordu galiba.


    Başlık açmışken başka bir sorumda var.
    ADC ölçümde pine direkt olarak gnd veriyorum ancak almam gereken değer E000 iken E158 gibi bir değer alıyorum.
    Bu ölçümün doğru yönde olduğunu gösteriyor ancak çok fazla sapma var.
    Neden olabilir ?

    http://r*pidshare.com/files/162744953/ADCRS232_Neu.rar.html



    < Bu mesaj bu kişi tarafından değiştirildi koby -- 11 Kasım 2008; 15:41:16 >




  • ABF_CR0 ye technical reference manual den bakmak lazım ama dediğim gibi mutlaka 2 yönlü girişi olan InputSelect1 i anahtarlıyordur. registeri yazılımdan değiştirirsen sorun çözülecektir.

    E000 yerine E158 okumanın nedeni ise; analog girişi PGA üzerinden ADC modülüne yönlendirmen. PGA nın datasında min giriş tipik olarak 240mV görünüyor yani aşşağsında PGA dan hayır bekleme. hesaplamadım ama hex 158 in gerilim karşılığı da yaklaşık 240mV a denk gelecektir...
  • Hmmm.
    O zaman bu değer benim orta noktamıda (FFFF) saptıracak.

    Bu konuya daha sonra tekrar değiniriz. Önce üzerinde biraz araştırma ve deneme yapam gerekiyor.
    Daha table oluşturup resolution denemeleri yapacağım.

    Yardımın için sağol.
  • FFFF sapacak diye düşünmeyin sadece PGA nın min giriş seviyesi altındaki değerleri ölçemeyeceksiniz. tabi aynı şekilde bir kısıtlamada PGA nın çıkış geriliminde olacak. bildiğim kadarıyla PGA rail to rail bir opamp olmadığından, 1FFF ide hiç göremeyeceksiniz. bu yüzden aradan PGA yı kaldırın ve ADC girişlerini port 2.1 den verin...
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.