Ir ao conteúdo
  • Cadastre-se

André Leal

Membro Júnior
  • Posts

    13
  • Cadastrado em

  • Última visita

posts postados por André Leal

  1. vamos lá...

    260 é 0x0104 em hex. espero que não precise explicar isso...

    eepromwrite(17,0x0104);//260 em hex

    neste caso como a rotina eepromwrite espera um dado tipo char no segundo argumento, ela vai considerar APENAS o 0x04 e nem vai dar bola pro 0x01

    Não é 4/256 e sim 260/256 vai dar 1 inteiro=0x01. MC´s normais não gostam e nem trabalham com fracionários

    eepromwrite(18,0x01);//grava o dado no endereço seguinte

    Portanto você vai ter 0x01 no end 18 e 0x04 no end 17

     

    **********  Tarefa ***********

    Tente agora entender como fazer a recomposição da variável inteira (unsigned int) a partir de dois bytes (unsigned char)

    Dica: não é 0*256. É dado*256.  dado=dado*256 é o mesmo que dado*=256 ou dado=dado<<8 ou dado<<=8 em c. São hábitos programacionais (inventei isso agora) .

     

    Se ainda não entendeu, paciência ... é meu sobrenome

     

    Em tempo... hábitos no início são teias de aranha. Com o tempo se tornam fios de arame

    Prezada Izadora e prezados Rafael e Xyco. Agradeço muito a paciência e atenção de vocês. Bati muito a cabeça e mesmo com as dicas que recebi não estava obtendo êxito. Não sei se tem alguma coisa relacionada com o simulador ou com o próprio PIC mas quando estava quase desistindo ( digo quase porque nunca desisto) resolvi inserir um delay de 2segundos e aí começou a funcionar! Talvez não seja a solução certa mas digo a vocês uma coisa, ninguém vai tirar aquele delayzinho dali nem na marra!!! Obrigado mais uma vez!

  2. vamos lá...

    260 é 0x0104 em hex. espero que não precise explicar isso...

    eepromwrite(17,0x0104);//260 em hex

    neste caso como a rotina eepromwrite espera um dado tipo char no segundo argumento, ela vai considerar APENAS o 0x04 e nem vai dar bola pro 0x01

    Não é 4/256 e sim 260/256 vai dar 1 inteiro=0x01. MC´s normais não gostam e nem trabalham com fracionários

    eepromwrite(18,0x01);//grava o dado no endereço seguinte

    Portanto você vai ter 0x01 no end 18 e 0x04 no end 17

     

    **********  Tarefa ***********

    Tente agora entender como fazer a recomposição da variável inteira (unsigned int) a partir de dois bytes (unsigned char)

    Dica: não é 0*256. É dado*256.  dado=dado*256 é o mesmo que dado*=256 ou dado=dado<<8 ou dado<<=8 em c. São hábitos programacionais (inventei isso agora) .

     

    Se ainda não entendeu, paciência ... é meu sobrenome

     

    Em tempo... hábitos no início são teias de aranha. Com o tempo se tornam fios de arame

    Obrigado Isadora P. Ferraz,

    continuarei aqui com suas explicações.

  3. é... principalmente se o mc tiver incorporado um multiplicador 8 bits no hw.

    Amigo @André Leal meu tico morreu e o teco teve um treco. Então eu tenho teco treco (aff fraquinha esta). Tentemos com comentários então. Também com a maneira do amigo @_xyko_

    void grava16(unsigned int dado,unsigned char endereco){eepromwrite(endereco,dado); //grava LSB - byte menos siginificativo. A rotina eepromwrite deve desconsiderar o MSBdado=dado/256;//move o MSB - dado mais siginificativo para a direita. Ficará na direita LSBeepromwrite(endereco+1,dado);//grava o dado no endereço seguinte}  unsigned int le16(unsigned char endereco){unsigned int dado;dado=eepromread(endereco+1);//lê 1º o MSB gravado previamentedado=dado*256;//desloca pra posição corretadado=dado+eepromread(endereco);//soma (ou concantena) com o LSBreturn dado;}

    Uma 'taquigrafia' pra ler uma variável int da eeprom seria

    unsigned int le16(unsigned char endereco){return eepromread(endereco+1)*256 + eepromread(endereco);}

    Digito online... não me importo (muito) com enganos

    chico quase nos sincronizamos...

     

    Vamos ver se entendi:

     

    Supondo que dado == 260:

     

    dado = 260

    eepromwrite(17,260);

    dado = 4/256;          // aqui dado assume valor == 0.

    eeprom_write(18,0); //grava o dado no endereço seguinte

    }

     

     

     

    dado = eeprom_read(18);                                //lê 1º o MSB gravado previamente

    dado = 0 * 256;                                                  //desloca pra posição correta

    dado = 0 + eeprom_read(17);                           //soma (ou concantena) com o LSB

    return dado;

    dado == 4

    }

     

    Desta forma não estou conseguindo obter o resultado correto!

     

    Onde meu raciocínio está errado?

  4. é... principalmente se o mc tiver incorporado um multiplicador 8 bits no hw.

    Amigo @André Leal meu tico morreu e o teco teve um treco. Então eu tenho teco treco (aff fraquinha esta). Tentemos com comentários então. Também com a maneira do amigo @_xyko_

    void grava16(unsigned int dado,unsigned char endereco){eepromwrite(endereco,dado); //grava LSB - byte menos siginificativo. A rotina eepromwrite deve desconsiderar o MSBdado=dado/256;//move o MSB - dado mais siginificativo para a direita. Ficará na direita LSBeepromwrite(endereco+1,dado);//grava o dado no endereço seguinte}  unsigned int le16(unsigned char endereco){unsigned int dado;dado=eepromread(endereco+1);//lê 1º o MSB gravado previamentedado=dado*256;//desloca pra posição corretadado=dado+eepromread(endereco);//soma (ou concantena) com o LSBreturn dado;}

    Uma 'taquigrafia' pra ler uma variável int da eeprom seria

    unsigned int le16(unsigned char endereco){return eepromread(endereco+1)*256 + eepromread(endereco);}

    Digito online... não me importo (muito) com enganos

    chico quase nos sincronizamos...

    Ok pessoal. Vou procurar um prédio para acelerar em 9,8 m/s² minha eutanásia. Caso não encontre-o voltarei aqui no fórum. E eu que me senti importante quando fiz um led piscar com um pic! Agora toma! Muito obrigado a todos!

  5. Oá  amigo. Tu está fazendo certo. Colocando a mão na massa.

     

    E não entendo bulhufas de microC.

     

    Mas digamos que tu queira armazenar um valor de uma variavel de 16 bits numa posição da EEPROM.

     

    Tu utiliza a EEPROM de endereço 0x10 para gravar a parte alta da variável e o endereço 0x11 para armazenar a parte baixa.

     

    EX: Valor: 0xABCD 

     

    0x10 = 0xAB

    0x11 = 0xCD

     

    Utiliza os operadores << e >> para isso.

     

    OBS: Tem que cuidar o limite de vezes que se grava na EEPROM (dependendo do pic, é 1 milhão de vezes)

    O ideal é tu fazer um código que leia o valor que está na EEPROM e caso seja diferente, daí sim, efetuar o armazenamento. 

     

    Enfim, qualquer coisa estamos ae

     

    boa rafa!

    void grava16(unsigned int dado,unsigned char endereco){eepromwrite(endereco,dado);dado>>=8;eepromwrite(endereco+1,dado);}  unsigned int le16(unsigned char endereco){unsigned int dado;dado=eepromread(endereco+1);dado<<=8;dado|=eepromread(endereco);return dado;}

    Sem comentários...(!)

     

     

    Oi Isadora você deu um nó no tico e no teco!

    Na primeira parte eu entendi o seguinte: você grava na eeprom o que tiver na variável dado, depois desloca 8 bits para a direita (talvez seja para limpar a memória) certo? e o que sobrar você salva na variável dado no (endereço + 1) EX: quero salvar o número 256, ele grava em endereço: "11111111" depois grava em (endereço + 1) "00000001" seria isso?

    Já na outra parte eu estou tentando entender mas antes preciso saber se meu raciocínio está correto.

    A propósito, Tico e Teco são meus dois neurônios!

     

    Obrigado,

    André Leal.

     

     

     

     

  6. Oá  amigo. Tu está fazendo certo. Colocando a mão na massa.

     

    E não entendo bulhufas de microC.

     

    Mas digamos que tu queira armazenar um valor de uma variavel de 16 bits numa posição da EEPROM.

     

    Tu utiliza a EEPROM de endereço 0x10 para gravar a parte alta da variável e o endereço 0x11 para armazenar a parte baixa.

     

    EX: Valor: 0xABCD 

     

    0x10 = 0xAB

    0x11 = 0xCD

     

    Utiliza os operadores << e >> para isso.

     

    OBS: Tem que cuidar o limite de vezes que se grava na EEPROM (dependendo do pic, é 1 milhão de vezes)

    O ideal é tu fazer um código que leia o valor que está na EEPROM e caso seja diferente, daí sim, efetuar o armazenamento. 

     

    Enfim, qualquer coisa estamos ae

     

    boa rafa!

    void grava16(unsigned int dado,unsigned char endereco){eepromwrite(endereco,dado);dado>>=8;eepromwrite(endereco+1,dado);}  unsigned int le16(unsigned char endereco){unsigned int dado;dado=eepromread(endereco+1);dado<<=8;dado|=eepromread(endereco);return dado;}

    Sem comentários...(!)

     

     

     

    Oi Rafa, já tinha visto em um post semelhante esta solução que você sugeriu. Como meu problema é justamente o conhecimento básico, terei que bater mais a cabeça! Minha principal dúvida é como fazer a união das duas variáveis alta e baixa em uma nova variável. Quanto a eeprom estou ciente desta limitação, no entanto este programa funcionará de forma semelhante ao marcador de km dos carros, ou seja, ficará sempre registrando os valores (10 em 10 horas) para que em uma falta de energia eles não se percam. Abs e obrigado!

  7. Boa noite pessoal!

    Não entendo bulufas de linguagem C, de lógica de programação e de um monte de outras coisas.

    Até o momento, o que aprendi sobre pic foi acessando os fóruns, you tube e batendo a cabeça! Sei que estou fazendo errado, que ao queimar etapas o processo de aprendizagem fica comprometido, mas, como sou teimoso!

     

    Estou desenvolvendo um pequeno dispositivo que tem a função de controlar o tempo de uso de uns equipamentos e programar as manutenções preventivas.

     

    O motor funciona 30 horas e pede manutenção;

    após a manutenção ser executada, ele grava na eeprom as horas de uso e programa a próxima parada para 300 horas depois (isso mesmo, 300 horas) e assim sucessivamente.

     

    Como tenho limite de 8 bits para um endereço da eeprom, como faço para gravar uma variável com números superiores a 255?

     

    Utilizo o MikroC e estou usando um PIC 18F4520 que tenho aqui para teste.

     

    OBS> as gravações feitas na EEprom são de 10 em 10 horas de uso.

     

     

  8. Exatamente.

    Ela fica dando o tom de discagem e quando pressiono uma tecla do telefone o tom do teclado fica sobre o tom da linha naquele instante, como se eles se misturassem. Já com a linha da telemar, quando pressiono uma tecla do telefone, o tom da linha cessa.

    Aproveito para lembrar que tanto o aparelho de telefone quanto a central estão no modo multifrequêncial.

    Agora, quando eu forcei a barra pra cima da central e configurei para discar por pulso, como eu disse anteriormente, a central liga mas depois eu não consigo interromper a ligação e aí só desligando da energia e religando depois.

    Mais uma vez obrigado por me ajudar!

    Abs,

    André

  9. Oi Ramos td bem?

    Continuo aqui na briga do pabx com o vesper.

    Quanto ao reset que você mencionou, eu já tinha feito este procedimento.

    Quanto a tensão da fonte, esta fonte não é chaveada é aquele trafo pesadinho mesmo, e a chave seletora estava para 127V de acordo com a tensão de entrada.

    Caso eu tenha que mudar os resistores, eu comprarei uma placa tronco como você sugeriu.

    Minha dúvida é a seguinte: Quais são os resistores?

    Eles ficam na placa tronco que irei instalar?

    Mais uma vez obrigado por sua ajuda!

  10. Oi Ramos td bem?

    Fiz os seguintes testes:

    A central realmente estava configurada para ligar por tom, mesmo assim resolvi mudar e coloquei para ligar por pulso, quando fiz isso olha a surpresa! Eu consegui através da rota zero efetuar uma ligação:), porém se eu quisesse interromper a ligação, nada feito! A central travava:angry:, parecia até que tinha recebido o "exu-caveira" :wacko:e só consegui exorcizá-la desligando da tomada.

    Já para receber ligações, nada feito nem em tom nem em pulso, mesmo mudando o jumper de posição! pra cima, pra baixo, sem jumper, ou seja, de jeito nenhum!

    Ontem fiz um contato com a Intelbras, e o setor técnico mencionou uma tal correte de lupi, vai saber que diacho de lupi é esse! O setor técnico me orientou a mudar dois resistores que existem no PABX, no entanto deixou claro que se eu fizer isso eu perderei a garantia do PABX. Agora eu tô lascado!

    Quanto as tensões de entrada da central, realmente a da embratel é bem mais baixa que dá telemar, será que é aí que está o problema?

    Antes de sair mudando resistores de posição, vou aguardar pra ver se aparece uma outra opinião ou sugestão para eu resolver o problema!

    Obrigado mais uma vez!

    André Leal

  11. Ramos, inicialmente agradeço por dedicar seu tempo em tentar me ajudar.

    Hj tentarei realizar os procedimentos que você sugeriu.

    Como o PABX é novo, imaginei que sua configuração principal seria multifrequencial, mas de qualquer forma não custa checar através do manual certo?

    Como consigo normalmente realizar e receber ligações com a linha telemar, imagino que a configuração esteja realmente em multifrequencial.

    Quanto aos jumpers, li o manual e irei mudar a posição para verificar se obtenho sucesso.

    em breve posto uma resposta sobre os testes,

    abs.

    André Leal

  12. O que eu tenho?

    Uma central Modulare i da Intelbras configurada com 12 ramais e 2 troncos; Uma linha da Telemar (Oi); Uma linha do antigo plano "fale a vontade todos os dias" que funciona em uma base Motorola 1900.

    O que eu desejo?

    Usar o pabx com as 2 linhas sendo que para ligações locais eu utilizo a linha Vesper e para ligações DDD bem como recebimento de chamadas locais eu utilizo a linha da Telemar (Oi).

    Qual o meu problema?

    Instalei na "linha 1" o Vesper e na "linha 2" o Telemar. Quando acesso através da rota zero a "linha 1" (Vesper), ouço o tom de discagem porém não consigo originar chamadas. Ao acionar a rota zero novamente, o PABX seleciona a "linha 2" (Telemar) e aí consigo ligar normalmente.

    Em seguida inverti as linhas e o problema persistiu.

    Ao testar o recebimento das ligações, o PABX reconhece a chamada da Oi (Telemar) mas não reconhece a chamada do Vesper.

    O que eu fiz?

    Certifiquei-me do funcionamento da linha Vesper, ligando-o diretamente ao aparelho telefônico onde posso efetuar e receber chamadas normalmente.

    Contactei o suporte técnico da Intelbras, onde recebi a informação de que poderia instalar em paralelo com a linha da Vesper, um resistor de 270K como tentativa de solucionar o problema, o que não ocorreu.

    Desde já agradeço a todos que puder me ajudar!

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!