Buffer da RS232.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Buffer da RS232.

Mensagempor fabio_pic » 19 Mai 2008 13:09

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.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor Sergio38br » 19 Mai 2008 13:44

boa tarde o buffer de qualquer pic é 1 byte,vai ter de armazenar em ram e enviar 1 a 1.

Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Sergio38br » 19 Mai 2008 13:47

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
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Bardelli » 19 Mai 2008 15:44

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
Bardelli
Byte
 
Mensagens: 126
Registrado em: 20 Out 2006 12:42

Mensagempor vtrx » 19 Mai 2008 21:38

Ola,se não me engano o serial RS232 é padrão ,então voce podera enviar entre 2400 a 115000 +-.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2240
Registrado em: 20 Abr 2008 21:01

Mensagempor fabim » 20 Mai 2008 08:12

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
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor fabio_pic » 20 Mai 2008 10:09

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.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor fabim » 20 Mai 2008 10:16

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
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Peters » 20 Mai 2008 11:50

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?
Avatar do usuário
Peters
Byte
 
Mensagens: 123
Registrado em: 12 Out 2006 11:42
Localização: Canoinhas, SC

Mensagempor ze » 20 Mai 2008 12:03

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ç
Editado pela última vez por ze em 20 Mai 2008 14:08, em um total de 1 vez.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor fabio_pic » 20 Mai 2008 13:41

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.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor leoabubauru » 20 Mai 2008 13:49

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
Tento, tento e tento...
Me arrebento!
Também bato!
Ô negocim bunitim essa tal eletrônica de barco!
leoabubauru
Byte
 
Mensagens: 227
Registrado em: 21 Nov 2006 19:08
Localização: São Paulo

Mensagempor fabio_pic » 20 Mai 2008 17:10

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
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor fabim » 20 Mai 2008 17:15

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
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor fabio_pic » 20 Mai 2008 17:27

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.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Próximo

Voltar para PIC

Quem está online

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

x