tabela

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor Maurício » 25 Fev 2007 21:39

KrafT escreveu:Ah Mauricio, ANSI 100% puro para mcu não existe.


eheheheheh
Mas eu não posso deixar de dar umas espetadas, né ?? :wink:

[]'s

RETI.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor lucaszampar » 26 Fev 2007 16:07

geraldomelo escreveu:Kraft , mas agora quem não entendeu foi eu , pois o amigo Eliandrostz , nos tópicos acime ele diz assim , e funciona :

a = tabela[660];....

É porque a linguagem C não checa índices.
Se vc fizer a = tabela[15000], provavelmente vc vai ter algum valor de retorno, mesmo que esteja fora da faixa de índices e que o valor não seja necessariamente, aquele que vc queria. Viva o C!!! :wink:


Ou será que o CCS vê que é uma constante esse valor e já o substituí pelo valor na tabela? Então o valor de A vai ser o valor correto mesmo....?
Avatar do usuário
lucaszampar
Byte
 
Mensagens: 105
Registrado em: 11 Out 2006 22:30
Localização: Limeira - SP

Mensagempor andre_luis » 26 Fev 2007 16:34

Pessoal,

Outro detalhe intrigante também, é que o PIC16F não permite que o CCS crie variaveis com mais de 80bytes de extensão ( isso, sem forçar a diretiva #device *= 16 ). Esse tamanho está descrito no datasheet, na seção de memorias.

O Fabio Pereira explicou isso - em algum tópico - dizendo que é uma restrição do padrão ANSI e não é culpa do CCS. Isso porque o compilador só pode trabalhar com blocos contínuos de variáveis. No caso, temos 80Bytes para RAM. E os 256 Bytes para a 'ROM' se explica pelo tamanho do barramento, que é de 8bits.

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor KrafT » 26 Fev 2007 17:11

Discordo das 2 afirmações:

andre_teprom escreveu:Pessoal,

Outro detalhe intrigante também, é que o PIC16F não permite que o CCS crie variaveis com mais de 80bytes de extensão ( isso, sem forçar a diretiva #device *= 16 ).




Essa limitação está relacionada ao maior bloco contíguo de RAM, pode ser 80 ou outro se algum PIC16 tiver bloco contíguo diferente.

Ao que eu saiba a diretiva *=16 não contorna essa limitação.


andre_teprom escreveu: E os 256 Bytes para a 'ROM' se explica pelo tamanho do barramento, que é de 8bits.


O tamanho do barramento é de 14 bits. Talvez o CCS não use tabelas alem de 256 bytes para não ter que ficar tratando os bits do PCH- PCLATH.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor KrafT » 27 Fev 2007 08:27

Bom só para confirmar, fiz o seguinte teste num 16f628A:

Código: Selecionar todos
#include "C:\Projetos\Testes\Max_array_pic_ccs.h"

#define TamArray 87

int Teste[TamArray];

void main() {
int conta;
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(VREF_LOW|-2);
   setup_oscillator(False);

for(conta=0;conta<TamArray;conta++){
   Teste[conta]=conta;
}
}


Se TamArray for = 87 compila; Se for = 88 não. Como era esperado, #device *=16 não resolve o problema, mesmo porque a finalidade dessa diretiva é outra. Melhor seria se a CCS usasse near e far em vez desse *=16.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor andre_luis » 27 Fev 2007 11:00

Sim, ok, o barramento de dados é de 8 bit's, enquanto o de endereços é de 14 bit's. Lembra que a arquitetura do PIC separa o barramentos de dados e endereços.

Outro detalhe é que, isso explicava o fato de que NO MEU CASO, eu só conseguia criar variaveis até 78 bytes, e essa explicação dos 80 bytes ( vide datasheet do PIC16F877 ) me pareceu plausível.

Até que surja uma explicação consistente, fico com essa (-:

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor eliandrostz » 27 Fev 2007 14:39

Olá pessoal,

Acabei me utilizando da idéia do Mauricio e do Kraft de dividir em tabelas menores, funcionou legal.

Geraldomelo o OP AMP OP07 não é difícil de se encontrar não, e custa entre R$ 2,00 e R$ 4,00 depende da região, mas se for para fazer um teste, na Radiolar aí em Ribeirão vc pode achar com facilidade.

Obrigado a todos pela ajuda, abraços.

Eliandro
O conhecimento vem e vai, a sabedoria permanece...
eliandrostz
Nibble
 
Mensagens: 71
Registrado em: 16 Out 2006 13:51

Mensagempor Mersin » 24 Mar 2007 21:48

Pessoal,

Para cálculo da temperatura não seria mais fácil usar a função de transferencia do Termopar? informando o Beta etc e tal?...

A função não é complicada e somente precisa usar o Exponencial, coisa que com C fica bem fácil?

Não dá?
Mersin
Mersin
Byte
 
Mensagens: 121
Registrado em: 22 Out 2006 13:07
Localização: Goiânia

Anterior

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x