Forum: Compiler & IDEs welches Mplab für usb4all ?


von T. X. (nebelfuerst)


Lesenswert?

Ich will den source von usb4all compilieren.( das coole ding von 
www.sprut.de).
Leider ist das wohl mit einem mplab vor einiger Zeit compiliert worden 
und ich finde keinen Hinweis, welche Version es exakt war.

Versuche ich es nun mit dem aktuellen Mplab-X, dann bekomme ich bereits 
in den includes Ärger, da dort der gleiche define einmal als Hex und 
einmal als Bin definiert wird.

Nun habe ich mir eine Version 8.6 geholt, die compiliert auch, doch das 
Verhalten ist nicht korrekt, denn es werden keine IO-Pins gesetzt, 
obwohl am USB alles sauber quittiert wird.

Hat jemand usb4all auf irgendeiner definierbaren Mplab-Version 
compilieren können ?

von Volker S. (vloki)


Lesenswert?

Was für Compiler hast du installiert?

Das ist auf jeden Fall ein Projekt der alten IDE und für dem C18 
Compiler. Sieht auch nach einer sehr alten Version des USB Frameworks 
aus.

: Bearbeitet durch User
von T. X. (nebelfuerst)


Lesenswert?

Das IDE ist Mplab 8.92 beim compiler habe ich den C18 3.47 
(Eval-Version) getestet.

Ich musste wenige defines korrigieren, die als binary und dezimal unter 
gleichem Namen deklariert wurden. Allein das lässt mich vermuten, dass 
es bei sprut ein älterer/toleranterer Compiler war.

Kann man einem binary "ansehen", mit was er compiliert wurde ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

T. X. schrieb:
> Ich musste wenige defines korrigieren, die als binary und dezimal unter
> gleichem Namen deklariert wurden.

Das klingt sehr seltsam; das darf kein Compiler von sich aus schlucken.

Magst Du mal ein Beispiel für solche eine Definition (in Form einer 
Headerdatei, die beides enthält) zeigen?

von T. X. (nebelfuerst)


Lesenswert?

bitte sehr:
das meldet der compiler
:\Programme\Microchip\mplabc18\v3.47\h\mwire.h:41:Error [1034] previous 
definition of macro 'SSPENB' does not agree
C:\Programme\Microchip\mplabc18\v3.47\h\spi.h:51:Error [1034] previous 
definition of macro 'MODE_01' does not agree
C:\Programme\Microchip\mplabc18\v3.47\h\spi.h:59:Error [1034] previous 
definition of macro 'MODE_11' does not agree
MPLAB C18 3.47 (evaluation)

das wird beanstandet:
mwire.h
/* SSPxSTAT REGISTER */
#define   MODE_01       1              //Setting for SPI bus Mode 0,1
#define   MODE_11       3              //Setting for SPI bus Mode 1,1
/* SSPxCON1 REGISTER */
#define   SSPENB        0x20           // Enable serial port and 
configures SCK, SDO, SDI

und hier die spi.h
#define   MODE_01       0b00000001              // Setting for SPI bus 
Mode 0,1
#define   MODE_11       0b00000011              // Setting for SPI bus 
Mode 1,1

wenn ich statt der Bin-Definition auch obige Dezimalzahl schreibe, gibts 
keine Beanstandung. Es sind die offiziellen includes vom 3.47 C18 
Compiler.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Und Du musst beide Dateien im gleichen Sourcefile einbinden?

Daß "spi.h" für die SPI-Schnittstelle da ist, ergibt sich; was ist 
"mwire.h", wofür ist die da?

von Volker S. (vloki)


Lesenswert?

T. X. schrieb:
> wenn ich statt der Bin-Definition auch obige Dezimalzahl schreibe, gibts
> keine Beanstandung. Es sind die offiziellen includes vom 3.47 C18
> Compiler.
Mach das einfach! (ich würde bei beiden die Binärschreibweise einsetzen)
Die Pfadangaben im usb4all Projektfile (.mcp) deuten auf eine sehr alte 
C18 Version. Später wurde eine Versionsinfo integriert. (z.B. 
/opt/microchip/mplabc18/*v3*.*40*) Vieleicht war es bei den frühen 
Versionen noch kompatibel oder Sprut hat das auch selber abgeändert.


Rufus Τ. F. schrieb:
> was ist "mwire.h", wofür ist die da?
Microwire (EEPROMs)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Volker S. schrieb:
> (ich würde bei beiden die Binärschreibweise einsetzen)

Damit legt man sich auf einen Compiler fest, der eine nicht im Standard 
definierte "Binärschreibweise" verwendet. Auch C11 kennt das 0b-Präfix 
nicht.

So etwas sollte man sich --meiner Ansicht nach-- gar nicht erst 
angewöhnen.

Meine eigentliche Frage, ob es wirklich nötig ist, im gleichen 
Sourcefile sowohl "spi.h" als auch "mwire.h" einzubinden, wurde im 
übrigen noch nicht beantwortet.

von Volker S. (vloki)


Lesenswert?

Rufus Τ. F. schrieb:
> Meine eigentliche Frage, ob es wirklich nötig ist, im gleichen
> Sourcefile sowohl "spi.h" als auch "mwire.h" einzubinden, wurde im
> übrigen noch nicht beantwortet.

In diesem Projekt 
http://www.sprut.de/electronic/pic/projekte/usb4all/usb4all.htm gibt es 
im Prinzip nur ein "user"-sourcefile

von Volker S. (vloki)


Lesenswert?

Rufus Τ. F. schrieb:
> Damit legt man sich auf einen Compiler fest, der eine nicht im Standard
> definierte "Binärschreibweise" verwendet. Auch C11 kennt das 0b-Präfix
> nicht.

Das sind eh Files aus der Bibliothek für die peripheren Module eines 
nicht Standard konformen, sehr PIC18 spezifischen und nicht mehr 
supporteten Compilers. Da machen die das eben (immer) ähm oft so. Was 
solls... ;-)

: Bearbeitet durch User
von Volker S. (vloki)


Lesenswert?

T. X. schrieb:
> wenn ich statt der Bin-Definition auch obige Dezimalzahl schreibe, gibts
> keine Beanstandung. Es sind die offiziellen includes vom 3.47 C18
> Compiler.

Funktioniert jetzt eigentlich alles?

Ich habe mir das Projekt vor einiger Zeit auch mal kurz angeschaut, mich 
aber dann dagegen entschieden und mit einer aktuellen Version des 
Microchip Frameworks etwas eigenes zu bauen. Die "user" Dateien werde 
ich mir aber nachträglich noch archivieren. Man weiß ja nie ;-)

von T. X. (nebelfuerst)


Lesenswert?

dass ich in den includes ändern musste, verwunderte mich schon, da ich 
annehme, dass der sourcecode bei sprut ohne diese "Nachbearbeitung an 
wundersamer Stelle" funktioniert hat.
Er compiliert dann ohne Error, aber:
Die Funktion ist nicht ok. Es wird zwar USB Empfang und Reply 
ausgeführt, aber die IO-Pins funktionieren nicht.

von Volker S. (vloki)


Lesenswert?

Welche Befehle schickst du genau?

Kannst du nicht versuchen das zu debuggen?
Einen Breakpoint in die Funktion, welche die Befehle abarbeitet und 
Schritt für Schritt schauen was passiert.
Der PC wird dabei leider die Verbindung abbrechen und du musst die 
Schnittstelle schließen und dann den PIC resetten. Danach nächster 
Versuch...

von T. X. (nebelfuerst)


Lesenswert?

ich nutze des Windows-Testprogram von sprut.
Mit der V10-Firmware setze ich bei digital IO den init, dann write ich 
0xAA und meine LED leuchten.
Tausche ich nun die Firmware durch meine eigene V9, dann leuchtet 
nichts.

Im Code laufe ich an die richtige Stelle, wie mir mein 
"dataPacket._byte[2]" im USB-Antwortstring verrät.s.u.

Das mit dem Breakpoint checke ich nicht. Kann ich das auch nutzen im 
Live-Device ? Mit einem Simulator weiss ich nicht, wie ich den USB-Input 
simulieren kann..


void UP_IO(void)
{
  switch (dataPacket._byte[1])
  {
    case 0://aus:   alle Pin auf input
      TRISA |= MaskeA;
      TRISB |= MaskeB;
      TRISC |= MaskeC;
      break;
    case 1://init:  TRIS ganzer ports und pull-up
      TRISA = dataPacket._byte[2] & MaskeA;
      TRISB = dataPacket._byte[3] & MaskeB;
      TRISC = dataPacket._byte[4] & MaskeC;
      if (dataPacket._byte[5] & 1 == 1)  INTCON2bits.NOT_RBPU = 0; 
//pullup an
        else               INTCON2bits.NOT_RBPU = 1; //pullup aus
      break;
      dataPacket._byte[2] = 0x11; //xxx
    case 2://write: schreiben ganzer ports
      LATA = (LATA & (~MaskeA)) | (dataPacket._byte[2] & MaskeA);
      LATB = (LATB & (~MaskeB)) | (dataPacket._byte[3] & MaskeB);
      LATC = (LATC & (~MaskeC)) | (dataPacket._byte[4] & MaskeC);
      dataPacket._byte[2] = 0x12; //xxx
      break;

von Volker S. (vloki)


Lesenswert?

T. X. schrieb:
> Das mit dem Breakpoint checke ich nicht. Kann ich das auch nutzen im
> Live-Device ?

Live-Device? Das checke ich nicht ;-)
Was hast du für ein Programmer/Debugger?

von T. X. (nebelfuerst)


Lesenswert?

Ich habe die Platine vom usb4all gebaut. Dort kann man per Jumper den 
bootloader so einstellen, dass er von der Windows-Seite eine neue 
Firmware laden lässt. Das Board hat den USB-Port und die IO-Pins für die 
LEDs.
Ansonsten habe ich einen China-Programmer, der den PIC standalone 
schreiben kann.

von Volker S. (vloki)


Lesenswert?

T. X. schrieb:
> Ansonsten habe ich einen China-Programmer, der den PIC standalone
> schreiben kann.

In China gibt es auch PICkit Klone, aber so einen hast du dann wohl 
nicht?

von Volker S. (vloki)


Lesenswert?

Seltsam, wenn man in der Demosoftware den Haken bei CDC blablabla 
setzt sieht man wohl was da geschickt wird. Für init-IO 50 11 ...:

>ASCII_tx: 50
>#50- 11 -00-00-00-00-00-00-00-00-00-00-00-00-00-00-
>ASCII_tx: 50
>#50- 02 -55-55-55-55-55-00-00-00-00-00-00-00-00-00-

Das sollte doch eine laut Beschreibung eine 01 sein. Kannst ja mal im 
Sourcecode auf case 0x11 : ändern und schauen, ob sich was tut.

: Bearbeitet durch User
von T. X. (nebelfuerst)


Lesenswert?

ich werde mir dann eine china pickit3 besorgen.

die cdcblabla-strings sind bei mir gleich zwischen der V10, die 
funktioniert und meiner selbst compilierten V9.. die leider keine LED 
schaltet.

von Volker S. (vloki)


Lesenswert?

T. X. schrieb:
> die cdcblabla-strings sind bei mir gleich...


wenn die v9 aber was anderes erwartet?
Geschickt wird anscheinend 0x50 0x11.
Was soll die v9 darauf antworten?

von T. X. (nebelfuerst)


Lesenswert?

So, habe jetzt ein pickit3 aus dem Land des Lächelns.
Irgendwie habe ich Probleme mit dem gleichzeitigen USB-Betrieb des 
usb4all und dem Pickit. Ich habe einen breakpoint gesetzt, aber ich sehe 
immer eine asm-Zeile, die ich nicht mit dem Breakpoint korrelieren kann.
Wenn ich dann RUN oder ähnliches auswähle, verschwindet der PIC meistens 
vom USB oder der pickit verliert die Verbindung.

Da ich mit dem Pickit teils an den Pins hänge, die von der SW als 
Ausgang angesteuert werden, frage ich mich, ob das irgendwie abgefangen 
wird oder ich mir per SW dabei den Debugger abschalte ???

von Volker S. (vloki)


Lesenswert?

Das, das USB-Device (der PIC) beim Anhalten verschwindet ist normal.
Nach jedem Halt muss die Schnittstelle geschlossen, ein Reset ausgeführt 
werden und die Schnittstelle wieder geöffnet werden.
Das Beteriebssystem (Windows) hat gemerkt, dass das USB-Gerät nicht mehr 
innerhalb vorgeschriebener Zeiten reagiert und gedacht es wurde 
entfernt.

Das PICkit ist davon allerdings normalerweise nicht betroffen.

Die PGC/PGD Pins sollten eigentlich während des Debuggens in ihrer 
normalen Funktion deaktiviert sein. Ich habe aber auch schon gesehen, 
dass es da Probleme gab. Am besten du verwendest die erst mal einfach 
nicht.

<edit> mit der Zeit wirst du vermutlich heraus bekommen, warum der 
Debugger an einer bestimmten Stelle im Code (oder auf den ersten Blick 
auch sonst wo ;-) steht, wenn das Programm stoppt.

: Bearbeitet durch User
von T. X. (nebelfuerst)


Lesenswert?

Ich hab's gelöst.
Volker SK (vloki) hatte bereits den Tip gegeben, den ich einfach nicht 
glauben wollte:
Das Testprogramm schickt ein 0x11 für init, aber der sourcecode der V9 
prüft nur auf 0x1 ab. Gibt man den gleichen Befehl an eine V10, dann 
funktioniert es.. scheinbar hat die V10 irgendwo eine Bitmaske auf den 
Befehl, die V9 nicht hat. Das ist doch der Tatbestand der Heimtücke ?

In Summe war's ein harter Kampf für ein paar LEDs, aber ich habe jetzt 
den Code verstanden, das Pickit in Betrieb ... der Lerneffekt war groß 
;-)
Danke für eure Tips.

von Volker S. (vloki)


Lesenswert?

T. X. schrieb:
> aber ich habe jetzt den Code verstanden, das Pickit in Betrieb ...
> der Lerneffekt war groß

Ist doch super ;-)

von Michael K. (damichl)


Lesenswert?

kurze Frage hierzu: hat vielleicht jemand noch eine fertige Platine 
(unbestückt) übrig?

Danke!

von Volker S. (vloki)


Lesenswert?

Loch/Streifen-raster? (da ist doch so gut wie nichts drauf)

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.