www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Erste Gehversuche mit PIC18F


Autor: Chris H. (xkris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mir eine Platine gebastelt mit einem PIC18F458 drauf. Jetzt 
wollte ich einfach nur ein paar IO-pins auf H setzen, als Test 
sozusagen. Hier mein Programm:

#include <p18cxxx.h>

#pragma config OSC = ECIO  
#pragma config WDT = ON

void main (void)
{
      TRISA = 0;   /*set port A as output */
      PORTA = 1;
      //LATA = 1;
      while (1);
}

Wird sauber compiliert (MPLAB IDE 8.10) und geschrieben (PICkit2).
Aber ich messe an den Pins von Port A trotzdem keine H-Signal.
Ob ich den Port über den PORTA oder LATA Befehl setze sollte doch keine 
Rolle spielen, oder?

Muss man das Programm irgendwie manuell starten, durch Reset oder so, 
oder reicht es, die Power aus und wieder einzuschalten.

Ist die While-Schleife notwendig? Was machen die Ports, wenn das 
Porgramm abgelaufen ist?

Gruß
Kristian

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kristian,

schau mal im DB, ob der PORT A zufällig auch für die Analogeingänge 
verwendet wird.
Wenn ja, sind diese standardmäßig aktiviert. Du musst also erst die 
ADC-Kanäle deaktivieren.

Die PORT-Anweisung nutzt man nur für Lese-Vorgänge.
Zum Schreiben korrekterweise das LATch.

Ansonsten setzt du mit
LATA = 1;

ja nur das Bit0 auf high.
Für den ganzen Port müsstest du schreiben
LATA = 0xFF;

Autor: Frank Huber (gepard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf PortA liegen auch die AD-Eingänge. Die müssen vorher deaktiviert 
werden.

Den WatchDogTimer kannst du deaktivieren.

Ohne die Whileschleife müsste das Programm wieder zur Adresse 0x00 
springen. Das Programm wird also nochmal komplett von Vorne ausgeführt.

zum Schreiben besser das LAT Register verwenden.

Wie sieht deine Resetbeschaltung aus (MCLR-Pin)?
Wie erhält der PIC seinen Takt?

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die mehrzahl irritiert mich.

PORTA oder besser LATA = 1; würde nur PORTA.0 auf high setzen.

ganz allgemein, gehört der WDT in deinem fall mal sicher auf off.

Autor: Chris H. (xkris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und zunächst mal vielen Dank für eure Antworten.

Ich habe den Code jetzt ein wenig geändert:
#include <p18cxxx.h>

//#pragma config is used to set config bits for initial programming
#pragma config OSC = ECIO   //external Clock, OSC2 als digital IO   
#pragma config PWRT = ON    //Powerup-timer enabled
#pragma config BOR = OFF
#pragma config WDT = OFF    //Watchdog Timer off
#pragma config LVP = OFF    //Low Voltage ICSP 

void main (void)
{
  
  //ADCON1 = 0x07;
  PCFG3:PCFG1 = 011;   // alle A/D inputs als digital IO konfigurieren
  
  TRISA = 0x00;   //set port A as output
  LATA = 0x0F;    //setzt RA0...RA3 auf H
  while (1);
    
    
}


Ich konfiguriere sämtliche A/D Eingänge als IO-Pins. Definiere 
anschliessend den gesamten Port A als output und setzte dann die Pins 
RA0...RA3 auf H. Trotzdem messe ich dort 0V. Hat vielleicht noch jemand 
ne Idee?

Achso, als Clock benutze ich einen externen 40Mhz Oszillator. Den MCLR 
hab ich fest auf VDD gelegt. Ich gehe davon aus, dass das Programm 
startet, sobald ich Power aus- und wieder einschalte.

Wenn der PIC hardware technisch nicht korrekt eingebunden wäre würde ich 
erwarten, das er sich gar nicht erst programmieren ließe, oder?

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo xkris,

>Achso, als Clock benutze ich einen externen 40Mhz Oszillator.

wenn du den PIC nicht außerhalb der Spezifikationen betreiben willst, 
solltest du extern nicht mehr als 25MHz anlegen (steht im Datenblatt). 
Um auf 40MHz Fosc zu kommen, ist ein externer 10MHz Quarz mit der x4 PLL 
des PIC zu verwenden.

Gruß,
Edson

Autor: Chris H. (xkris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, der Controller kann laut Datenblatt bei externer Clock (EC,ECIO) 
mit bis zu 40MHz betrieben werden. Das was du erwähnst ist nur eine 
zusätzliche Option um die externe Clock möglichst niedrig zu halten und 
intern trotzdem eine möglichst hohe Taktfrequenz zu erhalten, speziell 
in EMV kritischen Anwendungen

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>wenn du den PIC nicht außerhalb der Spezifikationen betreiben willst,
>>solltest du extern nicht mehr als 25MHz anlegen (steht im Datenblatt)

>Nein, der Controller kann laut Datenblatt bei externer Clock (EC,ECIO)
>mit bis zu 40MHz betrieben werden.

Hast recht, was ich meinte bezieht sich auf Verwendung eines Quarzes.

Gruß.
Edson

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>void main (void)
>{
>      TRISA = 0;   /*set port A as output */
>      PORTA = 1;
>      //LATA = 1;
>      while (1);
>}

>Ist die While-Schleife notwendig? Was machen die Ports, wenn das
>Porgramm abgelaufen ist?


Ohne While-Schleife seht da nur:

  TRISA = 0;   /*set port A as output */
  PORTA = 1;

Der Controller würde einfach den Inhalt der nächsten Speicherstelle 
(nach PORTA=1) lesen und als Befehl interpretieren. Da du nicht weisst, 
was da steht, kann auch nicht gesagt werden, wass passiert.

Das While(1) sorgt dafür, dass der Controller in einen definierten 
Zustand geht (Endlosschleife).

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein guter C-Compiler sollte aber schon in der Lage sein, hinter das 
Programm einen Aufhänger à la "for (;;);" anzufügen... macht der GCC 
doch auch.

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ein guter C-Compiler sollte aber schon in der Lage sein, hinter das
>Programm einen Aufhänger à la "for (;;);" anzufügen... macht der GCC
>doch auch.

Ein guter C-Compiler übersetzt kompiliert genau das, was der 
Programmierer programmiert hat - vielleicht mit ein paar Optimierungen. 
Hinzufügen von Code gehört für mich nicht dazu. Vielleicht will ich gar 
keine Endlosschleife am Ende...

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.