infection
25.05.2008, 18:20
Hallo liebe Community,
Ich habe ein kleines Problem, was jedoch sehr einfach zu lösen sein sollte.
Ich muss für ein kleines Projekt in der Schule eine "Helligkeitssteuerung mittels PWM in 10 Stufen" programmieren.
Bin mit dem Programm soweit schon fertig, nur kenn ich mich mit der C Programmierung leider nicht so gut aus & hab daher mit einen einfachen Array ein Problem.
Hier der Code:
#include <mega8.h>
#include <delay.h>
#include <LCDlib.h>
#define T1 PINC.1
#define UP PINC.2
#define DOWN PINC.3
#define Licht PORTD.4
#define CR 0x0D
bit Taste, Flanke, Merker, RUN;
bit UP_OLD, DOWN_OLD;
unsigned char count;
interrupt [TIM2_OVF] void timer2_ovf_isr(void) // Timer 2 overflow interrupt service routine
{
Licht = 0;
}
interrupt [TIM2_COMP] void timer2_comp_isr(void)// Timer 2 output compare interrupt service routine
{
if (RUN)
Licht = 1;
}
void InitSFRs();
void main(void)
{
InitSFRs();
#asm("sei")
while (1)
{
// Flankenerkennung für Licht EIN/AUS
Taste = !T1;
delay_ms(30);
Taste &= !T1;
Flanke = Taste & !Merker;
Merker = Taste;
if (Flanke)
RUN = !RUN;
// Flankenerkennung für Erhöhung der Helligkeit
if (!UP && UP_OLD)
{
if (count<10)
{
count ++;
}
}
UP_OLD = UP;
delay_ms(10);
// Flankenerkennung für Verringerung der Helligkeit
if (!DOWN && DOWN_OLD)
{
if (count>0)
{
count --;
}
}
DOWN_OLD = DOWN;
delay_ms(10);
} // while
} // main
void InitSFRs()
{
// Portkonfiguaration
DDRC = 0x30;
PORTC = 0x0E;
DDRD = 0x10;
PORTD = 0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 500,000 kHz
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x04;
TCNT2=0x00;
OCR2=0x80;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0xC0;
}
Durch Veränderung von OCR2 (=Comp) kann heller bzw. dünkler gestellt werden. Da das ganze in Stufen erfolgen soll müssen die 256 Bits durch 10 unterteilt werden.
Ich könnte das ganze jetzt ganz einfach mittels IF folgenderweise machen
if(count==1)
OCR2=0x01
if(count==2)
OCR=0x02
if(...)
.....
Mir erscheint das aber in einem Array (Feld) als eleganter.
Das Problem ist jedoch, dass ich micht mit Arrays nicht auskenne und nicht weiss wie ich einem Array "count" mit "OCR2" verbinden kann - ich hab nur sowoas in der Art im Kopf: "char zählen [10] = {0x01, 0x02, 0x03, 0x04, ...}
Wäre sehr nett wenn mir jemand helfen kann, mein Programm fertig zu stellen.
FÜr die zehn Werte nehmt bitte einfach 0x01, 0x02 , 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10.
MFG infection
Ich habe ein kleines Problem, was jedoch sehr einfach zu lösen sein sollte.
Ich muss für ein kleines Projekt in der Schule eine "Helligkeitssteuerung mittels PWM in 10 Stufen" programmieren.
Bin mit dem Programm soweit schon fertig, nur kenn ich mich mit der C Programmierung leider nicht so gut aus & hab daher mit einen einfachen Array ein Problem.
Hier der Code:
#include <mega8.h>
#include <delay.h>
#include <LCDlib.h>
#define T1 PINC.1
#define UP PINC.2
#define DOWN PINC.3
#define Licht PORTD.4
#define CR 0x0D
bit Taste, Flanke, Merker, RUN;
bit UP_OLD, DOWN_OLD;
unsigned char count;
interrupt [TIM2_OVF] void timer2_ovf_isr(void) // Timer 2 overflow interrupt service routine
{
Licht = 0;
}
interrupt [TIM2_COMP] void timer2_comp_isr(void)// Timer 2 output compare interrupt service routine
{
if (RUN)
Licht = 1;
}
void InitSFRs();
void main(void)
{
InitSFRs();
#asm("sei")
while (1)
{
// Flankenerkennung für Licht EIN/AUS
Taste = !T1;
delay_ms(30);
Taste &= !T1;
Flanke = Taste & !Merker;
Merker = Taste;
if (Flanke)
RUN = !RUN;
// Flankenerkennung für Erhöhung der Helligkeit
if (!UP && UP_OLD)
{
if (count<10)
{
count ++;
}
}
UP_OLD = UP;
delay_ms(10);
// Flankenerkennung für Verringerung der Helligkeit
if (!DOWN && DOWN_OLD)
{
if (count>0)
{
count --;
}
}
DOWN_OLD = DOWN;
delay_ms(10);
} // while
} // main
void InitSFRs()
{
// Portkonfiguaration
DDRC = 0x30;
PORTC = 0x0E;
DDRD = 0x10;
PORTD = 0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 500,000 kHz
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x04;
TCNT2=0x00;
OCR2=0x80;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0xC0;
}
Durch Veränderung von OCR2 (=Comp) kann heller bzw. dünkler gestellt werden. Da das ganze in Stufen erfolgen soll müssen die 256 Bits durch 10 unterteilt werden.
Ich könnte das ganze jetzt ganz einfach mittels IF folgenderweise machen
if(count==1)
OCR2=0x01
if(count==2)
OCR=0x02
if(...)
.....
Mir erscheint das aber in einem Array (Feld) als eleganter.
Das Problem ist jedoch, dass ich micht mit Arrays nicht auskenne und nicht weiss wie ich einem Array "count" mit "OCR2" verbinden kann - ich hab nur sowoas in der Art im Kopf: "char zählen [10] = {0x01, 0x02, 0x03, 0x04, ...}
Wäre sehr nett wenn mir jemand helfen kann, mein Programm fertig zu stellen.
FÜr die zehn Werte nehmt bitte einfach 0x01, 0x02 , 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10.
MFG infection