Mischaka-USB-Bootloader für PIC18F2550 Ver.2
Montag, 21. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Beispielcodes und Projekte  |  Mischaka-USB-Bootloader für PIC18F2550 Ver.2 « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Mischaka-USB-Bootloader für PIC18F2550 Ver.2  (Gelesen 29840 mal)
 
Mischaka
Newbie
*
Offline Offline

Beiträge: 16



Profil anzeigen
« am: Februar 15, 2008, 21:59:08 »

Dieser Bootloader + PIC18F2550 ist praktisch das gleiche wie ein  FTDI-Chip + PIC.
Bootloader regelt USB-Kommunikation des Anwenderprogramms.

Grundidee: Ein Bootloader dessen Routinen zum USB-Kommunikation gemeinsam vom Anwenderprogramm und Bootloader genutzt werden.

Mit diesem Bootloader können Sie USB-Schnittstelle aus dem Anwenderprogramm nutzen. Dabei müssen Sie sich nicht mit USB-Programmierung auseinander setzen. Das heißt, das Anfänger auch USB nutzen können.

Das Prinzip: Bootloader schaft eine Virtuelle serielle Schnittstelle.
Wartet 1s auf PC-Bootloader-Teil und dann geht zu Anwenderprogramm.
Dabei bleibt virtuelle serielle Schnittstelle erhalten. Wenn ein Zeichen vom Anwenderprogramm über USB gesendet werden soll dann wird eine Funktion aufgerufen die sich in bereich des Botloaders befindet. CALL 0x0F08
und ab Adresse 0x0F08 befindet sich die Funktion zum senden an USB.
 
So siet das einfachste Programm (CCS-Compiler) zum Senden und empfangen mit USB.
Code:
#include <18F2550.h>
#reserve 0x5:0xF9           // Dieses RAM-Bereich wird vom Bootloader und USB genuzt
#reserve 0x400:0x5C7        // Dieses RAM-Bereich Ist USB-Stack

#ORG 0x0F08, 0x0F0A         // An dieser stelle befindet sich Unterprogramm zum senden eines Zeichens über USB
void USB_Char_send(char k)  // So heißt diese Unterprogramm in unserem Programm
{
    #locate k=0x0CE
}

#ORG 0x0F2A, 0x0F2C         //Dummy Empfangen eines Zeichens
char USB_Char_empf()
{
}

#build(reset=0x1140,interrupt=0x1148)        // Resetvektor verbiegen
#ORG 0x1200, 0x4000 default // Benutzerprogramm liegt im Speicher ab hier

#use delay(clock=48000000)
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

void main()
{
    char a;
    while(1)
    {

        a=USB_Char_empf(); //Empfange ein Zeichen über USB
        USB_Char_send(a);  // Sende ein Zeichen über USB
    }
}
Im Zip-Archive sind Beispielcode für  CC8E-Compieler und Assembler enthalten.
Am PC schauen Sie im Geräte-Manager bei Anschlüsse unter welchem Nummer der Mischaka Port sich angerichtet hat (Bei mir war es COM4). Dann starten Sie beliebige Terminalprogramm und können sofort mit Ihrer Anwendung im PIC kommunizieren.
 
Noch ein Vorteil bei diesem System. Es ist Programmiersprache und Compiler unabhängig. Sie können im Assembler programmieren und dabei USB Funktionen des Bootloaders nutzen. Einzige Bedienung ist das Anwenderprogramm soll an richtiger Stelle anfangen und reservierte RAM-Bereich nicht beschreiben.

Eigenschaften:
Resetvektor   0x1140 hier wird Anwenderprogramm gestartet
Interruptvektor   0x1148 high priority interrupt
Frei verfügbare Speicher(RAM) 1344 Byte
Schutz gegen Überschreiben des Bootloaders ist im PIC-Teil und PC-Teil realisiert. Daten die in hex-Datei unter der Adresse 0x1140 liegen werden nicht geflasht.

Einschränkungen:
Es wird USB-Interrupt benutzt. Anwender darf Interrupts für nicht länger als 10mS abschalten. Sonst trennt PC das USB-Gerät ab.
Low priority Interrupt wird nicht Unterstützt.
Bootloader kann weder EEPROM noch Konfigurationsbyts beschreiben.
Systemclock ist fest 48MHz. Quarz ist 20MHz.

Weitere Anwenderprogramm-Beispiele werde ich später posten.

* Mischaka-USB-BootloaderV2.zip (617.83 KB - runtergeladen 3146 Mal.)
« Letzte Änderung: Februar 18, 2008, 09:36:34 von Mischaka » Gespeichert
insteve92
Newbie
*
Offline Offline

Beiträge: 1


Profil anzeigen
« Antworten #1 am: Januar 04, 2011, 10:31:27 »

Guten Tag allerseits

Ich weiss nicht ob ich am richtigen Ort bin für mein anliegen, versuche es aber trotzdem einmal.

Ich benutze momentan den Bootloader von Mischaka für ein Projekt (Messwerterfassung mit PIC18F2550 und Visualisierung mit Visual Basic), alles Funktioniert einwandfrei und ich muss Mischaka ein grosses Lob geben, genial das sich jemand Zeit nimmt und sowas für uns Bastler macht.

Aber wie ich gesehen habe ist das .hex file des Bootloader spezifisch auf den PIC18F2550 abgestimmt und ein PIC18F4550 könnte nicht verwendent werden, sehe ich das richtig? Wenn Ja, ist der Code für denn Bootloader vorhanden und auch einsehbar?

Wäre Cool wenn ich das ganze auch für den PIC18F4550 brauchen könnte:)
Ich nehme an da müsste man nicht allzuviel ändern.




Liebe Grüsse aus der Schweiz
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #2 am: Januar 04, 2011, 12:03:17 »

Hi,

ich nutze den Bl zwar nicht, aber was das Programmieren angeht sind der 2550 und der 4550 indentisch.
Daher gehe ich davon aus, dass der BL auch für den 4550 geeignet ist.

Gruß
Stefan
Gespeichert

stevein92
Gast
« Antworten #3 am: Januar 04, 2011, 12:23:04 »

Hallo Stefan

Danke für die schnelle Antwort.

Grundsätzlich mag das stimmen, aber der Bl musste ja auch mal Compiliert werden und in ein .hex File gewandelt werden, darum frage ich mich ob der Bl auch für den 4550 einsatzbereit wäre..
z.B beim CCS Compiler muss man für jeden PIC ein anderes Include nehmen...


Am einfachsten ist es wenn ich es einfach kurz teste:)



Gruss

Steve
Gespeichert
stevein92
Gast
« Antworten #4 am: Januar 04, 2011, 13:34:58 »

So, habe nun das .hex file des Bootloaders von Mischaka in den 4550 gebrannt, leider ohne erfolg, wenn ich unter Verwalten den Geräte Manager aufmache, so wird leider nichts angezeigt.... Weinen

Gruss

Steve
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #5 am: Januar 05, 2011, 01:22:30 »

Hallo Steve,

hast du denn den BL schon mal auf einem 2550 zum Laufen gebracht? Welchen Quarz benutzt du? Config richtig eingestellt?
Weil mich wundert es sehr, dass es nicht geht.
Zitat
beim CCS Compiler muss man für jeden PIC ein anderes Include nehmen...
Ja, aber der Unterschied ist zwischen den x550 ist nur, dass beim 2550 ein paar Peripheriemodule (z.B. PortD ) fehlen. Das ist aber fuer das Programmieren unerhablich.

Sonst lade dir die Microchip App Lib runter, da sind Bootloader fuer saemtliche USB Pics dabei.
www.microchip.com/mal

Gruss,
Stefan
Gespeichert

insteve
Gast
« Antworten #6 am: Januar 05, 2011, 09:04:02 »

Hallo Stefan

Danke für die Antwort

Wie ich oben geschrieben habe, hatte ich keine Probleme mit dem 2550 mit diesem konnte ich den Bootloader ohne Probleme brauchen, sogar mit einem 4 MHZ Quarz, obwohl Mischaka den BL auf 20 MHZ ausgelegt hat. Habe einfach die Configuration Bits richtig gesetzt.

Okey das kann gut sein das die sich nicht gross unterscheiden, mich ärgert es auch das es nicht geht. Die Configuration Bits habe ich wie für den 2550 eingestellt.

Habe mir schon diverse USB Packages von Microchip heruntergeladen, habe aber noch keinen Richtig zum laufen bekommen, entweder meldet er sich schnell wieder ab oder die kommunikation funktioniert nich richtig etc...
Von dem her ist dieser Bootloader einfach nur Genial -> .hex file brennen = cdc funktioniert Smiley


Lg Steve
Gespeichert
insteve
Gast
« Antworten #7 am: Januar 13, 2011, 10:03:55 »

Hallo Zusammen

Habe es nun doch zum laufen bekommen mit dem 18F4550.
Ich habe einen Fehler in der Beschaltung gefunden.

Mit dieser Beschaltung hat es funktioniert:
http://www.sprut.de/electronic/pic/8bit/18f/programm/usb2550/test1_2550.gif
(Natürlich die Richtigen 4550 anschlüsse genommen)

Gruss

Steve


Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #8 am: Januar 13, 2011, 10:11:14 »

Hi Steve,

Zitat
Habe es nun doch zum laufen bekommen mit dem 18F4550.
Ich habe einen Fehler in der Beschaltung gefunden.
Alles andere haette mich auch echt gewundert...

Gruss,
Stefan
Gespeichert

insteve
Gast
« Antworten #9 am: Januar 13, 2011, 15:08:19 »

Hi Stefan


Ja du hattest von anfang an recht,
ich Idiot habe mit dem 4550 noch die ''alte Schaltung'' genommen (VUSB an VCC) wahrscheindlich lag es ''nur'' am
100n Kondensator der bei der Schaltung von Sprut auf Masse
gezogen ist.....echt Peindlich..Smiley


Trotzdem noch ne Frage, ist dir bekannt wie ich das
Ganze auch auf Ubuntu zum laufen bringe? (Also Treibermässig)


Lg Steve
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #10 am: Januar 14, 2011, 01:39:41 »

Hi,

Zitat
Trotzdem noch ne Frage, ist dir bekannt wie ich das
Ganze auch auf Ubuntu zum laufen bringe?
Kein Plan. Windows Emulator?

Gruss
Stefan
Gespeichert

locutus
Newbie
*
Offline Offline

Beiträge: 7


Profil anzeigen
« Antworten #11 am: April 24, 2011, 23:10:00 »

Wie sieht das eigentlich aus mit Support für normales C++?

ich wollt jetzt einfach die Mischaka.h in meinem Projekt einbinden, allerdings sagen mir die ganzen "#reserve", "#bit", "#locate", "#ORG" und "#build" Compiler-Anweisungen nichts - und meinem C18 auch nicht. Irgendwo definiert das ja scheints einiges um, nur ich sehe leider absolut nicht, was da umdefiniert wird.

Hat da wer schon mal die Datei erfolgreich für den C18 umgeschrieben bzw. eine Alternative dazu, welche dann eben auch vernünftig so funktioniert, wie es soll?
Gespeichert
tobiasK
Newbie
*
Offline Offline

Beiträge: 1


Profil anzeigen
« Antworten #12 am: Mai 13, 2011, 14:15:21 »

Hallo allerseits
Das ist mein erster Beitrag im Forum und ich habe eine Frage zum Bootloader.
Ich habe ihn auf einem PIC18F4550 mit dem CC8e Compieler zum Laufen gebracht aber die Interrupts gehen nicht. Mit dem  Bootloader von Sprut schon. Also das Programm stimmt soweit.
Code:
#pragma origin    0x1140  //x800
void reset (void)
{
    main();
}

#pragma origin 0x1148  //0x808    
interrupt highPriorityIntServer(void)
{
   _highPriorityInt();

   #pragma fastMode
}

void main(void)
{
….

Die auskommentierten Adressen sind die für den Bootloader von Sprut.
Wenn ich die Interrupts abschalte. GIE = 0;
Und den Teil mit dem Interrupt auskommentiere dann geht’s.

Mit lässt es sich compilieren, aber der Bootloader brennt es nicht.
Wenn man das Programm lädt und Flashen betätigt ist er in 1sek fertig.
Es scheint so als würde der Bootloader das HEX ignorieren.

Zitat
Daten die in hex-Datei unter der Adresse 0x1140 liegen werden nicht geflasht.

Hat jemand die Interrupt schon erfolgreich verwendet?
Gespeichert
Edson
Globaler Moderator
Sr. Member
*****
Offline Offline

Beiträge: 373



Profil anzeigen
« Antworten #13 am: Mai 16, 2011, 07:39:55 »

@Tobias K.

Beim Posten in zwei oder mehreren Foren würde es ein minimum an Respekt vor den anderen Teilnehmern bezeugen, wenn du zumindest deine "Lösung" auch in allen Foren vorstellst.

http://www.mikrocontroller.net/topic/91723#new
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.039 Sekunden mit 17 Zugriffen.
 
Top! Top!