UART por SW em "C" - Dúvida

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

UART por SW em "C" - Dúvida

Mensagempor zielpunkt » 18 Set 2007 09:38

Olá, engenheiros.

Seguinte, usart HW ocupadíssima, sobrou RCO(RX) e RC1(TX). Em 9600/8/N/1. Como é pra 485, tem ainda o pino de controle. Normal. Só que perdia dados (lixo) dum pacote recebido e aposentei o #use RS232 nativo do CCS. Reescrevi com o código bit bang do livro do Fábio (RS232.C) e punhei o pino de controle pro 485 e tá operando. Mas antes um o problema: usando as definições dos pinos, tal como feito no código original, eu não consegui manipular TX(RC1) :?: . Tive que usar output_low/high(pin_X) e, como o time dessas rotinas são críticos, precisei ajustar tbits e tals. Agora, se alguém puder ajudar o ignorante aqui e dizer o porque do problema de acessar o tal pino, ficarei feliz! :D Adiantando respostas: periféricos off, etc, etc. Falta alguma diretiva pros pinos? Ah, diz ai :( .

Abços.
"Talento é mais barato que sal. O que separa a pessoa talentosa da bem-sucedida é muito trabalho duro." [ Stephen King ]
zielpunkt
Byte
 
Mensagens: 376
Registrado em: 12 Out 2006 11:36
Localização: Sao Paulo - SP

Mensagempor zielpunkt » 18 Set 2007 14:26

Continuando, engenheiros...

O problema de receber lixo no buffer tá resolvido. O problema era no driver de teclado que ora vos escreve :oops: , mais conhecido nessas horas como cabeção!... Então, por comodidade, eu voltei a usar o #use rs232 nativo do compilador e tudo ok. Mas a dúvida continua a respeito ao uso do pino RC1 pela rotina do livro do Fábio. Alguém se habilita?

Abços.
"Talento é mais barato que sal. O que separa a pessoa talentosa da bem-sucedida é muito trabalho duro." [ Stephen King ]
zielpunkt
Byte
 
Mensagens: 376
Registrado em: 12 Out 2006 11:36
Localização: Sao Paulo - SP

Mensagempor Fábio Pereira » 19 Set 2007 14:18

Não sou engenheiro por isso não posso responder, mas vou auxiliá-lo de forma que os engenheiros do fórum possam responder: qual o problema que você está tendo ? Se fosse mais específico seria mais fácil algum engenheiro te ajudar.

T+
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor zielpunkt » 20 Set 2007 21:09

Fábio,

Chamar por "engenheiro" é uma brincadeira que eu faço sem ofensa, com todos os colegas do forum. Não é, portanto, discriminatório ou pejorativo. É só um tratamento amigo, para os que possuem e os que não possuem um CREA, mas têm o conhecimento e a inteligencia como carteirinha. Então, peço que aceitem a brincadeira quando ela aparecer por aqui. Segundo o Houaiss:

5 Derivação: por analogia.
quem quer que demonstre habilidades inerentes a essa profissão
Ex.: e. silvestre, o castor parece conhecer as leis da hidráulica
6 Derivação: sentido figurado.
criador, construtor, elaborador


Quanto ao problema que citei é que não consegui, num F867, manipular o pino RC1 utilizando a sua rotina de serial por SW. o meu código ficou assim:

Código: Selecionar todos
// Define pinos de comunicacao
#bit rx_pin = 0x07.0 // RC0 eh rx
#bit tx_pin = 0x07.1 // RC1 eh tx
#bit en_pin = 0x07.5 // RC5 eh enable pin

#bit ioo_rx = 0x87.0 //
#bit ioo_tx = 0x87.1 // set trisc para i/o // <----- parece não ter efeito??
#bit ioo_en = 0x87.5 //


void RS485E_INI(void)
{
   ioo_rx = 1; // rx eh entrada
   ioo_tx = 0; // tx eh saida
   output_high(pin_c1); // tx em idle  // <---- caso onde substituí a instrução...
   ioo_en = 0; // en eh saida
   en_pin = 0; // en em idle (RS485 em modo rx)
}


Por não ter, ainda, muita afinidade com algumas particularidades do "C" é que pediria um esclarecimento a respeito do porque de não ter conseguido usar nesse pino esse formato de instrução:


Código: Selecionar todos
   ioo_tx = 0; // tx eh saida
   tx_pin = 1; // tx em idle



Abço.
"Talento é mais barato que sal. O que separa a pessoa talentosa da bem-sucedida é muito trabalho duro." [ Stephen King ]
zielpunkt
Byte
 
Mensagens: 376
Registrado em: 12 Out 2006 11:36
Localização: Sao Paulo - SP

Mensagempor ze » 25 Set 2007 10:54

ei fábio e zielpunkt ou alguem +:
preciso implementar uma serial 232 em pic12F629 (ou qquer pic que não a tenha).
algum de voces conhecem alguma AN microchip para isso? ou tem algum fonte (c) para me passar? falaê! ajudaê!

ops! esqueci que devo ajudá-lo primeiro com seu pino RC1! peraí que vou dar uma estudada no F867............................. . . . . . . . não achei na microchip.com !! .......... que pena... não uso CCS tamém não!

mas mesmo assim se não vos importareis em colaborar........
brigado!!!!
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor zielpunkt » 25 Set 2007 17:06

Mesmo que não use CCS, no livro do Fábio tem a que eu cito na minha questão e não é difícil para vc adaptar em outro compilador. Não posso reproduzir o código aqui por razões óbvias de direitos autorais, ok. Mas procure por "serial + bit bang" na internet (google) que vai encontrar muita coisa.

Abço.
"Talento é mais barato que sal. O que separa a pessoa talentosa da bem-sucedida é muito trabalho duro." [ Stephen King ]
zielpunkt
Byte
 
Mensagens: 376
Registrado em: 12 Out 2006 11:36
Localização: Sao Paulo - SP

Mensagempor ze » 26 Set 2007 15:30

ziel... achei o txrx por sw!! foi [muito] + fácil que pensei...grato.

quanto ao seu RC1:
dê um tempo antes de ler o bit. algo como:

TRISC|=0b00000010; //ou setbit(TRISC,1) - tem ex. da macro em outro post
asm("nop");asm("nop");asm("nop");
variavel_bit=RC1;

(meu compilador admite sintaxe acima)

ou deixe TRISC.1 sempre em 1 (sempre entrada) colocando em 0 quando necessário (saída) e voltando para 1 imediatamente após.

veja se este pino não é compartilhado com outras funções e se está configurando-o com a função correta (I/O). Tive probl. semelhante com RT1122 (clone AMD).
abrç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor zielpunkt » 27 Set 2007 20:23

Então, Lellis,

Agradeço a dica, mas o problema estava em configurar, pelo TRIS, o RC1 fixo como saída, como disse. Periféricos todos off. Mas vamos aguardar uma boa explicação de uma boa alma do forum.

Abço.
"Talento é mais barato que sal. O que separa a pessoa talentosa da bem-sucedida é muito trabalho duro." [ Stephen King ]
zielpunkt
Byte
 
Mensagens: 376
Registrado em: 12 Out 2006 11:36
Localização: Sao Paulo - SP

Mensagempor Fábio Pereira » 28 Set 2007 08:32

Olhe o código ASM gerado pelo compilador e veja o que ele está fazendo no comando: ioo_tx = 0 e depois com o comando tx_pin = 1 ...

T+
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor fenix3 » 28 Set 2007 10:01

zielpunkt escreveu:É só um tratamento amigo, para os que possuem e os que não possuem um CREA, mas têm o conhecimento e a inteligencia como carteirinha.


Eu tambem nao sou engenheiro, mas nao consigo explicar isso para o CREA de jeito nenhum. eheheh
Luis Fenix
Maaaaraaaaviiilhaaaaaa! (Bem devagar para irritar a todos).
Avatar do usuário
fenix3
Byte
 
Mensagens: 317
Registrado em: 12 Out 2006 03:46
Localização: Minha sala, ora pois!

Mensagempor zielpunkt » 28 Set 2007 15:03

Fábio,
Boa dica. Sabia que voce era uma das boas almas desse forum (quanta puxaçao de saco!). Verificarei o asm e depois (semana q vem) posto aqui.

Fenix:

Código: Selecionar todos
while(!CREA )
{
 assinar_projeto = 0;           // num assina projeto
 --salario;                    // seu salario diminui
 rotate_right(&voce,0);         // e te jogam prum lado...
 rotate_left(&voce,0);          // e depois pro outro.
}

Infelizmente pro mercado é +- isso...hehe.

Abços
"Talento é mais barato que sal. O que separa a pessoa talentosa da bem-sucedida é muito trabalho duro." [ Stephen King ]
zielpunkt
Byte
 
Mensagens: 376
Registrado em: 12 Out 2006 11:36
Localização: Sao Paulo - SP


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

x