Forum: Mikrocontroller und Digitale Elektronik PIC24FJ16GA002 - Einstiegsprobleme


von Christian H. (thunder2002) Benutzerseite


Lesenswert?

Moin,

ich habe kürzlich vom PPS (Peripherial Pin Select) Feature der PIC24FJ's 
gelesen und schwer von begeistert.

Also hab ich mir ein PicKit2 Debug Express geholt und dazu ein paar 
PIC24FJ's unter anderem den PIC24FJ16GA002. Leider habe ich etwas 
Probleme mit der Programmierung, der Einstieg bei AVRs war für mich 
einfacher. Ich habe an Pin 26 also RB15 eine LED angeschlossen und 
möchte den Pin jetzt einfach als Output high schalten um die LED 
aufleuchten zu lassen. Soweit so gut, aber außer das BEIM Programmieren 
merkwürdigerweise die LED mehrmals kurz aufblinkt passiert leider nichts 
:( Übrigens statt LATB PORTB zu verwenden bringt leider keinen 
Unterschied.

Hier mein Versuch:
1
#include <p24fj16ga002.h>
2
3
int main (int argc, char * argv[])
4
{
5
  OSCCON = 0x11C0;   //select INTERNAL RC, Post Scale PPL
6
7
  AD1PCFG = 0xFFFF;   // set to all digital I/O
8
  TRISB =  0x0000;   // configure all PortB as output
9
  LATB = 0xffff;   // set PortB all high
10
11
  while (1)
12
  {
13
  }
14
15
  return 0;
16
}

Kann mir vielleicht jemand Starthilfe geben? :)

MfG
Christian

von Master S. (snowman)


Lesenswert?

scheint so als ob dein PIC gar nicht erst läuft. im debug-modus?
poste doch mal die config-bits, die du ausgewählt hast (ich setzte die 
config-bit immer im code, so kann man den z.b. auch jemandem anderen 
geben)

von Michael H. (morph1)


Lesenswert?

werden die leds vom pic eventuell gegen masse geschaltet? würde auch das 
blinken erklären

von Lehrmann M. (ubimbo)


Lesenswert?

Christian Hunke schrieb:
> AD1PCFG = 0xFFFF;   // set to all digital I/O

Sicher ? Ich bin gerade zu Faul das Datenblatt zu konsultieren...

Dann tu den return 0 weg. Danach macht der PIC nen Reset auch wenn er da 
eigentlich nie hinkommen dürfte.

Versuch was in die While-Schleife reinzutun. Irgendwas sinnloses i=0; 
oder so. Vielleich macht der Stack-Overflow-Reset dir zu schaffen.

Ich tippe auf die Configbits. Manche Compiler setzen Breown-Out auf 2.X 
Volt und wenn du dann voll reinschaltest dann könnte vielleicht der 
Brown-Out eingreifen. Das würde in Zusammenhang mit dem Power-Up-Timer 
das Blinken erklären. Dein PIC dürfte sich also immer wieder Resetten 
und dann blinken die LEDs.

Poste einfach mal die Configbits.

Wie sieht's mit Entstörkendensatoren aus ?!

Schön brav weiter LATX verwenden der ist für Outputs sehr gut...
Mit PORTX nur einlsen ....

von Lehrmann M. (ubimbo)


Lesenswert?

Lehrmann Michael schrieb:
> Christian Hunke schrieb:
>> AD1PCFG = 0xFFFF;   // set to all digital I/O
>
> Sicher ? Ich bin gerade zu Faul das Datenblatt zu konsultieren...

Sorry muss ich zurücknehmen - hab gerade nachgelesen - das passt so !


also doch irgendwo ein Reset - Configbits =)

von Christian H. (thunder2002) Benutzerseite


Angehängte Dateien:

Lesenswert?

Lehrmann Michael schrieb:
> Christian Hunke schrieb:
>> AD1PCFG = 0xFFFF;   // set to all digital I/O
>
> Sicher ? Ich bin gerade zu Faul das Datenblatt zu konsultieren...
>
> Dann tu den return 0 weg. Danach macht der PIC nen Reset auch wenn er da
> eigentlich nie hinkommen dürfte.

Ist jetzt weg.

>
> Versuch was in die While-Schleife reinzutun. Irgendwas sinnloses i=0;
> oder so. Vielleich macht der Stack-Overflow-Reset dir zu schaffen.
>
> Ich tippe auf die Configbits. Manche Compiler setzen Breown-Out auf 2.X
> Volt und wenn du dann voll reinschaltest dann könnte vielleicht der
> Brown-Out eingreifen. Das würde in Zusammenhang mit dem Power-Up-Timer
> das Blinken erklären. Dein PIC dürfte sich also immer wieder Resetten
> und dann blinken die LEDs.
>
> Poste einfach mal die Configbits.

Öhm ich hab ehrlich gesagt keine :( Ich hab mal den Configuration Bits 
Dialog benutzt und von "Im Code" auf manuell umgeschaltet mit den 
angehängten Standardwerten. Wenn die einmal reingeschrieben so bleiben 
sind die aktuell.

>
> Wie sieht's mit Entstörkendensatoren aus ?!

Sind 3x 100nF zwischen VSS und VDD zweimal und einen den den 
Widerständen am Reset. Hab übrigens die PDIP28 Variante.

>
> Schön brav weiter LATX verwenden der ist für Outputs sehr gut...
> Mit PORTX nur einlsen ....

Ich habe nach dem Versuch der ConfigBits noch etwas rumgespielt und 
folgende angehängte Einstellung "Run after a successful program" beim 
Programmer unter Settings gefunden. Nachdem ich dies aktivierte lief 
mein Programm auch einfach, also scheint es wirklich so als wenn er gar 
nicht los läuft! Ein Resetten per Programmer bringt auch nicht, strom 
entfernen und wieder anlegen bringt den PIC auch nicht zum Start.

Der Code sieht jetzt wie folgt aus:
1
#include <p24fj16ga002.h>
2
3
void main (int argc, char * argv[])
4
{
5
  OSCCON  =  0x11C0;   //select INTERNAL RC, Post Scale PPL
6
7
  AD1PCFG = 0xFFFF;   //set to all digital I/O
8
  TRISB =  0x0000;   //configure all PortB as output
9
10
  int i;
11
  while (1)
12
  {
13
    LATB = 0xffff;
14
    for (i = 0; i < 1000000; ++i)
15
      __builtin_nop();
16
    LATB = 0x0000;
17
    for (i = 0; i < 1000000; ++i)
18
      __builtin_nop();
19
  }
20
}

Hat vielleicht jemand eine 0815 Beispielkonfiguration die ich mal 
auseinander nehmen könnte?

von C. H. (_ch_)


Lesenswert?

Christian Hunke schrieb:
> Ich habe nach dem Versuch der ConfigBits noch etwas rumgespielt und
> folgende angehängte Einstellung "Run after a successful program" beim
> Programmer unter Settings gefunden.
:-) Typische Falle.
Wenn diese Option NICHT aktiviert ist wird dein Prozessor vom 
Programmieradapter im Reset gehalten. Da kannst du also warten bis zu 
schwarz wirst bis sich was tut.
Da hilft auch kein Spannung an/aus etc.
Im MPLAB gibt es aber oben in der Symbolleiste zwei Symbole wo du den 
Reset-Pin des Programmieradapters schalten kannst. Wenn die "Run" Option 
nicht gesetzt ist siehst du, dass der Reset aktiv ist.

Gruß,
Christian

von Master S. (snowman)


Lesenswert?

du hast im code keine config-bits gesetzt und die im menu auch nicht. 
woher weisst du dann, dass sie richtig gesetzt sind? ich würde immer die 
config-bits immer im code setzten, dann weisst du, was du hast ;-)

von Christian H. (thunder2002) Benutzerseite


Angehängte Dateien:

Lesenswert?

Master Snowman schrieb:
> du hast im code keine config-bits gesetzt und die im menu auch nicht.
> woher weisst du dann, dass sie richtig gesetzt sind? ich würde immer die
> config-bits immer im code setzten, dann weisst du, was du hast ;-)

Hmm also gestern ging mein Blinkprogramm ja wenigstens nach dem 
Programmieren durch den erwähnten Haken, heute nicht mal mehr das. Ich 
habs jetzt mit angehängten ConfigBits probiert, die klingen für mich 
zumindest halbwegs plausibel. Aber Erfolg bringt das alles nichts, es 
passiert einfach gar nichts :(

Der PIC wird übrigens über den PicKit2 Programmer mit Strom versorgt, 
das einzige was noch Strom braucht ist eine 20mA LED, das sollte der 
doch auch verkraften, denke ich.

von Master S. (snowman)


Lesenswert?

im "Clock Diagram" sieht man, dass man nur mit 4 oder 8MHz zur PPL gehen 
darf (richtig?), vielleicht hast du auch im CLKDIV-register noch was 
falsches drin? hmm, ich habe zu hause einen aus der gleichen familie, 
ich könnt mal gucken, ob ich den heute abend mit dem internen FRC + PLL 
zum laufen kriege...3
ps: watchdocg zur sicherheit mal abschalten

von Lehrmann M. (ubimbo)


Lesenswert?

Haben denn die PIC24er keine BROWNOUT oder Stack-Overflow-Reset ? Da 
fehlen irgendwie ein Haufen Confi-Bits oder ?

von Master S. (snowman)


Lesenswert?

@Michael: das dachte ich mir auch, aber hätte Christian sicher gemacht, 
wenn's mehr gehabt hätte. normalerweise sind PICs wirklich einfach zum 
laufen zu kriegen: ein paar klicks und dann kann man gleich loslegen. 
ich weiss echt nicht, was daran so schwierig ist - ausser man setzt 
keine konfigs und hofft, dass per default die einfach mal richtig sind 
^^
@Christian: hier sonst noch ein schritt-für-schritt-tutorial: 
http://www.engscope.com/pic24-tutorial/3-first-program/

edit: nächste seite vielleicht auch noch ganz interessant:
http://www.engscope.com/pic24-tutorial/4-configurations/

von Master S. (snowman)


Lesenswert?

FNOSC, Oscillator Select - hier hast du den externen oszillator (quarz) 
gewählt, der bei dir vermutlich fehlt.

als ergänzung, lies mal das durch, auch wenn es dich vielleicht noch 
nicht betrifft, gut im vorherein zu wissen:
Beitrag "Re: PIC24 - 8 Pinne bleiben hochohmig"

von Master S. (snowman)


Lesenswert?

@Christian: ich hab's nicht getestet, weil ich besagten PIC nur in SMD 
habe und somit nicht auf die schnelle was aufbauen konnte (und auch 
nicht werde), aber die links sollten schon helfen. einfach halt die 
configs lesen(!) und setzen(!) sonst geht's halt nicht ;-)

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.