mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Einfaches PIC18 Programm läuft nicht


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

habe als erstes PIC Programm folgendes geschrieben und wunder mich wieso 
es nicht funktioniert.
#include <pic18.h>

__CONFIG(1, INTIO & FCMDIS & IESODIS);
__CONFIG(2, PWRTEN & BORDIS & WDTDIS);
__CONFIG(3, PBDIGITAL & LPT1DIS & MCLREN);
__CONFIG(4, LVPDIS & DEBUGEN);

void main (void) {
  long i;
  LATA = 0x00;  
    TRISA = 0xFE; 

     LATA1 = 1; 
     LATA1 = 0; 
}

Ich verwende zum debuggen den MPLAB ICD2 In-Circuit Debugger (Microchip) 
und als Compiler den HI-TECH PICC-18 C-Compiler.

__CONFIG(n, x) ist ein Makro wobei x die Nummer des 
Konfigurationsregisters angibt und n die Bits die gesetzt, bzw. 
rückgesetzt werden sollen.

Betrachte ich nun beim debuggen LATA und PORTA ändert sich dort nichts. 
obwohl ein anderer als der gewünschte Wert drin steht. Auch die 
angeschlossenen LED's bestätigen dies...

Hat jemand eine idee woran das liegen könnte? Ist im Code etwas falsch?

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach habe ich vergessen. Es handelt sich dabei um einen PIC18F2580...

MPLAB IDE ist so eingestellt das die Config Bits im Code gesetzt 
werden...

Autor: Der Schubi (schubi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der uC macht das nur einmal.
Du musst eine While-Schleife (while(1) bla...) um
LATA1 = 1;
LATA1 = 0;
machen.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das ist mir klar aber beim Schrittweisen debuggen müsste ich ja 
trotzdem sehen das sich LATA ändert was es aber nicht tut...

Autor: breitfuss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist nicht port A standartmäßig ein analoger eingang?
eventuell comparator auschalten (CMCON..oder sowas)

mfg

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
__CONFIG(3, PBDIGITAL & LPT1DIS & MCLREN);

Soll PBDIGITAL den Port A als digitalen Port einstellen?
Weil, PBADEN: PORTB A/D Enable bit sollte 0 sein.

Gruß Sascha

PS: Kenne den HITECH nicht

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem analogen bin ich mir jetzt nicht ganz sicher und finde auf die 
schnelle auch nichts eindeutiges. Habe das jetzt einfach mal kurz auf 
Port C umgeschrieben und das Problem ist immernoch das selbe...

Scheint also nicht am Port zu liegen...

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es fängt ja schon damit an, dass nach dem Befehl LATA = 0x00; nicht 0 in 
LATA steht sondern der selbe von 0 unterschiedliche Wert wie vorher. Er 
scheint hier auf LATA also garnicht zu schreiben...

Autor: Gerhard. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernd,

bei mir funktioniert das Program auch nicht solange die ADCON1 PCFG bits 
nicht als digitale Pins gesetzt sind.

Wenn man ADCON1 nicht konfiguriert geht es bei mir auch nicht.

Bei mir funktioniert Dein Program nachdem ADCON1 konfigurtiert wird:

MFG
Gerhard

#include "18F4620.h"

#use delay(clock=16000000, RESTART_WDT)
#fuses HS, NOPROTECT, NOPUT, BROWNOUT, NOLVP

#byte   LATE  = 0xF8D
#byte   TRISE = 0xF96
#byte   PORTE = 0xF84
#byte   ADCON0 = 0xFC2
#byte   ADCON1 = 0xFC1

void main(void)
{
  ADCON1 = 0x0F;  // PIN E2 = All analogs are digital pins
  LATE |= 0x04;  // PIN E2 = 1
  TRISE = 0xFB;  // PIN E2 = OUTPUT

  for(;;)
  {
    LATE |= 0x04;  // Bit E2 Hochsetzen
    LATE &= 0xFB;  // Bit E2 niedersetzen
  }
}

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei mir geht es immer noch nicht... Komischerweise funktionieren 
die in Assembler geschriebenen Programme auf anhieb. Sobald ich aber ein 
in C geschriebenes Programm auf den PIC schreibe is es mit der Funktion 
vorbei...

Scheint also nicht am Code zuliegen sondern viel mehr an der Software. 
Hat jemand eine Idee wie man da ansetzten kann?

Autor: Gerhard. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernd,

versuche mal zwischen den beiden SETZ/RUECKSETZ ein delay_ms(1) oder NOP 
einzufuegen. Oft wird gewarnt einen PIN mit der naechsten Instruktion 
gleich wieder zurrueckzusetzen. Ich kann zwar im Datenblatt allerdings 
nichts diesbezuegliches zur Bekraeftigung finden. (Vielleicht ist das 
nur bei AVRs ein Problem)

Ich vergass zu erwaehnen das ich bei mir den CCS Compiler verwende.

Poste noch einmal den exakten Source. Vielleicht wurde doch irgendwas 
uebersehen. Das muss einfach funktionieren;-)

MFG
Gerhard

Autor: Gerhard. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernd,

Vielleicht stimmt was nicht in der Weise das Bit A1 angesprochen wird.
LATEA1 - Es ist moeglich der Hund liegt begraben?

Versuche es genau wie bei mir das Bit zu setzen und zurueckzustellen:

ADCON1 = 0x0F; // Alle Analog Pins auf Digital Pin umschalten

LATEA |= 0b00000001; // Pin setzten

LATEA &= 0b11111110; // Ruecksetzen

// Fuer PIN A0

Gerhard

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier mal mein aktueller Code:

[c#include <pic18.h>

__CONFIG(1, INTIO & FCMDIS & IESODIS);
__CONFIG(2, PWRTEN & BORDIS & WDTDIS);
__CONFIG(3, PBDIGITAL & LPT1DIS & MCLREN);
__CONFIG(4, LVPDIS & DEBUGEN);

void main (void) {
  long i;

  ADCON1 = 0x0F;

  LATA = 0x00;
    TRISA = 0xFE;

  while (1) {
    for(i=0;i<10;i++);
    LATA |= 0b00000001;
    for(i=0;i<10;i++);
    LATA &= 0b11111110;
  }
}[/c]

Funktioniert leider immer noch nicht. Beim debuggen bleibt er immer in 
einer x-beliebigen Zeile hängen und läuft nicht mehr weiter. Gucke mir 
alle sinnvollen Register im Watch Fenster an und bei keinem Befehl tut 
sich dort etwas (ADCON1, LATA)...

Ich habe es auch schon über die Ports B und C versucht, ist aber das 
selbe verhalten...

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind die Optimierungen des Compilers eingeschaltet ?

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Optimierung ist ausgeschaltet...

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es läuft endlich, der HI-TECH Compiler war nicht richtig eingerichtet. 
Echt nicht gerade Benutzerfreundlich das Ding.

Keine Fehlermeldung, garnichts...

Schönes Osterwochenende, Bernd

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann nutze doch den C18 Student Edition :)

Gruß Sascha

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.