tabela

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

tabela

Mensagempor eliandrostz » 23 Fev 2007 15:31

Olá pessoal,
alguém poderia me ajudar com essa tabela, estou usando o CCS e um 16f876

Código: Selecionar todos
long int tc1;
signed long int a;

signed long int const tabela[ ] ={
-200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
-200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,
-200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -199, -198, -197, -196, -195, -194, -193, -192, -191,
-190, -189, -188, -187, -186, -185, -184, -183, -182, -181, -180, -179, -178, -177, -176, -175, -174, -173, -172,
-171, -170, -169, -168, -167, -166, -165, -164, -163, -162, -161, -160, -159, -158, -157, -156, -155, -154, -153,
-152, -151, -150, -149, -148, -147, -146, -145, -144, -143, -142, -141, -140, -139, -138, -137, -136, -135, -134,
-133, -132, -131, -130, -129, -128, -127, -126, -125, -123, -122, -121, -120, -119, -118, -117, -116, -115, -114,
-113, -112, -111, -110, -109, -108, -107, -106, -104, -103, -102, -101, -100, -99, -98, -97, -96, -95, -94, -93,
-92, -91, -90, -89, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -74, -73, -72, -71, -70, -69, -68, -67,
-66, -65, -64, -63, -62, -61, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -47, -46, -45, -44, -43, -42, -41,
-40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17,
-16, -14, -13, -12, -11, -10, -8, -7, -6, -5, -4, -3, -2, -1, 0.....};

 tc1=read_adc();
 a= tabela[tc1];

imprime a;


fazendo assim parece que tc1 vai até 128 e não varre a tabela até o fim, já se faço assim a= tabela[500]; consigo ler o valor da posição 500, alguém sabe porque isso está acontecendo, mesmo carregando tc1=500 direto não funciona. a tabela tem 660 posições.

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

Re: tabela

Mensagempor andre_luis » 23 Fev 2007 16:19

Eu nunca consegui usar um array com mais de 256 posicoes, pois o CCS ( versao 3.249 ) dava erro.

Outra coisa : Voce usa int ao invez do int8 ( observar que no CCS int é de 8 bits, para PIC16F ).

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

Mensagempor eliandrostz » 23 Fev 2007 18:59

Quando coloco assim:

a = tabela[0];
a = tabela[660]; funciona direitinho apesar da tabela ter mais de 256 posições, o que não funciona é carregar a váriavel tanto com um decimal como com a leitura do A/D:

tc1 = 0;
a = tabela[tc1]; ou
tc1 = 660;
a = tabela[tc1]; configurei as váriaveis de todas as formas, mas não consegui nenhum resultado.
Valeu André.

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

Mensagempor __JEREK__ » 23 Fev 2007 19:02

eliandrostz, esta fazendo uma aplicação para termopar? estou tentando fazer algo mas ainda não sei como ligar o termopar, poderia me dar uma dica de como fazer isso, qual amplificador é o mais apropriado? (se não for pedir demais)

valeu!!!
__JEREK__
Byte
 
Mensagens: 216
Registrado em: 11 Out 2006 17:53
Localização: BA

Mensagempor MOR_AL » 23 Fev 2007 19:43

Caro __JEREK__.

Se não me engano, você postou um monte de circuitos para o pessoal aqui no fórum. Se lembra? Foi no dia 22/01/2007.

Acho que lá, eu vi um circuito que faz o que você quer. O problema foi achá-lo.

Abraços.

MOR_AL
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor __JEREK__ » 23 Fev 2007 20:50

Mor_Al, você esta certíssimo, agora que fui olhar, tem o circuito que você mencionou, valeu mesmo!!!

abraços
__JEREK__
Byte
 
Mensagens: 216
Registrado em: 11 Out 2006 17:53
Localização: BA

Mensagempor Maurício » 23 Fev 2007 21:34

Não conheço o CCS, mas, o André já deu a dica, dizendo que matrizes acima de 256 posições, o CCS não topa!!

Se for assim, sem chance. LONG INT endereça milhões de elementos.

As matrizes estão super-dimensionadas! Se o valor que vc vai guardar, não ultrapassar o -200, de acordo com o exemplo, então vc pode usar matrizes do tipo INT, o que já te economiza dois bytes por elemento.

Mas, se o limite do CCS for CHAR (8 bits), então, vc vai ter que desmembrar essa tabela em várias outras!

E o que vc disse é verdade, se o AD desse PIC é de oito bits, então, o máximo elemento que vc poderá acessar será o 255 (FFH).

Trabalheira, hein ???
Por essas e outras é que eu não uso PICs. ehehehehehe

[]'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 KrafT » 23 Fev 2007 21:49

Tabela de constantes pode ser maior que 256 bytes sem problema.

Se o ADC for 8 bits, claro que ele só vai ler os primeiros 256 registros da tabela, como Mauricio citou.

Qual o PIC? E o adc está configurado para 10 bits?
"..."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 eliandrostz » 24 Fev 2007 14:01

Olá Jerek na verdade é para leitura de temperatura com PT100 e estou usando o amplificador OP07, já com termopar vc precisa dos valores em milivoltagem relativos ao termopar utilizado e de um circuito para compensação da junta fria que serve para eliminar tensões geradas pela conexão dos cabos do termopar com o equipamento.
Pessoal a tabela vai armazenar valores desde -200 a 600 num total de 660 pontos como disse o Kraft o CCS suporta sim uma tabela de constantes com mais de 256 pontos, o A/D está configurado para 10 bits e o uC é um PIC16F876, consigo acessar qualquer ponto da tabela colocando um decimal entre os colchetes assim a = tabela[660] o que não consegui foi passar o valor através de uma variavel long int tipo:

long int tc1 = 660;
a = tabela[tc1];


Valeu pessoal se alguém souber o por que isso está acontecendo vale a dica. Obrigado T++
Editado pela última vez por eliandrostz em 24 Fev 2007 18:00, em um total de 1 vez.
O conhecimento vem e vai, a sabedoria permanece...
eliandrostz
Nibble
 
Mensagens: 71
Registrado em: 16 Out 2006 13:51

Mensagempor KrafT » 24 Fev 2007 15:41

Eliandro, simulando com a tabela parcial que está aí, sempre que o ponteiro tc1 passa de 127 ele volta a zero, como se o CCS ignorasse o bit 7 de tc1.

Teria como dispor da tabela completa para que se possa fazer o teste?
"..."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 eliandrostz » 24 Fev 2007 18:09

É exatamente isso que está acontecendo Kraft, mas não entendi porque.

A tabela é essa.

Código: Selecionar todos
signed long int const tabela[ ] ={
-200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200,-200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, 200, -200,-200, -200, -200, -200, -200, -200, -200, -200, -200, -200, -199, -198, -197, -196, -195, -194, -193, -192, -191,-190, -189, -188, -187, -186, -185, -184, -183, -182, -181, -180, -179, -178, -177, -176, -175, -174, -173, -172,-171, -170, -169, -168, -167, -166, -165, -164, -163, -162, -161, -160, -159, -158, -157, -156, -155, -154, -153,-152, -151, -150, -149, -148, -147, -146, -145, -144, -143, -142, -141, -140, -139, -138, -137, -136, -135, -134,-133, -132, -131, -130, -129, -128, -127, -126, -125, -123, -122, -121, -120, -119, -118, -117, -116, -115, -114,-113, -112, -111, -110, -109, -108, -107, -106, -104, -103, -102, -101, -100, -99, -98, -97, -96, -95, -94, -93,-92, -91, -90, -89, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -74, -73, -72, -71, -70, -69, -68, -67,-66, -65, -64, -63, -62, -61, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -47, -46, -45, -44, -43, -42, -41,-40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17,-16, -14, -13, -12, -11, -10, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 23, 24, 26, 27, 27, 29, 30, 31, 32, 34, 35, 36 ,37, 38, 40, 41, 42, 43, 44, 45, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 64, 65, 66, 68, 69, 70, 70, 71, 72, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84, 85, 87, 88,89, 90, 91, 92, 94, 95, 96, 97, 99, 100, 100, 102, 103, 104, 106, 107, 108, 109, 110, 112, 113, 114, 115, 116, 118, 119, 120, 120, 121, 123, 124, 125, 126, 127, 128, 130, 131, 132, 133, 135, 136, 137, 138, 140, 141, 142, 143, 145, 146, 147, 148, 149, 150, 152, 153, 154, 155, 157, 158, 159, 160, 161, 163, 164, 165, 167, 168, 169, 170, 170, 171, 172, 174, 175, 176, 177, 179, 180, 181, 182, 184, 185, 186, 187, 189, 190, 191, 192, 194, 195, 196, 197, 199, 200, 201, 202, 204, 205, 206, 207, 209, 210, 211, 212, 214, 215, 216, 217, 219, 220, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 233, 234, 235, 237, 238, 239, 240, 242, 243, 244, 245, 247, 248, 249, 250, 252, 253, 255, 256, 257, 259, 260, 261, 262, 263, 265, 266, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279, 280, 281, 283, 284, 286, 287, 288, 289, 290, 292, 293, 294, 296, 297, 299, 300, 301, 302, 303, 304, 307, 308, 309, 310, 312, 313, 314, 315, 317, 318, 320, 321, 322, 323, 325, 326, 328, 329, 330, 331, 332, 333,334, 336, 337, 338, 340, 341, 342, 344, 345, 346, 347, 349, 350, 352, 353, 354, 355, 357, 358, 359, 360, 362, 363, 365, 366, 368, 369, 370, 371, 373, 374, 376, 377, 379, 380, 382, 383, 384, 385, 386, 387, 388, 390, 391, 392, 393, 395, 396, 398, 399, 400, 401, 403, 404, 406, 407, 409, 410, 412, 413, 415, 416, 417, 419, 420, 421, 423, 424, 425, 426, 428, 429, 430, 431, 433, 434, 436, 437, 439, 440, 441, 442, 443, 445, 446, 448, 449, 450, 451, 453, 454, 456, 457, 459, 460, 462, 463, 465, 466, 468, 470, 471, 472, 473, 474, 476, 478, 479, 480, 481, 482, 484, 485, 487, 489, 490, 491, 493, 494, 496, 497, 499, 500, 501, 502, 503, 504, 505, 507, 508, 509, 510, 512, 513, 515, 516, 519, 520, 521, 522, 524, 525, 527, 529, 530, 531, 533, 534, 536, 537, 539, 540, 541, 542, 544, 547, 549, 550, 552, 553, 555, 556, 558, 559, 560, 562, 564, 565, 566, 567, 568, 569, 570, 572, 573, 575, 576, 579, 580, 581, 582, 584, 585, 587, 588, 589, 590, 592, 595, 597, 599, 600, 600};


Grato pela atenção.
O conhecimento vem e vai, a sabedoria permanece...
eliandrostz
Nibble
 
Mensagens: 71
Registrado em: 16 Out 2006 13:51

Mensagempor KrafT » 24 Fev 2007 23:37

Bom, descobrí o probelma:

- Nos PICS de 14 bits, como é o caso, o CCS realmente limita a tabela em 256 registros (Ponto para o André). Como a tabela é de 16 bits, fica limitada nos 128 registros.

Para resolver, vc pode dividir sua tabela em blocos de 128 e acesssar ela via if((tc1 >x) && (tc1 <y)) // use tabela z.

Ou migrar para um PIC18F aonde essa limitação não ocorre.
"..."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 geraldomelo » 25 Fev 2007 01:00

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

" Quando coloco assim:

a = tabela[0];
a = tabela[660]; funciona direitinho apesar da tabela ter mais de 256 posições, o que não funciona é carregar a váriavel tanto com um decimal como com a leitura do A/D: "

Boiei agora também ....

Outra coisa , onde estão esses circuitos que vcs estão falando , procurei nesse dia e não achei ? :

" Se não me engano, você postou um monte de circuitos para o pessoal aqui no fórum. Se lembra? Foi no dia 22/01/2007. " ..


Mais uma coisa .. hehehe .... Eliandrostz , vc poderia nos dizer se foi dificil achar esse OP AMP ? Poderia dizer o preço também ...

Abraços Pessoal .

Geraldo .
geraldomelo
Byte
 
Mensagens: 267
Registrado em: 14 Out 2006 16:53
Localização: Ribeirão preto - SP

Mensagempor Maurício » 25 Fev 2007 02:01

KrafT escreveu:- Nos PICS de 14 bits, como é o caso, o CCS realmente limita a tabela em 256 registros (Ponto para o André). Como a tabela é de 16 bits, fica limitada nos 128 registros.


Como é que é ?? No CCS long int é de 16 bits, é ?? Vixe!! Negócio totalmente fora do ANSI.
Adoro PICs e suas ferramentas, ehehehehehe

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:

[]'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 KrafT » 25 Fev 2007 13:11

Mauricio, a tabela é montada corretamente, mas o CCS limita o ponteiro para 256 bytes.

Mas se o Eliandro dividir essa tabela, ele pode ter dois grandes benefícios:

1- Pode eliminar os numeros negativos;
2- Pode usar tabelas de 8 bits.

Assim ele terá um código muito mais eficiente e rápido num pic 16F do que com a tabela inteira, mesmo porque do jeito que está nem funciona nos 16F + CCS.

Desnecessário dizer que dentro dos range de tc1 deve ser feito a compensacao dos negativos e dos numero maiores que 255.

Ah Mauricio, ANSI 100% puro para mcu não existe.
"..."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

Próximo

Voltar para PIC

Quem está online

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

cron

x