mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik pic24F xxxx port initialisieren


Autor: Alexander Sch (mikralex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

bin schon seit 2 Tagen mit dem genannten PIC beschäftigt.
Kann nicht einmal einen PortB ein-/ausschalten. Ich benutze MPLAB7.60a 
und ICD2 zum programmieren.

So wird initialisiert:

_CONFIG1(FWDTEN_OFF & BKBUG_ON & ICS_PGx1 & GWRP_OFF)
_CONFIG2(FNOSC_FRC & GCP_OFF)

int main(void)
{

// I/O-Ports freischalten...

  TRISBbits.TRISB10 = 0;  // als output setzen
  TRISBbits.TRISB11 = 0;  // als output setzen

  _RB10 = 0;
  _RB11 = 1;
}

bin für jede Hilfe dankbar.

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>   TRISBbits.TRISB10 = 0;  // als output setzen
>   TRISBbits.TRISB11 = 0;  // als output setzen

Das passt.

>   _RB10 = 0;
>   _RB11 = 1;

Schreib mal:
LATBbits.LATB10 = 0;
LATBbits.LATB11 = 1;

Funktionierts dann?

Autor: Alexander Sch (mikralex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe mit LATBs auch probiert...
geht auch nicht.
Habe so ein Verdacht das das Kontroller gar nicht funzt.
Kann das irgenwie anders testen, ob das Kontroller das Programm annimmt?

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Äh, ja.
Hast du mal ein Verify gemacht?

Ich bin davon ausgegangen dass das Programm drin ist.
Der ICD meckert wenns nicht geklappt hat.

Autor: Alexander Sch (mikralex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ICD2 sagt das alles OK ist.
Habe schon mehrmals programmiert und geprüft mit ICD2.

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, hab grad was gesehen:

Schreib mal am Ende deiner Main: while(1);

Autor: Alexander Sch (mikralex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mit while(1) so ausprobiert, immer noch nichts zu messen...

_CONFIG1(FWDTEN_OFF & BKBUG_ON & ICS_PGx1 & GWRP_OFF)
_CONFIG2(FNOSC_FRC & GCP_OFF)
void(main){
  while(1) {

  LATBbits.LATB10 = 0;
  LATBbits.LATB11 = 1;

  int x = 65535;
  while(x){
    x--;
  }
  LATBbits.LATB10 = 1;
  LATBbits.LATB11 = 0;

  int y = 65535;
  while(y){
    y--;
  }

  } //while-schleife
}

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt haste dein Tris ja nicht mehr umgeschaltet???

Schreib das mal so:
_CONFIG1(FWDTEN_OFF & BKBUG_ON & ICS_PGx1 & GWRP_OFF)
_CONFIG2(FNOSC_FRC & GCP_OFF)

int main ()
{
  TRISBbits.LATB10 = 0;
  TRISBbits.LATB11 = 0;

  LATBbits.LATB10 = 1;
  LATBbits.LATB11 = 0;

  while(1);
}

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

versuche es mal mit:
AD1PCFG = 0xffff;
gleich nach der Initialisierung (LAT und TRIS).

------------------------------------------------------------------------ 
-----
Note: In order to use pins multiplexed with the A/D for digital I/O, the 
corresponding bits in the AD1PCFG register must be set to ‘1’, even if 
the A/D module is turned off.
------------------------------------------------------------------------ 
-----

Autor: Alexander Sch (mikralex)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das habe ich auch drin. (AD1PCFG = 0xffff;)
Versorgung:3,3V
DISVREG am Masse;
ein C zwischen Vddcore und Masse;

Ich habe keine Ahnung was noch alles sein kann. Habe davor sehr viel mit 
pic16f-serie gemacht, und auch bei dsPIC30xxxx pwm-modul in lauf 
gekriegt. Und jetzt stehe ich wie blöd vor dem einfachen 
Portinitialisierung...
Hier noch mal die Code:
_CONFIG1(FWDTEN_OFF & BKBUG_ON & ICS_PGx1 & GWRP_OFF)
_CONFIG2(FNOSC_FRC & GCP_OFF)

void(main){

TRISBbits.TRISB10 = 0;  // als output setzen
TRISBbits.TRISB11 = 0;  // als output setzen
AD1PCFG=0xffff;

  while(1) {
  LATBbits.LATB10 = 0;
  LATBbits.LATB11 = 1;

  int x = 65535;
  while(x){
    x--;
  }
  LATBbits.LATB10 = 1;
  LATBbits.LATB11 = 0;

  int y = 65535;
  while(y){
    y--;
  }

  } //while-schleife
}

Autor: Rü (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich liegt das Problem an Bit 6 vom OSCCON Register.
Dieses Bit verhindert Änderungen der I/O Configuration.

Dieser Code hat bei mir funktioniert:

;*********************************************************************** 
*******


.include "p24FJ48GA002.inc"
config __CONFIG1, JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF 
& ICS_PGx1 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR32 & WDTPS_PS1
config __CONFIG2, IESO_ON & FNOSC_PRIPLL & FCKSM_CSDCMD & OSCIOFNC_OFF & 
IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_XT


.global __reset
__reset:
        nop

Start:
        bclr    OSCCON,#6           ; Unlock Config Protection
        mov     #0xFBFF,W0          ; Configue Pin 21 as Output
        mov     W0,TRISB

L1:     bset    LATB,#10            ; turn on red LED
        goto    L1

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.