Jahreswechsel in Assembler für PIC’s ( ;-) )

OK, Clown gefrühstückt, für Insider, Jahreswechsel im Mikrocontroller:

 

 

 

 

    #define Y2016 PORTA,0
    #define Y2017 PORTA,1
    #define Y00Uhr PORTA,2

    bsf Y2016
 Year2016
    btfss Y00Uhr
    goto Year2016

    bcf Y2016
    bsf Y2017
    end

 

Ja ich weiß, blöder Gag! Musste jetzt sein :mrgreen:

 

 

 

 


Anzeige:

Elektronik? Bei Reichelt ;-)

Aktive Bauelemente

Relais

Messtechnik


 

Kleine LED-Spielerei mit RGB-Leuchtdioden

Kleine Elektronikübung am Rande ;-)

 

Das Video unten ist eigentlich eher eine Katastrophe, weder sind die Farben gut getroffen, noch ist beim realen Aufbau ein Flackern zu sehen, besser will es die Kamera auch mit Tricks nicht darstellen… Ich denke aber, um die Arbeitsweise zu illustrieren reicht’s doch. Ursprünglich wollte ich noch nicht einmal einen Blogbeitrag aus dem Ganzen machen, irgendwie ist’s aber nun doch einer geworden :-)

 

Man nehme:

1 x PIC 12F675

1 x RGB LED (OK, ich hab 3 parallel, mit jeweils eigenem Vorwiderstand)

Passende Vorwiderstände für die LED

Ein bisschen elektronischen Kleinkram und irgendeinen durchsichtigen Staubfänger aus dem Haushalt :mrgreen:

Falls jemand den Nachbau startet:

Die Leuchtdioden kommen an die Ports GPIO4, GPIO1 und GPIO0. Welche Farbe an welchen Port ist egal, es kommen alle gleichberechtigt zum Zuge, nur der Farbverlauf ändert sich natürlich.

Hier der .hex-File als .zip Datei (12f675). Config NICHT enthalten, muss beim Brennen festgelegt werden. Interner RC/No Clock, alles andere OFF.

Habe meinem Fall hier die unten an 3. Stelle beworbenen RGB-LED genutzt, Vorwiderstand 220 Ohm für Grün und Blau, 180 Ohm für Rot. Jeweils eine einzelne Leuchtdiode pro Farbe geht auch, andere Farben nach Geschmack, ist ja nur eine kleine Spielerei mit Licht und Farbe.

Da nur 3 Leuchtdioden (bei Beachtung des Gesamtstromes geht natürlich mehr, dazu findet sich auch an anderen stellen im Blog etwas!) angesteuert werden, habe ich keine große Dokumentation erstellt. Einfach Controller im Standardaufbau mit Pullup von 10k an Pin 4 und die Leuchtdioden über jeweils einen Vorwiderstand vom Output-Pin gegen Masse verbauen, Aktiv = High. 100nF Stützkondensator für den PIC nicht vergessen, versorgt wird mit 5V. Bei voller Ansteuerung aller LED sind unter 80mA in meinem Aufbau zu erwarten, das schafft so ziemlich jedes alte Netzteil, stabilisiert sollte es allerdings sein. Progammtechnisch stellt der Ablauf eine ständig wechselnde PWM dar, so wird nur sehr selten der maximale Strom erreicht.

Wie gesagt, kleine Spielerei am Rande, eigentlich wollte ich nur sehen, was die RGB-LED, mit denen ich vollauf zufrieden bin, so leisten. Nachbau wie immer auf eigene Verantwortung ;-)

 

 

 


 

 

 

 

Quick & Dirty Servo

servo_14_llqSie funktioniert, macht alles, was ich von ihr erwartet habe und dennoch:

Diese Servosteuerung ist eine „Quick & Dirty“ Lösung ;-)

 

 

servo14Ich habe einfach auf die Schnelle eine Lösung gesucht, welche via Tasterdruck einen analogen Servo von einem Ende zu anderen fährt. Zusätzlich mussten diese Endpunkte justierbar und das Ganze schnell aufzubauen aber erweiterbar sein. Was soll ich schreiben, das ist mein Entwurf…

(Stromlaufplan geändert, die Verbindung von S1 muss direkt zum PIC gehen, ist in der gezeigten Version schon korrigiert, also nur interessant für Leser, die den alten Plan noch genutzt haben! Sorry, da hatte ich gepennt ;-) )

Da es alles erfüllt, was es soll und ich gelegentlich nach so einer Schaltung gefragt werde, kommt das Miniprojekt in den Blog. Stromlaufplan und .hex File für einen Pic 16F688 sind als Download unten bzw. als Bild oben verfügbar.

Vorteil:

  • 11 Bauteile
  • Schnell aufgebaut
  • Taster zieht nach GND, Hall-Sensoren, Reedschalter & Co unkompliziert nutzbar
  • Billig ;-)

Nachteil:

  • Überlauf der Trimmer in der Software nicht abgefangen, bei Endanschlag des Einstellers dreht der Servo um
  • Keinerlei Überlastschutz
  • Nachbau auf eigene Gefahr :mrgreen:

Funktion:

5V auf die Schaltung geben, Taster drücken, Servo fährt in eine Endstellung. Mit Trimmer Position einstellen. Neuer Tastendruck, Servo fährt in die andere Position, wieder justieren mit dem anderen Trimmer – fertig. Vorsichtig einstellen, die Trimmererfassung ist nur sehr rudimentär eingebunden, eben „Quick & Dirty“ :!: Die LEDs zeigen an, an welchem Ende der Servo sich befindet.

Bauteile:

Die Bauteile sind an sich nicht kritisch. Die LEDs können auch weiß oder purpurviolettpink sein, die Trimmer (R5/R6) dürften auch bei 4k7 oder 10k noch brauchbare Werte liefern, habe ich nicht anders versucht. R1 und R2 würde ich nicht höher 15k und kleiner 8k6 wählen, ist aber eher ein Erfahrungswert. R3 und R4 müssen zu den verwendeten Leuchtdioden passen, mit 220R wird man nichts verkehrt machen, Rest siehe Schaltbild

q__d__servo_x14cbDie Config-Bits sind NICHT(!) im Programm, ich hänge sie links als Bild dran, beim PIC programmieren beachten!

 

Download Stromlaufplan & .hex File

Wenn mal Zeit ist, werde ich vielleicht eine bessere Version erstellen, mehr brauch‘ ich im Moment einfach nicht…

 

 

 


 

 

Der PIC 12F675 Teil 3 – OPTION Register

PIC © 12F675 Weiter geht es mit der Beschreibung der PIC12F675. Ich kann übrigens nicht versprechen, dass die Blogbeiträge alle zeitnah und direkt nacheinander erscheinen, also nutze ich mal aus, dass heute gerade Zeit übrig ist :-)

reichelt elektronik – Elektronik und PC-Technik

 

 

OK, das nächste Register:

OPTION_REG:

In diesem Register werden Einstellungen zum Timer, dem Watchdog und auch möglichen Pull-Up Funktionen festgesetzt. OPTION liegt in Bank 1!

Bit 7:

0 = Pull Up’s aktiv

1 = Pull Up’s deaktiviert.

Pull-Up Widerstände dienen dazu, einen definierten Pegel an einen Port-Pin zu legen. Ist ein Pin beispielsweise als digitaler Eingang definiert, muss er einen festen Pegel aufweisen, ‚L‘ oder ‚H‘. Der Pull-Up Widerstand ist so in der Lage, einen festen ‚High‘-Pegel zu erzeugen, bis aus der Schaltung eine Änderung eintritt, welche einen sicheren ‚Low‘-Pegel liefert. So ist sichergestellt, dass kein undefinierter Zustand eintreten kann. Ich persönlich realisiere aber solche Lösungen immer mit externen Widerständen, so kann ich den Widerstandswert selber bestimmen.

Bit 6:

1 = Interrupt bei steigender Flanke an Pin GP2

0 = Interrupt bei fallender Flanke an Pin GP2

Interrupts dienen dazu, das laufende Programm bei auftreten einer bestimmten Situation zu unterbrechen und eine Aktion auszuführen. Der PIC hat mehrer Möglichkeiten dies zu vollziehen, in diesem Fall durch eine Pegeländerung an Pin GP2

Bit 5:

Hier wird festgelegt, aus welcher Quelle der Timer0 seinen Takt bezieht. Dies kann entweder durch ein externes Signal an GP2 geschehen oder durch einen internen Taktgeber. Auf die Timer komme ich auch noch gesondert zu sprechen.

1 = Takt an GP2

0 = Interner Takt

Bit 4:

Auslösen des nächsten Timerschrittes, wenn Takt an GP2 anliegend.

1 = Pegelwechsel von ‚H‘ nach ‚L‘

0 = Pegelwechsel von ‚L‘ nach ‚H‘

Bit 3:

Festlegen, ob der Vorteiler dem Timer0 oder dem Watchdog zugeordnet ist, siehe auch Beschreibung Bit 0-2

Bit 0,1,2:

Der PIC arbeitet mit einem Arbeitstakt von einigen Hz bis zu etlichen Mhz. Der Vorteiler kann eingesetzt werden, um die Zählgeschwindigkeit zu reduzieren. Je nach Einsatz, kann der Muttertakt bis zum Verhältnis 1:256 (1:128 beim Watchdog) geteilt werden. Hier muss wieder mal das Datenblatt her, wenn man die Funktionen detailliert betrachten möchte. Setzt man die Bits 0,1,2 auf 111, arbeitet in diesem Falle der Timer0 mit einem Teilungsverhältnis von 1:256, bei 000 auf 1:2.

8-bit-Mikrocontroller @ 1,3 GHz – ELEKTOR.de | Elektronik: Mikrocontroller

Schon heftig, max. 1,3 Ghz… Das schnellste was ich hier bei den PIC’s im Einsatz habe, läuft mit 20 MHz, was für die betreffende Anwendung aber auch ausreicht :-) Neben der Geschwindigkeit finde ich aber besonders interessant, dass der Chip kompatibel mit den 16xxx PIC Mikrocontrollern ist!

8-bit-Mikrocontroller @ 1,3 GHz – ELEKTOR.de | Elektronik: Mikrocontroller

 

reichelt elektronik – Elektronik und PC-Technik

Microkontroller gibt’s bei Reichelt für vernünftige Preise!