Autor Tópico: Expansão de saídas com 74HC595 ou 74HC594  (Lida 4370 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

lucasi

  • Visitante
Expansão de saídas com 74HC595 ou 74HC594
« Online: 05 de Abril de 2010, 23:30 »
Alguem já utilizou um 74HC595 ou um 74HC594 para expandir saídas de um PIC (usando C)?

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Expansão de saídas com 74HC595 ou 74HC594
« Resposta #1 Online: 06 de Abril de 2010, 08:12 »

Sim, mas não usando C.

O que quer saber exatamente ?

lucasi

  • Visitante
Re: Expansão de saídas com 74HC595 ou 74HC594
« Resposta #2 Online: 06 de Abril de 2010, 09:44 »
Na verdade estava querendo expandir mais 16 saídas para um pic 16F877A... eu sei que ele tem mais de 30 portas... hehehe mas como nunca tinha feito isso decidi fazer e encontrei alguns obstaculos por desconhecimento de como interfacear utilizando SPI.

Como no Rio tá tudo parado devido as chuvas... começei a fuçar e saiu esse código

#include <16F877A.h> // seleciona o PIC16F877A
#define EXP_OUT_ENABLE  PIN_B0 //RCK - Pino 12 do 74HC595(1) & Pino 12 do 74HC595(2)
#define EXP_OUT_CLOCK   PIN_B1 //SCK - Pino 11 do 74HC595(1) & Pino 11 do 74HC595(2)
#define EXP_OUT_DO      PIN_B2 //SER - Pino 14 do 74HC595(1)
///////////////////////////////////////////////////////////////////////////
////    O DS do 74HC595(2) é alimentado pelo Q7' do 74HC595(1)         ////
////                                                                   ////

#fuses HS,NOWDT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP
#use delay (clock=4000000)
#ZERO_RAM

Byte data1 = 0b00000011;
Byte data2 = 0b10101011;

//------  74HC595 serial chip --------------
void outSerial(int8 chip1,int8 chip2)
   {
   int8 i;
   int16 data;
   
   data = chip2;
   data = data<<8;
   data = data | chip1;
   
   // Output to serial line
   for(i=0; i<16; i++)
      {
      if(data & 0x8000)
         {output_high(EXP_OUT_DO);}
      else
         {output_low(EXP_OUT_DO);}
         
      data = data<<1;
     
      output_low(EXP_OUT_CLOCK);     //Shift data
      output_high(EXP_OUT_CLOCK);
      }

   output_low(EXP_OUT_ENABLE);         //Output on pins
   output_high(EXP_OUT_ENABLE);
   }
   
   void main()

{

   setup_adc_ports(NO_ANALOGS); // nao usaremos nenhum porta analogica
   setup_adc(ADC_OFF); // desligamos o conversor AD
   setup_psp(PSP_DISABLED); // nao utiizamos a porta PSP
   setup_spi(FALSE); // nao utilizamos a porta SPI
   setup_counters(RTCC_INTERNAL,RTCC_DIV_2); //configuracao TMR0 DEFAULT
   setup_timer_1(T1_DISABLED); // desabilitarmos o TMR1
   setup_timer_2(T2_DISABLED,0,1); // desabilitamos o TMR2
   setup_comparator(NC_NC_NC_NC); // desabilitamos os comparadores
   setup_vref(FALSE); // desabilitamos a tens?o de referencia
   
   outSerial(data1,data2);
 
}

Coloquei 2 74HC595 em cascata...  e está funcionando direitinho...

Talvez ficasse melhor se eu colocasse os dois Bytes juntos 0b0000001110101011 prá passar como parametro ao invés de passar separado.

Mas o que importa... está funcionando...

Abs
Lucasi


Maurício

  • Visitante
Re: Expansão de saídas com 74HC595 ou 74HC594
« Resposta #3 Online: 30 de Maio de 2010, 19:46 »
Apesar de atrasada a resposta, espero que possa ajudar.

SPI não vai funcionar, porque esse integrado não é SPI. Eu acho que eu até já ví um circuito usando SPI, mas, não sei onde.
Vai ser preciso fazer na mão.
A sequência de transmissão é a seguinte:

Clock em low.
Limpa o buffer serial -> Pulso negativo em SRCLR.
Habilita o buffer serial -> Nível High em SRCLR.
Transmite os dados bit-a-bit.
Pulso positivo em RCLK para transferir o dado que está no buffer serial, para as saídas do integrado.
Habilita a saída do dado com OE em low.
Pronto.

Se vc for expandir pra 16 portas, precisa ligar a saída QH do primeiro shift-register, na entrada SER do segundo shift.
Todos os outros sinais podem ser ligados em comum (SRCLK, OE, SRCLR, RCLK).

Não conheço PICs.

Abs.

PS: Achei o documento. É o link da primeira mensagem. Dá uma olhada, lá:

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=76399&start=0
« Última modificação: 30 de Maio de 2010, 20:02 por Maurício »

 

/** * */