/*****************************************************
Project : Bargraphanzeige für die HDD-Aktivität (10LEDs) 
Version : 1.0
Date    : 25.03.2011

Chip type           : ATtiny2313
Clock frequency     : 4,000000 MHz
Memory model        : Tiny
External RAM size   : 0
Data Stack size     : 32
*****************************************************/

#include <tiny2313.h>
#include <delay.h>

#define LED_10_rot_off      PORTD.0=0
#define LED_10_rot_on       PORTD.0=1
#define LED_9_gelb_off      PORTD.1=0
#define LED_9_gelb_on       PORTD.1=1
#define LED_8_gelb_off      PORTD.2=0
#define LED_8_gelb_on       PORTD.2=1
#define LED_7_gruen_off     PORTD.3=0
#define LED_7_gruen_on      PORTD.3=1
#define LED_6_gruen_off     PORTD.4=0
#define LED_6_gruen_on      PORTD.4=1
#define LED_5_gruen_off     PORTD.5=0
#define LED_5_gruen_on      PORTD.5=1
#define LED_4_gruen_off     PORTD.6=0
#define LED_4_gruen_on      PORTD.6=1
#define LED_3_gruen_off     PORTB.0=0
#define LED_3_gruen_on      PORTB.0=1
#define LED_2_gruen_off     PORTB.1=0
#define LED_2_gruen_on      PORTB.1=1
#define LED_1_gruen_off     PORTB.2=0
#define LED_1_gruen_on      PORTB.2=1
#define Signal_Out_off      PORTB.3=0
#define Signal_Out_on       PORTB.3=1
#define Signal_HDD_In       PINB.4


void main(void)
{
   
    unsigned int zaehler_signal_on=0;
    unsigned char i=0;
    
    // Crystal Oscillator division factor: 1
    #pragma optsize-
    CLKPR=0x80;
    CLKPR=0x00;
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif

    // Input/Output Ports initialization
    // Port A initialization
    // Func2=In Func1=In Func0=In 
    // State2=T State1=T State0=T 
    PORTA=0x00;
    DDRA=0x00;

    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=T State6=T State5=T State4=P State3=0 State2=0 State1=0 State0=0 
    PORTB=0x10;
    DDRB=0x0F;

    // Port D initialization
    // Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTD=0x00;
    DDRD=0x7F;

    TCCR0A=0x00;
    TCCR0B=0x00;
    TCNT0=0x00;
    OCR0A=0x00;
    OCR0B=0x00;

    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    GIMSK=0x00;
    MCUCR=0x00;

    TIMSK=0x00;
    USICR=0x00;
    ACSR=0x80;

    LED_10_rot_on;      //beim Einschalten des PC´s alle 10 LEDs Ein für 2s
    LED_9_gelb_on;
    LED_8_gelb_on;
    LED_7_gruen_on;
    LED_6_gruen_on;
    LED_5_gruen_on;
    LED_4_gruen_on;
    LED_3_gruen_on;
    LED_2_gruen_on;
    LED_1_gruen_on;
    delay_ms(2000);
    LED_10_rot_off;
    delay_ms(200);
    LED_9_gelb_off;
    delay_ms(200);
    LED_8_gelb_off;
    delay_ms(200);
    LED_7_gruen_off;
    delay_ms(200);
    LED_6_gruen_off;
    delay_ms(200);
    LED_5_gruen_off;
    delay_ms(200);
    LED_4_gruen_off;
    delay_ms(200);
    LED_3_gruen_off;
    delay_ms(200);
    LED_2_gruen_off;
    delay_ms(200);
    LED_1_gruen_off;
    
    while (1)
    {

        if(Signal_HDD_In==0)Signal_Out_on;      //Ausgabe für HDD-LED im 200ms Zeitraster
        else Signal_Out_off;
        
        zaehler_signal_on=0;
        
        for(i=0;i<200;i++)      //ca. 200ms
        {
            delay_ms(1);
            if(Signal_HDD_In==0)zaehler_signal_on++;    //zählen wie lange das HDD-Signal in 200ms Ein ist
        }
             
        LED_10_rot_off;     //alle LEDs aus
        LED_9_gelb_off;
        LED_8_gelb_off;
        LED_7_gruen_off;
        LED_6_gruen_off;
        LED_5_gruen_off;
        LED_4_gruen_off;
        LED_3_gruen_off;
        LED_2_gruen_off;
        LED_1_gruen_off;
       
        //Ausgabe der HDD Aktivität auf die LEDs in 10% Schritte alle 200ms
        
        if(zaehler_signal_on>0) LED_1_gruen_on;          //1...10% HDD aktivität
        if(zaehler_signal_on>20) LED_2_gruen_on;        //11...20% HDD aktivität      
        if(zaehler_signal_on>40) LED_3_gruen_on;        //21...30% HDD aktivität
        if(zaehler_signal_on>60) LED_4_gruen_on;        //31...40% HDD aktivität
        if(zaehler_signal_on>80) LED_5_gruen_on;        //41...50% HDD aktivität
        if(zaehler_signal_on>100) LED_6_gruen_on;       //51...60% HDD aktivität
        if(zaehler_signal_on>120) LED_7_gruen_on;       //61...70% HDD aktivität
        if(zaehler_signal_on>140) LED_8_gelb_on;        //71...80% HDD aktivität
        if(zaehler_signal_on>160) LED_9_gelb_on;        //81...90% HDD aktivität
        if(zaehler_signal_on>180) LED_10_rot_on;        //91...100% HDD aktivität              
    }
   
}