Porterweiterung mit 74HC165

von Max5V
Erweitert den Sparrow/ATtiny13a pro Ic um jeweils 8 Eingänge.
Jeder weitere Ic wird wie IC2 im Schaltplan angeschlossen, wobei der SER (Pin10) des vorherigen IC'S an den nächsten QH (Pin9) angeschlossen wird. Bei dem letzten IC wird SER (Pin10) an GND gelegt. An die Eingänge A-H kommt jeweils ein Pullup\Pulldown.
In dem Codebeispiel wurde lediglich ein 74HC165 verwendet, Beschaltung wie IC1, SER (Pin10) auf GND, A-H 10k Widerstände an GND. A-H Taster an V+.
Sparrow/ATtiny13a Porterweiterung mit 74HC165
Code:
Die Anzahl der verwendeten IC's ist in der_74HC165.h unter #define anzahl_74HC165 n anzupassen. Ebenso muß die Pinbelegung (PL, CLK, DIN) angepasst werden. Wenn PB0 des Sparrow's verwendet werden soll, muß an diesem CLK anliegen da die Programmierung sonst nicht funktioniert. Die Eingangszustände stehen nach Aufruf von read_All_74HC165() in HC165_Data[] bereit.


/*
 * Sparrow_74HC165.c
 
 Schieberegister 74HC165
 
  Pinbelegung Sparrow : 
 
  // Erster 165    Pin 10 Serial Input  >   GND
 #define CLK 1  // Pin 2 CLK            >   PB1 6
 #define PL  3  // Pin 1 PL             >   PB3 2
 #define DIN 4  // Pin 9 QH             >   PB4 3
                // Pin 15 CLK Inhibit   >   GND
 //Kaskade      // Pin 9 QH             >   Pin 10 Serial Input
 
 An den Eingängen werden 10k Pulldown Widerstände, 
 sowie Taster nach V+ geschaltet.
 */ 

#ifndef F_CPU
#define F_CPU 1200000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
#include "_74HC165.h"

int main(void)
{
    
    DDRB = ( 1 << PB1);
    PORTB &=~ ( 1 << PB1);
    
    init_74HC165();
    
    int8_t tasterNR = 0;
    while(1)
    {
        // Wenn der Taster ( tasterNR) betätigt wird blinkt Led1 schnell.
        // Einzelne Pinabfrage
        if (read_Bit_74HC165(tasterNR) == 1 )
        {
        PORTB |= ( 1 << PB1); 
        _delay_ms(50);
        PORTB &=~ ( 1 << PB1);
        _delay_ms(50);
        PORTB |= ( 1 << PB1);
        _delay_ms(50);
        PORTB &=~ ( 1 << PB1);
        }
        
        // Wenn Taster 0 und Taster 7 betätigt wird , leuchtet LED1 auf, 
        // und die Zählervariable für die Einzelabfrage wird erhöht.
        // Alle Pins auslesen
        read_All_74HC165();
        // LED ein wenn Pin0 und Pin4 High sind
        if ((HC165_Data[0] == 1) & (HC165_Data[7] == 1) )
        {
            tasterNR++;
            if (tasterNR == 8) tasterNR = 0;
            PORTB |= ( 1 << PB1);
            _delay_ms(200);
            PORTB &=~ ( 1 << PB1);
        } 
        else PORTB &=~ ( 1 << PB1);
        
        _delay_ms(500); 
    }
}
Links und Referenzen: