PSoC Designer (Bloco Analogico)

Software e Hardware para uC PSoC

Moderadores: andre_luis, 51

PSoC Designer (Bloco Analogico)

Mensagempor alessandro » 14 Mai 2007 11:36

Também estou iniciando nesse tipo de microcontrolador, e estou até o momento gostando, apesar demuito bate cabeça.

Agora, alguém sabe me dizer se quando implementamos bloco de AD no PSoC Designer, as entradas e saidas não aparecem para conecta-las ao barramento?

Adicionei um AD, mas não aparece nada na janela "User Module Parameters", e no bloco do AD não disponibiliza a saida nem a entrada.

Outra questão é talvez simples, em C como nos referimos ao um determinado pino I/O para setarmos como 1 ou 0? Para a porta vi que é PRT2DR = valor; (para porta 2).

Grato,
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor alessandro » 14 Mai 2007 12:45

Pessoal umas das questões encontrei, basta clicar no bloco desejado e selecionar o botão "Place User Module".

Falta descobrir como selecionar somente um pino do micro (sintaxe em C).
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor Ricardo_Franco » 14 Mai 2007 12:47

Ola Senhores.
Os blocos analógicos funcionam em barramento diferente do bloco digital, por isso devemos ligar o AD a um MUX do barramento analógico e este MUX a um pino, Se não me engano o bloco ADinc14bits pode ser ligado diretamente ao Pino 2.1, mas tenho que conferir esta informação.

Quanto as portas, seus registradores são de 8 bits um para cada pino da porta, (para o caso do PSoC utilizar uma porta inteira de 8 pinos).
Ou seja se quero utilizar apenas um pino por exemplo

P2 = 00001000, logo devemos setar o registrador,
PRT2DR=8; // 8 em decimal é 00001000 em binário

P0 = 10001001
PRT0DR = 137; // 137 em decimal é 10001001 em binário

Ou podemos utilizar a biblioteca “Ports.h”
Então a saída fica assim

Port2_3(1); // Pino 4 da porta 2 setado em “1”

Ou para o port todo

Port2(1); // Seta todo o port em “1”
Ricardo Franco
____________________________________________________________________________________________
web: www.engricardofranco.kit.net
Skype: engricardofranco
Fone Skype: (19) 3119-8162
Ricardo_Franco
Byte
 
Mensagens: 305
Registrado em: 11 Out 2006 20:53
Localização: Campinas - SP

Mensagempor alessandro » 14 Mai 2007 13:06

Ricardo a biblioteca Ports.h não vem com o software?

O pior é que estou querendo implentar AD para fezer um teste, mas estou com LCD acoplado na placa de Desenvolvimento CY3210, e por força do "destino", precisei usar os pinos dispostos na placa para o LCD. E agora só vejo uma opção para entrada do AD, o pino P2[0], mas esse pino já esta no LCD, e agora? Não posso usar outro pino? Ao menos não esta aparecendo essa opção.
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor Ricardo_Franco » 14 Mai 2007 13:24

Ola Senhores
Não infelizmente a biblioteca não vem, pois foi desenvolvida por um usuário.
Você pode baixá-la aqui:
http://rapidshare.com/files/31281002/ports.h.html

Para incluir um arquivo no projeto proceda da seguinte forma.
Na tela do Aplicattion Editor, menu:
Project -> Add to Project -> File.

Então uma janela de procura ira aparecer para você indicar o caminho do arquivo. Pronto

Não se esqueça de declarar a biblioteca no cabeçalho do programa.
#include “Ports.h”

Boa sorte.
Ricardo Franco
____________________________________________________________________________________________
web: www.engricardofranco.kit.net
Skype: engricardofranco
Fone Skype: (19) 3119-8162
Ricardo_Franco
Byte
 
Mensagens: 305
Registrado em: 11 Out 2006 20:53
Localização: Campinas - SP

Mensagempor alessandro » 14 Mai 2007 13:27

Eu posso direcionar o pino da entrada do AD para outros pinos?
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor Ricardo_Franco » 14 Mai 2007 14:01

alessandro escreveu:O pior é que estou querendo implentar AD para fezer um teste, mas estou com LCD acoplado na placa de Desenvolvimento CY3210, e por força do "destino", precisei usar os pinos dispostos na placa para o LCD. E agora só vejo uma opção para entrada do AD, o pino P2[0], mas esse pino já esta no LCD, e agora? Não posso usar outro pino? Ao menos não esta aparecendo essa opção.


Ola Senhores.
Bom sobre os blocos analógicos.
O PSoC oferece algumas restrições quanto ao uso de blocos analógicos.
O mesmo se divide em duas categorias:

Analógic Continuos time = ACB00
Analógic Switched Capacitor = ASD10, ASC20

Observe a figura abaixo.
Imagem

Para o caso dos AD, os mesmo são conversores de um único bit e utiliza capacitores chaveados para integrar o sinal em função do tempo, ou seja, quanto maior definição (bits), mais lento fica a amostragem do AD, SPS (samples por segundos).
Logo os AD utilizam os blocos de capacitores chaveados, ou seja obrigatóriamente o mesmo deve ser conectado apenas aos blocos ASDxx e ASCxx.
E estes blocos só mantém conexão com o Port2, ou com outro bloco analógico.
Portanto temos duas soluções:

1-) Troque o LCD de porta, pois o mesmo utiliza dados digitais e todas as portas são digitais. (mas então como utilizar no KIT?).

2-) Utilize um bloco analógico do tipo continous time, por exemplo um AmpOp de ganho programável (PGA).

Observe a figura.
Imagem

Configure o PGA como ganho 1 e pronto tudo que entrar neste módulo será enviado ao AD pelo pino P0_1.
Espero ter ajudado e não complicado mais
Boa sorte.
Ricardo Franco
____________________________________________________________________________________________
web: www.engricardofranco.kit.net
Skype: engricardofranco
Fone Skype: (19) 3119-8162
Ricardo_Franco
Byte
 
Mensagens: 305
Registrado em: 11 Out 2006 20:53
Localização: Campinas - SP

Mensagempor Ricardo_Franco » 14 Mai 2007 14:03

alessandro escreveu:Eu posso direcionar o pino da entrada do AD para outros pinos?

Pode modificando o pino no mux na entrada da PGA.
É só clicar em cima e ele abre um menu drop-down para você escolher qual pino prefere usar.
Ricardo Franco
____________________________________________________________________________________________
web: www.engricardofranco.kit.net
Skype: engricardofranco
Fone Skype: (19) 3119-8162
Ricardo_Franco
Byte
 
Mensagens: 305
Registrado em: 11 Out 2006 20:53
Localização: Campinas - SP

Mensagempor alessandro » 17 Mai 2007 17:03

Utilizei um PGA com ganho 1 e um AD de 12 bits. Funcionou.

Mas vi que os primeiros 30º e os 30º finais do potenciometro não são lidos ou incrementados no reg. Alguém sabe porque isso pode estar acontecendo?
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor bhvictor » 17 Mai 2007 21:59

Ricardo,

Você tem alguma biblioteca para ler o status de uma unica porta?

Victor
bhvictor
Bit
 
Mensagens: 25
Registrado em: 17 Jan 2007 17:33

Mensagempor Ricardo_Franco » 17 Mai 2007 23:13

Ola Senhores.
Victor eu acho que você quis dizer Status de um único pino certo?
Na verdade não tem biblioteca não, você precisa fazer um bitwise com lógica AND.
Vou montar um programa simples e posto aqui no fórum.
Ricardo Franco
____________________________________________________________________________________________
web: www.engricardofranco.kit.net
Skype: engricardofranco
Fone Skype: (19) 3119-8162
Ricardo_Franco
Byte
 
Mensagens: 305
Registrado em: 11 Out 2006 20:53
Localização: Campinas - SP

Mensagempor alessandro » 18 Mai 2007 08:05

Alguém ja teve esse problema com leituras analógicas somente em uma faixa?
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor Ricardo_Franco » 18 Mai 2007 11:01

Ola Senhores.
Infelizmente sim.
O AD do PSoC é na verdade um AD de um único bit que utiliza um AmpOp para integrar as medidas em função do tempo, eu dei uma explicação mais detalhada para nosso amigo Hermecildes no tópico “Decimador”, confira no link:

http://asm51.eng.br/phpBB/viewtopic.php?t=1324

Se você observar a curva do AD incremental do PSoC, você poderá observar que ele não é linear em nenhum ponto de sua faixa.

Imagem

Este erro depende de alguns fatores, tais como:
• Ruído da leitura do AD proveniente da fonte de clock, quanto mais rápido o clock, mais ruído, logo menos precisa sua leitura.
• Se você não estiver usando cristal, logo seu clock depende de um oscilador RC, ou seja você depende de deriva térmica.

O tipo de AD empregado na leitura, se não me engano o AD incremental é o mais ruidoso.
Mas como corrigir este evento?
Tabelar toda a leitura seria a opção mais fácil, mas no entanto é muito trabalhosa e a precisão não é tão boa assim, logo eu resolvi achar a função da curva do AD.
Eu usei o software Origin e plottei os dados neste cara,que me deu a equação da curva do AD.

Y= 85,83672 – 1419,81483X + 694,26523X^2 – 98,36434X^3 + 10,88419X^4 – 1,36877X^5

De posse desse polinômio (incrivelmente um polinômio de 5ª ordem, apesar da ultima expressão ser quase 1 poderia ser desprezada, mas eu precisava de muita precisão), eu o inseri no código de leitura do AD

while(ADCINC14_fIsDataAvailable() == 0);
AD = ADCINC14_iGetData();
ADCINC14_ClearFlag();
TensaoMedida = AD/3276.8;
erro = ( (85.83672) - (1419.81483 * TensaoMedida) + (694.26523 * (TensaoMedida*TensaoMedida)) - (98.36434 * (TensaoMedida*TensaoMedida*TensaoMedida)) + (10.88419 * (TensaoMedida*TensaoMedida*TensaoMedida*TensaoMedida)) - (1.36877 * (TensaoMedida*TensaoMedida*TensaoMedida*TensaoMedida*TensaoMedida)) );
calibrado =erro+AD;

Onde a leitura que eu fizer em “calibrado” esta ainda em bits, mas agora já linearizado em toda a sua faixa.

Espero não ter complicado muito.
Ricardo Franco
____________________________________________________________________________________________
web: www.engricardofranco.kit.net
Skype: engricardofranco
Fone Skype: (19) 3119-8162
Ricardo_Franco
Byte
 
Mensagens: 305
Registrado em: 11 Out 2006 20:53
Localização: Campinas - SP

Mensagempor alessandro » 18 Mai 2007 12:10

O problema Ricardo é que estou lendo direto o valor do Registrador do AD:

AD = ADCINC14_iGetData();

minha variavel AD só começa a ser inclementada após 30º do potenciometro e faltando 30º para terminar ele para de ler também.

Verfiquei se a tensão neste ponto do potenciometro esta correto, esta tudo certo, mas nao estou conseguindo ler esta faixa.
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32

Mensagempor Ricardo_Franco » 18 Mai 2007 13:42

alessandro escreveu:O problema Ricardo é que estou lendo direto o valor do Registrador do AD:

AD = ADCINC14_iGetData();

minha variavel AD só começa a ser inclementada após 30º do potenciometro e faltando 30º para terminar ele para de ler também.

Verfiquei se a tensão neste ponto do potenciometro esta correto, esta tudo certo, mas nao estou conseguindo ler esta faixa.

Ola Senhores.
Acabei de montar um programa que realiza leitura pela serial
e funciona tudo certinho, ele realiza leitura em toda a faixa de operações do ponteciometro.
Procure trocar de placa, talvez seja uma de suas placas com defeito.
Ricardo Franco
____________________________________________________________________________________________
web: www.engricardofranco.kit.net
Skype: engricardofranco
Fone Skype: (19) 3119-8162
Ricardo_Franco
Byte
 
Mensagens: 305
Registrado em: 11 Out 2006 20:53
Localização: Campinas - SP

Próximo

Voltar para Cypress

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes

x