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:
(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!
quelle
Antworten:
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.
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:
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.
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).
Stellen Sie sicher, dass die LEDs richtig herum sind.
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)
quelle
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.
quelle
Ü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
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
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.
quelle
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
quelle
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
quelle