Wie gesagt, war nur ein möglicher Vorschlag. Mit Deinen 2 Schwellwerten hast Du ja auch schon 'ne Hysterese, das Gehäuse des Controllers (zugfrei und schattig verbaut) wirkt ja auch nochmal als "thermischer Tiefpaß" - da wäre eine Zusätzliche Hysterese über Mehrfachmessungen usw vielleicht nicht mehr nötig.
So wie Du das jetzt hast, weist Du den I/O-Registern (ADCSRA, DDRB usw) konstante Werte zu, also alle Bits in einem Register mit einem Schlag. Dem Kontroller ist es dabei egal, ob Du die Konstante mit 0b10001111 oder 0x8F oder 143 vorgibst, ist egal - das Studio baut die entsprechenden Bits des Bytes fest in den Opcode ein. (klar)
Über die eingebundene Prozessordefinitionsdatei kennt das Studio aber auch den Bitwert eines jeden Bitnamens aus den Registern. (Schau mal im Studio im Solution Explorer unter Dependencies, da steht (nach dem ersten Compilieren) die Definitionsdatei, mit den ganzen Definitionen der Bit- und Registernamen...)
Deswegen konntest Du vorher zB "DDRB |= (1<<PB1); " schreiben - DDRB und PB1 sind Konstanten.
mit "DDRB = (1<<PB1); " erhielte DDRB die Bitmaske "1 PB1-oft nach links geschoben" zugewiesen, also einmal, also 0b00000010.
Worauf ich hinaus will ist, daß das Studio Dir auf der Rechten Seite des "=" die Konstante auch zusammenrechnen kann, also mehrere Einsen je unterschiedliche Bitnamen weit geschoben logisch miteinander verknüpft.
Ob die Syntax bei C jetzt so stimmt, kann ich nicht sagen, aber eigentlich sollte es so sein:
"DDRB=(1<<PB1)|(1<<PB5);" weist DDRB dann 'n Byte zu, wo nur Bit1 und Bit5 gesetzt sind, also 0b00100010
noch übersichtlicher ist das dann bei der ADC-Konfiguration: statt "ADMUX = 0b10001111" schreibst Du: "ADMUX=(1<<REFS1)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0)"
Ok, länger aber übersichtlicher. Zumindest weiß man jetzt, daß es um die Voltage Reference Selection (REFS) und den Eingangsmultiplexer geht.
So wie Du das jetzt hast, weist Du den I/O-Registern (ADCSRA, DDRB usw) konstante Werte zu, also alle Bits in einem Register mit einem Schlag. Dem Kontroller ist es dabei egal, ob Du die Konstante mit 0b10001111 oder 0x8F oder 143 vorgibst, ist egal - das Studio baut die entsprechenden Bits des Bytes fest in den Opcode ein. (klar)
Über die eingebundene Prozessordefinitionsdatei kennt das Studio aber auch den Bitwert eines jeden Bitnamens aus den Registern. (Schau mal im Studio im Solution Explorer unter Dependencies, da steht (nach dem ersten Compilieren) die Definitionsdatei, mit den ganzen Definitionen der Bit- und Registernamen...)
Deswegen konntest Du vorher zB "DDRB |= (1<<PB1); " schreiben - DDRB und PB1 sind Konstanten.
mit "DDRB = (1<<PB1); " erhielte DDRB die Bitmaske "1 PB1-oft nach links geschoben" zugewiesen, also einmal, also 0b00000010.
Worauf ich hinaus will ist, daß das Studio Dir auf der Rechten Seite des "=" die Konstante auch zusammenrechnen kann, also mehrere Einsen je unterschiedliche Bitnamen weit geschoben logisch miteinander verknüpft.
Ob die Syntax bei C jetzt so stimmt, kann ich nicht sagen, aber eigentlich sollte es so sein:
"DDRB=(1<<PB1)|(1<<PB5);" weist DDRB dann 'n Byte zu, wo nur Bit1 und Bit5 gesetzt sind, also 0b00100010
noch übersichtlicher ist das dann bei der ADC-Konfiguration: statt "ADMUX = 0b10001111" schreibst Du: "ADMUX=(1<<REFS1)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0)"
Ok, länger aber übersichtlicher. Zumindest weiß man jetzt, daß es um die Voltage Reference Selection (REFS) und den Eingangsmultiplexer geht.