mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC24FJ16GA002 - Einstiegsprobleme


Autor: Christian Hunke (thunder2002) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <p24fj16ga002.h>

int main (int argc, char * argv[])
{
  OSCCON = 0x11C0;   //select INTERNAL RC, Post Scale PPL

  AD1PCFG = 0xFFFF;   // set to all digital I/O
  TRISB =  0x0000;   // configure all PortB as output
  LATB = 0xffff;   // set PortB all high

  while (1)
  {
  }

  return 0;
}

Kann mir vielleicht jemand Starthilfe geben? :)

MfG
Christian

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Michael H. (morph1)
Datum:

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

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht 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 ....

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht 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 =)

Autor: Christian Hunke (thunder2002) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
#include <p24fj16ga002.h>

void main (int argc, char * argv[])
{
  OSCCON  =  0x11C0;   //select INTERNAL RC, Post Scale PPL

  AD1PCFG = 0xFFFF;   //set to all digital I/O
  TRISB =  0x0000;   //configure all PortB as output

  int i;
  while (1)
  {
    LATB = 0xffff;
    for (i = 0; i < 1000000; ++i)
      __builtin_nop();
    LATB = 0x0000;
    for (i = 0; i < 1000000; ++i)
      __builtin_nop();
  }
}

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

Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Christian Hunke (thunder2002) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lehrmann Michael (ubimbo)
Datum:

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

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht 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/

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.