Hallo,
die CS00 und CS02 Bits befinden sich im TCCR0B Register. Wenn ich C richtig interpretiere, wird in Deinem Code der Prescaler dann nicht gesetzt und der Timer läuft nicht los.
Gruß
Searcher
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?
Mit dem Code würde ich eigentlich erwarten, dass die Helligkeit der Anzeige zyklisch durchläuft. Passiert aber wie gesagt nicht.Code:DDRB |= (1 << DDB3); TCCR0A = (1 << WGM00) | (1 << COM0A0) | (1 << CS00) |(1 << CS02); TIMSK0 |= (1 << OCIE0A); sei(); while(1) { OCR0A++; _delay_ms(25); }
Oder ist da irgendwo ein Bit, das ich noch übersehen hab?
mfG
Geändert von Jaecko (26.03.2011 um 20:38 Uhr) Grund: Tippfehler/Formatierung
#ifndef MfG
#define MfG
Hallo,
die CS00 und CS02 Bits befinden sich im TCCR0B Register. Wenn ich C richtig interpretiere, wird in Deinem Code der Prescaler dann nicht gesetzt und der Timer läuft nicht los.
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Heidenei... Thx.
Stimmt tatsächlich, dass die Bits im anderen Register sind.
Hab die Bits in den Tabellen im Datenblatt sogar mehrmals angeschaut und verschiedene WGM/CS-Kombinationen durchprobiert und immer wieder nachgeprüft.
Aber dass die im B-Register sind, ist mir nie aufgefallen.
(Mal wieder typischer Copy&Paste-Fehler)
#ifndef MfG
#define MfG
Jeacko,
ich hätte da eine Frage an dich:
Ich baue eine ähnliche Schaltung, und frage mich ob ich zwischen dem 74HC595 und dem ULN2803 Pull-Down-Widerstände brauche. Oder kann ich die direkt verbinden ohne Schnickschnack (wenn ich OE als PWM verwende)? Wie verhält sich da der Tri-State-Ausgang?
LG
Peter
Genau diese Reihenfolge 74HC595 => ULN2803 hab ich in dieser Schaltung auch verbaut.
Einfach direkt verbinden ohne Pulls dazwischen. Fehlt durch OE = High das Ausgangssignal des 595, zieht die interne Beschaltung des ULN2803 jeden Eingang nach GND (siehe Schaltung im vorherigen Beitrag) und die Ausgänge des 2803 werden nicht nach GND gezogen.
#ifndef MfG
#define MfG
Lesezeichen