Attiny 13, Temperaturprobleme?

Hallo zusammen

Ich habe einen Attiny13, mit welchem ich noch nie gearbeitet habe bisher. Nun laufen meine Uno's, Mega's und Mini's alle auch bei Temperaturen um die 0° bis 5°. Der Attiny13 "verliert" irgendwie seinen Speicher, oder sagen wir mal so, er macht nichts mehr was ihm aufgespielt/programmiert wurde. Sobald der Chip dann um die 9° bis 10° hat, funktioniert es plötzlich wieder ohne Probleme!?
Warum ist das so und hat das Problem schon jemand anderes feststellen können?
Wie kann man das Problem lösen, dass der Attiny13 auch wie ein Uno oder Mega bei kühleren Temperaturen funktioniert?

Grüsse

Stef

Der Attiny13 ist laut Dazenblatt für einen Temperaturbereich von min. -40 bis +85°C spezifiziert. Sicher, dass es am ATiny und nicht an anderen Bereichen der (unbekannten) Schaltung liegt?

Evtl. Kondensat… ?

An der Temperaturfestigkeit (lt. Datenblatt) wird es sicher nicht liegen.
Außer die Chips sind schlechte Nachbauten, also keine Originale.

Oft habe ich Probleme an schlechten Lötstellen gesehen, die sehr temperaturabhängig sind. Das solltest du auch überprüfen. Evtl. ein Foto deines Projektes zeigen.

Je nachdem was der Kleine macht, könnte die Oszillatordrift ein Problem sein - sofern intern getaktet.
Der interne Oszillator ist nicht so der stabilste und wird bei Temperaturänderungen sicher nicht besser.

Kondensator, auf was müsste man da schauen?

Ich habe im Prinzip nur ein Eingangssignal High oder Low an einem Pin, und sobald es für eine gewisse Zeit auf High oder Low bleibt, gibt er an einem andern Pin ein Low raus, was dann mit dem Rest der Schaltung die Stromzufuhr unterbricht. Ich kann schauen, ob ich eine Skizze des Schemas machen kann. Am Attiny13 hängt nur der Kondensator für die Stromzufuhr zum Chip. Zwei LEDs sind für den Betrieb noch dazwischengeschaltet.
Foto folgt auch mit dem Schema.

Einen externen Oszillator brauche ich ja theoretisch nicht, nur für einfache High/Low Zustände an den Pins schalten, oder?!

Wo dazwischen geschaltet ?

Am Board sind GND vom Schalter, GND vom Relais und 24V vom Relais dran.
Für die Signale zum Attiny13 sind GND, 5V und das Signalkabel für die High/Low signale dran.
Die LED und Kondensator am Attiny13 müsste ich nochmal genau schauen wie die wo dran sind. Diese fehlen noch im Schema was ich hier habe (zur Zeit in der Werkstatt).

Das Board sieht so aus:

Und wie wird der ATtiny13 versorgt ?
Doch nicht mit den 24Volt ?

Hier hab ich den Attiny13 noch skizziert:

Nein, am S Pin auf der Platine kommt das Signal High oder Low rauf, das ist im Schema vom Attiny13 das "Signal High oder Low". Am + Pin sind 5V, das ist auf dem Schema vom Attiny13 der VCC Pin und das GND beim Attiny13 ist auf dem Board mit - am Pin beschriftet.
Das "Signal Out" auf dem Schema des Attiny13 kommt dann im Schema vom oberen Post an den Eingang Signal High/Low dran mit dem Rest des Schemas

Es gibt Bildbearbeitungsprogramme, mit denen man ein Bild drehen kann, so dass sich der Betrachter nicht das Genick verrenken muss.

Gruß Tommy

Sorry, habe momentan nur mit dem Handy Zugriff und da kann ich nicht sehen wie das Bild gedreht wird, resp. es auch nicht einstellen...

Ok und wo kommen die VCC (5V) her ?
Das geht nicht daraus hervor.

Ich sehe die Übertragung des Signals über 100µF als kritisch. der Kondensator kann schon bei Temperaturänderung auch die Kapazität gewaltig ändern.

grafik

Signal auswerten mit Kondensator dazwischen ist schon ziemlich witzig. Bau hinter der Diode Spannungsteiler danach ist der LOW, HIG vom Multivibrator klar und deutlich

Die 5V für den Attiny werden mit einem DC-DC Spannungswandler von den 24V abgenommen.

Oh, das sollten 100pF sein, der Kondensator.
Gäbe es da sonst auch Temperatur unkritische Kondensatoren?

Normal ist die Max Temp angegeben aber 100pF sollte im weitem Bereich arbeiten.
Was für Spannung ist auf der Basis?
Denk dran der ATtiny muss den Kondensator umladen, nicht dass das ist Dein Problem, könnte er Sprechen hättest du gehört habe keine Lust mehr

Das weiss ich nicht mehr auswendig. Müsste ich morgen mal messen. Aber häufiger ist es der Fall, dass es "auslöst" und die 24V vom System trennt, obwohl ich kein Low sende. Dann lässt der Kondensator ja irgendwas durch?!

Nee, gib dem 10K zu GND damit er schön verliert die Spannung bei wechsel von High auf Low, wurde trotzdem hoch Ohmigen Spannungsteiler nehmen, der sollte deiner Schaltung nichts ausmachen

Ich verstehe nicht ganz wo ich diesen einsetzen soll?

Ich habe heute kurz getestet, wenn ich immer wieder mit digital write ein High schreibe, dann scheint er beim Wechsel auf Low auszuschalten. Ich weiss jetzt nicht ob ich im Code was falsch habe, aber eigentlich sollte es passen.

Wenn der Code normal durchläuft und die Bedingung if ((WdogTime - WdogTimeLast) >= WdogTimeout) nicht erfüllt wird gleich zu Beginn, sondern irgendwann nach dieser Sekunde, dann funktioniert es. Wenn aber das Inputsignal am "WdogPin" fehlt, dann setzt er komischerweise den StopPin nicht auf Low wie es eigentlich geschehen sollte.

/*Emergency Stop Board V1.0  Test code
                       V1.1  Improved code
                             Added stop function if wire is broken or not connected
                             Added temporary WatchDog signal for programming

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 Pin configuration:

 - For the ATtiny 13 or ATtiny 85:
      Watch Dog Pin      =>  Pin D0                 //Watch Dog signal receiving pin
      Emergency Stop Pin =>  Pin D2                 //Emergency Stop output pin
      Signal LED Pin     =>  Pin D1                 //LED for showing the received Watch Dog signal
      
      Watch Dog Pin for programming =>  Pin D3      //Temporary Watch Dog signal output pin during programming

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/

#define WdogPin 0                                   //Watchdog connected to pin 0, Input (active high)
#define LedPin 1                                    //LED for Watchdog connected to pin 1, Output (active low) [Optional]
#define StopPin 2                                   //StopPin connected to pin 2, Output (active low)

#define TempProgPin 3                               //Temporary Watch Dog signal output pin

#define WdogTimeout 350                             //Define timeout in milliseconds

unsigned WdogStateLast = 1;                         //last Watch Dog signal status (High or Low)
unsigned long WdogTimeLast = 0;                     //last Watch Dog receiving time

unsigned WdogState = 0;                             //actual Watch Dog signal status (High or Low)
unsigned long WdogTime = 0;                         //actual Watch Dog receiving time

byte WDsignal = 0;                                  //variable for the temporary Watch Dog signal (High = 1, Low = 0)


void setup() {

  pinMode(StopPin, OUTPUT);
  pinMode(LedPin,  OUTPUT);
  pinMode(WdogPin, INPUT_PULLUP);
  pinMode(TempProgPin, OUTPUT);

  digitalWrite(StopPin, 1);                         //High for normal process, high on startup for pulling the output pin to low for E-Stop if needed
  digitalWrite(LedPin, 1);                          //Low for receiving WatchDog signal, high on startup
}

void loop() {

  WdogState = digitalRead(WdogPin);                 //read the pin WdogPin and store it to WdogState
  WdogTime = millis();                              //store the time in ms to WdogTime
  
    
    if (WdogStateLast == 0) {                       //if WdogStateLast is low, then make...
      if (WdogState == 1) {                         //if WdogState is high, then make...
        WdogStateLast = 1;                          //set WdogStateLast to high
        WdogTimeLast = WdogTime;                    //store current time to WdogTimeLast
      }
    }
    else {                                          //else if WdodStateLast is high, then make...
      if (WdogState == 0) {                         //if WdogState is low, then make...
        WdogStateLast = 0;                          //set WdogStateLast to low
        WdogTimeLast = WdogTime;                    //store current time to WdogTimeLast
      }
    }

  if(WdogTime >= 1000){                             //if WdogTime is greater than 1000ms (for power off if wire is broken or connection lost), then make...
      
    if ((WdogTime - WdogTimeLast) >= WdogTimeout) { //if the difference between WdogTime and WdogTimeLast is greater or equal to WdogTimeout, then make...
      digitalWrite(StopPin, 0);                     //E-Stop activated
      digitalWrite(LedPin, 1);                      //LED turned off for transmitting signal
    } else {                                        //else if the WdogTimeout is not achieved, then make...
      digitalWrite(StopPin, 1);                     //E-Stop deactivated
      digitalWrite(LedPin, 0);                      //LED turned on for transmitting signal
    }

  }

  //Temporary Watch Dog signal for programming the system
  if(WDsignal == 0){                                //if WDsignal is equal to 0, then make...
    digitalWrite(TempProgPin, 0);                   //set pin TempProgPin to Low (High = 1, Low = 0)
    WDsignal = 1;                                   //set WDsignal to 1
  }
  else if(WDsignal == 1){                           //if WDsignal is equal to 1, then make...
    digitalWrite(TempProgPin, 1);                   //set pin TempProgPin to High (high = 1, low = 0)
    WDsignal = 0;                                   //set WDsignal to 0
  }
  
}

Wurde die Spannung am ATtiny gemesen am den Pin