Die Geschichte, wie der Perfektionismus-Controller mich zurückgesetzt hat

Bild

- . , . ? -, , -, , -, . : . , , , . , , , ( , ).

. , , . - , . , « », - …

. .Beim Bau eines wunderbaren Geräts bin ich auf einen Fehler gestoßen. Wenn die aktuelle Temperatur angezeigt wurde, wurde der Controller regelmäßig neu gestartet. Das heißt, manchmal funktionierte es stundenlang normal und manchmal wurde es alle paar Sekunden zurückgesetzt. Da dies begann, nachdem die Sensorabfragefunktion ds18b20 in die Firmware eingeführt wurde, habe ich mich natürlich für eine Fehlersuche an sie gewandt. Und nichts gefunden. Der Stapel ist nicht kaputt gegangen, die Funktion hat nichts in ihre Speicherbereiche geschrieben. Im Allgemeinen hat es funktioniert, wie es sein sollte. Darüber hinaus wurde durch Deaktivieren dieser Funktion der Fehler behoben, der eindeutig (wie mir in diesem Moment schien) den Helden des Anlasses anzeigte. Ich dachte, dass alles für das Synchronisationssystem verantwortlich ist.

(attiny2313a) , , , , . . 1 . . ds18b20, , 500 (reset presence).

Bild

? , - presence. . . 1 « » 1. , , « ».

Wo kann es einen Fehler geben? Ja überall. Aber ich persönlich dachte, dass das Problem an der Schnittstelle von Interrupts liegen könnte. Das heißt, wenn während der Ausführung eines Interrupts ein anderer hereinkommt. Die Bereinigung des Codes zur Lösung dieses Problems wurde fortgesetzt, bis ich feststellte, dass meine Aktionen dazu führten, dass das Problem auch dann auftrat, wenn der Sensor nicht angeschlossen war. Nachdem ich die Sensorabfragefunktion deaktiviert hatte, war ich überzeugt, dass das Zurücksetzen des Controllers jetzt nicht mehr von seinem Betrieb abhängt. Und dann traf mich eine brillante Vermutung. Müssen die Spannung messen! Das Multimeter meldete fröhlich, dass an der Steuerung 4,2 Volt anliegen. „Nun, natürlich, BOD, dachte ich. Und ich habe eine externe Stromversorgung an die Platine angeschlossen (vorher war ich mit USB-Stromversorgung zufrieden). Das Multimeter grunzte eher, das sind 4,98 Volt auf der Platine. Mit einem Gefühl des Sieges drehte ich mich auf dem Brett um, um das Unglaubliche zu sehen. Ein Fehler war vorhanden!Und es wurde noch kräftiger. Jetzt wurde der Controller alle paar Sekunden und manchmal in Sekundenbruchteilen zurückgesetzt. Die Suche wurde mit aller Macht fortgesetzt und führte zu einer Funktion, die Informationen auf dem Bildschirm anzeigt.

Wie Sie wahrscheinlich vermutet haben, war alles in Ordnung mit ihr, zumal sie nach dem Schreiben richtig getestet wurde. Und trotzdem sagte alles, dass mein schwer fassbarer Fehler darin liegt. Es stellte sich heraus, dass der Fehler nur bei der Anzeige der aktuellen Temperaturseite auftritt. Seiten, auf denen Leistung, Start und Zeitpunkt des Fehlers angezeigt werden, wurden nicht verursacht. Da ich nichts fand, was dieses Verhalten verursachen könnte, beschloss ich, auf Essen aufzubauen. Die Tatsache, dass unter normaler Spannung ein Fehler häufiger auftrat. Durch Verringern der Spannung stellte ich fest, dass bei 3,8 Volt am Controller letzterer stabil funktioniert. Die Situation riss alle Muster auf. Und dann erinnerte ich mich an Ohms Gesetz. Der Strom ist proportional zur Spannung. Ist immer? Nein. Bei LEDs funktioniert dieses Gesetz nicht. Es funktioniert genauer, aber mit seinen Geräten.

Die Proportionalität des Stroms durch die Diode ist nicht die gleiche wie bei einem herkömmlichen Widerstand, da Halbleiterbauelemente meist nichtlinear sind. Denken Sie an mindestens einen Thyristor oder eine Zenerdiode (Zenerdiode). Hier ist ein Vergleich der Strom-Spannungs-Kennlinie der LED aus dem Datenblatt (schwarze Linie) und der Strom-Spannungs-Kennlinie der ohmschen Last (rote Linie).

Bild

Es ist zu sehen, dass Ohmsches Gesetz für die Widerstandsbelastung Gott und Meister ist. Wenn die Spannung um 10% zunimmt, steigt der Strom um die gleichen 10%. Aber niemand ist ein Dekret zur LED. Wenn Sie die Spannung an der LED nur um 10% (von 2 Volt auf 2,2 Volt) erhöhen, springt ihr Strom um 100%, dh zweimal! In meinem Fall war die Hauptsache jedoch, dass ein Spannungsanstieg auch den Stromverbrauch zum Zeitpunkt des Einschaltens der Diode erhöhte. Und ich hatte 32 Dioden! Vier Sieben-Segment-Anzeigen mit jeweils acht LEDs (sieben Segmente und ein Punkt). Sie sind nicht durch Multiplexing mit mir verbunden, sondern durch Schieberegister, weil:

1. Die Schlussfolgerungen des attiny2313-Controllers fehlten schmerzlich.
2. Ich ärgere mich über ihr Flackern, wenn sie durch Multiplexing verbunden sind (Perfektionismus mehrmals).
3. Multiplexing verbraucht viele Controller-Ressourcen für die Ausgabe (Perfektionismus Nummer zwei).

Außerdem habe ich Schieberegister mit der Funktion verbunden, den Bildschirm für die Dauer der Anzeigeaktualisierung auszuschalten (Perfektionismus Nummer drei). Warum habe ich diese Funktion aufgegeben - ich weiß es nicht. Immerhin kann die von mir gewählte Logik bis zu einer Frequenz von 100 MHz arbeiten. Dementsprechend können die Daten mit der vollen Frequenz des Controllers, die ich habe, von 10 MHz hineingeschoben werden. Nun, wer hat Zeit, die Bewegung von Bits in den Bits des Indikators bei einer solchen Frequenz zu bemerken?

Mach weiter. Die Leistung meiner Schaltung wird vom L7805-Regler bereitgestellt. Hier ist der Anschlussplan.

Bild

Der Regler liefert problemlos einen Strom von 1A. Am Ausgang des Reglers befindet sich ein 0,1-Mikrofarad-Kondensator, der theoretisch Stromschwankungen glätten sollte. Seine Ladung bei 5 Volt beträgt 0,5 Mikrocoulomb. Bei 3,8 Volt beträgt die Ladung jeweils 0,38 Mikrocoulomb. Bei 3,8 Volt verbrauchen die LEDs ungefähr 288 mA und bei 5 Volt ungefähr 416 mA. Wenn die Spannung von 3,8 Volt auf 5 Volt erhöht wird, erhöht sich dementsprechend die vom Kondensator gespeicherte Ladung um 24%, aber gleichzeitig steigt der Stromverbrauch um mehr als 30 Prozent. Die Berechnungen sind natürlich beispielhaft, zeigen jedoch, dass der Spannungsabfall in einer solchen Schaltung umso größer ist, je größer die Versorgungsspannung ist. Bei 3,8 Volt war die Absenkung für die Steuerung nicht kritisch. Bei 5 Volt nahm der Drawdown jedoch zu und begann, den Controller zurückzusetzen. Und der Regler wurde genau auf der Temperaturanzeigeseite zurückgesetzt, weilWas genau auf dieser Seite waren alle Anzeigeindikatoren beteiligt.

Die Lösung war einfach. Im Code mussten Sie nur die Zeilen zum Ein- und Ausschalten der Anzeigen sbi displayPort, offDispWire und cbi displayPort, offDispWire auskommentieren.

                ldi XL, videoMem
		cbi displayPort, shiftWire
		cbi displayPort, storageWire
		;sbi displayPort, offDispWire
		ZpushToDisplay:
		ldi temp2, 8
		ld temp, X+
		ZnextbitToDisplay:
		cbi displayPort, dataWire
		sbrc temp, 7
		sbi displayPort, dataWire
		sbi displayPort, shiftWire
		cbi displayPort, shiftWire
		lsl temp
		dec temp2
		cpi temp2, 0
		brne ZnextbitToDisplay

		cpi XL, videoMem+sizeVideoMem
		brne ZpushToDisplay

		sbi displayPort, storageWire
   		cbi displayPort, storageWire
		;cbi displayPort, offDispWire

. .

.. . 0,5 , 70 . , 104 , , , . , . . , . , !

Source: https://habr.com/ru/post/de386199/


All Articles