Arama butonu
Bu konudaki kullanıcılar: 1 misafir
5
Cevap
891
Tıklama
0
Öne Çıkarma
PSoC MUX8 (Çözüldü)
K
16 yıl
Teğmen
Konu Sahibi

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**********");
}

< Resime gitmek için tıklayın >

< Resime gitmek için tıklayın >





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

R
16 yıl
Yarbay

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...


Bu mesaja 1 cevap geldi.
K
16 yıl
Teğmen
Konu Sahibi

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 >
Bu mesaja 1 cevap geldi.
R
16 yıl
Yarbay

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...


Bu mesaja 1 cevap geldi.
K
16 yıl
Teğmen
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.
R
16 yıl
Yarbay

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...



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.