Ich habe eine Platine mit einem Mikrochip PIC18F97J60 darauf und jedes Mal, wenn ich ein 5-Watt-Funkgerät drücke, das mit 144 MHz neben der Platine sendet, wird der Prozessor zurückgesetzt. Der Prozessor wird zurückgesetzt, wenn er versucht, über den I2C-Bus zu kommunizieren. Der Watchdog-Timer läuft ab und wartet darauf, dass das MSSP-Interrupt-Flag (Master Synchronous Serial Port) gesetzt wird. Dies geschieht am häufigsten, wenn auf das Interrupt-Flag gewartet wird, nachdem der Master (PIC18F97J60) einen Neustart oder ein NACK gesendet hat.
Ich verwende 2-kOhm-Pull-up-Widerstände und betreibe den Bus mit ~ 96 kHz. Auf dem Oszilloskop sieht es so aus, als ob die Interferenz auf dem Bus stark genug ist, um die SCL- und SDA-Leitungen von 5 V auf 2,6 V herunterzuziehen. Was kann getan werden, um die i2c-Bussignale vor Interferenzen zu schützen, damit der Prozessor währenddessen nicht zurückgesetzt wird? Warten auf einen Interrupt vom MSSP-Modul?
Anscheinend bringt die Funkstörung die IIC-Buskommunikation durcheinander, sodass der Slave nicht denkt, dass er angesprochen wird, und es kein ACK gibt. Wie Steven betonte, ist es ein schlechtes Softwaredesign, wenn ein verpasstes ACK den Prozessor zurücksetzt. Dies muss behoben werden, aber Ihre Frage bezieht sich hauptsächlich auf das Problem der Interferenz. Sie hatten Glück, dass die Störung einen weiteren lauernden Fehler in Ihrem Code verschlimmert hat. Beheben Sie das, während es leicht reproduziert werden kann.
2-kΩ-Pullups auf den IIC-Leitungen sind so niedrig wie möglich, sodass dort nichts mehr getan werden kann. Sie sagen nicht, welche Frequenz und Leistungsstufe dieses Radio hat, das neben der Platine steht. Ein gewisses Maß an Nähe und Leistungsabgabe wird zu einem Ausfall führen. Anders ausgedrückt, es gibt nur so viele Volt pro Meter, dass Ihr Board aufnehmen kann, bevor es falsch funktioniert. Das erste, was Sie sich fragen müssen, ist, ob der Grad der Strahlung, die auf das Board trifft, angemessen ist, um sich davor zu schützen. Eine Lösung könnte lauten: "Nun, tun Sie das nicht". Platzieren Sie den Sender quer durch den Raum, schirmen Sie ihn richtig ab, bewegen Sie die Antenne usw.
Wenn Sie die Platine weniger empfindlich für diese HF machen müssen (auch hier wäre es nützlich, die Frequenz und den Leistungspegel zu kennen, mit denen Sie es zu tun haben), dann gibt es wahrscheinlich verschiedene Dinge zu beheben. Höchstwahrscheinlich ist dieses Problem auf ein schlechtes Layout, insbesondere die Erdung, und die Unachtsamkeit gegenüber hochfrequenten Schleifenströmen zurückzuführen. All die gleichen Dinge, die Sie tun, um Emissionen zu reduzieren, wirken symmetrisch, um die Anfälligkeit für empfangene Strahlung zu reduzieren. Anders ausgedrückt sagt uns die Physik, dass alles, was als Sendeantenne funktioniert, auch als Empfangsantenne funktioniert und umgekehrt.
Zeigen Sie also das Layout, insbesondere die Erdungsstrategie, Ihres Boards. Achten Sie auch genau auf alles, was von Bord geht, da es sich um Antennen handelt. Da Sie einen 18F97J60 verwenden, der über einen Ethernet-MAC/PHY verfügt, haben Sie wahrscheinlich ein Ethernet-Kabel, das von der Platine kommt. Welche HF-Reduktion ist auf der Netzseite des Transformators? Hat der Trafo netzseitig einen eingebauten Balun? Beseitigt sich das Problem, wenn Sie das Ethernet-Kabel abziehen?
2 kΩ sollten niedrig genug sein, um nicht viel Rauschen im Signal zu bekommen.
Aber wie es aussieht, liegt dein Problem woanders. Es scheint nicht, dass das Geräusch den Controller zurücksetzt. Solange der Controller ordnungsgemäß funktioniert, sollte er den Watchdog-Timer zurücksetzen, damit er niemals abläuft, um den Controller zurückzusetzen. Wenn die serielle Nachricht nicht richtig empfangen wird, sollte Ihr Protokoll dies beheben. Das Zurücksetzen ist für Notfälle, wenn die Software verrückt spielt oder eine Stromstörung die Hardware blockiert. Es ist schlecht, den Watchdog-Timeout zuzulassen, weil Sie auf eine Bestätigung oder einen Neustart der Übertragung warten.
mjh2007