Forum: Mikrocontroller und Digitale Elektronik Microchip Harmony


von Markus (Gast)


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.

von Markus (Gast)


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

von Alex S. (Gast)


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

von Alex S. (Gast)


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.

von Michael K. (Gast)


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

von Silabs (Gast)


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.

von Volker S. (vloki)


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)

von Chris B. (dekatz)


Lesenswert?

Volker S. schrieb:
> Kann man nicht einfach ein Projekt ohne Harmony erstellen?
>

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.

XC32 versteht auch die üblichen Schreibweisen für Registerzugriffe wie 
z.B. LATBbits.LATB0 .

: Bearbeitet durch User
von Alex S. (Gast)


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.

von H.Joachim S. (crazyhorse)


Lesenswert?

Da scheint ja der Programmname nicht so ganz gerechtfertigt :-)

von Daniel (Gast)


Lesenswert?

Alex S. schrieb:
>>XC32 versteht auch die üblichen Schreibweisen für Registerzugriffe wie
>>z.B. LATBbits.LATB0 .
> Mach das mal in einem Harmony projekt... Das geht nicht.

Ntürlich, du muss nur die XC.h einbinden ;-)

von Daniel (Gast)


Lesenswert?

Daniel schrieb:
> Ntürlich, du muss nur die XC.h einbinden ;-)

Sorry, ich meinte: Natürlich, du musst nur die XC.h einbinden.

von WehOhWeh (Gast)


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.

von WehOhWeh (Gast)


Lesenswert?

Sorry. Die Sache mit den Codetags
 habe ich leider vermasselt.
Bitte ignorieren :-(

von Alex S. (Gast)


Angehängte Dateien:

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 :-(

von Volker S. (vloki)


Lesenswert?

Also wenn ich zum Toggeln eines Pins eine Funktion aus der Plib aufrufen 
muss...

von Rumburak (Gast)


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

von Dirk F (Gast)


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

von Rumburak (Gast)


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

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.