Jaecko
26.03.2011, 21:33
Moin.
Ein 7-Segment-Display wird über ein Schieberegister 74HC595 und ein ULN2803 als "Treiber" angesteuert. Der OE-Pin (Output Enable) des 595 hängt an einem ATMega644 an PB3 (OCR0A). Der Plan dahinter: Die Helligkeit der LEDs steuern.
Wenn ich in einer While-Loop den Pin mit z.B. 200 Hz "manuell" mit verschiedenen Pulsweiten an- und abschalte, dann wirds schon dunkler. Versuch ich das ganze mit PWM, leuchten die LEDs mit voller Helligkeit weiter.
Hackts da jetzt beim Code für die PWM-Init (siehe unten) oder ist der OE-Eingang für "echte" PWM einfach zu lahm?
DDRB |= (1 << DDB3);
TCCR0A = (1 << WGM00) | (1 << COM0A0) | (1 << CS00) |(1 << CS02);
TIMSK0 |= (1 << OCIE0A);
sei();
while(1)
{
OCR0A++;
_delay_ms(25);
}
Mit dem Code würde ich eigentlich erwarten, dass die Helligkeit der Anzeige zyklisch durchläuft. Passiert aber wie gesagt nicht.
Oder ist da irgendwo ein Bit, das ich noch übersehen hab?
mfG
Ein 7-Segment-Display wird über ein Schieberegister 74HC595 und ein ULN2803 als "Treiber" angesteuert. Der OE-Pin (Output Enable) des 595 hängt an einem ATMega644 an PB3 (OCR0A). Der Plan dahinter: Die Helligkeit der LEDs steuern.
Wenn ich in einer While-Loop den Pin mit z.B. 200 Hz "manuell" mit verschiedenen Pulsweiten an- und abschalte, dann wirds schon dunkler. Versuch ich das ganze mit PWM, leuchten die LEDs mit voller Helligkeit weiter.
Hackts da jetzt beim Code für die PWM-Init (siehe unten) oder ist der OE-Eingang für "echte" PWM einfach zu lahm?
DDRB |= (1 << DDB3);
TCCR0A = (1 << WGM00) | (1 << COM0A0) | (1 << CS00) |(1 << CS02);
TIMSK0 |= (1 << OCIE0A);
sei();
while(1)
{
OCR0A++;
_delay_ms(25);
}
Mit dem Code würde ich eigentlich erwarten, dass die Helligkeit der Anzeige zyklisch durchläuft. Passiert aber wie gesagt nicht.
Oder ist da irgendwo ein Bit, das ich noch übersehen hab?
mfG