Forum: Mikrocontroller und Digitale Elektronik PIC32 Buch oder Tutorial


von Yaro (Gast)


Lesenswert?

Hallo Leute,

ich möcte von AVR 8-bit auf PIC32 umsteigen und suche dafür die passende 
Lektüre. Kennt jemand da was gutes?

Das einzige, was ich gefunden habe ist "Programming 32-bit 
microcontrollers in C: exploring the PIC32   Von Lucio Di Jasio"

Ist es gut? Gibt es bessere?
Gibt es vielleicht ausführliche Tutorials im net (welche die es darauf 
anlegen, dass man es wirklich versteht und durchblickt und nicht nur c&p 
lehren)

Gruß, Yaro

von Stampede (Gast)


Lesenswert?

Hallo,

das Buch ist wirklich empfehlenswert. Schoen mit Beispielen, die sowohl 
den Code als auch die Hardware gut erklaeren. Ist auch sprachlich nicht 
zu schwer.
Sonst wenn du nicht weiterweisst: www.fernando-heitor.de
Da helfe ich dir mit den PIC32 gerne weiter falls fragen bestehen.

Gruss,
Stefan

von Tr.Ha. (Gast)


Lesenswert?

Trotz längere Suche habe ich bisher auch nichts besseres als das 
genannte Buch gefunden.

Was mich aber schnelle weiter gebracht hat, sind die PIC32 
Starter-Kit´s.
Zu den Kit´s gibt es Beispielprojekte, die wirklich gut funktionieren 
und auch halbwegs gut dokumentiert sind. Sicher wirst Du schon bemerkt 
haben, dass auch über die Microchip-Homepage viele Informationen zu 
erhalten sind.

von Yaro (Gast)


Lesenswert?

Ok, dann werde ich mir das Buch holen und wenn ich dann noch was nicht 
weiß, die Microchip-Homepage durchsuchen.
Alleine mit dem Starter-Kit möchte ich nicht anfangen, weil ich eher der 
Typ bin, der sich zuerst informiert und dann mach anstatt mich durch try 
and error dranzutasten.

Danke für die Antworten!

von Anguel S. (anguel)


Lesenswert?

Yaro schrieb:
> Ok, dann werde ich mir das Buch holen und wenn ich dann noch was nicht
> weiß, die Microchip-Homepage durchsuchen.
Das Buch ist wirklich gut. Für die ersten Kapitel brauchst du nicht mal 
ein Board, weil dort alles mit dem MPLAB Simulator gemacht wird. Leider 
gibt es hier und dort ein paar Sachen, die nicht ganz stimmen oder sich 
inzwischen leicht verändert haben (siehe auch Errata auf der Webseite 
zum Buch!). Also nur nicht wundern, wenn mal was nicht ganz hinkommt. 
Beispielsweise verwendet der Autor bei den Interrupts nicht die fertigen 
Lib-Routinen sondern greift als alter Assembler-Hase auch schon mal 
direkt auf die Register zu. Leider gibt es dann an einer Stelle Probleme 
mit dem Simulator - der tut nicht was er sollte. Ob das nun an dem 
Simulator liegt, oder an dem Code des Autors, weiß ich nicht - aber die 
Single Vectored Interrupt Beispiele des Autors unterscheiden sich IMHO 
schon etwas von den Beispielen, die beim Compiler sind (schau auch mal 
ins Microchip Forum wenn was faul zu sein scheint). Noch ein Tipp: Du 
lädst dir ja erstmal MPLAB runter. Da ist schon der C32 Compiler drin, 
aber nicht in der ganz aktuellen Version. Deshalb installierst Du MPLAB 
aber wählst dabei die C32 Suite Option ab. Dann lädst du dir den neusten 
C32 Compiler runter (Lite Version, weil nur diese kostenlos ist!) und 
installierst den.

> Alleine mit dem Starter-Kit möchte ich nicht anfangen, weil ich eher der
> Typ bin, der sich zuerst informiert und dann mach anstatt mich durch try
> and error dranzutasten.
Genau! Das PIC32 Buch scheint echt gut zu sein! Und wenn du dich jetzt 
fragst, warum ein einziges Buch, solltest Du mal schauen wieviele Bücher 
es zu den ARM Cortex-M3 Chips gibt - nämlich gar keine :)

von Rüdiger (Gast)


Lesenswert?

Hallo Community,

ich habe mir für meinen PIC32 Ethernet Starter Kit die TCPIP Demo App - 
PIC32ETHSTK von der Microchip Website runtergeladen, compiliert und 
ausgeführt. Klappt alles tadellos. Ich greife über einen Webbrowser mit 
http://mchpboard auf den Demo Webserver zu.


So nun zu meinem Problem:
Unter der Rubrik "Form Processing" auf der TCP/IP Stack Demo Application 
befindet sich eine AUFGABE, die ich lösen will, aber nicht kann. Ich 
verstehe es nicht!! und brauche Hilfe.


Es sind 4 Buttons, die ich betätigen kann. Durch diese werden die LED´s 
auf dem Starter Kit getoggelt. Und die
Aufgabe lautet:"Exercise: Modify this form to support LED 5."

Ich habe nun mehrere Stunden versucht, die Aufgabe zu lösen, aber 
erfolglos.
Gibt es eine gute Beschreibung zum TCP Stack?

Gruß, Rüdiger

von Wackel D. (pitzelpatzel)


Lesenswert?

Anguel S. schrieb:
> Genau! Das PIC32 Buch scheint echt gut zu sein! Und wenn du dich jetzt
> fragst, warum ein einziges Buch, solltest Du mal schauen wieviele Bücher
> es zu den ARM Cortex-M3 Chips gibt - nämlich gar keine :)

Doch! :-)

"The Definitive Guide to the ARM CORTEX-M3"

von heinzhorst (Gast)


Lesenswert?

Rüdiger schrieb:
> Ich habe nun mehrere Stunden versucht, die Aufgabe zu lösen, aber
> erfolglos.


Die wird auch erfolglos bleiben. Das PIC32 Ethernet Starter Kit hat 
nämlich nur 3 LEDs.

Rüdiger schrieb:
> Gibt es eine gute Beschreibung zum TCP Stack?

Ja, das Helpfile. Ist eigentlich sehr ausführlich.

von Rüdiger (Gast)


Lesenswert?

heinzhorst schrieb:
> Die wird auch erfolglos bleiben. Das PIC32 Ethernet Starter Kit hat
>
> nämlich nur 3 LEDs.

Ich habe zusätzlich das I/O Expansion KIT, und eine kleine Platine mit 
paar mehr LED´s, die ich gerne schalten will.

von heinzhorst (Gast)


Lesenswert?

Rüdiger schrieb:
> Ich habe zusätzlich das I/O Expansion KIT, und eine kleine Platine mit
> paar mehr LED´s, die ich gerne schalten will.

Ich auch ;-).

Ok, also zurück zu deiner Frage. Als Erstes musst du den HTML-Code der 
Webseite entsprechend ändern. Sollte eigentlich nur Copy-Paste und ein 
paar kleine Anpassungen sein. Dass musst du die neue Webseite durch das 
MPFS-Toll jagen, damit du sie mit Einkompilieren kannst. Dann ist die 
Interaktion zwischen Quellcode und Webseite dran. Das findest du in der 
CustomHTTPApp.c. Dort siehst du dir mal die Funktion
1
HTTP_IO_RESULT HTTPExecuteGet(void)

an.

von Rüdiger (Gast)


Lesenswert?

Danke dir für deine schnelle Antwort:-)

werde ich gleich ausprobieren...melde mich später hoffentlich mit einer 
guten Nachricht

von Rüdiger (Gast)


Lesenswert?

Ich lese mich gerade in die Funktionen vom MPFS Generator ein. Ich habe 
den Bislang nicht benutzt.

Den Quellcode habe verändert und nun muss ich gerade nachlesen wie ich 
das tool bediene...

von Rüdiger (Gast)


Lesenswert?

Ich habe mir gerade den neuen Stack von Microchip besorgt.

Verwende folgende appDemo:

TCPIP Demo App - C32 - PIC32_ENET_SK_DM320004_INTERNAL_ETHERNET


ich erhalte hier beim Compilieren eine Fehlermeldung:
Muss ich vllt eine andere app benutzen???



n file included from ..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:48:
../Microchip/Include/TCPIP Stack/ETHPIC32ExtPhy.h:186: error: syntax 
error before "eEthMacPauseType"
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c: In function `_PhyReadReg':
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:93: warning: implicit 
declaration of function `EthMIIMReadStart'
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:94: warning: implicit 
declaration of function `EthMIIMReadResult'
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c: In function 
`EthPhyRestartNegotiation':
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:130: warning: implicit 
declaration of function `EthMIIMWriteStart'
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c: In function `EthPhyInit':
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:228: error: `ETH_OPEN_RMII' 
undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:228: error: (Each undeclared 
identifier is reported only once
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:228: error: for each function 
it appears in.)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:228: error: `ETH_OPEN_MII' 
undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:232: warning: implicit 
declaration of function `EthMIIMConfig'
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:317: error: 
`ETH_MAC_PAUSE_CPBL_MASK' undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:317: error: 
`ETH_MAC_PAUSE_TYPE_PAUSE' undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:321: error: 
`ETH_MAC_PAUSE_TYPE_ASM_DIR' undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c: At top level:
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:481: error: syntax error 
before "eEthMacPauseType"
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c: In function 
`EthPhyGetNegotiationResult':
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:489: error: `eEthMacPauseType' 
undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:489: error: syntax error 
before "pauseType"
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:497: error: `pauseType' 
undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:497: error: 
`ETH_MAC_PAUSE_TYPE_NONE' undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:514: error: 
`ETH_MAC_PAUSE_CPBL_MASK' undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:514: error: 
`ETH_MAC_PAUSE_TYPE_PAUSE' undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:515: error: 
`ETH_MAC_PAUSE_TYPE_ASM_DIR' undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:586: error: 
`ETH_MAC_PAUSE_TYPE_EN_TX' undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:590: error: 
`ETH_MAC_PAUSE_TYPE_EN_RX' undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:595: error: `pFlags' 
undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:600: error: `pPauseType' 
undeclared (first use in this function)
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c: In function 
`EthPhyScanLinkRead':
..\Microchip\TCPIP Stack\ETHPIC32ExtPhy.c:734: warning: implicit 
declaration of function `EthMIIMScanResult'

von Rüdiger (Gast)


Lesenswert?

Habe erfahren, dass die Fehlermeldung kommt, weil ich den Compiler C32 
1.10 verwende.

Habe nun die Version 1.12 und bekomme nun andere Fehlermeldungen...

In file included from ../Microchip/Include/TCPIP Stack/TCPIP.h:292,
                 from ..\Microchip\TCPIP Stack\Announce.c:65:
../Microchip/Include/TCPIP Stack/Helpers.h:63: error: conflicting types 
for 'ultoa'
C:/Programme/Microchip/mplabc32/v1.12/bin/../lib/gcc/pic32mx/3.4.4/../.. 
/../../pic32mx/include/stdlib.h:80:  error: previous declaration of 
'ultoa' was here
../Microchip/Include/TCPIP Stack/Helpers.h:63: error: conflicting types 
for 'ultoa'
C:/Programme/Microchip/mplabc32/v1.12/bin/../lib/gcc/pic32mx/3.4.4/../.. 
/../../pic32mx/include/stdlib.h:80:  error: previous declaration of 
'ultoa' was here
Halting build on first failure as requested.


Hier weiß ich nicht woran das liegen könnte??

von Rüdiger (Gast)


Lesenswert?

Ich habe das Problem nicht lösen können:-(

Hat jemand Erfahrungen mit diesem Fehler?

Meine MPLAB Version ist v8.66
MPLAB C32 C Compiler ist v1.12
verwendete TCPIP Demo App ist aus Microchip Solutions v2010-10-19

Ich habe praktisch alle Daten neu installiert.
Und die einzelnen Komponenten spielen nicht zusammen?!

von Frank K. (fchk)


Lesenswert?

Ab 1.12 hat der C32 selber ein ultoa() eingebaut. Du musst einfach in 
helpers.h das #define erweitern, damit es nicht zu Konflikten kommt.
1
// Implement consistent ultoa() function
2
#if (defined(__PIC32MX__) && (__C32_VERSION__ < 111)) || (defined (__C30__) && (__C30_VERSION__ < 325)) || defined(__C30_LEGACY_LIBC__)
3
  // C32 and C30 < v3.25 need this 2 parameter stack implemented function
4
  void ultoa(DWORD Value, BYTE* Buffer);
5
#elif defined(__18CXX) && !defined(HI_TECH_C)
6
  // C18 already has a 2 parameter ultoa() function
7
  #include <stdlib.h>
8
#else
9
  // HI-TECH PICC-18 PRO 9.63 and C30 v3.25+ already have a ultoa() stdlib 
10
  // library function, but it requires 3 parameters.  The TCP/IP Stack 
11
  // assumes the C18 style 2 parameter ultoa() function, so we shall 
12
  // create a macro to automatically convert the code.
13
  #include <stdlib.h>
14
  #define ultoa(val,buf)  ultoa((char*)(buf),(val),10)
15
#endif

fchk

von Rüdiger (Gast)


Lesenswert?

Danke für die schnelle Antwort:-)
Werde ich sofort ausprobieren

von Rüdiger (Gast)


Lesenswert?

Ich habe die helpers.h mit deinem Quellcode geändert erhalte nun einen 
Konflikt der sich in Helpers.c befindet:
Muss ich in der C-Datei auch eine Änderung vorhnehmen?

..\Microchip\TCPIP Stack\Helpers.c:881: error: syntax error before '(' 
token
..\Microchip\TCPIP Stack\Helpers.c:881: error: `ultoa' declared as 
function returning a function
..\Microchip\TCPIP Stack\Helpers.c:881: error: conflicting types for 
'ultoa'
C:/Programme/Microchip/mplabc32/v1.12/bin/../lib/gcc/pic32mx/3.4.4/../.. 
/../../pic32mx/include/stdlib.h:80:  error: previous declaration of 
'ultoa' was here
..\Microchip\TCPIP Stack\Helpers.c:881: error: conflicting types for 
'ultoa'
C:/Programme/Microchip/mplabc32/v1.12/bin/../lib/gcc/pic32mx/3.4.4/../.. 
/../../pic32mx/include/stdlib.h:80:  error: previous declaration of 
'ultoa' was here
..\Microchip\TCPIP Stack\Helpers.c:881: error: syntax error before 
"Value"
..\Microchip\TCPIP Stack\Helpers.c:888: error: syntax error before "if"
..\Microchip\TCPIP Stack\Helpers.c:897: warning: type defaults to `int' 
in declaration of `Printed'
..\Microchip\TCPIP Stack\Helpers.c:897: error: conflicting types for 
'Printed'
..\Microchip\TCPIP Stack\Helpers.c:886: error: previous definition of 
'Printed' was here
..\Microchip\TCPIP Stack\Helpers.c:897: warning: data definition has no 
type or storage class
..\Microchip\TCPIP Stack\Helpers.c:898: error: syntax error before '}' 
token
..\Microchip\TCPIP Stack\Helpers.c:907: warning: type defaults to `int' 
in declaration of `Buffer'
..\Microchip\TCPIP Stack\Helpers.c:907: warning: data definition has no 
type or storage class
..\Microchip\TCPIP Stack\Helpers.c:908: error: syntax error before '}' 
token
Halting build on first failure as requested.

von Frank K. (fchk)


Lesenswert?

Rüdiger schrieb:
> Ich habe die helpers.h mit deinem Quellcode geändert erhalte nun einen
> Konflikt der sich in Helpers.c befindet:
> Muss ich in der C-Datei auch eine Änderung vorhnehmen?

Ja, direkt vor der Definition von ultoa() ist auch ein #if, das Du auch 
auf die gleiche Weise anpassen musst. Wenn Du C kannst, sollte Dir das 
nicht schwer fallen.

von Rüdiger (Gast)


Lesenswert?

Es hat auf anhieb funktioniert:)) Ich kann auf den Webserver drauf zu 
greifen...

Danke dir vielmals...


Werde nun versuchen meine LED`S anzusteuern...

von heinzhorst (Gast)


Lesenswert?

@Frank: Danke! Das Problem ist bei mir heute auch aufgetreten, als ich 
versucht habe, die neue Application Library mit TCPIP mit dem C32 v1.10 
zu Compilieren. Ließ sich aber dank Deiner Beschreibung schnell beheben.

von Rüdiger (Gast)


Lesenswert?

Frank und Heinzhorst,
danke für die gute Beschreibung.

Es funktioniert alles so weit!!!

von Rüdiger (Gast)


Lesenswert?

Eine Frage habe ich doch noch.

Ich habe es hinbekommen, dass die letzte LED (RD0) nicht mehr toggelt. 
Habe es den Code in ManDemo.c verändert.

// Blink LED0 (right most one) every second.
        if(TickGet() - t >= TICK_SECOND/2ul)
        {
            t = TickGet();
            //LED0_IO ^= 1;
            t=t;
        }
Momentan kann ich die letzte LED nicht toggeln.. Es wird auf index.htm 
aufgeführt aber ich kann es nicht bedienen.

von Rüdiger (Gast)


Lesenswert?

Hallo,

ich versuche gerade herauszufinden, über welchen Port ich den PIC32 
anprechen kann.

Im File TCP.c wird ein bestimmter Bereich festgelegt.

/ Starting port for client sockets
#define LOCAL_PORT_START_NUMBER (1024u)
// End port for client sockets
#define LOCAL_PORT_END_NUMBER   (5000u)

NextPort = (((WORD)GenerateRandomDWORD()) & 0x07FFu) + 
LOCAL_PORT_START_NUMBER;

Das würde ja heißen, ich habe keinen festen Port.


Kann mich bitte einer Aufklären, wie das gehandhabt wird.
Bzw. über welchen Port ich benutzen soll??

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.