Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "SPIbus.h"
- //Konstanten____________________________________________
- const uint8_t Letter_T[7][10] =
- {
- 0,0,0,0,1,1,0,0,0,0,
- 0,0,0,0,1,1,0,0,0,0,
- 0,0,0,0,1,1,0,0,0,0,
- 0,0,0,0,1,1,0,0,0,0,
- 0,0,0,0,1,1,0,0,0,0,
- 1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1
- };
- const uint8_t Letter_I[7][10] =
- {
- 0,0,0,0,1,1,0,0,0,0,
- 0,0,0,0,1,1,0,0,0,0,
- 0,0,0,0,1,1,0,0,0,0,
- 0,0,0,0,1,1,0,0,0,0,
- 0,0,0,0,1,1,0,0,0,0,
- 0,0,0,0,1,1,0,0,0,0,
- 0,0,0,0,1,1,0,0,0,0
- };
- const uint8_t Letter_M[7][10] =
- {
- 1,0,0,0,0,0,0,0,1,
- 1,0,0,0,0,0,0,0,1,
- 1,0,0,0,0,0,0,0,1,
- 1,0,0,0,1,0,0,0,1,
- 1,0,0,1,0,1,0,0,1,
- 1,0,1,0,0,0,1,0,1,
- 1,1,0,0,0,0,0,1,1
- };
- const uint8_t Letter_Y[7][10] =
- {
- 1,1,0,0,0,0,0,0,1,1,
- 0,1,1,0,0,0,0,1,1,0,
- 0,0,1,1,0,0,1,1,0,0,
- 0,0,0,1,1,1,1,0,0,0,
- 0,0,0,0,0,1,0,0,0,0,
- 0,0,0,0,0,1,0,0,0,0,
- 0,0,0,0,0,1,0,0,0,0
- };
- const uint8_t Letter_A[7][10] =
- {
- 1,1,1,1,1,1,1,1,1,1,
- 1,1,0,0,0,0,0,0,1,1,
- 1,1,0,0,0,0,0,0,1,1,
- 1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,
- 1,1,0,0,0,0,0,0,1,1,
- 1,1,0,0,0,0,0,0,1,1
- };
- const uint8_t Letter_N[7][10] =
- {
- 1,1,0,0,0,0,0,0,1,1,
- 1,1,0,0,0,0,0,1,1,1,
- 1,1,0,0,0,0,1,0,1,1,
- 1,1,0,0,0,1,0,0,1,1,
- 1,1,0,0,1,0,0,0,1,1,
- 1,1,0,1,0,0,0,0,1,1,
- 1,1,1,0,0,0,0,0,1,1
- };
- const uint8_t Letter_R[7][8] =
- {
- 0,0,1,1,1,1,0,0,
- 0,0,1,0,0,1,0,0,
- 0,0,1,0,0,1,0,0,
- 0,0,1,1,1,1,0,0,
- 0,0,0,0,1,1,0,0,
- 0,0,0,1,0,1,0,0,
- 0,0,1,0,0,1,0,0
- };
- const uint8_t Letter_P[7][4] =
- {
- 1,1,1,1,
- 1,0,0,1,
- 1,0,0,1,
- 1,1,1,1,
- 0,0,0,1,
- 0,0,0,1,
- 0,0,0,1
- };
- const uint8_t Stamm[12][6] =
- {
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0
- };
- const uint8_t Fluegel[12][6] =
- {
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0
- };
- const uint8_t Zahl_9[6][6] =
- {
- 1,1,1,1,1,1,
- 1,0,0,0,0,0,
- 1,0,0,0,0,0,
- 1,1,1,1,1,1,
- 1,0,0,0,0,1,
- 1,1,1,1,1,1
- };
- const uint8_t Zahl_8[9][6] =
- {
- 1,1,1,1,1,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,1,1,1,1,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,1,1,1,1,1
- };
- const uint8_t Zahl_7[9][6] =
- {
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 1,1,1,1,1,1
- };
- const uint8_t Zahl_6[9][6] =
- {
- 1,1,1,1,1,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,1,1,1,1,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 1,1,1,1,1,1
- };
- const uint8_t Zahl_5[9][6] =
- {
- 1,1,1,1,1,1,
- 1,0,0,0,0,0,
- 1,0,0,0,0,0,
- 1,0,0,0,0,0,
- 1,1,1,1,1,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 1,1,1,1,1,1
- };
- const uint8_t Zahl_4[9][6] =
- {
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 1,1,1,1,1,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1
- };
- const uint8_t Zahl_3[9][6] =
- {
- 1,1,1,1,1,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 1,1,1,1,1,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 0,0,0,0,0,1,
- 1,1,1,1,1,1
- };
- const uint8_t Zahl_2[9][6] =
- {
- 1,1,1,1,1,1,
- 1,0,0,0,0,0,
- 0,1,0,0,0,0,
- 0,0,1,0,0,0,
- 0,0,0,1,0,0,
- 0,0,0,0,1,0,
- 0,0,0,0,1,0,
- 1,0,0,0,0,1,
- 0,1,1,1,1,0
- };
- const uint8_t Zahl_1[9][6] =
- {
- 0,0,0,1,0,0,
- 0,0,0,1,0,0,
- 0,0,0,1,0,0,
- 0,0,0,1,0,0,
- 0,0,0,1,0,0,
- 0,0,0,1,0,0,
- 1,0,0,1,0,0,
- 0,1,0,1,0,0,
- 0,0,1,1,0,0
- };
- const uint8_t Zahl_0[9][6] =
- {
- 1,1,1,1,1,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,0,0,0,0,1,
- 1,1,1,1,1,1
- };
- //____________________________________________________________________
- //Variablen
- volatile uint16_t Timer = 0; //volatile: es wird immer auf dem tatsächlichen in der Hardware vorhandenen Wert zugegriffen
- uint8_t tempArray[9][6];
- unsigned int SegmentCounter = 0;
- float CurrentRPM = 0.0;
- uint8_t flag;
- uint8_t status;
- unsigned int Timer_01 = 0;
- unsigned int Zeit_Sek = 0;
- unsigned int Zeit_Min = 0;
- unsigned int Tausender = 0;
- unsigned int Hunderter = 0;
- unsigned int Zehner = 0;
- unsigned int Einer = 0;
- //Deklaration der Methoden
- void Main_Setup();
- void TimerSetup();
- void Umdrehung_Minute();
- void InitHallInterrupt();
- void setup_umdrehungBin();
- void setup_Namen();
- void Init_Segmente();
- void Show_Namen();
- void Show_Windmuehle();
- void setup_Windmuehle();
- void Show_Sanduhr();
- void Setup_DecOutput();
- void getStellen();
- void Show_UmdrehungDez();
- void setNumberToArray(int, int, int);
- void getZahl(int);
- int main( void )
- {
- flag = 5; //Flag wird einem Wert zugewiesen, welcher Redundant ist
- Main_Setup();
- TimerSetup();
- while (1)
- {
- if (!(PINC & (1 << PC0))) //Gehe in Abfrage, wenn der DIP-Switch auf '1' steht
- {
- flag = 0; //Setzte Flag = 0 --> Funktionsaufruf im Hall-Sensor-Interrupt
- }
- else if (!(PINC & (1 << PC1))) //siehe case 0
- {
- flag = 1;
- Show_Namen();
- }
- else if(!(PINC & (1 << PC2))) //siehe case 0
- {
- flag = 2;
- Show_Windmuehle();
- }
- else if(!(PINC & (1 << PC3))) //siehe case 0
- {
- flag = 3;
- Show_Sanduhr();
- }
- else //wenn kein DIP-Switch geschaltet ist
- {
- flag = 4;
- getStellen();
- }
- }
- }
- void Main_Setup()
- {
- SPI_MasterInit();
- initarray();
- InitHallInterrupt();
- //set LED0
- DDRB |= (1 << PB0); //LED0 wird angeschaltet
- //Initiallisiere den DIP-Switch
- DDRC = 0xF0;
- PORTC |= (1 << PC0 | (1 << PC1) | (1 << PC2) | (1 << PC3));
- //Initiallisiere den Hall-Sensor
- DDRD = 0x00;
- PORTD |= (1 << PD2);
- }
- void TimerSetup()
- {
- // Initialize TIMER1
- TCCR1A = 0x00;
- TCCR1B = 0x04;
- OCR1AH = 0x38;
- OCR1AL = 0x3F;
- TIMSK1 = 0x02;
- TCNT1 = 0x00;
- TCCR0B = 0x04;
- OCR1A = 0x00;
- OCR1B = 0x00;
- //init TIMER0
- TCCR0A = 0x02;
- TCCR0B = 0x04; //Prescalerwert = 256
- TIMSK0 = 0x02;
- //init TIMER2
- TCCR2A = 0x00;
- TCCR2B = 0x07; //prescaler = 1024
- TIMSK2 = 0x01;
- //Globale Freigabe, alle Interupts sollen beginnen
- sei();
- }
- void Umdrehung_Minute()
- {
- Timer = TCNT1; //globaler Variable "Timer" den Wert aus dem Zählerregister TCNT1 zuweisen
- CurrentRPM = (60.0 * 14745600.0)/(256 * (float)Timer); //Umdrehung pro Minute berechnen und den Wert der Variable "CurrentRPM" zuweisen
- unsigned int TempInt; //Deklaration Placeholder Variable (Temporärer Integer)
- int zaehler; //lokale Variable "zaehler" deklariert
- for (int i = 0; i < 12; i++)
- {
- zaehler = (unsigned int)CurrentRPM & (1 << i); //Wert der Variable currentrpm wird zu einem unsigned Integer umgewandelt (gecasted), beim Umwandeln kommt es zu Rundungsfehlern, da der Datentyp Integer nur ganze Zahlen speichern kann.
- //eine '1' wird bei jeden Durchlauf um x Stellen nach links verschoben und mit dem Wert der Variable UND-Verknüpft
- TempInt = zaehler & (1 << i); //siehe eine Zeile höher
- TempInt >>= i; //'1' o. '0' wird an den Anfang der Bitfolge verschoben und so der Binärwert ermittelt
- setLed(i, 0x02*TempInt, 0,0,100); //Binärwert den LED's zuweisen
- }
- sendframe(); //Binärwert an LEDs übergeben und anzeigen
- TCNT1 = 0x00; //Timer wieder auf 0 Stellen
- }
- void Init_Segmente()
- {
- Timer = TCNT1 / 100; //Rot. Display wird in 100 Segmente eingeteilt
- OCR0A = Timer; //Timer Wert wird als Compare Wert festgelegt
- TCNT1 = 0x00; //Timer 1 und Timer 2 werden auf 0 zurückgesetzt
- TCNT2 = 0x00;
- SegmentCounter = 0; //SegmentCounter wird auf 0 gesetzt
- }
- void Show_Namen()
- {
- if (SegmentCounter < 11) for (int i = 5; i < 12; i++) setLed(i, 0x0F*Letter_T[i - 5][SegmentCounter] , 0, 0, 200); //In den Segmenten unter 47 werden die Buchstaben "T", "I" und "M" angezeigt
- else if (SegmentCounter < 25 && SegmentCounter > 14) for (int i = 5; i < 12; i++) setLed(i, 0x0F*Letter_I[i - 5][SegmentCounter - 15], 0, 0, 200);
- else if (SegmentCounter < 47 && SegmentCounter > 29) for (int i = 5; i < 12; i++) setLed(i, 0x0F*Letter_M[i - 5][SegmentCounter - 30], 0, 0, 200);
- else if (SegmentCounter < 61 && SegmentCounter > 50) for (int i = 5; i < 12; i++) setLed(i, 0x0F*Letter_N[i - 5][SegmentCounter - 51], 0, 200, 0); //In den Segmenten von 51 - 88 werden die Buchstaben "Y", "A" und "N" angezeigt
- else if (SegmentCounter < 75 && SegmentCounter > 64) for (int i = 5; i < 12; i++) setLed(i, 0x0F*Letter_A[i - 5][SegmentCounter - 65], 0, 200, 0);
- else if (SegmentCounter < 89 && SegmentCounter > 78) for (int i = 5; i < 12; i++) setLed(i, 0x0F*Letter_Y[i - 5][SegmentCounter - 79], 0, 200, 0);
- else initarray(); //in den nicht definierten Segmenten, werden die LEDs nicht angezeigt
- sendframe(); //Sende Muster an LEDs
- }
- void Show_Windmuehle()
- {
- //alle 33 Segmente wird ein Flügel angezeigt
- switch (Zeit_Sek) //Jede Sekunde wird ein Case ausgeführt
- {
- case 0: //Sekunde 0
- if (SegmentCounter < 6) for (int i = 0; i < 12; i++) setLed(i, 0x0F*Stamm[i][SegmentCounter], 0, 0, 255); //Zeige den Stamm der Windmühle in rot
- else if (SegmentCounter < 23 && SegmentCounter > 16) for (int i = 1; i < 12; i++) setLed(i, 0x0F*Fluegel[i][SegmentCounter - 17], 255, 0, 0); //Flügel 1 wird in der Farbe Blau angezeigt
- else if (SegmentCounter < 56 && SegmentCounter > 49) for (int i = 1; i < 12; i++) setLed(i, 0x0F*Fluegel[i][SegmentCounter - 50], 255, 0, 0); //Flügel 2
- else if (SegmentCounter < 89 && SegmentCounter > 82) for (int i = 1; i < 12; i++) setLed(i, 0x0F*Fluegel[i][SegmentCounter - 83], 255, 0, 0); //Flügel 3
- else initarray();
- break;
- //Flügel werden um 11 Segmente verschoben, Stamm bleibt an fixer Position
- case 1:
- if (SegmentCounter < 6) for (int i = 0; i < 12; i++) setLed(i, 0x0F*Stamm[i][SegmentCounter], 0, 0, 255);
- else if (SegmentCounter < 34 && SegmentCounter > 27) for (int i = 1; i < 12; i++) setLed(i, 0x0F*Fluegel[i][SegmentCounter - 28], 255, 0, 0);
- else if (SegmentCounter < 67 && SegmentCounter > 60) for (int i = 1; i < 12; i++) setLed(i, 0x0F*Fluegel[i][SegmentCounter - 61], 255, 0, 0);
- else if (SegmentCounter < 100 && SegmentCounter > 93) for (int i = 1; i < 12; i++) setLed(i, 0x0F*Fluegel[i][SegmentCounter - 94], 255, 0, 0);
- else initarray();
- break;
- //siehe über case 1
- case 2:
- if (SegmentCounter < 6) for (int i = 0; i < 12; i++) setLed(i, 0x0F*Stamm[i][SegmentCounter], 0, 0, 255);
- else if (SegmentCounter < 45 && SegmentCounter > 38) for (int i = 1; i < 12; i++) setLed(i, 0x0F*Fluegel[i][SegmentCounter - 39], 255, 0, 0);
- else if (SegmentCounter < 78 && SegmentCounter > 71) for (int i = 1; i < 12; i++) setLed(i, 0x0F*Fluegel[i][SegmentCounter - 70], 255, 0, 0);
- else if (SegmentCounter < 11 && SegmentCounter > 3) for (int i = 1; i < 12; i++) setLed(i, 0x0F*Fluegel[i][SegmentCounter - 4], 255, 0, 0);
- else initarray();
- break;
- case 3:
- Zeit_Sek = 0; //Switch-Case beginnt wieder bei case 0
- break;
- default:
- initarray();
- break;
- }
- sendframe();
- }
- void Show_Sanduhr()
- {
- int j = SegmentCounter;
- //RGB(244, 235, 66) == "gelb"
- switch (Zeit_Sek)
- {
- case 0:
- if (j == 0) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255); //Zeichne den äußeren Rand des oberen Teils der Sanduhr
- else if (j > 0 && j < 15) for (int i = 1; i < 12; i++) if(i < 7) setLed(i, 0x0F, 244, 235, 66); else setLed(i, 0x00, 0, 0 ,0); //oberer Teil ist mit Sand gefüllt
- else if (j == 15) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255); //Zeichne den äußeren Rand des oberen Teils der Sanduhr
- else if (j == 50) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255); //Zeichne den äußeren Rand des unteren Teils der Sanduhr
- else if (j == 58) for (int i = 1; i < 12; i++) setLed(i, 0x0F, 244, 235, 66); //Sandstrahl läuft von oben nach unten
- else if (j == 65) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255); //Zeichne den äußeren Rand des unteren Teils der Sanduhr
- else initarray();
- break;
- case 1: //Nächstes Bild nach einer Sekunde
- if (j == 0) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255); //Rand 1 oben
- else if (j > 0 && j < 15) for (int i = 1; i < 12; i++) if(i < 5) setLed(i, 0x0F, 244, 235, 66); else setLed(i, 0x00, 0, 0, 0); //Sand oben sinkt um 2 Segmente
- else if (j == 15) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255); //Rand 2 oben
- else if (j == 50) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255); //Rand 1 unten
- else if (j == 58) for (int i = 1; i < 12; i++) setLed(i, 0x0F, 244, 235, 66); //Sandstrahl läuft von oben nach unten
- else if (j > 50 && j < 65) for (int i = 0; i < 12; i++) if (i < 10) setLed(i, 0x00, 0, 0, 0); else setLed(i, 0x0F, 244, 235, 66); //Sand steigt im unteren Teil um 2 Segmente
- else if (j == 65) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255); //Rand 2 unten
- else initarray();
- break;
- case 2: //nach 2 Sekunden
- if (j == 0) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j > 0 && j < 15) for (int i = 1; i < 12; i++) if (i < 3) setLed(i, 0x0F, 244, 235, 66); else setLed(i, 0x00,0,0,0); //Sand oben noch 2 Segmente hoch
- else if (j == 15) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j == 50) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j == 58) for (int i = 1; i < 12; i++) setLed(i, 0x0F, 244, 235, 66); //Sandstrahl läuft weiter runter
- else if (j > 50 && j < 65) for (int i = 0; i < 12; i++) if (i < 8) setLed(i, 0x00, 0, 0, 0); else setLed(i, 0x0F, 244, 235, 66); //Sand unten 4 Segmente hoch
- else if (j == 65) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else initarray();
- break;
- case 3: case 4: //Nach 3 und 4 Sekunden --> Sanduhr läuft voll
- if (j == 0) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j == 15) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j == 50) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j == 58 && Zeit_Sek == 3) for (int i = 1; i < 12; i++) setLed(i, 0x0F, 244, 235, 66); //Restsand läuft nach unten, bei Sekunde 4 ist der gesamte Sand unten angekommen
- else if (j > 50 && j < 65) for (int i = 0; i < 12; i++) if (i < 6) setLed(i, 0x00, 0, 0, 0); else setLed(i, 0x0F, 244, 235, 66);
- else if (j == 65) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else initarray();
- break;
- case 5: //Sanduhr dreht sich um 15 Segmente im Uhrzeigersinn
- if (j == 15) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j == 30) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j == 65) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j > 65 && j < 75) for (int i = 0; i < 12; i++) if (i < 4) setLed(i, 0x00, 0, 0, 0); else setLed(i, 0x0F, 244, 235, 66); //Sand fällt während der Drehung
- else if (j == 80) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else initarray();
- break;
- case 6: //Sanduhr dreht sich um weitere 15 Segmente
- if (j == 30) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j == 45) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j == 80) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else if (j > 80 && j < 88) for (int i = 1; i < 12; i++) setLed(i, 0x0F, 244, 235, 66); //Sand fällt mit der Drehung
- else if (j == 95) for (int i = 0; i < 12; i++) setLed(i, 0x0F, 0, 0, 255);
- else initarray();
- break;
- case 7:
- initarray();
- Zeit_Sek = 0; //Sanduhr beginnt wieder von vorne
- break;
- default:
- initarray();
- break;
- }
- sendframe();
- }
- void InitHallInterrupt()
- {
- // Initialize ISR-INT0 (external interrupt - hall sensor)
- EICRA = 0x02; //Internal Interrupt Control Register A --> Bei fallender Flanke von INT0 wird eine interrupt-Anfrage ausgelöst
- EIMSK = 0x01; //Externes Interrupt-Masken-Register
- sei();
- }
- ISR(INT0_vect) //Hall_Sensor_Interrupt
- {
- if (flag == 0)
- {
- Umdrehung_Minute();
- }
- else if (flag > 0)
- {
- Init_Segmente();
- }
- }
- ISR(TIMER0_COMPA_vect) //Timer0_CompareWert_Interrupt
- {
- SegmentCounter++;
- }
- ISR(TIMER2_OVF_vect) // Timer2_Overflow_Interrupt
- {
- if(flag == 2 || flag == 3)
- {
- Timer_01++;
- if(Timer_01 > 56)
- {
- Zeit_Sek += 1;
- Timer_01 = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement