LED mit PIC schalten

Guten Tag

Ich habe ein kleines Projekt vorgenommen und zwar möchte ich mittels PIC ein Reihe von LEDs ansteuern. Es soll pro Ausgang eine LED leuchten. Hardware technisch habe ich, das Projekt bereits fertiggestellt.Nun kommt es aber zu Problemen bei der Entwicklung der Software. Ich möchte das eine LED angesteuert wird, also leuchtet und nach 5 Sekunden wieder ausgeht. Die LEDS zum leuchten bringen habe ich schon geschafft jedoch hab ich Probleme bei der Zeit. Der PIC hat an deinen externen Quarz (32,768kHz) angeschlossen, mit welchen man über einen Timer eine Sekunde bekommen sollte. Jedoch hab ich es nicht geschafft die LEDs in den 5 Sekunden Abständen ein und auszuschalten.Ich hoffe jemand kann mir ein paar Tipps oder einen kleinen Code schicken welcher mir weiterhilft.

Daten zum PIC:
-16F887
-Verwendeter Compiler XC8

  • 32kHz Uhrenquarz (OSC1 und OSC2)
    -Pickit3 

Sollten Daten fehlen, versuche ich sie schnell nachkommen zu lassen.

Hallo christo28,
Deine Angaben zum Projekt sind zu vage, als dass ich Dir einen Programmvorschlag machen könnte.
-Was genau soll in welchen Zeiten ein- und ausgeschaltet werden?
-Welche Programmierkenntnisse stehen Dir zur Verfügung? Vielleicht könntest Du Dein bisher verwendetes Programm hier posten (vollständig!)
Ich weiß nicht, was „xc8“ ist. Meine Stärken liegen beim Assembler.
Viele Grüße von Ph33

Hallo Ph33,

Ich weiß nicht, was „xc8“ ist. Meine Stärken liegen beim
Assembler.

Das ist der C-Compiler von Microtech für die MPLAB-IDE.
Da gibt es XC8, XC16 und XC32 entsprechend den CPUs. Zudem gibt es noch ein paar weitere C-Compiler, welche direkt von der IDE unterstützt werden.

MfG Peter(TOO)

Hallo Ph33

Es geht mir darum eine LED am ANfang des Programms einzuschalten. Danach soll ein Timer rennen welcher nach 5 Sekunden ein Interrupt abgegeben werden, welcher die LED wieder ausschaltet.

Ich verwende MPLAB X v2.10 und programmiere in C . Ich habe bereits meine versuche in Assembler gemacht jedoch war mit C lieber, da ich mit C schon aus früher beschäftigt habe.

Das einfachste
Hallo christo,

das einfachst ist:

  • setze einen Timer so auf, dass er jede Sekunde überläuft und 1 Interrupt-Flag setzt. (ohne Interrupts freizuschalten oder zu benutzen, das kommt später)
  • Danach eine Endlosschleife, in der
  1. auf das IF-Flag gewartet wird
  2. das IF-Flag gelöscht wird
for(;:wink: /\* Endlosschleife in C \*/
{
static int state;

 while(IF == 0)
 {
 /\* warten auf der Stelle, bis IF gesetzt ist \*/
 }
 /\* lösche das IF-Flag nach Datenblatt \*/
 ....
 /\* state um ein erhöhen \*/
 state++;
 /\* je nach state die gewünschten LEDs setzen und resetten \*/
 switch(state)
 {
 /\* kein case 0, stattdessen default! \*/
 default: ....
 state = 0; 
 break;
 case 1: .....
 break;
 case 2: .....
 break;
 }
}

Das ist zwar nicht schön, kann man aber für den Anfang schnell umsetzen.

Gruß
achim

1 Like