Página 1 de 2

tabela

MensagemEnviado: 23 Fev 2007 15:31
por eliandrostz
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

Re: tabela

MensagemEnviado: 23 Fev 2007 16:19
por andre_luis
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 ).

+++

MensagemEnviado: 23 Fev 2007 18:59
por eliandrostz
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

MensagemEnviado: 23 Fev 2007 19:02
por __JEREK__
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!!!

MensagemEnviado: 23 Fev 2007 19:43
por MOR_AL
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

MensagemEnviado: 23 Fev 2007 20:50
por __JEREK__
Mor_Al, você esta certíssimo, agora que fui olhar, tem o circuito que você mencionou, valeu mesmo!!!

abraços

MensagemEnviado: 23 Fev 2007 21:34
por Maurício
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.

MensagemEnviado: 23 Fev 2007 21:49
por KrafT
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?

MensagemEnviado: 24 Fev 2007 14:01
por eliandrostz
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++

MensagemEnviado: 24 Fev 2007 15:41
por KrafT
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?

MensagemEnviado: 24 Fev 2007 18:09
por eliandrostz
É 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.

MensagemEnviado: 24 Fev 2007 23:37
por KrafT
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.

MensagemEnviado: 25 Fev 2007 01:00
por geraldomelo
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 .

MensagemEnviado: 25 Fev 2007 02:01
por Maurício
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.

MensagemEnviado: 25 Fev 2007 13:11
por KrafT
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.