Antrieb mit Zahnriemenscheibe


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Dimmer mit PIC12F509

Der kleine Mikrocontroller PIC12F509 stellt keinen analogen Ausgang, mit dem das Dimmen z.B. einer Leuchtdiode möglich wäre, zur Verfügung. Es stehen ausschließlich digitale Ausgänge zur Verfügung. Glücklicherweise gibt es eine Methode, die es ermöglicht, aus digitalen Impulsen ein analoges Signal zu bilden. Die Methode heißt PWM (Pulsweitenmodulation).
Das Geheimnis des Verfahrens sind rechteckige Impulse, die bei konstanter Frequenz generiert werden. Die Längen der Impulse und der Pausen variieren und bestimmen so den Wert der Effektivspannung, die auf diese Weise am digitalen Ausgang gebildet wird.
Bei der Methode sind zwei Größen besonders wichtig: Periode und Pulsweite.

PWM Signal



In dem Experiment konstruieren wir selbst ein PWM-Signal, mit dem vier Leuchtdioden gesteuert werden. Damit das permanente Ein- und Ausschalten der Leuchtdioden mit menschlichem Auge nicht wahrnehmbar wird, muss der Vorgang sehr schnell stattfinden. Als Basis für die Berechnungen legen wir eine Grundfrequenz von 200 Hz. fest.
Bei der Frequenz beträgt die Periodendauer 0,5 ms. Wenn wir innerhalb der Zeit das gebildete Signal in 10 Stufen regeln möchten, ergibt sich für jede Stufe eine Wartezeit von 50 µs.
Wenn wir die Spannung am Ausgang halbieren möchten, müssen wir demnach innerhalb einer Periode den Ausgang für 5 x 50 µs = 0,25 ms. einschalten und ebenfalls für 0.25 ms. ausschalten.
Die Tatsache, dass das Hauptprogramm, um abgearbeitet zu werden, ebenfalls etwas Zeit benötigt, wird bei diesem Versuch nicht berücksichtigt.

PIC12F509

PIC12F509

Der Mikrocontroller PIC12F509 verfügt, ähnlich wie PIC10F200, über acht Anschlüsse. Allerdings sind bei ihm, anders als bei seinem Freund, alle Pins mit einer Funktion belegt. Bei dem PIC10F200 bleiben zwei Pins nicht angeschlossen.

PIC12F509

MPLAB PicKit4

PicKit4

Um das mühevoll erstellte Programm in den PIC-Mikrocontroller zu bekommen, wird eine zusätzliche Einrichtung benötigt. Es handelt sich hier um einen Programmer. Das Gerät stellt eine Schnittstelle zwischen dem PC, wo das Programm erstellt wurde, und dem Mikrocontroller dar. Er wird via USB Kabel mit dem PC verbunden. Bei der Übertragung des Programms in den PIC muss der Mikrocontroller mit Spannung versorgt werden. Eine Alternative ist eine externe Spannungsversorgung. Bei Bedarf kann der Programmer via Software so eingestellt werden, dass er während der Programm-Übertragung die Spannungsversorgung des Mikrocontrollers übernimmt.
Der aktuellste Programmer ist zurzeit der MPLAB PicKit4. Das Gerät wird von dem Hersteller Microchip angeboten.

Pinbelegung

Pinbelegung

Der Anschluss des Mikrocontrollers an den Programmer kann mithilfe einer speziellen Erweiterungsplatine realisiert werden. Hier kann man zwischen dem Original der Firma Microchip oder Produkten fremden Herstellern wählen.
Alternativ kann man eine solche Verbindung problemlos selbst herstellen. Bei Nutzung eines Steckbrettes werden hierzu lediglich fünf Kabelbrücken benötigt.
Der MPLAB PicKit4 Programmer verfügt über eine Anschlussbuchse mit acht Anschlussmöglichkeiten. Sein Vorgänger PicKit3 verfügt über eine 6-Pin-Anschlussbuchse.

Mikrocontroller-Anschluss an pickit4

Selbsthergestellter Mikrocontroller-Anschluss (PIC12F509) an MPLAB PicKit4.


Der Schaltplan

Der Schaltplan

Der Schaltplan

Das Programm

// ***************************************************************************
// LED-Dimmer mit PIC12F509
// MPLAB X IDE v6.00
// XC8-Compiler 2.4
// ***************************************************************************
             

#pragma config OSC = IntRC      // Internal RC oscillator 
#pragma config WDT = OFF        // Watchdog Timer Enable bit (disabled) 
#pragma config CP = OFF         // Code Protection bit  
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit  

#include <xc.h>
#include <stdbool.h>

#define _XTAL_FREQ 4000000                      // Taktfrequenz  

#define Ausgang_LED_gelb  GPIObits.GP0          // Ausgänge für die LEDs 
#define Ausgang_LED_rot  GPIObits.GP1
#define Ausgang_LED_blau  GPIObits.GP5
#define Ausgang_LED_gruen  GPIObits.GP4
#define Taster_PLUS  GPIObits.GP2               // Taster-Eingänge 
#define Taster_MINUS  GPIObits.GP3

int ON, OFF;                                    // Basisfaktor für LEDs EIN/AUS 
bool AUTO;                                      // Variable für automatischen Ablauf 


void main(void) {
 
    TRIS = 0b00001100;                          // GPIO 0,1,4 als Ausgänge 
    
    while (true) {                              // Endlos Schleife 
    
        if (Taster_PLUS == false) {             // Taster heller betätigt? 
            if (Taster_MINUS == true) {         
                ON++;                           // ON inkrementieren 
                if (ON > 10) ON = 10;           // Obere Grenze = 10 
                AUTO = false;                   // kein Automatischer Ablauf 
            }
        }
        
        if (Taster_MINUS == false) {             // Taster dunkler betätigt? 
            if (Taster_PLUS == true) {
                ON--;                            // ON dekrementieren 
                if (ON < 0) ON = 0;              // Untere Grenze = 1 
                AUTO = false;                    // kein Automatischer Ablauf 
            }
        }    
    
        if (Taster_PLUS == false) {              // Beide Taster betätigt? 
            if (Taster_MINUS == false) {
                AUTO = true;                     // Automatischer Ablauf aktiviert 
            }
        }    

        if (AUTO) {                              // Automatischer Ablauf 
            ON++;                                // ON inkrementieren 
            if (ON > 10) ON = 1;                 // Bei 10 Rücksprung auf 1 
        }
        
        OFF = 10 - ON;                           // Basisfaktor für AUS 
    
        for (int i = 0; i < 30; i++) {           // Verzögerungsschleife 
            
            Ausgang_LED_gelb = true;             // Alle LEDs Ein 
            Ausgang_LED_rot = true;
            Ausgang_LED_blau = true;
            Ausgang_LED_gruen = true;
            for (int j = 0; j < ON; j++) {       // Dauer für Ein (Basis ON * 500µs) 
                __delay_us(500);                 // Warte 500 µs 
            }
        
            Ausgang_LED_gelb = false;            // Alle LEDs aus 
            Ausgang_LED_rot = false;
            Ausgang_LED_blau = false;
            Ausgang_LED_gruen = false;            
            for (int j = 0; j < OFF; j++) {      // Dauer für Aus (Basis OFF * 500µs) 
                __delay_us(500);                 // Warte 500 µs 
            }
        }
    }
}         


Die Testschaltung

Testschaltung

Testschaltung

Kurzvideo zur Schaltung

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz