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
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)
werden die leds vom pic eventuell gegen masse geschaltet? würde auch das
blinken erklären
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 ....
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 =)
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?
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
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 ;-)
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.
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
Haben denn die PIC24er keine BROWNOUT oder Stack-Overflow-Reset ? Da
fehlen irgendwie ein Haufen Confi-Bits oder ?
@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/
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"
@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.
|