Entrar    Registrar

como expandir portas do 8051 usando shift registers?

Software e Hardware para linha x51

Moderadores: guest2003, 51, Renie, gpenga

  • Autor
    Mensagem

como expandir portas do 8051 usando shift registers?

Mensagempor renan-papaco » 20 Abr 2014 15:21

nesse caso queria aprender expandir portas de entrada com CD4021, ou o 74LS165...tendo mais 8 bits de entrada...como proceder passo a passo?(obs: usando qualquer port do mcu.
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como expandir portas do 8051 usando shift registers?

Mensagempor ze2 » 20 Abr 2014 21:42

só fiz com saída com hc164 mas o princípio me parece ser relativamente fácil e o mesmo pro 165: um pino de entrada de dado e um pino de clock. o pino sh/ld não consigo pensar no uso dele agora.
Código: Selecionar todos
#define clk P10
#define dado P11
//#define shld P12
P1=0xff;//me lembro vagamente que tive que fazer isso pra não fica preso em 0. (no século passado)
unsigned char lebyte(void)
{
unsigned char i,d=0;
for (i=0;i<8;i++) //8 bits
   {
   clk=1;//aciona o shift reg
   asm"nop";//asm"nop";//talvez + de 1. Um tempinho em 1
   clk=0;

   d|=P11; //captura o bit

   d<<=1;//próximo - desloca em sw
   }
return d;
}

Digitei online. Me autopermito-me a mim mesmo próprio o benefício de qualquer engano
abç
Ah sim... de nada
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37

Re: como expandir portas do 8051 usando shift registers?

Mensagempor renan-papaco » 21 Abr 2014 08:53

vlw pela ajuda...mas tira aí umas duvidas...
pelo que eu vi a variavel "d" é que armazena os valores .
a variavel "i" conta até 8 permitindo q D só guarde 8 bits num é? e o q significa esse asm"nop" seria para impedir qualquer operação do MPU para sincronizar a entrada de dados com o clock?(se não sincronizar, bagunça a p%#$ toda

e no caso, o switch case mesmo serviria para eu poder ler o que estaria nesta variavel né?
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como expandir portas do 8051 usando shift registers?

Mensagempor tcpipchip » 21 Abr 2014 10:28



Se quiseres tambem mando o fonte....mas fiz em ASSEMBLY....
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 5764
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: como expandir portas do 8051 usando shift registers?

Mensagempor renan-papaco » 21 Abr 2014 10:37

tcpipchip escreveu:https://dl.dropboxusercontent.com/u/83554849/BALAS_MENU.pdf

Se quiseres tambem mando o fonte....mas fiz em ASSEMBLY....

valeu aí...só preciso aprender uma maneira de sincronizar o clock do shift register com a entrada serial para ler os dados corretamente... alguem tem uma ideia de como faço isso?
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como expandir portas do 8051 usando shift registers?

Mensagempor tcpipchip » 21 Abr 2014 11:39

tem o pino para resetar o SHIFTER

Código: Selecionar todos
Rem ***********************************************************************
Rem * Esta rotina le os 4021, RETORNA EM dado_sensor e dado_selecao
Rem * Parametros: nenhum
Rem * Retorna: dado_sensor, dado_selecao
Rem ***********************************************************************
Sub Rec_4021_sensor_selecao_produto()
   Set Stb_4021_sensor_selecao_produto
   nop
   nop
   nop
   nop
   nop
   Reset Stb_4021_sensor_selecao_produto
   nop
   nop
   nop
   nop
   nop
   nop
   For Loop_o = 1 To 8
      MOV A , {Dado_SELECAO}
      MoV C , Sda_4021_sensor_selecao_produto
      RLC A
      MOV {dado_SELECAO} , A
      Reset Scl_4021
      NOP
      nop
      nop
      nop
      nop
      nop
      Set Scl_4021
      NOP
      nop
      nop
      nop
      nop
      nop
   Next

   For Loop_o = 1 To 8
      MOV A , {Dado_SENSOR}
      MoV C , Sda_4021_sensor_selecao_produto
      RLC A
      MOV {Dado_SENSOR} , A
      Reset Scl_4021
      nop
      nop
      nop
      nop
      nop
      nop
      Set Scl_4021
      NOP
      nop
      nop
      nop
      nop
      nop
   Next
   Waitms 100
End Sub
------------------------------------------
http://www.youtube.com/tcpipchip
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 5764
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Re: como expandir portas do 8051 usando shift registers?

Mensagempor Aquino » 21 Abr 2014 14:17

Defina o que seria sincronizar.
A principio, é bem simples ler esse cara, simplificando é assim:
1) PS é um load para cada um dos FFs internos, então você deve comutá-lo antes do ciclo de leitura
2) A saída Q8 é onde você irá ler os bits enfileirados, iniciando pela entrada P8 que já é disponibilizada logo após o clock no pino PS
3) Depois disso, a cada borda de clock, os bits vão sendo deslocados de Q0 para Q8 e você vai lendo eles, por essa razão a maioria dos códigos que leem esse tipo de chip tem um loop,

Então, agora se você não quer fazer com loop, não precisa, mas é uma solução que fica a teu critério.
Eu te aconselho a dar uma olhada em um livro de lógica sobre o funcionamento de registradores de deslocamento, estudar um pouco sobre algoritmos aí certas coisas irão fazer sentido pra ti.
Não me entenda mal, é só uma dica para teres sucesso no que está pretendendo construir por aí.
"...People who are really serious about software should make their own hardware..." Alan Kay
Avatar do usuário
Aquino
Dword
 
Mensagens: 1821
Registrado em: 12 Out 2006 22:24

Re: como expandir portas do 8051 usando shift registers?

Mensagempor renan-papaco » 21 Abr 2014 19:00

eu andei estudando o CD4021... ele tem um latch dentro dele na qual eu devo ativar em 1 para ler o dip SW que incorporei nele, usando resistores de 1K para forçar nivel 0 nas suas entradas... eu percebo q a cada ciclo de leitura esse latch deve ir em 1, sempre quando o software solicitar !!! agora entendi! só preciso q me digam agora qual rotina em C para sincronizar o clock de o shift junto com o pino DATA, pois se não houver sincronia a leitura dará errado.
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como expandir portas do 8051 usando shift registers?

Mensagempor Aquino » 21 Abr 2014 19:27

A sincronia é simplesmente ler o dado na borda do clock
algo como

Código: Selecionar todos
unsigned char dado=0;
(for i=0;i<8;i++){
dado |= DIN?1:0;
dado<<=1;
CLK = 1;
CLK = 0;
}


Os nops entre as atribuições ao CLK são - digamos a grosso modo - para baixar a frequência do clock e também aumentar a largura do "pulso". Aí, depende do clock do teu sistema e tudo mais, mas tu pode inserir NOPs entre os clocks a vontade.
"...People who are really serious about software should make their own hardware..." Alan Kay
Avatar do usuário
Aquino
Dword
 
Mensagens: 1821
Registrado em: 12 Out 2006 22:24

Re: como expandir portas do 8051 usando shift registers?

Mensagempor ze2 » 22 Abr 2014 09:12

"pelo que eu vi a variavel "d" é que armazena os valores"
= correto. mas note que ela é de uso interno da função que retorna o valor dela. Mas nada impede que voce a coloque por fora (e antes) da função pra ela ser global. aí sim a
"variavel "d" é que armazena os valores"

"a variavel "i" conta até 8 permitindo q D só guarde 8 bits num é?"
= é

"o q significa esse asm"nop"
= nop é é um microdelay dependente da freq do clock do mc. aliás, a única coisa útil do asm. o mc fica um ciclo de máquina sem fazer nada. nop=no operation. algo como sem função. no nosso caso, cada nop deixaria p.ex. 1uS em alto. seria + pra compatibilizar com dados do datashit do hw

"e no caso, o switch case mesmo serviria para eu poder ler o que estaria nesta variavel né?"
= maiomeno. switch case é pra voce comparar o valor da variável . p.ex.
Código: Selecionar todos
switch (lebyte()) //a função pode ser considerada uma variável global
{
case 1: faca_isso();break;
case 2: faca_aquilo();break;
case xxx: fap_fap();break; //break mesmo
}


saiba mais sobre expandir coisas seriais dando uma olhada em "protocolo spi". depois dê mais uma (se conseguir) em "i2c io expander"

abç
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37

Re: como expandir portas do 8051 usando shift registers?

Mensagempor renan-papaco » 22 Abr 2014 22:44

SPI e I2c podem ser boas pedidas, mas o kit q comprei não ensina a usar esses recursos...até perguntei aqui quem programa 8051 e usa outros recursos... se podia me dizer onde consigo um compilador freeware para usar tais recursos...
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como expandir portas do 8051 usando shift registers?

Mensagempor ze2 » 23 Abr 2014 08:18

tais recursos independem do compilador. vc pode usá-los até mesmo com o sdcc. basta uma lida no protocolo e já era. o princípio é simples. seria algo como (a grosso modo) colocar bolinhas de gude pretas e brancas dentro de um tubo de ensaio lateralmente dando um tapinha nelas. Bolinha=bitdado, tapinha=clock
Não, não dei nenhum tapinha. Neste forum prefiro ... 51
abç
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37

Re: como expandir portas do 8051 usando shift registers?

Mensagempor renan-papaco » 23 Abr 2014 17:56

ze escreveu:tais recursos independem do compilador. vc pode usá-los até mesmo com o sdcc. basta uma lida no protocolo e já era. o princípio é simples. seria algo como (a grosso modo) colocar bolinhas de gude pretas e brancas dentro de um tubo de ensaio lateralmente dando um tapinha nelas. Bolinha=bitdado, tapinha=clock
Não, não dei nenhum tapinha. Neste forum prefiro ... 51
abç


usar esse recurso SPI no SDCC que tenho? nem rola... o compilador dará erro...já q é uma versão capada fornecida do site onde comprei o kit isso a uns 3 anos e tbm to meio afastado da programação por causa do trabalho... oq eu devo fazer é trocar de compilador...o problema é ter q reaprender a programar quase tudo do zero...pois estou acostumado a usar o compilador e a IDE q tenho.
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: como expandir portas do 8051 usando shift registers?

Mensagempor andre_teprom » 23 Abr 2014 18:12

renan-papaco escreveu:usar esse recurso SPI no SDCC que tenho? nem rola... o compilador dará erro...


Não é bem assim: O acesso á dispositivos SPI nos compiladores pode ser feito atrávez de API´s presentes em bibliotecas pré-compiladas ou atravéz de drivers que voce mesmo pode adicionar manualmente ao seu projeto. No caso acima, pode procurar por implementações prontas na Web pela palavra-chave "SPI.C", "SDCC" , "8051" que encontra algumas opções para dispositivos diversos.

No caso, você não terá de se preocupar com nem uma linha do código que importar, mas apenas com o que entra ou sai da funçao.
Por exemplo, numa função que tivesse o seguinte formato: int ReadSPI ( int address ) você leria o valor diretamente no retorno da função, sem se ater ao que o autor escreveu dentro dela.

renan-papaco escreveu:...o problema é ter q reaprender a programar quase tudo do zero...pois estou acostumado a usar o compilador e a IDE q tenho.


Também tenho de discordar disso, pois a linguagem é C standard, e o que muda é apenas a sintaxe de alguns comandos.
Sempre que troquei de compilador, tive de lidar com centenas de erros de compilação, mas pra nossa sorte, são todos encadeados; ou seja, conforme elimina um problema, dezenas de outros desaparecem por tabela, e em poucas horas ( ou menos ) já está com o novo programa rodando.



+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_teprom
Dword
 
Mensagens: 5266
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: como expandir portas do 8051 usando shift registers?

Mensagempor renan-papaco » 23 Abr 2014 22:12

eh mas comigo não é tão simples assim... pois justamente estou usando um compilador com headers pré compiladas... é ai que ferra td... a melhor coisa a fazer mesmo é parar de usa-lo ou usa-lo pra determinadas funções e usar um mais fodão pra funções mais gerais.(i/o mapeada é q é F***..)
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Próximo

Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes