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. 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