USB

USB - Schnittstelle auch für Anfänger nutzbar.

Beim stöbern durch PIC Forum bin ich auf interessante Projekt gestoßen.
"Mischaka" hat ein USB Bootloader entwickelt, der nicht nur das Programm in Chip reinbringt, sondern auch USB Kommunikation übernimmt.

Mischaka- USB- Bootloader können Sie von hier runterladen. Beschreibung ist auch dabei, allerdings alles für CCS-Compiler.

Was hat er da gemacht? Der PIC18F2550 meldet sich beim Rechner als virtuelle serielle Schnittstelle. Das Laden des Programms scheint auch uber diese virtuelle serielle Schnittstelle zu laufen. Das interessanteste ist an dem Bootloader das es ist möglich vom Programm USB-Routinen des Bootloaders zu nutzen. Mann braucht sich nicht über USB -Schnittstellenprogrammierung zu kümmern.

Hier ein kleines Beispielprogramm vom Mischaka.
Das Programm empfengt ein Zeichen und sendet es zurück. Ich habe es mit meinem Terminalprogramm getestet.

#include <18F2550.h>
#include<hexcodes.h>
#pragma rambank 1

#pragma origin 0x0F08     // An dieser stelle befindet sich Unterprogramm zum senden eines Zeichens über USB
void USB_Char_send(void)  // So heist diese Unterprogramm in unserem Programm
{			  // Dummy Senden eines Zeichens
}

char W1   @ 0x001;
char USBout @ 0x0CE;

#pragma origin 0x0F2A     //Dummy Empfangen eines Zeichens
void USB_Char_empf(void)
{
}

#pragma origin 0x1200
void main(void)
{
    while(1)
    {
        char c;
        #asm
        CLRF BSR
        #endasm
        USB_Char_empf();   // Empfange ein Zeichen über USB
        c=W1;

        #asm
        CLRF BSR
        #endasm
        USBout=c;
        USB_Char_send() ;   //Sende ein Zeichen über USB
    }
}

Jetzt zu einschrankjungen und Besonderheiten der Nutzung des Mischaka- USB -Bootloaders.
Ruckgabewert der USB-Empfangs-Routine werden nicht in W zuruckgegeben sondern in RAM mit Adresse 01h.
Rambank 0 wird komplett für USB-Kommunikation gebraucht. Ihre Variablen konnen ab Rambank 1 im Speicher liegen (#pragma rambank 1).
Vor dem Aufruf der USB -Kommunikation -Routinen soll auf Rambank 0 manuell umgeschaltet werden(CLRF BSR).
Interruptus sind laut Mischaka möglich, aber ich habe das noch nicht ausprobiert. Werde mich damit demnächst beschäftigen.


USB Steckdosenleiste ( 8-Fach )

Elektrische Geräte über USB mit einem Windows-Rechner schalten.

Als 8 Schaltausgänge wird Port B des PIC18F2550 benutzt.
Stromversorgung kriegt die Schaltung vom USB-Port.
Powerteil ist vom Mikrocontroller und Rechner galvanisch getrennt.

Schaltsignale
USB Steckdosenleiste richtet eine virtuelle serielle Schnittstelle z.B. COM4.
Zum Einschalten des ersten Verbrauchers senden Sie "E1" zum Ausschalten "A1"
Dies kann mit beliebiger Terminalprogramm gemacht werden. Oder noch einfacher mit einer BAT-Datei.
ECHO E3> COM4
Hier einschalten des dritten Verbrauchers.

Schaltplan

Schaltplan des Powerteils

Wenn man ein Triak mit dem Kühlkörper verwendet, kann Verbraucher bis 10A (2300W) aufnehmen.
Ohne Kühlkörper können Sie lasten bis 100W schalten. Z.B. eine Lampe.
Beachten Sie bitte das Kühlkörper unter Spannung (230V) steht. Außerdem hier ist einpolige Trennung vom Netz. Das bedeutet Strom wird abgeschaltet , Spannung bleibt. Bei Reparaturen an den Verbraucher Netzstecker ziehen.

Nachtrag. Ich bin voll bescheuert den Rad zweites mal zu erfinden.
Bei reichert gib es schöne Solid-State-Relais. Z.B. S202 S02 (Strom bis 8A mit dem Kühlkörper)
Widerstandsberechnung zum Anschluss an 5V: (5V-2,2V) /8mA=350Ohm

Minus an die Masse. Plus über 330 Ohm Widerstand an PBx Pin.

Quellcode

#include <18F2550.h>
  #include<hexcodes.h>
  #include"MischakaBoot.c"    //Enthält Dummy USB Routinen

  #pragma origin 0x1200       // Hauptprogramm fängt hier an
  void main(void)             // wichtig für Mischaka-USB-Botloader
  {
      TRISB = 0b.0000.0000;    // Port B alles Ausgänge mchen
      PORTB=0;                 // Port B alles aus
      while(1)
      {
          char i,Mask,c;

          #asm                    //****************************************
          CLRF BSR                // Bank auf 0 umschalten
          #endasm                 // Empfange ein Zeichen über USB
          USB_Char_empf();        //****************************************

          switch(W1)              // Empfangen Zeichen ist im W1
          {                       // Abhängig vom Zeichn mach folgendes
              case 0x80 :         // Bootloader starten
                  #asm
                  CLRF BSR
                  DW __GOTO(0x1002)
                  #endasm
                  break;

              case 'E' :          // Steckdose einschalten
                  #asm            //****************************************
                  CLRF BSR        // Bank auf 0 umschalten
                  #endasm         // Empfange ein Zeichen über USB
                  USB_Char_empf();//****************************************
                  c=W1-49;                        // Aus ASCII-Zahl ein Integer Zahl machen
                  Mask=0b.0000.0001;
                  for(i=0;i<c;i++) Mask=Mask<<1;  // Eine '1'um Steckdosennummer rotieren.
                  PORTB= PORTB | Mask;            // Und richtige Bit an PORTB setzen
                  break;
              case 'A' :          // Steckdose ausschalten
                  #asm            //****************************************
                  CLRF BSR        // Bank auf 0 umschalten
                  #endasm         // Empfange ein Zeichen über USB
                  USB_Char_empf();//****************************************
                  c=W1-49;
                  Mask=0b.1111.1110;
                  for(i=0;i<c;i++)
                  {
                      Mask=Mask<<1;   // Eine '0'um Steckdosennummer rotieren.
                      Mask.0=1;       // Damit der Byte sich mit Nullen nicht fühlt
                  }
                  PORTB= PORTB & Mask; // Und richtige Bit an PORTB löschen
                  break;
          }
          /*
          #asm
                CLRF BSR
          #endasm
          USBout=PORTB;           // war zum Prüfen des Zustandes
          USB_Char_send() ;
          */
      }
  }


Download

Mischaka USB Bootloader
Quellcode, HEX-Datei, Schaltplan