Página 1 de 2
Buffer da RS232.

Enviado:
19 Mai 2008 13:09
por fabio_pic
Boa tarde senhores da ASM51,
Estou precisando transmitir uma grande quantidade de dados pela RS232 do PIC para o PC (algo em torno de 7,5kBytes) de uma só vez pois é um sinal analógico digitalizado.
Por isso gostaria de saber qual é o tamanho do buffer da serial no PC.
Alguém tem idéia de quanto é?
Abraços,
Fábio.

Enviado:
19 Mai 2008 13:44
por Sergio38br
boa tarde o buffer de qualquer pic é 1 byte,vai ter de armazenar em ram e enviar 1 a 1.
Sergio

Enviado:
19 Mai 2008 13:47
por Sergio38br
ops , me desculpe, os PCs, que ainda tem serial podem armazenar no maiximo 16 bytes, teu programa residente vai ter de gerenciar o buffer da uart
Sergio

Enviado:
19 Mai 2008 15:44
por Bardelli
Olá.
Tenho uma enorme experiencia com isso. E minha experiencia diz: Tente outra solução :-)
Atualmente para transferir grandes volumes de dados, eu utilizo comunicação via USB através do PIC que tenha USB incorporado. Com uma comunicação Serial via USB vc vai conseguir facil facil, 600 Kb/sec.
abracos

Enviado:
19 Mai 2008 21:38
por vtrx
Ola,se não me engano o serial RS232 é padrão ,então voce podera enviar entre 2400 a 115000 +-.

Enviado:
20 Mai 2008 08:12
por fabim
xará.. o tamanho do buffet num interessa, eu por exemplo uso 2 pacotes para o delphi.
1 me permite até 64bytes in-out,
o outro me permite encher toda a memoria ram disponivel no pc.rsrs
aí vai do programa que voce vai fazer para pegar e ler esse buffer.
De um exemplo como se estivesse fazendo na pratica, com isso você indica também o proiblema de buffer curto. aí os Cérebros brilhantes "tudo careca por causa da eletronica" saberão como te ajudar

Enviado:
20 Mai 2008 10:09
por fabio_pic
Agradeço a ajuda de todos.
A idéia do projeto é a seguinte.
Fazer a digitalização do sinal analógico através do AD do PIC de 1,5 em 1,5 micro segundo (isso será feito 7.200 vezes) e a cada vez, a amostra será enviada para a serial. Depois o processo termina.
O problema é que na outra ponta do processo o PC não está conseguindo ler byte a byte e colocá-lo no banco de dados a tempo.
Parece que, por exemplo, quando o segundo byte chega, o primeiro ainda não foi armazenado no BD. Entendeu?
Tentei fazer alguns testes com vetores para armazenas isso tudo no PIC mas deu alguns erros. Me pareceu que os vetores do PIC têm limite de capacidade.
Fábio.

Enviado:
20 Mai 2008 10:16
por fabim
bom
o tempo minimo de conversão com AD interno do PIC"minimo que preste" 2,7uS isso ja com alguns problemitchos.
Vamos no seguinte só pra voce entender o raciocinio.
PIC18F4455 por exemplo com uSB.
64Kbps.
no seu caso serão 666666 amostras por segundo.
O que voce pode fazer é usar uma FIFO bem grandinha,
Tipo 7200 amostras com tempo de 1.5uS. carregou na FIFO, o PIC joga pro PC.
Mais aí que a porca torce o rabo, quanto tempo será entre 7200 e 7200 amostras ? e quantos bits ?
Fabim

Enviado:
20 Mai 2008 11:50
por Peters
fabio_pic escreveu:Agradeço a ajuda de todos.
O problema é que na outra ponta do processo o PC não está conseguindo ler byte a byte e colocá-lo no banco de dados a tempo.
Parece que, por exemplo, quando o segundo byte chega, o primeiro ainda não foi armazenado no BD. Entendeu?
Tentei fazer alguns testes com vetores para armazenas isso tudo no PIC mas deu alguns erros. Me pareceu que os vetores do PIC têm limite de capacidade.
Fábio.
Não entendi.
O problema está no PIC enviar, ou no PC receber e tratar a tempo? Como esta enviando os dados? byte a byte?
Me pareceu q o problema é com o envio a esse seu BD. Se for o caso, não seria melhor armazenar os dados em um array (buffer), e depois enviar um pacote maior para o BD?

Enviado:
20 Mai 2008 12:03
por ze
a idéia de bufferizar TUDO no pic primeiro é boa. Mas pra isso (é claro) ele tem que ter ram disponível. P. ex. os pic24xxx tem. Desconheço algum pic18 com + de 8K. E atenção ao tempo mínimo de conversão. Os do pic24 são menores acho. Se for probl. do lado do pc, esqueça o seu prog por enquanto e verifique com um prog terminal que mostre em hex ou decimal avaliando os dados no zóio mêmo.
Enviar pacotes (na minha opinião) parece ser + eficaz, mas tem que "embrulhar" e "amarrar" pra consistência dos dados.
Seria interessante:
-qual pic está a utilizar.
-Se programas em C.
-postar parte de seu "precioso" fonte. (asm, esqueça que existo)
Se usas o hitech-c, (e um pic com + de 8k de ram) creio que podes fazer uma matriz char dados[7200]. Se for tipo int, seu pic tem que ter 16K (é lógico!)
abrç

Enviado:
20 Mai 2008 13:41
por fabio_pic
Bem, vamos tentar esclarecer ...
1 - problema no tempo de conversão AD;
Achei o erro. O tempo entre as conversões não é de 1,5 microsegundo mas 5 milisegundos.
2 - armazenar 7k Bytes de amostra no PIC antes de enviar pela serial.
Tive problemas em armazenar tal capacidade mesmo em mais de um vetor.
Pensei em usar a memória externa 62256 pra fazer o trabalho mas não tenho experiência com esse componente.
Fábio.

Enviado:
20 Mai 2008 13:49
por leoabubauru
fabio_pic
Se você está gravando o byte no BD assim que ele chega, realmente você terá problemas, pois o processo de gravação de dados num BD é lento (se comparados aos microssegundos que estamos acostumados). Tente fazer o seguinte:
1 caso) Se houver paradas entre as 7200 aquisições:
Se entre "n" aquisições no PIC existe um tempo de espera antes de outras "n" novas aquisições, você pode enviar 1 byte a cada conversão do AD e no final delas um caracter que dirá ao PC que ele pode armazenar no BD. Enquanto isso não ocorrer, o PC deverá receber byte a byte manter isso num Array de 7200 elementos. Quando o caracter chegar ele joga todo o array no BD, pois haverá o tempo de espera do PIC e não haverá perda.
1 caso) Se NÃO houver paradas entre as 7200 aquisições:
Use um pouco de RAM para criar um buffer no PIC (256 bytes). Quando o buffer estiver cheio evie pela serial todo ele e mais o mesmo caracter que dirá ao PC que ele pode armazenar no BD. O PC recebe byte a byte e coloca no Array. Quando chegar o tal caracter ele salva no BD.
Espero que isso te ajude
Laercio

Enviado:
20 Mai 2008 17:10
por fabio_pic
Tentando responder ao Peters, Lellis, ao xará fabim, leoabubauru e demais colaboradores ....
O pic que estou utilizando é o 16F874;
Programando em C;
A idéia de fazer o buffer no PC ao invés de fazê-lo no PIC é bastante interessante... De qualquer forma, alguém já usou a memória 62256?
Abraços,
Fábio

Enviado:
20 Mai 2008 17:15
por fabim
se uma memoria SD com CK a 5mhz pela SPI.
Abra bloco de gravação em mult seção.
guarde endereço
soca dados de 8 ou sucessivos de 16 bits
fecha multi seção
Abre bloco de leitura em multi seção
com o endereço
vai lendo os N bytes
E jogando para o PC
fecha leitura em mult seção e pinba
Fabim

Enviado:
20 Mai 2008 17:27
por fabio_pic
fabim,
O seu jeito de de tratar as coisas é bem descontraido mas confesso que não entendi o que você quis dizer.
Esqueci de dizer que sou novato na área de m controladores mas a ajuda de vocês tem sido muito boa.
Será que dá pra detalhar um pouco só a parte do "se uma memoria SD com CK a 5mhz pela SPI...." até a parte "fecha leitura em mult seção e pinba"? rsrsrs
Obrigado,
Fábio.