Wie verdrahte ich einen PIC-Mikrocontroller?

Ich bin völlig neu in der Welt der PIC-Mikrocontroller und der Elektrotechnik, also gehen Sie bitte einfach :)

Wie auch immer, ich habe es geschafft, meinen PIC 16f627 so zu programmieren, dass er drei LEDs einschaltet, wenn der Druckknopf (Auslöseknopf) gedrückt wird, und eine Abschaltsequenz startet (im Grunde schaltet jede LED nacheinander mit einer Verzögerung von 5 Sekunden dazwischen aus), wenn ein anderer Druckknopf ist gedrückt (Reset-Taste). Ich habe dies auf einem K8048 PIC-Programmier- / Experimentierboard von Velleman getestet. Die PINs RA0 und RA2 sind die Eingänge für die Trigger- bzw. Reset-Tasten, während die Pins RB0, RB1 und RB2 die Ausgangspins für die LEDs sind.

Die Arbeit mit dem Experimentierboard ist großartig, aber ich möchte dies auf eine tatsächliche Schaltung übertragen. Das Problem ist, dass ich keine Ahnung habe, wo ich anfangen soll. Ich habe 3 LEDs (jeweils 3,3 Volt), einige Drucktasten und Kabel gekauft und folgende Schaltung aufgebaut:

Schaltkreis

(sorry für den schrecklichen Schaltplan)

In der von mir konstruierten Schaltung habe ich zuerst getestet, ob die LEDs mit 3 1,5-Volt-AA-Batterien funktionieren würden, und sie funktionierten gut, also dachte ich, dass Widerstände nicht notwendig wären.

Dies funktioniert jedoch nicht und ich bin völlig verloren. Als Referenz ist hier mein Code für den PIC. Es ist in C mit MikroC geschrieben. Es funktioniert auf dem Experimentierboard, also denke ich nicht, dass es ein Problem ist

void main() {
    TRISB.RB0 = 0;
    TRISB.RB1 = 0;
    TRISB.RB2 = 0;
    PORTB.RB0 = 0;
    PORTB.RB1 = 0;
    PORTB.RB2 = 0;
    CMCON = 0x07;
    TRISA = 255;

    for(;;){
            if(PORTA.RA0 == 1 && PORTB.RB0 == 1 && PORTB.RB1 == 1 && PORTB.RB2 == 1){
                         delay_ms(5000);
                         PORTB.RB0 = 0;
                         delay_ms(5000);
                         PORTB.RB1 = 0;
                         delay_ms(5000);
                         PORTB.RB2 = 0;
            }
            if(PORTA.RA2 == 1){
                         PORTB.RB0 = 1;
                         PORTB.RB1 = 1;
                         PORTB.RB2 = 1;
            }
    }
}

Jede Hilfe wäre sehr willkommen. Vielen Dank!

Bitte bitte bitte Fritzing benutzen . Es ist kostenlos, erledigt 90 % der Arbeit für Sie und trägt dazu bei, dass Ihre schematischen Diagramme leichter lesbar sind.
Ich denke, ein Konto für 10 Tage zu haben, und das ist Shahmeers erste Frage, ist eine Entschuldigung dafür, „solchen Mist über uns abzuladen“. Ignacios Herangehensweise, freundlich zu fragen, wird sicherlich eher eine positive Antwort erhalten, als den Neuen zu beschimpfen ... es sei denn, Ihr Ziel ist es, neue Leute davon abzuhalten, bei Ihnen zu bleiben.
@ajs410 - wir alle wissen, dass dies Olins Lieblingsärgernis ist, und obwohl ich seiner Formulierung nicht immer zustimme, stimme ich seinem Prinzip zu. Die Tatsache, dass OP sich für das schreckliche (seine eigenen Worte) "Schema" entschuldigt, bedeutet, dass er genau weiß, dass es nicht in Ordnung ist. Warum postet er dieses Ding dann immer noch? Für mich muss es nicht EDA-erstellt sein, ich denke, ich würde lieber eine Block-und-Bleistift-Zeichnung sehen.
Er ist neu, wie viele andere neue Mitglieder hier (mich eingeschlossen). Gönnen Sie ihm eine Pause. Shahmeer, versuchen Sie es mit Fritzing. Es ist schön und einfach zu bedienen und hilft Ihnen, Ihre Frage besser zu erklären. In einer anderen Anmerkung widerspreche ich entschieden der Wortwahl von Ignacio.

Antworten (5)

  1. Erstens braucht man immer Vorwiderstände mit den LEDs, wenn sie von einer Spannungsquelle (z. B. Batterie, Gleichstromversorgung usw.) angesteuert werden.
    Dies liegt daran, dass LEDs eine nichtlineare IV-Kurve haben, die bis zur Schwellenspannung wie eine hohe Impedanz aussieht LED steigt dann sehr stark an, dh bei einer sehr geringen Spannungsänderung ändert sich der Strom stark, so dass es fast unmöglich ist, den Strom auf diese Weise auf einen stabilen Wert einzustellen.
    Durch die Verwendung von Vorwiderständen mit dem richtigen Wert stellen Sie sicher, dass der Strom nicht so stark ansteigen kann, dass die LED beschädigt wird.
    Um den Widerstandswert zu berechnen, müssen Sie die LED-Durchlassspannung (Vf) kennen, dann Vf von der Versorgungsspannung subtrahieren und durch den gewünschten Strom dividieren, z. B. für eine 5-V-Versorgung, eine 2-V-Vf und 15 mA:

    (5 V - 2 V) / 0,020 A = 200 Ω (Der Standardwert von 220 Ω reicht aus. Wenn Sie dies nicht haben, streben Sie einen Wert zwischen 150 Ω und 600 Ω für einen Bereich von 20 mA bis 5 mA an.)
    Dies setzt eine typische 5-mm- oder 3-mm-LED voraus von 20 mA max. Betriebsstrom.

  2. Obwohl in Ihrem Schaltplan "3 x 1,5-V-Batterie in Reihe" steht, sehen die Batterien so aus, als wären sie tatsächlich parallel geschaltet. Zur Bestätigung müssen die Batterien Ende an Ende wie im unteren Diagramm in diesem Bild verbunden werden:

    Parallel- und Reihenschaltungen

  3. Sie benötigen Entkopplungskondensatoren , die zwischen dem Mikrocontroller Vdd und Masse vorhanden sind. Ich werde nicht ins Detail gehen (suchen Sie hier weiter, es gibt viele gute Antworten zu diesem Thema), aber sie sollen dem Mikrocontroller im Grunde eine niederohmige lokale Energiereserve für den hochfrequenten Strombedarf bieten, auf den die Stromversorgung nicht schnell reagieren kann genug.
    Idealerweise sollten Sie einen (100 nF oder 1 uF Keramik ist ziemlich Standard) über die Strom- und Erdungsstifte so nah wie möglich an den Stiften platzieren.

  4. Stellen Sie sicher, dass Sie den internen Oszillator verwenden, wenn kein Quarz vorhanden ist. Ihr Code zeigt die Config-Bit-Einstellungen nicht an, wenn Sie sie ausgelassen haben, müssen Sie sie hinzufügen, um sicherzustellen, dass der Mikrocontroller korrekt eingerichtet ist. Das CCS-Handbuch sollte Ihnen sagen, wie das geht. Stellen Sie auch in den Konfigurationsbits sicher, dass der Watchdog-Timer ausgeschaltet ist, da Ihr Mikro sonst ständig zurückgesetzt wird (es sei denn, Sie rufen regelmäßig den WDT-Löschbefehl auf).

  5. Stellen Sie sicher, dass Sie die LEDs richtig herum haben.

  6. Stellen Sie sicher, dass Sie den MCLR-Pin hoch gebunden haben, sonst wird Ihr PIC im Reset gehalten (es sei denn, Sie schalten MCLR in den Konfigurationsbits aus). Dies geschieht normalerweise mit einem Widerstand gegen Vdd, Wert um 10 kΩ. Das Datenblatt enthält im Abschnitt „Zurücksetzen“ ein Beispiel dafür. (Danke an ajs410 für die Erwähnung)

Vielen Dank für die Kommentare, sie waren wirklich hilfreich. Abgesehen davon, hätte ich den PIC auf andere Weise anschließen sollen oder sind die von Ihnen aufgelisteten Ergänzungen alles, was ich brauche?
Eine andere Sache ist, dass Sie wahrscheinlich Pulldown-Widerstände an Ihren Tastenstiften benötigen, um sicherzustellen, dass der Stift auf logisch niedrig ist, wenn die Taste nicht gedrückt wird (es sei denn, Sie haben interne Pulldowns eingeschaltet, aber ich denke, dass PIC nur Pullups zur Verfügung hat). Es ist schwer, sich bei dem Schaltplan so sicher zu sein (z. B. nicht standardmäßige Symbole, keine Pin-Nummern / -Namen usw.). Ich würde mir eine PCB- / Schaltplan-Erfassungssoftware besorgen (z. B. Eagle [beliebt / kostenlos für nicht kommerziell], Kicad [beliebt/kostenlos], Diptrace[billig], Altium[££££'s] usw.) und verwenden Sie das in Zukunft.
6. Vergessen Sie nicht einen Pull-up-Widerstand am MCLR-Pin. Oder setzen Sie das Konfigurationsbit, das den internen Pullup verwendet, falls verfügbar.

Ich empfehle das Buch der O'Reilly-Reihe "Designing Embedded Systems" von John Catsoulis für jemanden in Ihrer Position. Es gibt ein „Electronics 101“-Kapitel, das Sie ziemlich schnell auf funktionale Geschwindigkeit bringen wird, und ein weiteres Kapitel über praktische Konstruktionen.

  1. Überschreiten Sie nicht 5 V, Ihr PIC könnte über 5 V Spannungspegel verbrannt werden. Sie können 9-V-Batterien oder einen AC/DC-Adapter mit einem linearen Spannungsregler wie dem LM7805 verwenden, um 5 V für Ihre Schaltung zu erzeugen. Wie zu verdrahten:

    http://stuff.nekhbet.ro/2006/06/18/how-to-build-a-5v-regulator-using-78l05-7805.html

  2. Wie die meisten gesagt haben: Vergessen Sie nicht, den MCLR-Pin mit einem Serienwiderstand zu versorgen. Sie können die Pullup-Konfiguration verwenden, um Ihren PIC zurückzusetzen. Hier ist der Link für das Schema: http://www.mcuexamples.com/push-buttons-and-switch-debouncing-with-PIC.php

  3. Verwenden Sie immer einen Serienwiderstand vor einer LED. Es schützt die LED vor dem Verbrennen und verringert den Stromverbrauch. Für 3,3-V-LEDs wären 220 oder 330 Ohm in Ordnung.

Die Tastenfunktion ist einfach. Wenn wir einen Knopf drücken, werden zwei Kontakte miteinander verbunden und die Verbindung hergestellt. Trotzdem ist es nicht ganz so einfach. Das Problem liegt in der Natur der Spannung als elektrische Größe und in der Unvollkommenheit mechanischer Kontakte. Das heißt, bevor der Kontakt hergestellt oder unterbrochen wird, gibt es einen kurzen Zeitraum, in dem Vibrationen (Oszillationen) aufgrund von Ungleichmäßigkeiten bei mechanischen Kontakten oder aufgrund unterschiedlicher Geschwindigkeit beim Drücken einer Taste auftreten können (dies hängt davon ab Person, die den Knopf drückt). Der diesem Phänomen gegebene Begriff heißt SWITCH (CONTACT) DEPRALL. Wenn dies beim Schreiben des Programms übersehen wird, kann ein Fehler auftreten, oder das Programm kann mehr als einen Ausgangsimpuls für einen einzelnen Tastendruck erzeugen. Um dies zu vermeiden, können wir eine kleine Verzögerung einführen, wenn wir das Schließen eines Kontakts erkennen. Dadurch wird sichergestellt, dass der Tastendruck als einzelner Impuls interpretiert wird. Die Entprellverzögerung wird in Software erzeugt und die Länge der Verzögerung hängt von der Taste und dem Zweck der Taste ab. Das Problem kann teilweise durch Hinzufügen eines Kondensators über der Taste gelöst werden, aber ein gut gestaltetes Programm ist eine viel bessere Antwort. Das Programm kann angepasst werden, bis eine Fehlerkennung vollständig eliminiert ist. Das Bild unten zeigt, was tatsächlich passiert, wenn die Taste gedrückt wird. Das Programm kann angepasst werden, bis eine Fehlerkennung vollständig eliminiert ist. Das Bild unten zeigt, was tatsächlich passiert, wenn die Taste gedrückt wird. Das Programm kann angepasst werden, bis eine Fehlerkennung vollständig eliminiert ist. Das Bild unten zeigt, was tatsächlich passiert, wenn die Taste gedrückt wird.

Lesen Sie mehr: http://romux.com/tutorials/pic-tutorial/push-buttons#ixzz43cAbVcWR

Zusätzlich zu dem, was die anderen geschrieben haben: Weisen Sie nicht einzelnen PIC-Ausgangspins zu, wie zum Beispiel "PORTB.RB0 = 1;". Nehmen Sie stattdessen die Bitänderung in einer Variablen in Bytegröße vor und schreiben Sie diese Variable dann in den Port.

Du kannst entweder

  • Verlass dich drauf,
  • Informieren Sie sich über das Thema "Lesen-Ändern-Schreiben" oder
  • die Folgen erleiden