Comprimir dados (ajuda)

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Re: Comprimir dados (ajuda)

Mensagempor lucasromeiro » 14 Ago 2015 17:56

FOI ISSO AQUI:

xultz escreveu:
Lucas, converter para hexa ou binário é a mesma coisa, é só uma forma de você escrever um determinado número.
A idéia é a seguinte: suponha que eu tenho o número 157. Quando representado em ASCII, ele ocupa três bytes, sendo um para o dígito '1', outro para o dígito '5', e outro para o dígito '7', correto? Caso você não seja muito familiarizado com a tabela ASCII, veja a mesma neste site: http://www.asciitable.com/ e verifique que o código para o dígito '1' é 49 em decimal, ou 0x31 em hexadecimal. Assim, na memória do teu microcontrolador e durante a transmissão destes dígitos no teu pacote TCP, ele seriam (em hexa) 0x31 0x35 0x37, ocupando 3 bytes, certo? Agora, eu posso pegar estes três dígitos e convertê-los para um único valor em decimal, cujo valor é 157, ou 0x9D em hexa, correto? Desta forma, eu ocupo um único byte para armazenar este valor.
Veja um outro exemplo com um número grandão, por exemplo, 57129. Em ASCII, este valor ocupa 5 bytes, um para cada dígito, porém este valor convertido para hexadecimal tem valor 0xDF29. Ou seja, ao invés de 5 bytes, são necessários somente 2 para representar o mesmo valor. Esta é a ideia de converter os valores de ASCII para hexa e economizar alguns bytes (você provavelmente vai economizar mais de 50%).


RESPONDI:
Caramba, finalmente entendi...
kkkkkkkkkkk
agora tenho varias duvidas relacionadas a isso...
1- Eu nunca sei qual vai ser o tamanho do meu numero, pode ser 1 ou 3743724 ou outro valor. o hex vai ficar variando de tamanho?
2- Como eu enviaria esses dados? concatenaria todos com "strcat" numa unica string?
3- consegui entender tudo, mas como economiza espaco, pensei em gravar na eeprom assim tambem para economizar espaco na eeprom, o que acha? pensando como fazer isso.

agora estou imaginando como seria a logica de montar um pacote com os dados em hexa todos juntos com a data e tal, formando um pacote completo... para nao fazer m**** e identificar por exempo 0xDF29 como sendo 4 bytes D,F,2,9...

A melhor resposta que tive ate agora!!!
Estou perto de resolver isso!!!
lucasromeiro
Byte
 
Mensagens: 121
Registrado em: 22 Out 2009 20:32

Re: Comprimir dados (ajuda)

Mensagempor KrafT » 14 Ago 2015 19:35

Acho que seria justo divulgar o ranking das respostas, assim que tá mais para trás na disputa pode se planejar para alcançar o líder. :roll:
Ah, sem contar a premiação.
"..."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

Re: Comprimir dados (ajuda)

Mensagempor xultz » 17 Ago 2015 08:33

1- Eu nunca sei qual vai ser o tamanho do meu numero, pode ser 1 ou 3743724 ou outro valor. o hex vai ficar variando de tamanho?

Tudo depende do algoritmo que você inventar, e essa é a parte mais divertida de todo o processo, então não espere que alguém faça isso prá você. É como alguém comer a cereja do bolo e depois contar prá você se ela estava gostosa ou não. A vantagem é que se a cereja estiver ruim, você não precisou comer prá saber, mas perde toda a diversão do negócio.
Ou seja, se você, por exemplo, fizer um algoritmo que utiliza três bytes prá representar o valor que precisa (podendo assim ter valores entre 0 e 2^24) ele vai ocupar três bytes, independente se o valor for 1 ou 1 zilhão. Mas se for utilizar somente a quantidade de bytes necessários, vai precisar ter alguma forma de indicar quantos bytes são. Como? Existem muitas maneiras, bota a cachola prá pensar e você terá uma ideia genial, acredite nisso. Minhas melhores ideias geralmente ocorrem quando estou tomando banho, logo após me divertir, e depois de lavar o cabelo, mas é só uma sugestão.

2- Como eu enviaria esses dados? concatenaria todos com "strcat" numa unica string?

Sim e não. Na verdade, sim, mas não necessariamente sim. O mais comum é criar um array de bytes (por exemplo, um arrary do tipo
unsigned char transmissao[30];
e você vai aidicionando teus bytes neste array, e tua rotina de transmissão envia este array (este valor de 30 bytes ali é só um chute). Se você tiver dificuldade em manipular array de bytes, isto está esmiuçado geralmente no primeiro capítulo de qualquer livro de programação em C.

3- consegui entender tudo, mas como economiza espaco, pensei em gravar na eeprom assim tambem para economizar espaco na eeprom, o que acha? pensando como fazer isso.

Entendi nada.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: Comprimir dados (ajuda)

Mensagempor lucasromeiro » 17 Ago 2015 22:34

xultz escreveu:
1- Eu nunca sei qual vai ser o tamanho do meu numero, pode ser 1 ou 3743724 ou outro valor. o hex vai ficar variando de tamanho?

Tudo depende do algoritmo que você inventar, e essa é a parte mais divertida de todo o processo, então não espere que alguém faça isso prá você. É como alguém comer a cereja do bolo e depois contar prá você se ela estava gostosa ou não. A vantagem é que se a cereja estiver ruim, você não precisou comer prá saber, mas perde toda a diversão do negócio.
Ou seja, se você, por exemplo, fizer um algoritmo que utiliza três bytes prá representar o valor que precisa (podendo assim ter valores entre 0 e 2^24) ele vai ocupar três bytes, independente se o valor for 1 ou 1 zilhão. Mas se for utilizar somente a quantidade de bytes necessários, vai precisar ter alguma forma de indicar quantos bytes são. Como? Existem muitas maneiras, bota a cachola prá pensar e você terá uma ideia genial, acredite nisso. Minhas melhores ideias geralmente ocorrem quando estou tomando banho, logo após me divertir, e depois de lavar o cabelo, mas é só uma sugestão.

2- Como eu enviaria esses dados? concatenaria todos com "strcat" numa unica string?

Sim e não. Na verdade, sim, mas não necessariamente sim. O mais comum é criar um array de bytes (por exemplo, um arrary do tipo
unsigned char transmissao[30];
e você vai aidicionando teus bytes neste array, e tua rotina de transmissão envia este array (este valor de 30 bytes ali é só um chute). Se você tiver dificuldade em manipular array de bytes, isto está esmiuçado geralmente no primeiro capítulo de qualquer livro de programação em C.

3- consegui entender tudo, mas como economiza espaco, pensei em gravar na eeprom assim tambem para economizar espaco na eeprom, o que acha? pensando como fazer isso.

Entendi nada.


Entendi perfeitamente, porem, nao seria melhor e mais "entendivel" fazer assim?
tenho um int32: 4294967290
1- divido ele em valores de 2 casas decimais
2- converto tudo para ascii
ex:
42 94 96 72 90
* ^ ` H Z
assim tenho reducao de 50%
entao eu enviaria os caracteres ascii que apareciam, como o que foi mostrado!

Dou esta ideia pq ficou mais claro para mim bolar algo e parece ser mais simples e tao eficiente quanto. estou certo em afirmar isso?
em hexa ficou mais complicado visualizar e ate mesmo converter, etc..
o que acha?
lucasromeiro
Byte
 
Mensagens: 121
Registrado em: 22 Out 2009 20:32

Re: Comprimir dados (ajuda)

Mensagempor xultz » 18 Ago 2015 08:28

Se você se sente mais confortável assim, manda ver. Se fosse enviar somente os bytes da tua variável int32, precisaria de 4 bytes ao invés de 5, mas isto fica a teu critério.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: Comprimir dados (ajuda)

Mensagempor edsont » 18 Ago 2015 09:37

Agora fiquei sem entender. É pra comprimir ou expandir?
Converter binário para texto e depois transformar o texto em binário?
Vai desperdiçar bytes e processamento.
Avatar do usuário
edsont
Word
 
Mensagens: 555
Registrado em: 22 Mai 2007 17:19
Localização: Araraquara-SP Brasil - Terra - Sistema Solar - Via Láctea

Re: Comprimir dados (ajuda)

Mensagempor lucasromeiro » 18 Ago 2015 11:15

xultz escreveu:Se você se sente mais confortável assim, manda ver. Se fosse enviar somente os bytes da tua variável int32, precisaria de 4 bytes ao invés de 5, mas isto fica a teu critério.


kkkkkkkkk
vc tem razao.
viajei aqui
estava ja imaginando outra situação...

entendi o processo, mas estou com dificuldade de fazer um algoritmo para transformar o numero para hexa e poder concatenar ele na string.
pelo que vi, nao existe funcao pronta para isso. será que eu poderia pegar ele direto da memoria ram?
o que me sugere?
lucasromeiro
Byte
 
Mensagens: 121
Registrado em: 22 Out 2009 20:32

Re: Comprimir dados (ajuda)

Mensagempor xultz » 18 Ago 2015 13:09

Afinal de contas, de onde vêm estes valores, de que maneira você faz a leitura dos mesmos?
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: Comprimir dados (ajuda)

Mensagempor lucasromeiro » 18 Ago 2015 15:41

xultz escreveu:Afinal de contas, de onde vêm estes valores, de que maneira você faz a leitura dos mesmos?

Sao valores lidos de sensores analogicos.
tenho um adc externo de 18bits com comunicacao i2c.
vou ler um conjunto de 7 sensores, por a data da coleta, o sinal do modem, o numero do cliente, formar um pacote e enviar!
basicamente isso...
porem so envio quando eu tenho ao menos 5 pacotes.

no caso seriam 8 INT32 contando com o timestamp, um int8 para o sinal, um int8 para as ios ativas, um int 16 para o numero do cliente.

entendeu?

se tiver whats e ficar melhor p vc.
poderiamos ate criar um grupo de discussao de eletronica e programacao.
71 8605-0664
lucasromeiro
Byte
 
Mensagens: 121
Registrado em: 22 Out 2009 20:32

Re: Comprimir dados (ajuda)

Mensagempor xultz » 18 Ago 2015 20:07

Cara, se você lê o sensor e guarda o valor num int32, então já tem o valor em hexa numa variável de 4 bytes. Você só precisa enviar estes 4 bytes. Existem muitas maneiras de catar estes 4 bytes, tem a maneira fácil e correta que o fabim publicou num outro thread, e tem a maneira complicada que nem eu entendo mais direito como funciona, que publiquei num outro thread que o Zé sabe de cor (sei lá o motivo).

se tiver whats e ficar melhor p vc.
poderiamos ate criar um grupo de discussao de eletronica e programacao.

Já temos um fórum só prá discutir isso. Se chama ASM51.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: Comprimir dados (ajuda)

Mensagempor lucasromeiro » 18 Ago 2015 22:53

xultz escreveu:Cara, se você lê o sensor e guarda o valor num int32, então já tem o valor em hexa numa variável de 4 bytes. Você só precisa enviar estes 4 bytes. Existem muitas maneiras de catar estes 4 bytes, tem a maneira fácil e correta que o fabim publicou num outro thread, e tem a maneira complicada que nem eu entendo mais direito como funciona, que publiquei num outro thread que o Zé sabe de cor (sei lá o motivo).

se tiver whats e ficar melhor p vc.
poderiamos ate criar um grupo de discussao de eletronica e programacao.

Já temos um fórum só prá discutir isso. Se chama ASM51.

Nao achei a thread de fabim.
busquei de varias formas.
tem como por o link ou me explicar?
pelo visto so falta isso.
lucasromeiro
Byte
 
Mensagens: 121
Registrado em: 22 Out 2009 20:32

Re: Comprimir dados (ajuda)

Mensagempor xultz » 19 Ago 2015 08:12

98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Anterior

Voltar para PIC

Quem está online

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

x