Microchip Harmony

Gast #4352353
Lesenswert?

Guten Abend,

ich versuche mich schon seit 2 Tagen in Harmony einzuarbeiten und komme 
selbst leider nicht weiter.
Ich habe die "tutorials" von Microchip selbstverständlich angeschaut, 
aber da wird gezeigt, wie man die Module (Driver) ins Projekt einbindet, 
aber nicht, wie man das benutzt.

Zuerst habe ich versucht den PIC ohne Harmony zu programmieren, ich bin 
recht schnell immer weiter gekommen. Allerdings weist mich der Compiler 
darauf hin, dass plib.h bald nicht mehr unterstützt wird, und man soll 
auf Harmony umsteigen.

Leider habe ich auf Deutsch kein einziges Tutorial dazu gefunden :((
Wenn ich etwas einbinde, generiert mir das Ding sehr viel Mist, den man 
eigentlich nicht braucht.

Ich habe das Beispielprojekt blinky led genommen, und versucht den Pin 
der LED zu ändern. Nach 2,5h habe ich das nicht hinbekommen.
Ich habe einfach die Stelle nicht gefunden, wo die LED dem Pin 
zugewiesen wird.

Sehr peinlich und frustrierend. Besonders mit 11 Jahren µC 
Programmiererfahrung.
Hatte aber früher andere µC benutzt und möchte gerne nun auf den PIC32 
umsteigen.

Ein KLEINER Auszug, was mir Harmony generiert:
1
/*******************************************************************************
2
  Board Support Package Implementation
3

4
  Company:
5
    Microchip Technology Inc.
6

7
  File Name:
8
    bsp_sys_init.c
9

10
  Summary:
11
    Board Support Package implementation for PIC32MX Ethernet Starter Kit.
12

13
  Description:
14
    This file contains routines that implement the board support package for
15
    PIC32MX Ethernet Starter Kit.
16
*******************************************************************************/
17

18
// DOM-IGNORE-BEGIN
19
/*******************************************************************************
20
Copyright (c) 2012 released Microchip Technology Inc.  All rights reserved.
21

22
Microchip licenses to you the right to use, modify, copy and distribute
23
Software only when embedded on a Microchip microcontroller or digital signal
24
controller that is integrated into your product or third party product
25
(pursuant to the sublicense terms in the accompanying license agreement).
26

27
You should refer to the license agreement accompanying this Software for
28
additional information regarding your rights and obligations.
29

30
SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND,
31
EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
32
MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE.
33
IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER
34
CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR
35
OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
36
INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
37
CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
38
SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
39
(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
40
*******************************************************************************/
41
// DOM-IGNORE-END
42

43
// *****************************************************************************
44
// *****************************************************************************
45
// Section: Included Files
46
// *****************************************************************************
47
// *****************************************************************************
48

49
#include "bsp_config.h"
50

51
// *****************************************************************************
52
// *****************************************************************************
53
// *****************************************************************************
54
// Section: Interface Routines
55
// *****************************************************************************
56
// *****************************************************************************
57

58
// *****************************************************************************
59
/* Function: 
60
    void BSP_Initialize(void)
61

62
  Summary:
63
    Performs the necessary actions to initialize a board
64
  
65
  Description:
66
    This function initializes the LED and Switch ports on the board.  This
67
    function must be called by the user before using any APIs present on this
68
    BSP.  
69

70
  Remarks:
71
    Refer to bsp_config.h for usage information.
72
*/
73

74
void BSP_Initialize(void )
75
{
76
    /* Switch off all the LEDS */ 
77
    PLIB_PORTS_PinClear( PORTS_ID_0, PORT_CHANNEL_D, BSP_LED_1 );
78
    PLIB_PORTS_PinClear( PORTS_ID_0, PORT_CHANNEL_D, BSP_LED_2 );
79
    PLIB_PORTS_PinClear( PORTS_ID_0, PORT_CHANNEL_D, BSP_LED_3 );
80
}
81

82
// *****************************************************************************
83
/* Function: 
84
    void BSP_LEDStateSet(BSP_LED led, BSP_LED_STATE state);
85

86
  Summary:
87
    Controls the state of the LED.
88
  
89
  Description:
90
    This function allows the application to specify the state of the LED.
91

92
  Remarks:
93
    None.
94
*/
95

96
void BSP_LEDStateSet(BSP_LED led, BSP_LED_STATE state)
97
{
98
    /* Switch ON the LED */
99
    PLIB_PORTS_PinWrite ( PORTS_ID_0 , PORT_CHANNEL_D , led, state );
100
}
101

102
// *****************************************************************************
103
/* Function: 
104
    void BSP_LEDOn(BSP_LED led);
105

106
  Summary:
107
    Switches ON the specified LED.
108
  
109
  Description:
110
    This function switches ON the specified LED.
111

112
  Remarks:
113
    None.
114
*/
115

116
void BSP_LEDOn(BSP_LED led)
117
{
118
    PLIB_PORTS_PinSet( PORTS_ID_0, PORT_CHANNEL_D, led);
119
}
120

121
// *****************************************************************************
122
/* Function: 
123
    void BSP_LEDOff(BSP_LED led);
124

125
  Summary:
126
    Switches OFF the specified LED.
127
  
128
  Description:
129
    This function switches OFF the specified LED.
130

131
  Remarks:
132
    None.
133
*/
134

135
void BSP_LEDOff(BSP_LED led)
136
{
137
    PLIB_PORTS_PinClear( PORTS_ID_0, PORT_CHANNEL_D, led);
138
}
139

140
// *****************************************************************************
141
/* Function: 
142
    BSP_LED_STATE BSP_LEDStateGet(BSP_LED led);
143

144
  Summary:
145
    Returns the present state of the LED.
146
  
147
  Description:
148
    This function returns the present state of the LED.
149

150
  Remarks:
151
    None.
152
*/
153

154
BSP_LED_STATE BSP_LEDStateGet(BSP_LED led)
155
{
156
    return(PLIB_PORTS_PinGetLatched(PORTS_ID_0, PORT_CHANNEL_D, led));
157
}
158

159
// *****************************************************************************
160
/* Function: 
161
    void BSP_LEDToggle(BSP_LED led);
162

163
  Summary:
164
    Toggles the state of the LED between BSP_LED_STATE_ON and BSP_LED_STATE_OFF.
165
  
166
  Description:
167
    This function toggles the state of the LED between BSP_LED_STATE_ON and
168
    BSP_LED_STATE_OFF.
169

170
  Remarks:
171
    None.
172
*/
173

174
void BSP_LEDToggle(BSP_LED led)
175
{
176
    PLIB_PORTS_PinToggle(PORTS_ID_0, PORT_CHANNEL_D,led );
177
}
178

179
// *****************************************************************************
180
/* Function: 
181
    void BSP_SwitchStateGet(BSP_SWITCH switch);
182

183
  Summary:
184
    Returns the present state (pressed or not pressed) of the specified switch.
185
  
186
  Description:
187
    This function returns the present state (pressed or not pressed) of the
188
    specified switch.
189

190
  Remarks:
191
    None.
192
*/
193

194
BSP_SWITCH_STATE BSP_SwitchStateGet( BSP_SWITCH bspSwitch )
195
{
196
    return ( PLIB_PORTS_PinGet(PORTS_ID_0, PORT_CHANNEL_D, bspSwitch) );
197
}
198

199
/*******************************************************************************
200
 End of File
201
*/

Kann doch nicht ernst gemeint sein, oder?
Für LED_ON, OFF, BLINK usw. immer eine neue Funktion, die über mehrere 
.c Files verteilt ist, und komplett verschachtelt ist.

Die alten bekannten Befehle mit "TRISB...." versteht Harmony anscheinend 
nicht.

Was ist das Problem? Oder ist das normal, dass eine blinkende LED, oder 
Funktion "PORTS" in Harmony über 25kb Code erzeugt, ohne was zu machen?

Sorry, bin gerade nur sehr genervt.
Gast #4352609
Lesenswert?

Entschuldigt meine Emotionen, bitte :)
Von Vorne nun:
Wo kann ich nachgucken, wie ich ein Pin auf High oder Low schalten kann?
Ich möchte MPLab mit Harmony nutzen. µC ist PIC32MX795F512.
Die diversen Tutorials zeigen, wie man die Driver einbindet.
Das funktioniert natürlich auch.
Harmony erzeugt einen Haufen Code, und sagt "enjoy!".
Das soll Benutzerfreundlich sein und den Zeitaufwand bei der Entwicklung 
reduzieren.
Leider habe ich nach 2 Tagen nicht mal geschafft eine LED ein zu 
schalten.
Das wird schon sicherlich an mir liegen. Ich habe bestimmt die Vorteile 
von Harmony noch nicht entdeckt.
So biete ich jemanden mir das kurz zu erklären.
Vielen Dank
Gast #4352942
Lesenswert?

Mitleidgenosse ;-)
ich kann dir leider nicht helfen, habe selbst ein ähnliches Problem.
Ich versuche gerade vom Fujitsu Microcontroller weg zu kommen und habe 
mir einen Evalboard und PicKit3 bestellt.
Jetzt liegen die Sachen da, und ich bin etwas ratlos, was ich damit 
anstellen soll.
Als Board habe ich dieses ausgesucht: 
http://ww1.microchip.com/downloads/en/DeviceDoc/ADB%20for%20PIC32%20User%20Guide.pdf
Wegen USB, Display, RS232 und natürlich Taster + LEDs.
Das Beispielprojekt lässt sich einwandfrei Compilieren und flashen.
Aber dabei soll es ja nicht bleiben ;-)
Habe einen neuen Harmony Projekt erstellt. Die Projekterstellung ist 
wirklich easy und mit paar Klicks gemacht.

Jetzt kommen meine Fragen, evtl. wird das dem TE auch helfen:
1.Kann das sein, dass es kein "normales" C ist, was Harmony da verlangt?
Ich habe sehr wohl Erfahrung mit C, und habe schon unzählige 
(abgeschlossene) Projekte hinter mir. Mit dem Harmony Gedöns kann ich 
irgendwie nichts anfangen. Das 188Mb großes Hilfe-PDF erklärt nicht 
wirklich wie hat die Module richtig benutzt.

Wäre gut wenn Jemand seine Erfahrung postet :-)

Vielen Dank schon Mal
Gruß Alexander
Gast #4352957
Lesenswert?

Frage 2:
Ist man in der Zukunft (wenn man den Microchip Compiler nutzen will) 
immer auf Harmony angewiesen?
Der Code von http://www.rocking-wombat.de/PIC32_Teil1.html funktioniert.
Beim Compilieren bekomme ich die Warnung "#warning The PLIB functions 
and macros in this file will be removed from the MPLAB XC32 C/C++ 
Compiler in future releases"
Das verstehe ich so, dass PLIB nicht mehr nutzbar wird.
Gast #4353100
Lesenswert?

Das hilft Euch bei dem Problem zwar nichts, aber ich bin aus diesem 
Grund von Microchip Code 'geheilt'.
Tolle Sachen dabei, aber ständig steht man plötzlich an irgendeinem 
Punkt an dem es nicht weitergeht, nichts Dokumentiert ist, der Code nie 
funktioniert haben kann oder mit der aktuellen Toolchain entgegen aller 
Beteuerungen nicht funktioniert.

Das ganze Zeug ist eine riesige Wanderbaustelle.
Egal was man anfasst, wenn man nicht ganz exakt die Eval Boards nimmt 
auf denen unverändert der Kram laufen soll wird es schwierig.

Der alles entscheidene Hinweis steht dann entweder versteckt auf 730 
Seiten Fliesstext oder ist niemals herauszubekommen.
Es kann sein das man durch den vorgefertigten Code schnell zu 
Ergebnissen kommt, es kann aber auch genauso passieren das man nach 
vielen Wochen intensiver Arbeit irgendwann ergebnisslos abbrechen muss.
Teilweise ist der Quellcode nicht offen und die kompilierten LIBs, 
Module, wie auch immer, funktionieren einfach nicht.
Kryptische Fehlermeldungen oder Funktionsverweigerung ohne die 
Möglichkeit daran zu arbeiten.

Diese ganzen Konfigurationstools, zu denen ich Harmony im weitesten 
Sinne auch zähle, hat MC immer mal wieder gebaut.
Funktioniert haben die immer nur für ein paar MCUs unter bestimmten 
Bedingungen.
Die Arbeit die das gespart hat steckt man dann 10fach rein wenn man 
plötzlich doch in dem Codegemurkse rummachen muß weil es in dem eigenen 
Fall eben nicht klappt oder die Peripherie die man nutzen will nicht 
korrekt initialisiert wird.

Anstatt das zu fixen gibt es dann alle paar Jahre eine tolle neue 
Software die nun wirklich alles können soll. Ja, ja ...
Gast #4353119
Lesenswert?

Ooooh,

ihr sprecht mir so aus der Seele.
Hab zwar gerade nicht mit Harmony zu tun, sondern mit Silabs, aber auch 
dort werden hunderte Zeile Code für das Setzen und nicht Setzen diverser 
uC-Bestandteile erzeugt.

Ich sehe das Problem durchaus auch auf meiner Seite.
Ich programmiere einfach (noch) nicht so generisch und habe daher 
weniger Funktionen, als vielmehr ein großes Define-Header-Sheet, in 
welchem ich den Portpins dann sprechende Namen zuteile und anschließend 
mit den Makros arbeite.
#4353147
Lesenswert?

Kann man nicht einfach ein Projekt ohne Harmony erstellen?

Da ich mich fast ausschließlich mit 8Bit PICs beschäftige,
habe ich mir mal das Pendant Microchip-Code-Configurator angeschaut.
-> Nein Danke!

Da schreibe ich doch lieber alles gleich selber, als dann 90% von dem 
erzeugten Wust, der sich dann auch noch in 'zig Dateien befindet zu 
löschen...

Die Funktionen der PLIB liegen zumindest im PIC18 Bereich als Quellcode 
vor und man kann sie also "einfach" in sein Projekt kopieren. (Für 
kleinere PIC10/12/16 gab es nie eine PLIB)
Gast #4353224
Lesenswert?

Hallo zusammen, und danke für die Antworten.

>Natürlich kann man PIC32 auch mit XC32 ohne HARMONY programmieren. Habe
>bis jetzt alles mit PIC32 auf diese Art gemacht - nicht nur LED blinken
>lassen.
Ich habe gestern mit meinem Evalboard das auch gemacht. Funktioniert.
Dabei wird überall plib.h eingebunden. Die Benutzung ist für mich als 
Umsteiger eigentlich verständlich und stellt erst mal kein Problem dar.
Beim Compilieren weist mich der XC32 darauf hin, dass plib.h bald nicht 
verfügbar sein wird.
Ohne plib.h bedeutet für mich Harmony, da es eine "eigene plib.h" hat, 
die ich nicht verstehe ;-(

>XC32 versteht auch die üblichen Schreibweisen für Registerzugriffe wie
>z.B. LATBbits.LATB0 .
Mach das mal in einem Harmony projekt... Das geht nicht.
Gast #4353257
Lesenswert?

Mach es wie ich:
Nimm Harmony nur, wenn du es wirklich braucht, sonst nicht. Ich nehm das 
gar nicht her, oder nur für USB oder so. Also für Sachen, die ich gar 
nicht verstehen möchte ;-)

Bei PIC32 kann man Ports einfach so setzen:
- Erst mal auf Out drehen:
[c]
TRISAbits.TRISA0 = 0;
[\c]

Dann schalten:
[c]
LATAbits.LATA0 = 0;  // LED aus
LATAbits.LATA0 = 1;  // LED ein
[\c]

Oder eleganter:
[c]
#define LED0  LATAbits.LATA0

LED0 = 0;  //LED aus
LED0 = 1;  //LED ein
[\c]

Wenn man jetzt noch die #defines an einer übersichtlichen Stelle alle 
zusammenfasst (z.B. in einem eigenen pindefine Header), ist das Projekt 
mit wenigen Handgriffen auch noch auf PIC24 oder darunter portierbar.

Man braucht, glaube ich, die xc.h.

Fallweise prüfen, ob der Port analog ist oder auf eine Peripherie 
zugeordnet ist.
--> Man muss Harmony nicht verwenden. Harmony und nicht Harmony code 
kann man beliebig mischen.
Gast #4353298
Lesenswert?

Ich habe es getestet.
S. Anhang
Damit meine ich Folgendes:
Ich benutze gerne die Hilfe Funktion. Zu mindestens anfangs ;-)
Ohne plib.h funktionieren viele Dinge einfach nicht.
Manches geht, manches nicht. Und wenn die Sachen aus der Help nicht 
funktionieren, dann ich das nicht gerade motivierend :-(
Angehängte Dateien:
Gast #4353387
Lesenswert?

Hallo Foristen,

ich benutze MPLAB Harmony mit einem PIC32MZ2048ECH144.

Für das Setzen eines Pins funktioniert der Befehl

SYS_PORTS_PinSet(PORTS_ID_0, PORT_CHANNEL_D, PORTS_BIT_POS_7);

Darin wird der Port D Pin 7 auf "High" gesetzt.

In der Harmony Hilfe steht dazu auf Seite 6507
Function
void SYS_PORTS_PinSet
(
PORTS_MODULE_ID index,
PORTS_CHANNEL channel,
PORTS_BIT_POS bitPos
)

Hier ist ein Schreibfehler in der Hilfe enthalten statt PORT_CHANNEL_D 
steht da PORTS_CHANNEL ! Ohne Unterstrich und mit PORTS geschrieben!

Die "Harmony" Dokumentation ist sehr unzuverlässig. Einige Beispiele 
funktionieren auf meinen StarterKit nicht richtig.

Bin von Microchip Harmony nicht sehr überzeugt. Da ich aber einen 
PIC32MZ habe gibt es nur Beispiele dazu nur in Microchip Harmony. 
Leider!

Mit freundlichen Grüßen
Gast #4358115
Lesenswert?

Hallo zusammen,
also ich stand vor einem ähnlichen Problem:

Aufgrund von Performance musste ich vom PIC18 auf den PIC32 umsteigen.
Da ich in dem Projekt USB und Ethernet einsetzen musste, habe ich mich 
also auch mit Harmony (V1.02) auseinander gesetzt.
Es war eine reine Katastrophe......Da blickt man als normaler 
C-Programmierer einfach nicht durch.....

Habe dann den Stecker gezogen und bin beim PIC32MX...  auf das 
eigentlich abgekündigte MLA umgestiegen.....
USB und Ethernet lief nach kurzer Zeit, den Rest der Hardware (SPI usw.) 
programmiere ich lieber selber....

Die PLIB muss man bei neueren Compiler Versionen hat nur separat 
herunterladen, läuft dann auch weiterhin.
LG Dirk
Gast #4361319
Lesenswert?

Hallo Foristen,

beim PIC32MX ist es noch möglich mit MLA noch zu arbeiten, aber bei der 
neuen PIC32MZ Reihe ist ein Umstieg meines Wissens nach nicht möglich. 
Leider. Diese haben höhere USB Geschwindigkeiten gegenüber der PIC32MX 
Reihe.
Neuere Beispiele in Harmony ab (1.6) funktionieren einwandfrei, aber 
ältere sind mit unter nicht zu gebrauchen. Das Paradigma hinter Harmony 
ist wohl das sich der Programmierer so wenig wie möglich mit der 
Hardware des µCs auseinandersetzen soll. Mit scheint es gibt da gewisse 
Ähnlichkeiten zum Arduino IDE.

Mit freundlichen Grüßen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren