Wie verdrahtet man einen PIC-Mikrocontroller?

8

Ich bin völlig neu in der Welt der PIC-Mikrocontroller und der Elektrotechnik.

Wie auch immer, ich habe es geschafft, meinen PIC 16f627 so zu programmieren, dass er drei LEDs einschaltet, wenn der Druckknopf (Auslösetaste) gedrückt wird, und eine Abschaltsequenz startet (im Grunde schaltet sich jede LED mit einer Verzögerung von 5 Sekunden nacheinander aus), wenn ein anderer Druckknopf gedrückt wird gedrückt (Reset-Taste). Ich habe dies auf einem K8048 PIC Programmer / Experimentation Board 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 verschieben. Das Problem ist, ich habe keine Ahnung, wo ich anfangen soll. Ich habe 3 LEDs (jeweils 3,3 Volt), einige Drucktasten und Kabel gekauft und die folgende Schaltung aufgebaut:

Schaltkreis

(Entschuldigung 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 einwandfrei, sodass ich dachte, dass keine Widerstände erforderlich wären.

Dies funktioniert jedoch nicht und ich bin total verloren. Als Referenz ist hier mein Code für den PIC. Es ist in C mit MikroC geschrieben. Es funktioniert auf dem Experimentierbrett, 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 dankbar. Vielen Dank!

Shahmeer Navid
quelle
3
Bitte bitte bitte benutze Fritzing . Es ist kostenlos, erledigt 90% der Arbeit für Sie und erleichtert das Lesen Ihrer Schaltpläne.
Ignacio Vazquez-Abrams
1
Bitte lesen Sie electronic.stackexchange.com/a/28255/4512 .
Olin Lathrop
7
Ich denke, ein Konto für 10 Tage zu haben und dies ist Shahmeers erste Frage, eine Entschuldigung dafür, "so einen Mist auf uns zu werfen". Sicherlich wird Ignacios Ansatz, nett zu fragen, eher eine positive Antwort erhalten, als den neuen Mann zu beschimpfen ... es sei denn, Ihr Ziel ist es, zu verhindern, dass neue Leute hier bleiben.
Ajs410
5
@ ajs410 - wir alle wissen, dass dies Olins Liebling ist, und obwohl ich seiner Formulierung nicht immer zustimme, stimme ich seinem Prinzip zu. Die Tatsache, dass sich OP für das schreckliche (seine eigenen Worte) "Schema" entschuldigt, bedeutet, dass er gut weiß, dass es nicht in Ordnung ist. Warum postet er dann immer noch dieses Ding? Für mich muss es nicht von EDA erstellt werden, ich denke, ich würde lieber eine Block- und Bleistiftzeichnung sehen.
Stevenvh
2
Er ist neu, wie viele andere neue Mitglieder hier (ich selbst eingeschlossen). Gib ihm eine Pause. Shahmeer, probieren Sie Fritzing aus. Es ist schön und einfach zu bedienen und hilft Ihnen, Ihre Frage besser zu erklären. In einem anderen Punkt lehne ich Ignacios Wortwahl entschieden ab.
Capcom

Antworten:

11
  1. Erstens benötigen Sie immer Vorwiderstände mit den LEDs, wenn diese von einer Spannungsquelle (z. B. Batterie, Gleichstromversorgung usw.) angesteuert werden.
    Dies liegt daran, dass LEDs eine nichtlineare IV-Kurve haben, die bis zur Schwellenspannung der LEDs wie eine hohe Impedanz aussieht Die LED steigt dann sehr stark an, was bedeutet, dass sich der Strom bei einer sehr geringen Spannungsänderung stark ändert, so dass es fast unmöglich ist, den Strom auf diese Weise auf einen stabilen Wert einzustellen.
    Durch die Verwendung der richtigen Serienwiderstände stellen Sie sicher, dass der Strom nicht genug ansteigen kann, um die LED zu beschädigen.
    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 maximal 20 mA Betriebsstrom.

  2. Obwohl in Ihrem Schaltplan "3 x 1,5 V Batterie in Serie" steht, sehen die Batterien so aus, als wären sie tatsächlich parallel geschaltet. Um zu bestätigen, müssen die Batterien wie im unteren Diagramm in diesem Bild Ende an Ende angeschlossen werden:

    Parallel- und Reihenschaltung

  3. Du brauchst Entkopplungskondensatoren zwischen dem Mikrocontroller Vdd und Masse. Ich werde nicht ins Detail gehen (hier suchen, es gibt viele gute Antworten zu diesem Thema), aber sie sollen dem Mikrocontroller im Grunde eine lokale Energiereserve mit niedriger Impedanz für den Hochfrequenzstrombedarf zur Verfügung stellen, auf die das Netzteil nicht schnell reagieren kann genug.
    Idealerweise sollten Sie eine (100 nF oder 1 uF Keramik ist ziemlich normal) über die Stromversorgungs- und Erdungsstifte legen, so nahe wie möglich an den Stiften.

  4. Stellen Sie sicher, dass Sie den internen Oszillator verwenden, wenn kein Kristall vorhanden ist. Ihr Code zeigt die Konfigurationsbit-Einstellungen nicht an. Wenn Sie sie weggelassen 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 sonst Ihr Mikro kontinuierlich zurückgesetzt wird (es sei denn, Sie rufen regelmäßig den WDT-Löschbefehl auf).

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

  6. Stellen Sie sicher, dass der MCLR-Pin hoch gebunden ist, da sonst Ihr PIC zurückgesetzt wird (es sei denn, Sie schalten die MCLR in den Konfigurationsbits aus). Dies erfolgt normalerweise mit einem Widerstand gegen Vdd mit einem Wert um 10 kΩ. Das Datenblatt enthält ein Beispiel dafür im Abschnitt zum Zurücksetzen. (danke an ajs410 für die Erwähnung)

Oli Glaser
quelle
Vielen Dank für die Kommentare, sie waren wirklich hilfreich. Abgesehen von all diesen sollte ich den PIC auf andere Weise angeschlossen haben oder sind die von Ihnen aufgelisteten Ergänzungen alles, was ich brauche?
Shahmeer Navid
2
Eine andere Sache ist, dass Sie wahrscheinlich Pulldown-Widerstände an Ihren Knopfstiften benötigen, um sicherzustellen, dass der Stift auf logisch niedrig ist, wenn der Knopf nicht gedrückt wird (es sei denn, Sie haben interne Pulldowns aktiviert, aber ich denke, dass PIC nur Klimmzüge zur Verfügung hat) Es ist schwierig, sicher zu sein, wie der Schaltplan aussieht (z. B. nicht standardmäßige Symbole, keine PIN-Nummern / Namen usw.). Ich würde mir eine Software zur Erfassung von Leiterplatten / Schaltplänen zulegen (z. B. Eagle [beliebt / kostenlos für nichtkommerzielle], Kicad) [beliebt / kostenlos], Diptrace [billig], Altium [££££ 's] usw.) und verwenden Sie dies in Zukunft.
Oli Glaser
1
6. Vergessen Sie nicht einen Pull-up-Widerstand am MCLR-Pin. Oder setzen Sie das Konfigurationsbit, das das interne Pullup verwendet, falls verfügbar.
Ajs410
2

Ich kann das O'Reilly-Buch "Designing Embedded Systems" von John Catsoulis jedem empfehlen, der sich in Ihrer Position befindet. Es gibt ein Kapitel "Elektronik 101", das Sie ziemlich schnell auf Funktionsgeschwindigkeit bringt, und andere Kapitel zum praktischen Aufbau.

Scott Seidman
quelle
2
  1. Überschreiten Sie nicht 5 V, da Ihr PIC über dem Spannungspegel von 5 V verbrennen kann. Sie können 9-V-Batterien oder einen AC / DC-Adapter mit einem linearen Spannungsregler wie LM7805 verwenden, um 5 V für Ihren Stromkreis zu erzeugen. So verdrahten Sie:

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

  2. Wie die meisten gesagt: Vergessen Sie nicht, den MCLR-Pin mit einem seriellen Widerstand zu versorgen. Sie können die Pull-up-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 seriellen Widerstand vor einer LED. Dies verhindert, dass die LED verbrannt wird, und verringert den Stromverbrauch. Für 3,3-V-LEDs wären 220 oder 330 Ohm in Ordnung.

Hämmer
quelle
2

Die Tastenfunktion ist einfach. Wenn wir einen Knopf drücken, werden zwei Kontakte miteinander verbunden und die Verbindung hergestellt. Trotzdem ist es nicht so einfach. Das Problem liegt in der Natur der Spannung als elektrische Dimension und in der Unvollkommenheit der mechanischen Kontakte. Das heißt, bevor der Kontakt hergestellt oder unterbrochen wird, gibt es eine kurze Zeitspanne, in der Vibrationen (Schwingungen) aufgrund von Unebenheiten der mechanischen Kontakte oder aufgrund der unterschiedlichen Geschwindigkeit beim Drücken eines Knopfes auftreten können (dies hängt davon ab auf Person, die den Knopf drückt). Der Begriff für dieses Phänomen heißt SWITCH (CONTACT) DEBOUNCE. 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 feststellen. Dadurch wird sichergestellt, dass der Knopfdruck als einzelner Impuls interpretiert wird. Die Entprellungsverzögerung wird in der Software erzeugt und die Länge der Verzögerung hängt von der Schaltfläche und dem Zweck der Schaltfläche 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 die falsche Erkennung vollständig beseitigt ist. Das Bild unten zeigt, was tatsächlich passiert, wenn die Taste gedrückt wird. Das Programm kann angepasst werden, bis die falsche Erkennung vollständig beseitigt ist. Das Bild unten zeigt, was tatsächlich passiert, wenn die Taste gedrückt wird. Das Programm kann angepasst werden, bis die falsche Erkennung vollständig beseitigt 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

John
quelle
1

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 mit Byte-Größe vor und schreiben Sie diese Variable in den Port.

Du kannst entweder

  • Verlass dich drauf,
  • Lesen Sie das Problem "Lesen-Ändern-Schreiben" oder
  • die Konsequenzen tragen
Wouter van Ooijen
quelle