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
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.
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.
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
auf das IF-Flag gewartet wird
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.