Helfen Sie mir, das ANSEL-Register in PIC zu verstehen

neu bei PIC, das ist etwas verwirrend.

Für den Schalter usart sollten wir den ANSEL-Registrierer löschen, um ihn als digitale E / A zu erstellen, damit nur wir 0 oder 1 von diesem Pin lesen können?,

Das Datenblatt sagt, wenn wir einen bestimmten Pin als analogen Eingang festlegen und wenn dieser Pin gelesen wird, wird 0 zurückgegeben. Was ist also die Notwendigkeit von ANSEL und wann zu aktivieren

Wenn ich völlig falsch bin, vergib mir bitte und erkläre es mir, danke

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Antworten (2)

Sie sollten das ANSEL-Bit für jeden Pin auf High setzen, für den Sie die analoge Funktion verwenden möchten. Andernfalls stellen Sie ihn niedrig ein, um die digitale Funktion zu verwenden.

Wenn Sie es niedrig lassen und analoge Funktionalität benötigen, funktioniert es überhaupt nicht.

Wenn Sie es hoch lassen, funktioniert der digitale Ausgang in diesem speziellen Chip immer noch, aber der Pin zeigt Null an. Wenn dies ein Chip ohne die LAT-Funktion ist, führt eine Lese-Modifizier-Schreib-Anweisung zu einem fehlerhaften Betrieb.

Wenn Sie beispielsweise 0xFF an den Port schreiben und das ANSEL-Bit, das Bit 1 entspricht, 1 ist, werden alle Pins tatsächlich hoch gehen. Wenn ich jedoch versuche, Bit 0 auf 0 zu setzen (eine Read-Modify-Write-Anweisung - BCF in Assemblersprache), damit der Port auf 0xFE gehen soll, gehen beide Bits 0 und 1 auf Null (0xFC), weil die Anweisung schreibt den von Bit 1 gelesenen Wert zurück . Dies ist normalerweise sehr unerwünscht - es ändert sich ein wenig, das Sie nicht ändern wollten.

Hier ist die Maschinenzyklusaktivität eines BCF-Befehls in einem Midrange-PIC:

Geben Sie hier die Bildbeschreibung ein

Im Zyklus Q2 wird das Register (in diesem Fall ein Port) gelesen, das gewünschte Bit gelöscht und dann in dasselbe Register zurückgeschrieben.

Im obigen Beispiel wäre die Maschinensprache-Anweisung zum Löschen von Bit 0 von PORTA:

 BCF PORTA, 0  

Ein Compiler fügt den Anweisungen in Maschinensprache eine Ebene hinzu, aber wenn er kein Schattenregister implementiert (was die Dinge verlangsamt, so dass es wahrscheinlich ein unerwünschter Standard wäre), besteht das RMW-Problem.

was ist b und f in BCF b,f... tut mir leid, ich kenne mich mit Assemblersprache nicht aus
f ist der Name des Dateiregisters. PORTA im obigen Beispiel. b ist das Bit (0..7). Wenn Sie also Bit 2 in einem Register namens STATUS löschen möchten, können Sie BCF STATUS,2 verwenden
Ja, ich denke du verstehst.

Ich bin kein Experte für PICs, aber es ist üblich, dass Pins je nach ausgewählter Funktion unterschiedliche Eingangsschaltungen haben.

Um ein analoges Signal bestmöglich zu erhalten, können Pins in einen analogen Modus geschaltet werden. Sie verwenden diesen Modus in Verbindung mit einem Analog-Digital-Wandler (um mehr als nur eine 1 oder 0 zu lesen) oder einem Digital-Analog-Wandler, wenn Sie eine andere Spannung als VDD oder VSS ausgeben möchten.

Auch werden die Signale in Ihrem Mikrocontroller je nach gewählter Funktion unterschiedlich geroutet.

Für jede digitale Funktion an einem Pin müssen Sie ihn auf den digitalen Modus (den normalen Modus) einstellen.

Sehr hilfreich, um zu verstehen, wie der jeweilige Mikrocontroller die Pin-Funktionen implementiert, sind normalerweise irgendwo im Datenblatt angegeben (entweder im GPIO-Teil oder in einem eigenen Abschnitt).

Für einen PIC12(L)F1571 sieht es so aus :Geben Sie hier die Bildbeschreibung ein

Was uns zeigt, dass NOT ANSEL mit einem UND zum digitalen Eingang der Pins verwendet wird. Wenn also ANSEL 1 ist, wird das NOT es zu einer 0 machen und das UND wird zu einer 0 führen, unabhängig von der Spannung am Eingang.

Sie fragen sich vielleicht, warum sie das so machen. Es gibt ein paar Gründe, die mir einfallen (ich entwerfe keine Mikrocontroller, daher weiß ich es nicht genau):

  • Das Anlegen einer analogen Spannung an ein nicht optimiertes Gate kann zu hohen Strömen in der Eingangsstufe führen, wenn die Spannung in der Mitte der Logikpegel liegt
  • Ein nicht optimiertes Gate kann das angelegte Analogsignal beeinflussen
  • Das Anlegen eines analogen Signals kann zu unregelmäßigem Schalten des digitalen Ausgangs (sehr häufiges Umschalten) führen, was die digitale Peripherie stören und auch den Stromverbrauch erhöhen würde