Forum: Mikrocontroller und Digitale Elektronik PIC USB per Assembler ansprechen


von Klaus B. (soonix)


Lesenswert?

Eine Bekannte muß einen PIC18F2550 mit einem Raspberry verbinden. 
Vorgabe dabei ist, daß an der Schaltung nichts verändert werden darf 
(zusätzliche Module sind erlaubt), und es muss mit Assembler (also nicht 
C) gearbeitet werden.
Zum Flashen benutzt sie die USB-Schnittstelle.

Ich hatte als Programmierer bisher nur mit Von-Neumann-Architekturen zu 
tun und bin daher etwas gehandicapt, aber nach meiner Vorstellung müßte 
es doch möglich sein, entweder die USB-Routinen des 
"Standard"-Bootloaders mitzunutzen, allerdings habe ich dazu keine 
Dokumentation gefunden,
oder einen (möglichst kleinen) USB-fähigen Bootloader (z.B. den USBOLO 
von paddy - http://home.datacomm.ch/str/usbolo.asm) so abzuspecken, daß 
nur die USB-Routinen übrigbleiben, und diese ins PIC-Programm mit 
einzubinden.

Frage 1: Hat sich schon emand diese Arbeit gemacht? Wenn ja, natürlich 
Frage 1a: Ist das Ergebnis dokumentiert und wo?
Frage 2: Sind diese PICs ab Werk mit einem Bootloader ausgestattet oder 
hat den wahrscheinlich der Dozent geflasht?
Frage 3: Wenn das abspecken des USBOLO als gangbarer Weg erscheint: habt 
ihr da Tipps dazu?
Frage 4: Der Dozent schlägt vor, eine RS232 zwischenzuschalten - ist das 
wirklich einfacher? Die Ansteuerung der seriellen Schnittstelle muss 
doch auch programmiert werden, oder?

: Verschoben durch User
von Jürgen D. (poster)


Lesenswert?

Wen auf dem Pic in Assembler programmiert werden soll ist das mit der 
RS232 wirklich einfacher. Mann kann ja einen Ftti USB>232 Wandler 
verwenden,USB an die Rpi und 232 an den PIC.
USB ist ja ein Busssystem, da müsstest du auf dem PIC den ganzen USB 
Stack in Assembler schreiben. Der fertige von Microchip ist in C.

232 ist da deutlich einfacher.

von Max H. (hartl192)


Lesenswert?

Klaus Baldermann schrieb:
> Raspberry
Klaus Baldermann schrieb:
> Der Dozent schlägt vor, eine RS232 zwischenzuschalten

RS232 ist viieel einfacher (In PIC24asm war es eine Sachen von 1 
Stunde). Der Raspberry hätte auch eine serielle Schnittstelle.

Klaus Baldermann schrieb:
> Frage 2: Sind diese PICs ab Werk mit einem Bootloader ausgestattet
Nein

: Bearbeitet durch User
von Frank M. (frank_m35)


Lesenswert?

1) suche mit google nach "pic usb assembler site:microchip.com/forums" 
(leider scheint das Microchip Forum gerade Probleme zu haben, aber du 
kannst ja auf den Google cache zurückgreifen)

2) Der Dozent hat einen Bootloader drauf gespielt, von Haus aus sind die 
leer. Microchip stellt solchen Code in C bereit.

4) RS232 ist simpel und narrensicher. Man kann senden wann immer man 
will und muss fast nichts beachten. USB hingegen ist hoch komplex.
http://www.sprut.de/electronic/interfaces/usb/usb.htm
Es benötigt einen umfangreichen USB stack, den Microchip nur in C 
bereitstellt, man somit in ASM mehr oder minder auf sich alleine 
gestellt ist:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en537044
Hinzu kommt, dass man auch auf spezielle Treiber (HID bspw.) am PC 
zurückgreifen kann dann aber eigene Software nutzen muss oder eigene 
Treiber schreiben muss um eine serielle Schnittstelle zu erhahlten (CDC) 
um ein Terminal nutzen zu können.

USB in ASM zum Laufen zu bringen ist Zeitverschwendung, vor allem wenn 
sie RS232 benutzen darf. Das ist einfach und sie kann sich auf das 
Wesentliche konzentrieren, was sicherlich etwas ganz was anderes ist als 
USB zum Laufen zu bringen.

: Bearbeitet durch User
von Chris S. (schris)


Lesenswert?


von Klaus B. (soonix)


Lesenswert?

Chris S. schrieb:
> http://jap.hu/electronic/bminch-asmusb-lab1-fs-gpasm.zip

Ja, das sieht ungefähr nach dem aus, was ich meine. Wobei die Makros in 
der engr2210.inc fast schon ein C-Compiler sind :-)

Meine Bekannte wird sich vermutlich die serielle Schnittstelle basteln, 
aber für mich mit 2 linken Händen scheint die USB-Schnittstelle trotzdem 
besser, weil
- kein Problem mit den unterschiedlichen Spannungen (Raspberry 3,3 V, 
PIC 5 V - oder war's umgekehrt) / keine weitere Pegelanpassung nötig, da
- Stecker an beiden Geräten schon vorhanden,
- Kabel steckt auch schon (für's flashen)
- bei meinen "Gehversuchen" mit dem oben erwähnten "usbolo.asm", den ich 
auf 0x800 "verschoben" habe, erkannte fsusb immerhin schon die 
USB-Schnittstelle :-)

von Takao K. (takao_k) Benutzerseite


Lesenswert?

Es muss Assembler verwendet werden- dozent hat einen Sprung in der 
Schuessel. Wuerde ich glatt verweigern.

Mikrokontroller- mach was du willst, hauptsache es geht nachher.
Finde ich unglaublich wie hier in Schule und Universitaet immer wieder 
Studenten behindert werden.

von Humpfdidumpf (Gast)


Lesenswert?

Hi,

bei dem genannten Device (32kByte) bezweifle ich, dass USB für einen 
Bootloader Sinn viel macht, wiel das viel Flash frisst. Es kommt aber 
auf deine Applikation an.

Ich kann mich erinnern, dass man für USB alleine schon >10kB Flash 
braucht (ohne Optimierungen, XC8, d.h. mit dem freine Compiler).

Du kannst die auf die Schnelle einmal mit den Beispielen aus der MLA 
(Link: http://www.microchip.com/pagehandler/en-us/devtools/mla/) ein 
Bild machen, und schauen ob das noch vernünftig ist.

Vermutlich wirst du die Schnittstelle zweimal brauchen, im Bootloader 
und in der Applikation. Oder kann man das für beides nutzen? Ich stelle 
mir das aber beim Updaten etwas kompliziert vor.

Was wäre eigentlich mit einem FT232? Es gäbe fertige Module (die sind ja 
erlaubt), den könnte man zwischen den Raspberry und den PIC klemmen. 
Damit wäre man bei einer simplen UART und hätte trotzdem die Vorteile 
von USB. Vor allem passt der PC-Treiber schon einmal.

Für mich hört es sich so an, als ob der Dozent nicht so genau weiß was 
er da verlangt. Ich bin mit C schon an USB ziemlich verzweifelt, und 
dann das mit Assembler... (viellecht daher die Aussage mit RS232)

von Frank M. (frank_m35)


Lesenswert?

Humpfdidumpf schrieb:
> Für mich hört es sich so an, als ob der Dozent nicht so genau weiß was
> er da verlangt. Ich bin mit C schon an USB ziemlich verzweifelt, und
> dann das mit Assembler... (viellecht daher die Aussage mit RS232)

Der Dozent weiß genau was er verlangt, darum schlägt er UART vor und 
eben gerade nicht USB. USB wird ja nur zum Flashen verwendet, damit eben 
kein 'extra' Programmiergerät benötigt wird.

Da das RPi und der PIC eine UART Schnittstelle haben, UART im PIC und im 
RPi im Handumdrehen implementiert ist, die Komfortfunktionen von USB 
nicht benötigt werden und das vom Dozent gestellte Problem vermutlich 
ein ganz anderes ist als eine doofe USB Schnittstelle zum Laufen zu 
bekommen, sondern vielleicht die Übung in Assembler und das Auslesen von 
Messwerten, ist USB hier einfach nur Schwachsinn.

Hinzu kommt, dass weder der Threadstarter noch seine Kollegin mit USB 
auf einem uC jemals hantiert haben, sonst wüssten sie die Vorzüge von 
UART beim Debugging zu schätzen. USB erfordert einen sehr 
fortgeschrittenen Programmierstil, da das Programm nicht mehr rein 
linear mit blockierenden Pausen ablaufen darf, sondern eben die USB 
Routine regelmäßig angesprochen werden muss. Hat man noch wenig 
Erfahrung macht man sich das Leben daher nochmals extra schwer.

von Kein Name (Gast)


Lesenswert?

> für mich mit 2 linken Händen scheint die USB-Schnittstelle trotzdem
besser

Es gibt auch "usb rs232 ttl converter" für 3-4 €. Usb Stecker für 
Raspberry und 5 einzelne Stecker für den Pic.

Unter Linux bekommst du ein /dev/serial/... und am 5Volt Pic kannst du 
die Stecker direkt mit den Pins verbinden.

von Klaus B. (soonix)


Lesenswert?

Vielen Dank für die Antworten, besonders die von Frank M., die mir 
klargemacht hat, daß ich da ein XY-Problem gepostet habe.
Eigentlich geht es nur darum, ein paar Bits (vier Stück) hin und her zu 
übertragen.
Und die Forderung des Dozenten nach Assemler ist auch OK, der Umfang des 
Projekts ist übersichtlich genug, daß man mit Assembler klarkommen kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.