RuiViana

SN74165.ino

Aug 18th, 2020
2,095
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. // Port manipulation
  3.  
  4. //  C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard
  5.  
  6. //  PORTB – The Port B Data Register
  7. //  DDRB  – The Port B Data Direction Register
  8. //  PINB  – The Port B Input Pins Address
  9.  
  10. //  PORTC – The Port C Data Register
  11. //  DDRC  – The Port C Data Direction Register
  12. //  PINC  – The Port C Input Pins Address
  13.  
  14. //  PORTD – The Port D Data Register
  15. //  DDRD  – The Port D Data Direction Register
  16. //  PIND  – The Port D Input Pins Address
  17.  
  18. //  Ex:
  19. //  PDx   bit do PORTD
  20. //  PBx   bit do PORTB
  21.  
  22. //    7    6    5    4    3    2    1    0
  23. //  PD7  PD6  PD5  PD4  PD3  PD2  PD1  PD0  <<< Port de 0 a 7  0 e 1 sao usados pela Serial
  24.  
  25. //   13  12  11  10   9   8
  26. //  PB5 PB4 PB3 PB2 PB1 PB0                 <<< Port de 8 a 13
  27.  
  28. //   A7  A6  A5  A4  A3  A2  A1  A0
  29. //  PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0         <<< Port de A0 a A7
  30.  
  31. //  (port) |= (1 << (bit));    // Set um bit apenas
  32. //  (port) &= ~(1 << (bit));   // Reset um bit apenas
  33. //  (reg)  |=  value;          // Set vários bits de uma vez
  34.  
  35. // Serial imprime bits 76543210
  36. //  Ligar
  37. //  Arduino Port  11 10  9  8  7  6  5  4
  38. // SN74165 Pin    11 12 13 14  3  4  5  6
  39. //        bits     1  0  1  0  0  1  0  1  = 0xA5
  40. // Ligar 12 arduino  em 2  SN74165  Clk
  41. // Ligar 3 arduino   em 9  SN74165  QH
  42. // Ligar GND arduino em 10 SN74165  Ser
  43. // Ligar 13 arduino  em 15 SN74165  Clk  INH
  44. // Ligar 2 arduino   em 1  SN74165  SH/LD
  45. //-------------------------------------------------------------------------
  46. void setup()
  47. {
  48.   Serial.begin(115200);
  49.  
  50.   // Carrega estes valores nos registradores
  51.   DDRD  |= 0xF4;                  //  Port7 ao port0  OUTPUT 7 a 4 e 2 como saida
  52.   DDRB  |= 0x3F;                  //  Port13 ao port8 OUTPUT 13 a 8 como saida
  53.  
  54.   DDRD &= ~(1 << PD3);            //  Port3 Como entrada
  55.   PORTD |= (1 << PD3);            //  Port3 INPUT PULLUP
  56. }
  57. //-------------------------------------------------------------------------
  58. void loop()
  59. {
  60.   // Prepara para carregar e serializar
  61.   PORTB |= (1 << PB5);              // set port  13 HIGH
  62.   delay(1);
  63.   PORTD |= (1 << PD2);              // set port  2  HIGH
  64.   delay(1);
  65.  
  66.   // Carrega A5 na paralela  SN74165
  67.   PORTD |= 0x50;                    //  Saida 0101xxxx ports 7,6,5,e 4
  68.   PORTB |= 0x0A;                    //  Saida 1010 ports 11,10,9,e 8
  69.  
  70.   PORTD &= ~(1 << PD2);             // Reset port  2  LOW
  71.   delay(4);
  72.   PORTD |= (1 << PD2);              // set port  2    HIGH
  73.   delay(100);
  74.  
  75.   //Libera para serializar
  76.   PORTB &= ~(1 << PB5);             // Reset port  13  LOW
  77.   delay(1);
  78.  
  79.   // Serializa o byte
  80.   for (int i = 0; i < 8; i++)       // Serilaiza 8 bits
  81.   {
  82.     // Envia um pulso de clock
  83.     PORTB |= (1 << PB4);            // set port 12
  84.     delay(4);
  85.     PORTB &= ~(1 << PB4);           // Reset port 12
  86.     delay(4);
  87.  
  88.     // Le e imprime a saida do SN74165
  89.     byte  entrada = PIND & 0b00001000;
  90.     Serial.println(entrada, BIN);
  91.  
  92.     delay(100);
  93.   }
  94.   Serial.println(" ");
  95.   delay(500);
  96.  
  97. }
RAW Paste Data