/* Titel: S7-1200_1215C_AO-Simulation Autor: Niklas Menke - www.niklas-menke.de Erstelldatum: 10.04.2019 Version: 1.1.0 Aktualisierungsdatum: 13.10.2020 */ #define F_CPU 8000000 // Takt: 8Mhz // --- Bibliotheken START --- #include // Definition der IO-Pins des Mikrocontrollers #include // Zeitverzoegerungen // --- Bibliotheken ENDE --- // --- Definitionen START --- // Segmente der 7-Segment-Anzeige static uint8_t segments_A[10] = {0x7A, 0x40, 0x2A, 0x4A, 0x50, 0x5A, 0x7A, 0x48, 0x7A, 0x5A}; // Speichert die Pins von PORTA, welche für die Zahlen 0-9 auf High gesetzt werden müssen static uint8_t segments_C[10] = {0x10, 0x10, 0x30, 0x30, 0x30, 0x20, 0x20, 0x10, 0x30, 0x30}; // Wie oben für PORTC static uint8_t digits_B[6] = {0x04, 0, 0x08, 0, 0, 0x02}; // Speichert den Pin von PORTB, welcher für die entsprechende Stelle einer Ziffer auf High gesetzt werden muss static uint8_t digits_C[6] = {0, 0x04, 0, 0x02, 0x01, 0}; // Wie oben für PORTC #define DP_A 2 // Pin von PORTA des Dezimalpunkts // --- Definitionen ENDE --- // --- analog_input START --- // Lese die analogen Werte von der SPS ein int analog_input(const uint8_t pin) { ADMUX = pin ? 0x44 : 0x45; // Dem ADC den geforderten Analogeingang zuweisen (pin = 0 --> AI0 mit der Adresse 0x45; pin = 1 --> AI1 mit der Adresse 0x44) ADCSRA |= (1< 1) display = 1; // Schleife für jede Ziffer ausfuehren for (uint8_t dg = 0; dg < 6; dg+=2) { PORTB = 0; // Port B zurücksetzen // Setze notwendige Pins auf High, um die letzte Ziffer aus value anzuzeigen PORTA = segments_A[value%10]; PORTC = segments_C[value%10]; value /= 10; // Letzte Ziffer entfernen // Pin der entsprechenden Stelle der Ziffer einschalten PORTB = digits_B[dg+display]; PORTC |= digits_C[dg+display]; // Wenn die zweite Ziffer angezeigt wird, dann Dezimalpunkt setzen if(dg == 2) PORTA |= (1< 50) { laup = 0; AI0 = analog_input(0); AI1 = analog_input(1); } } } // --- Hauptfunktion ENDE ---