PICuin
21.03.2011, 00:26
Hallo RoboterNetz Forum,
vorab, ich bin in dieser Materie ein absoluter Newbie und möchte eine Led zum laufen bringen welche sich für 1 Sek. Ein und 1 Sek. Ausschaltet.
Das programm läuft bereits, aber ich hab bemerkt das die Led nicht konstant 1 Sekunde leuchtet, es gibt meistens kleine abweichungen so in ms Bereich. Verglichen habe ich es auf 0815 art mit einer Stoppuhr. Gibt es eine Möglichkeit in der Enwicklungsumgebung festzustellen mit welcher Geschwindigkeit die Led blinkt.
Oder liegt es daran das der PIC Oszi nicht stabil ist?
ps. Das Programm habe ich aus dem Netz hab einiges für meine bedürfnisse angepasst.
Meine Entwicklungsumgebung ist das MPLAB mit Hi Tech C18 Compiler
--------------------------------------------------------------------------------
hier ist wäre der Code.
#include <htc.h>
//Chip Settings
__CONFIG(1,0x0200);
__CONFIG(2,0X1E1F);
__CONFIG(3,0X8100);
__CONFIG(4,0X00C1);
__CONFIG(5,0XC00F);
unsigned char counter=0;//Overflow counter
void main()
{
//Setup Timer0
T0PS0=1; //Prescaler is divide by 256
T0PS1=1;
T0PS2=1;
PSA=0; //Timer Clock Source is from Prescaler
T0CS=0; //Prescaler gets clock from FCPU (5MHz)
T08BIT=1; //8 BIT MODE
TMR0IE=1; //Enable TIMER0 Interrupt
PEIE=1; //Enable Peripheral Interrupt
GIE=1; //Enable INTs globally
TMR0ON=1; //Now start the timer!
//Set RB1 as output because we have LED on it
TRISB&=0B11111101;
while(1); //Sit Idle Timer will do every thing!
}
//Main Interrupt Service Routine (ISR)
void interrupt ISR()
{
//Check if it is TMR0 Overflow ISR
if(TMR0IE && TMR0IF)
{
//TMR0 Overflow ISR
counter++; //Increment Over Flow Counter
if(counter==15)
{
//Toggle RB1 (LED)
if(RB1==0)
RB1=1;
else
RB1=0;
counter=0; //Reset Counter
}
//Clear Flag
TMR0IF=0;
}
}
vorab, ich bin in dieser Materie ein absoluter Newbie und möchte eine Led zum laufen bringen welche sich für 1 Sek. Ein und 1 Sek. Ausschaltet.
Das programm läuft bereits, aber ich hab bemerkt das die Led nicht konstant 1 Sekunde leuchtet, es gibt meistens kleine abweichungen so in ms Bereich. Verglichen habe ich es auf 0815 art mit einer Stoppuhr. Gibt es eine Möglichkeit in der Enwicklungsumgebung festzustellen mit welcher Geschwindigkeit die Led blinkt.
Oder liegt es daran das der PIC Oszi nicht stabil ist?
ps. Das Programm habe ich aus dem Netz hab einiges für meine bedürfnisse angepasst.
Meine Entwicklungsumgebung ist das MPLAB mit Hi Tech C18 Compiler
--------------------------------------------------------------------------------
hier ist wäre der Code.
#include <htc.h>
//Chip Settings
__CONFIG(1,0x0200);
__CONFIG(2,0X1E1F);
__CONFIG(3,0X8100);
__CONFIG(4,0X00C1);
__CONFIG(5,0XC00F);
unsigned char counter=0;//Overflow counter
void main()
{
//Setup Timer0
T0PS0=1; //Prescaler is divide by 256
T0PS1=1;
T0PS2=1;
PSA=0; //Timer Clock Source is from Prescaler
T0CS=0; //Prescaler gets clock from FCPU (5MHz)
T08BIT=1; //8 BIT MODE
TMR0IE=1; //Enable TIMER0 Interrupt
PEIE=1; //Enable Peripheral Interrupt
GIE=1; //Enable INTs globally
TMR0ON=1; //Now start the timer!
//Set RB1 as output because we have LED on it
TRISB&=0B11111101;
while(1); //Sit Idle Timer will do every thing!
}
//Main Interrupt Service Routine (ISR)
void interrupt ISR()
{
//Check if it is TMR0 Overflow ISR
if(TMR0IE && TMR0IF)
{
//TMR0 Overflow ISR
counter++; //Increment Over Flow Counter
if(counter==15)
{
//Toggle RB1 (LED)
if(RB1==0)
RB1=1;
else
RB1=0;
counter=0; //Reset Counter
}
//Clear Flag
TMR0IF=0;
}
}