SSP-basierte 1-Wire-Implementierungen

    Wie man aus Stein Dampf macht, weiß unser Arzt Gaspar

    Bei der Auswahl eines MK muss häufig darauf geachtet werden, dass in seiner Zusammensetzung ein bestimmter Satz von Peripheriegeräten für eine bestimmte Aufgabe vorhanden ist. In der Zwischenzeit können eine Reihe von Standardbussen auf der Basis anderer Schnittstellen implementiert werden, die im bereits verwendeten MK verfügbar sind. In diesem Beitrag werde ich zeigen, wie die Hardware-1-Wire-Schnittstelle verwendet wird, die auf der vorhandenen SSP-Schnittstelle basiert, die im 1986VIE1T MK nicht vorhanden ist. Diese Erfahrung kann auf andere MKs anderer Hersteller derselben Architektur übertragen werden.

    Zunächst eine kurze Beschreibung des verwendeten Mikrocontrollers. MK 1986BE1T von Milander ist ein sehr gutes Gerät, dessen Vorteile sich nicht darauf beschränken, dass es sich um ein Haushaltsprodukt handelt (obwohl dieser Parameter für den Autor ausschlaggebend war). In der Tat ist ein MC mit einem Cortex-M1-Kern mit einer Taktfrequenz von bis zu 140 MHz ein seltener Marktteilnehmer. Angesichts der Vielzahl verschiedener Schnittstellen, eines erweiterten Temperaturbereichs und der Verfügbarkeit einer Version mit VP wird dieser MK zu einem nahezu einzigartigen Angebot. Es ist jedoch eine Reihe von Eigenschaften zu beachten, die die Attraktivität dieses MK für die breite Verwendung verringern, nämlich: hoher Preis,

    Hier sind die Hauptmerkmale dieses MK:
    CORTEX-M1-Kern (mit leichten Einschränkungen);

    Taktfrequenz - bis zu 144 MHz (bei Frequenzen über 25 MHz treten Verzögerungen beim Lesen des Programmspeichers auf, wodurch die tatsächliche Geschwindigkeit auf das Äquivalent von 100 MHz reduziert wird);

    Programmspeicher - 128 Kb, Datenspeicher - 48 Kb;

    Beide Speichertypen können problemlos über den integrierten 32-Bit-Controller des externen Systembusses (der eine erhebliche Anzahl externer Pins erfordert) erweitert werden.

    entwickeltes Taktsystem mit zwei internen Oszillatoren (nicht zu genau), Anschlussmöglichkeit für externe Quarzresonatoren und eingebaute PLL;

    nichtflüchtiger Speicher (12 * 4 Bytes) und eine Echtzeituhr (mit externer Batterie);

    8 * 12-Bit-ADC, 2 * 12-Bit-DAC, 8 Timer mit PWM-Modus;

    32x Kanal-RAP;
    und eine Vielzahl von Peripheriegeräten - 2 * CAN, GOST 18977, 2 * GOST R-52070, Ethernet 10/100 (mit eingebautem PHY!), USB-Host / Gerät, 2 * UART (mit eingebautem IRDA), 3 * SSP;

    bis zu 96 vom Benutzer konfigurierbare Beine;

    die Fähigkeit, unter üblichen Programmierumgebungen (der Autor bevorzugt IAR) über SWD und JTAG zu programmieren und zu debuggen.
    Im Allgemeinen ist der Kristall recht anständig. Weitere Informationen finden Sie auf der Website des Herstellers. Unter den Mängeln der Ausrüstung würde der Autor die unentwickelte Unterbrechungsvorrichtung für externe Ereignisse bemerken (externe Unterbrechungen können nur zu einer kleinen Anzahl vordefinierter Schlussfolgerungen gelangen), was die Fähigkeiten des Entwicklers einschränkt.

    Ein weiterer „Held“ dieses Artikels ist die 1-Wire-Schnittstelle. Die Schnittstelle ist nicht standardisiert, es ist die Eigenschaft von Dallas Semiconductor, es ist weithin bekannt, es wird zur Interaktion mit langsamen Geräten verwendet, unter denen i-Button-Identifikationstasten und verschiedene Temperatursensoren besonders bekannt sind, die Bustopologie ist ein Stern mit individueller Adressierung, die Wechselrate beträgt bis zu 15 Kbps. Anzahl der Drähte - 2, eine detailliertere Spezifikation finden Sie auf der Website des Unternehmens. Viele Mikrocontroller haben eine Hardware-Implementierung dieser Schnittstelle, die betreffende MK gilt jedoch nicht für diese. Wir werden daher die Möglichkeit in Betracht ziehen, die Schnittstelle mit Standard-Peripheriegeräten MK 986BE zu implementieren.

    Zunächst benötigen wir eine Implementierung der Schicht 1 des OSI-Modells - die physikalische Schnittstelle. Aus dieser Sicht ist die Schnittstelle völlig unkompliziert - es werden ein Erdungskabel und ein Kabel benötigt, über die eine wechselseitige Interaktion der Geräte durchgeführt und optional die Energie an das Endgerät übertragen wird. Zur Realisierung der Datenleitung werden ein MK-Ausgang mit offenem Kollektor und ein Pull-Up-Widerstand mit einem Nennwert von 5 Kom benötigt. Alle Ausgänge des verwendeten MK sind konfigurierbar und können mit eingebauten Pull-Up- und Down-Widerständen ausgestattet werden (weitere Informationen finden Sie in der Beschreibung des MK). Die Werte der eingebauten Widerstände weichen von den erforderlichen Werten ab (Gerüchten zufolge liegen sie bei etwa 10 Kom - Gerüchten zufolge, da in der Dokumentation KEINE Daten enthalten sind). Für den Fall einer Informationsquelle ist es jedoch möglich, eingebaute Widerstände zu verwenden. Bei Bedarf ist es einfach, einen externen Widerstand an die entsprechende Stromversorgung anzuschließen. Unter den akzeptablen Konfigurationen der MK-Klemmen gibt es auch einen Open-Drain-Ausgangsmodus, der die Schnittstellenanforderungen erfüllt. Somit wurde die grundsätzliche Unmöglichkeit der physikalischen Implementierung der Schnittstelle nicht gefunden.

    Im Zusammenspiel des Masters (und wir setzen es um) mit dem Slave wird der aktive Nullpegel verwendet, der in Form von Impulsen unterschiedlicher Dauer geliefert wird. Es werden 3 Hauptpulsdauern verwendet, nämlich:

    ein Rücksetzimpuls mit einer Dauer von mindestens 480 μs, ein Sendeimpuls einer Einheit mit einer Dauer von 1 bis 15 μs (derselbe Impuls wird zum Synchronisieren des Lesens verwendet), ein Nullsendeimpuls mit einer Dauer von 15 bis 60 μs. Das Schutzintervall zwischen den Impulsen muss mindestens 1 μs betragen, die Impulsdauer mit Schutzintervall muss zwischen 60 und 120 μs liegen. Hierbei ist zu beachten, dass die Begrenzung der Bitintervalle von oben nicht so offensichtlich ist und nicht von der Logik der Geräte vorgegeben wird, wenn die Anforderungen an die Mindestdauer unter dem Gesichtspunkt des Ignorierens von Interferenzen klar sind. Trotzdem sind die Einschränkungen eindeutig angegeben und müssen entsprechend beachtet werden. Wenn der Slave mit dem Master interagiert, werden zwei Arten von Impulsen verwendet, nämlich: einen Anwesenheitsimpuls in Form von Null als Reaktion auf einen Rücksetzimpuls mit einer Verzögerung gegenüber dessen Beendigung von 15 bis 60 us und einer Dauer von 60 bis 240 us und einen Null-Sendeimpuls als Reaktion auf einen Leseimpuls mit einer Verzögerung gegenüber dem Beginn des letzten Impulses von nicht mehr als 1 us und einer Dauer von 15 bis 60 Mikrosekunden (in der Dokumentation für die Schnittstelle ist die Anforderung für eine Dauer von GENAU 15 Mikrosekunden mit einer anschließenden Verzögerung für das Entfernen eines Impulses von 0 bis 45 Mikrosekunden festgelegt - es ist irgendwie komisch geschrieben). Die allgemeine Schlussfolgerung aus dem Obigen ist, dass für die Implementierung der 1-Draht-Schnittstelle Zeitintervalle mit einer Genauigkeit von ungefähr 10 μs mit Einschränkungen von oben und unten eingehalten werden müssen. wird als Antwort auf einen Leseimpuls mit einer Verzögerung gegenüber dem Beginn der letzten nicht mehr als 1 Mikrosekunde und einer Dauer von 15 bis 60 Mikrosekunden ausgegeben (in der Dokumentation für die Schnittstelle wird die Anforderung auf GENAU 15 Mikrosekunden mit einer anschließenden Verzögerung zum Entfernen des Impulses von 0 auf 45 Mikrosekunden festgelegt - es ist irgendwie komisch geschrieben ) Die allgemeine Schlussfolgerung aus dem Obigen ist, dass für die Implementierung der 1-Draht-Schnittstelle Zeitintervalle mit einer Genauigkeit von ungefähr 10 μs mit Einschränkungen von oben und unten eingehalten werden müssen. wird als Antwort auf einen Leseimpuls mit einer Verzögerung gegenüber dem Beginn der letzten nicht mehr als 1 Mikrosekunde und einer Dauer von 15 bis 60 Mikrosekunden ausgegeben (in der Dokumentation für die Schnittstelle wird die Anforderung auf GENAU 15 Mikrosekunden mit einer anschließenden Verzögerung zum Entfernen des Impulses von 0 auf 45 Mikrosekunden festgelegt - es ist irgendwie komisch geschrieben ) Die allgemeine Schlussfolgerung aus dem Obigen ist, dass für die Implementierung der 1-Draht-Schnittstelle Zeitintervalle mit einer Genauigkeit von ungefähr 10 μs mit Einschränkungen von oben und unten eingehalten werden müssen.

    Eine naheliegende Implementierung dieses Protokolls kann auf der direkten Steuerung des Ausgangsports basieren, der im Open-Source-Modus konfiguriert und über einen Pull-up-Widerstand verbunden ist. Beispielsweise kann die Implementierung eines Rücksetzimpulses mit dem Vorhandensein eines Anwesenheitsimpulses durch den folgenden Pseudocode dargestellt werden:
    	выдать на выход активный уровень (установить 0),
    	выполнить задержку 500 мксек,
    	снять активный уровень (установить 1),
    	на протяжении 15 мксек :
    если есть 0 – завершение - ошибка протокола (неисправность),
    	на протяжении 45 мксек:
    если есть 0 – перейти к ИМП:: 
    завершение - ошибка протокола (отсутствие активных устройств),
    ИМП:: на протяжении 60 мксек:
    если есть 1- завершение - ошибка протокола (неисправность устройства),
    на протяжении 180 мксек:
    если есть 1- перейти к НОРМ::
    завершение - ошибка протокола (неисправность устройства),
    НОРМ:: завершение - устройство обнаружено.
    

    Tatsächlich sollte es auch bei diesem Verfahren schwieriger sein, den Einfluss von Impulsstörungen auszuschließen, doch für die Zwecke dieses Artikels sind einige Vereinfachungen zulässig.

    Ähnliche Prozeduren können für die verbleibenden Impulse implementiert werden. Betrachten Sie nun die Nachteile dieser Option: Die

    fehlende Software-Implementierung der Verzögerungen - die Abhängigkeit des erhaltenen Zeitintervalls von der Taktfrequenz des MK und der Ausführungszeit der einzelnen Befehle, und die Bedingungen für Verzögerungen beim Lesen des Programmspeichers werden nahezu unbestimmt.
    und selbst wenn wir den ersten nachteil durch feinabstimmung überwunden haben, dann können unter den bedingungen der zusammenarbeit mit anderen modulen im rahmen von rtos oder bei vorhandenen unterbrechungen (und das wird fast immer so sein, wir schreiben kein sphärisches programm im vakuum) die erhaltenen zeitintervalle viel länger sein (aber nicht kürzer als erwartet.

    Da die Schnittstelle sehr zeitabhängig ist und die erforderliche Genauigkeit erheblich ist - 10 Mikrosekunden sind selbst bei schnellen MKs nicht so viel. Mit hoher Wahrscheinlichkeit werden wir chaotische Fehler erhalten, wenn wir versuchen, mit Geräten auf dem 1-Wire-Bus zu kommunizieren. Protokolle höherer Ebenen können solche Fehler zwar aufgrund von Codierungsredundanz erkennen, eine ähnliche Implementierungsmethode kann jedoch nicht empfohlen werden. Um mit solchen Fehlern umzugehen, ist es notwendig, innerhalb der kritischen Abschnitte (und im obigen Algorithmus aller Operationen) Interrupts zu unterbinden und die Fähigkeit zu blockieren, Aufgaben für eine ausreichend lange Zeit zu wechseln, was kein guter Programmierstil ist.

    Eine Variante dieser Implementierung kann die Verwendung eines der Allzweckzeitgeber oder des Systemzeitgebers sein, um die erforderlichen Zeitintervalle zu bilden. Wenn Sie Verzögerungen bei den Gemeinkosten berücksichtigen, können Sie das Zeitdiagramm ziemlich genau pflegen und den ersten Nachteil der obigen Implementierung beseitigen. Der zweite Nachteil ist jedoch im Rahmen der getroffenen Entscheidung grundsätzlich irreparabel, da bei allen RTOS (oder bei Vorliegen von Unterbrechungen) nur garantiert werden kann, dass das bestellte Ereignis nicht vor dem angegebenen Zeitpunkt eintritt, Einschränkungen von oben jedoch ausgeschlossen sind.

    Für die Implementierung der 1-Wire-Schnittstelle benötigen wir daher die Möglichkeit, von oben und unten streng begrenzte Zeitintervalle auszugeben und den Zustand der MK-Klemmen in genau festgelegten Zeitintervallen zu überwachen. MK hat eine solche Möglichkeit mit entwickelten Timern (einschließlich Hardware-Zustandsautomaten), aber der betreffende MK ist keiner von ihnen. Es ist auch möglich, Hardware-implementierte serielle Schnittstellen zu verwenden, was wir tun werden. In MK sind viele serielle Schnittstellen implementiert, die jedoch nicht alle für unsere Zwecke verwendet werden können. Zum Beispiel arbeitet die USB-Schnittstelle mit einer festen Frequenz und ihre Hardware ist fest mit dem Protokoll verbunden, so dass es kaum möglich ist, sie für unsere Zwecke, die auch für CAN und GOST gelten, wesentlich zu ändern. Mit UART ist die Situation viel besser Die Geschwindigkeit kann über einen weiten Bereich geändert werden, und das Vorhandensein eines Startbits ist kein Hindernis, da jeder Impuls vom aktiven Pegel ausgeht und das Vorhandensein eines Stoppbits bei der Berechnung der Zeitparameter berücksichtigt werden kann. Die einzige wesentliche Einschränkung ist die Nichtübereinstimmung der aktiven Ebenen, die durch die Einführung eines passenden Elements beseitigt werden kann. Da jedoch alle 2 UARTs für andere Aufgaben belegt waren, wurde eine solche Lösung nicht ausgearbeitet.

    Aus diesem Grund wurde beschlossen, eine 1-Wire-Schnittstelle zu implementieren, die auf einem der drei Universalmodule für die synchrone serielle Kommunikation SSP basiert. Eine detaillierte Beschreibung der Fähigkeiten dieser Module finden Sie in der Dokumentation des Herstellers MK. Kurz gesagt, diese Module ermöglichen es Ihnen, sich mit der Taktfrequenz des im MK erzeugten Moduls zu synchronisieren, Informationen mit einem seriellen Code an den Ausgangsport auszugeben und gleichzeitig Informationen über den Eingangsport des MK in Bezug auf die obige Frequenz zu empfangen. Gleichzeitig verwenden wir zur Organisation eines wechselseitigen Austauschs den Ausgang und den Eingang der miteinander verbundenen Moduldaten, jedoch nicht die Signale auf den Takt- und Synchronisationsleitungen und können als Allzweckleitungen verwendet werden, was das flexible MK-Pin-Konfigurationssystem zulässt. Es soll das gesendete Byte verwenden, um Zeitintervalle zu codieren, die mit dem Senden / Empfangen eines Bits verbunden sind, während die Werte der Byte-Bits die Dauer des aktiven Pegels (Bit 0) und seiner Abwesenheit (Bit 1) bestimmen. Bei der Festlegung der SSP-Einstellungen ist zu berücksichtigen, dass das minimale Übertragungsintervall 1 bis 15 μs und das maximale Zählintervall 60 bis 120 μs für Informationsbits und mindestens 480 für ein Rücksetzsignal betragen sollte. Wenn Sie 10 Mikrosekunden als Mindestintervall auswählen, ist die erste Bedingung erfüllt, und die Dauer des Bitintervalls beträgt 6-12 Mindestintervalle. Die Zahl 8 passt gut in diesen Bereich. Dann beträgt die Dauer des Rücksetzsignals mindestens 48 Zyklen, was die Anzahl der Bits in einem Byte überschreitet. Um das letzte Problem zu beheben, sollten Sie entweder die Dauer des Mindestintervalls ändern oder mehr als 1 Byte Information zum Senden des Impulses verwenden. Das letztere Verfahren könnte ein Problem mit der Unsicherheit der Intervalle zwischen den Übertragungen einzelner Übertragungsbytes erzeugen, und dementsprechend könnte die Dauer des resultierenden Impulses unvorhersehbar ansteigen. Glücklicherweise ist das SSP-Modul mit einem 8-Bit-FIFO-Puffer ausgestattet, sodass die endgültige Pufferlänge von 16 × 8 = 128 Bit die erforderliche minimal mögliche Sequenzlänge von 480 + 60 + 240 = 780/10 = 78 Bit überlappt. Die Dauer des resultierenden Impulses kann unvorhersehbar ansteigen. Glücklicherweise ist das SSP-Modul mit einem 8-Bit-FIFO-Puffer ausgestattet, sodass die endgültige Pufferlänge von 16 × 8 = 128 Bit die erforderliche minimal mögliche Sequenzlänge von 480 + 60 + 240 = 780/10 = 78 Bit überlappt. Die Dauer des resultierenden Impulses kann unvorhersehbar ansteigen. Glücklicherweise ist das SSP-Modul mit einem 8-Bit-FIFO-Puffer ausgestattet, sodass die endgültige Pufferlänge von 16 × 8 = 128 Bit die erforderliche minimal mögliche Sequenzlänge von 480 + 60 + 240 = 780/10 = 78 Bit überlappt.

    Somit ist der folgende Algorithmus für das Arbeiten mit SSP aufgebaut: Wir konfigurieren den erforderlichen Modus und die erforderliche Sendefrequenz, verbieten den Betrieb des Senders, füllen den Senderpuffer mit Informationen, um die erforderlichen Zeitintervalle bereitzustellen, aktivieren den Sender. Das Modul beginnt mit der Übertragung von Informationen mit einem seriellen Code entlang der Ausgangsdatenleitung. Am Ende der Übertragung wird das Bereitschaftsflag gesetzt, das als MK-Signal für die Bildung des nächsten Datenstapels dient. In diesem Fall ist das Zeitdiagramm des übertragenen Signals fest mit der Modultaktfrequenz verknüpft, die nur von der MK-Taktfrequenz abhängt und in keiner Weise geändert werden kann, unabhängig davon, welche Programme zu diesem Zeitpunkt ausgeführt werden. Außerdem können zwischen der Übertragung einzelner Bytes der Sequenz nur vom Gerät festgelegte Intervalle liegen. die bei der Bildung der Sequenz berücksichtigt werden können (Studien haben gezeigt, dass solche Intervalle beseitigt werden können). Überlegen Sie, wie Sie das SSP-Modul konfigurieren.

    Das SSP-Modul kann in drei Modi betrieben werden:

    Motorola SPI-Schnittstelle;
    Texas Instruments SSI
    National Semiconductor Microwire-Schnittstelle.

    Von diesen drei Modi ist letzterer nicht geeignet, da er zusätzliche Anforderungen an das Signalformat stellt, die ersten beiden sehen äquivalent aus, bevor wir beginnen, sie auf einem Oszilloskop zu untersuchen. Hier stellt sich heraus, dass der SPI-Modus durch 1-Bit-Verzögerungen zwischen der Übertragung benachbarter Wörter gekennzeichnet ist, die zur Übertragung eines Synchronisationssignals dienen, das wir nicht verwenden. Dies wäre nicht so wichtig, da dies die Intervalle zwischen den Bits geringfügig verlängern würde, wenn zu diesen Zeitpunkten keine 0 auf der Datenleitung erscheint, was gemäß den Anforderungen von 1-Wire völlig inakzeptabel ist.


    Abbildung 1. Falsche Impulse im SPI-Modus

    Es ist ein großes Glück, dass der SSI-Modus keinen solchen Nachteil aufweist, da er sonst das Programm erheblich verkomplizieren müsste. Studien haben gezeigt, dass im SSI-Modus Wortintervalle einfach fehlen (der Synchronisationsimpuls wird während des letzten Bits übertragen) und dementsprechend keine "Lücken" auf der Übertragungsleitung vorhanden sind. Es ist zu beachten, dass es zum Zeitpunkt der Konfiguration auf den Übertragungs- und Synchronisationsleitungen zu einer undokumentierten Änderung der Signalpegel kommt, diese jedoch nicht beeinflusst, da die Arbeit mit dem Gerät nach dem Einrichten des SSP-Moduls immer noch mit einem Rücksetzimpuls beginnt, der alle Folgen dieser Emissionen unterdrückt.


    Abbildung 2. Fehlimpulse zum Zeitpunkt der SSI-Aktivierung

    Da das Problem auf einfache Weise gelöst wurde, suchten sie nicht nach der Ursache der Emissionen, obwohl ich es für Anwendungen, die den echten SSI-Modus verwenden, verstehen musste. In den obigen Wellenformen wurde das folgende Referenzsignal angelegt, das dem 0xBF81-Muster entspricht.


    Abbildung 3. Signal ohne falsche Impulse.

    In allen Figuren ist das obere Signal (gelb) die Datenleitung, das untere Signal (blau) in den Figuren 1 und 3 die Taktfrequenzleitung und in Figur 2 die Synchronisationsleitung. Das untere Signal bei der Implementierung der Schnittstelle wird nicht verwendet und in der Referenzreihenfolge zur Bestimmung der Zeitintervalle angegeben.

    Somit kann die Übertragung eines Rücksetzimpulses und das Vorhandensein eines Anwesenheitsimpulses durch den folgenden Pseudocode dargestellt werden:

    запретить работу передатчика;
    загрузить буфер последовательностью 0хF800 0х0000 0х0000  0х01FF 0xFFFF 0xFFFF
     //  (50 мксек пауза, 500 мксек импульс, 410 мксек пауза для приема ответа);
    разрешить работу передатчика;
    ждать флага "устройство свободно";
    прочитать содержимое буфера приема;
    если прочитано не 6 слов – завершение – ошибка SSP;
    сравнить принятую информацию с паттерном 0xF800 0x0000 0x0000 0b000X1XXXXX0XXXXX 0xXXXX  0xFFFF
    если не совпало – завершение – ошибка устройства
    завершение - устройство обнаружено.
    


    Ich werde einige Punkte erläutern: Die Übertragung an SSP erfolgt gleichzeitig mit dem Empfang und der Zeitpunkt des Durchschaltens der Eingangsdaten wird um einen halben Taktzyklus verschoben (bei unserer Taktfrequenz von 5 Mikrosekunden). Daher sollten Sie beim Lesen genau so viele Wörter wie übertragen erhalten und beim Senden Nullen Null wird akzeptiert, mit Ausnahme der letzten Eins (es sollte 1 sein, aber der spezifische Wert hängt von der Leitungskapazität und dem Widerstand des Pull-up-Widerstands ab). Das nächste Merkmal - das Flag "Puffer ist leer" wird sofort gesetzt, nachdem das letzte Informationswort in das Schieberegister übertragen wurde, aber bevor die Bits übertragen werden, sollte das Flag "Gerät ist frei" verwendet werden (siehe technische Dokumentation), da sonst das letzte empfangene Wort nicht angezeigt wird.

    Ähnliche Prozeduren lassen sich leicht für die Übertragung von Null- und Eins-Impulsen erstellen, und es ist logisch, 2 Bits von 1-Wire in einer Reihe in einem 16-Bit-SSP-Wort zu übertragen. Es wird eine Prozedur empfohlen, die sofort 1-Wire-Byte in 4 SSP-Wörtern überträgt. Am Ende der Übertragung sollten Sie nicht vergessen, den Empfangspuffer zu lesen, um eine Kopie der übertragenen Daten von dort zu entfernen. Zum Lesen sollte man eine Sequenz bilden, die dem Datensatz 1 entspricht, und die empfangenen Informationen analysieren, um den Wert des empfangenen Bits zu extrahieren (das Muster 0b01111111 übertragen, 0b01111111 in Fall 1 oder 0b00XXXX11 in Fall 0 akzeptieren). Für die Übertragung langer Nachrichten können Sie (und dies wurde implementiert) die Möglichkeit in Betracht ziehen, Software unter Verwendung eines entwickelten Geräts für den direkten Zugriff auf den Speicher zu organisieren (wiederum unzureichend dokumentiert).

    Es sollte beachtet werden, dass die vorgeschlagene Organisation der Schnittstelle einen Nachteil hat - die empfangenen Werte sind entlang der Vorderseite des Taktsignals festgelegt, dh wir können kurze Impulse auf der Leitung "abfangen", die die empfangenen Informationen verzerren. Dieses Problem kann durch eine detailliertere Analyse der empfangenen Informationen gelöst werden, beispielsweise sollte in dem übernommenen Muster 0b00100111 das dritte Einheitsbit von links als Störung angesehen werden. Natürlich kann ein solches Verfahren nicht als optimal angesehen werden, obwohl es selbstverständlich ist, dass die Wahrscheinlichkeit eines solchen Ereignisses ungleich geringer ist als die Wahrscheinlichkeit eines Ausfalls bei einer reinen Softwareimplementierung. Trotzdem ist es beim MK 1986BE1T möglich, Störungen auf Hardware-Ebene zu behandeln, dh jeder Eingang ist mit einem Schmidt-Trigger zum Erhöhen der Störfestigkeit und zusätzlich mit einem Plug-In-Filter ausgestattet. Dadurch werden kurze Impulse an den Eingängen unterdrückt. Leider ist dieser Teil, wie viele andere interessante Lösungen der Mikrocontroller-Entwickler, sehr schlecht dokumentiert.
    Basierend auf den obigen Methoden wurde eine Bibliothek von C-Subroutinen für die Arbeit mit der 1-Wire-Schnittstelle über das SSP-Modul des 1986VE1T-Mikrocontrollers der folgenden Zusammensetzung implementiert:

    1. Die unterste Schicht für die Arbeit mit Hardware sind die MK-Registersteuerungsroutinen, die auf der Website des Herstellers verfügbar sind.
    2. Die nächste Ebene enthält Schreib- und Lesefunktionen auf niedriger Ebene, die nicht öffentlich sind.
    3. Die Schnittstellenimplementierungsschicht gibt dem Entwickler vollständigen Zugriff auf die 1-Wire-Schnittstelle und enthält die folgenden Module:
    Init1Wire - Initialisiert die Hardware des angeforderten SSP-Moduls und gibt einen Zeiger auf die Steuerungsstruktur zurück.
    Reset1Wire - führt die Erstinstallation der angeschlossenen Geräte durch und meldet deren Verfügbarkeit;
    Search1Wire - Sucht nach Geräten, die an die Schnittstelle angeschlossen sind, und gibt deren Adressen zurück.
    Adres1Wire - Adressiert ein bestimmtes Gerät auf der Schnittstelle.
    WriteByte1Wire - schreibt ein beliebiges Byte in das ausgewählte Gerät;
    ReadByte1wire - Liest 1 Byte vom ausgewählten Gerät.
    4. In der Schnittstellenimplementierungsschicht wurden zusätzliche Funktionen erstellt, um die Interaktion mit dem Gerät zu vereinfachen:
    WriteData1Wire - Schreibt einen Datensatz auf das ausgewählte Gerät.
    ReadData1Wire - Liest einen Datensatz vom ausgewählten Gerät.
    5. Die Geräteimplementierungsschicht basiert auf Schicht 3 und wird als Beispiel für die Interaktion mit einem elektronischen Schlüssel vom Typ DS1990 dargestellt.

    Die allgemeine Schlussfolgerung lautet, dass MK 1986BE1T ein interessantes Produkt eines inländischen Herstellers ist, das die Möglichkeit bietet, verschiedene digitale Geräte auf seiner Basis zu erstellen, und einem geschulten Fachmann umfangreiche Möglichkeiten bietet, verschiedene Schnittstellen mit minimalen Softwarekosten zu implementieren, einschließlich nicht standardmäßiger Schnittstellen für diesen Mikrocontroller.

    PS Wenn der Beitrag für die Öffentlichkeit interessant ist, dann könnte ich im nächsten die Implementierung von allem auf derselben SSP-I2C-Schnittstelle beschreiben.

    Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte komm rein .

    Materielle Beleuchtungsstärke

    • 20% Übermäßig detaillierte Berichterstattung über offensichtliche Dinge 10
    • 66% Angemessene Stufe 33
    • 14% Es gibt einen Aufstieg, viel bleibt unklar 7

    Jetzt auch beliebt: