PIC24FJ16GA002 - Einstiegsprobleme

OP Persönliche Seite #1779843
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
#1780115
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 ....
OP Persönliche Seite #1781175
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?
Angehängte Dateien:
#1781284
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
OP Persönliche Seite #1781980
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.
Angehängte Dateien:
#1782465
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
#1782841
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/

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