Hallo allerseits,
ich habe einen Tiny45 programmiert. Der steuert über PWM eine
Konstantstromquelle, an der eine 10W LED hängt.
Funktiniert auch super.
Mein Problem ist folgendes:
Wenn ich die Schaltung mit Spannung versorge, so blitzt die LED kurz
auf. Ich vermute das es daran liegt, dass die Zustände der Pins direkt
nach dem einschalten undefiniert sind.
Kann man da in der Software irgendwas dagegen tun? Bzw gibt es eine
Reihenfolge in der initialisiert werden muss, damit dieses Verhalten
eben nicht auftritt? Oder wäre hier ein Pull-Down sinnvoll?
Die PWM ist nicht invertiert, also 0%DC = LED aus, 100%DC = LED voll an.
Ich programmiere in C und nutze AVR Studio 4.
Vielen Dank für eure Hilfe
Jens
> Kann man da in der Software irgendwas dagegen tun?
Wenn das stimmt, was du dir da ausgedacht hast: Nein!
Denn, wie soll die Software was tun, bevor sie dran ist?
> Bzw gibt es eine Reihenfolge in der initialisiert> werden muss
Vielleicht!
> Oder wäre hier ein Pull-Down sinnvoll?
Vielleicht.
Da im Datenblatt folgendes steht:
The Port B pins are tri-stated when a
reset condition becomes active, even if the clock is not running.
Solltest Du einmal Dein Schaltung dahin gehend prüfen, ob sie in diesen
Zustand der Ports (Z = tri-state) evt. doch schaltet/schalten kann.
Thema Pull-down oder Pull-Up.
Als Tipp zur Initialisierung:
Erst alle Konfigurationen bzgl. Timer/PWM durchführen und danach die
Ports konfigurieren / aktivieren. Zu guter Letzt die Interrupts
aktivieren.
Auch solltest Du BOD aktivieren, wenn Deine Stromversorgung nur
"langsam"
startet.
Lies Dir mal das große Datasheet dazu durch. Speziell RESET/BOD/STARTUP
TIME.
Viel Erfolg!
Start-Blitz schrieb:> Hallo allerseits,>> ich habe einen Tiny45 programmiert. Der steuert über PWM eine> Konstantstromquelle, an der eine 10W LED hängt.> Funktiniert auch super.>> Mein Problem ist folgendes:> Wenn ich die Schaltung mit Spannung versorge, so blitzt die LED kurz> auf. Ich vermute das es daran liegt, dass die Zustände der Pins direkt> nach dem einschalten undefiniert sind.
Nein, sind sie nicht. Du musst aber etwas definiertes mit dem Reset-Pin
tun, und die Initialzustände der Pins im Hardware-Design beachten.
Nähere Informationen hat - wie meistens - die Doku.
Jasch schrieb:>> Mein Problem ist folgendes:>> Wenn ich die Schaltung mit Spannung versorge, so blitzt die LED kurz>> auf. Ich vermute das es daran liegt, dass die Zustände der Pins direkt>> nach dem einschalten undefiniert sind.>> Nein, sind sie nicht.
Doch, sind sie.
> Du musst aber etwas definiertes mit dem Reset-Pin tun,
Nur in sehr verschmutzten Umgebungen. Ein Pull-up kann aber nicht
schaden.
> und die Initialzustände der Pins im Hardware-Design beachten.
Genau das will er ja, und seine Frage war, wie.
Start-Blitz schrieb:> Kann man da in der Software irgendwas dagegen tun?
Nein, wie soll das gehen?
> Bzw gibt es eine Reihenfolge in der initialisiert werden muss, damit> dieses Verhalten eben nicht auftritt?
Naja, als allererstes die Pins auf Ausgang stellen, dann haben sie zum
frühestmöglichen Zeitpunkt einen definierten Pegel. Ob's jetzt 50 µs
früher oder später zum definierten Pegel kommt, dürfte aber kaum eine
Rolle spielen. Ich vermute mal nicht, dass dein Programm aktuell ewig
wartet, bevor es die Pins initialisiert.
Wirklich wegbekommen wirst du es so nicht.
> Oder wäre hier ein Pull-Down sinnvoll?
Der würde eher helfen.
Rolf M. schrieb:>>> dass die Zustände der Pins direkt>>> nach dem einschalten undefiniert sind.>> Nein, sind sie nicht.>> Doch, sind sie.
Das ist wohl jetzt eine Definitionsfrage …
Für den einen ist Zustand „High-Z“ sehr wohl sauber definiert (denn
es ist nicht zufällig „low“ oder „high“ aktiv getrieben, so wie es
typisch bei RAM-Zellen der Fall ist), für den anderen ist es ein
„undefinierter Zustand“.
Wenn für den TE letzteres der Fall ist, ja, dann wird er einen
Pull-Widerstand in Hardware brauchen. Für eine LED ist das
allerdings eher ungewöhnlich. Wenn diese direkt am Portpin hängt,
egal ob nach GND oder Vcc, sollte sie bei High-Z nie leuchten.
Was vielleicht vergessen wurde. Zwischen "Powerup" und "Nach Reset" gibt
es noch den "Im Reset Zustand". Waehrend dem Reset.Das kann zB im
Programmiermodus sein, oder waehrend der per RC eingestellten Reset
Zeitkonstante, ich hab am Reset pin immer 10k+100nF. Das waeren dann
1ms.
Zum Einen haben gewisse Pins in diesem "Reset" Zustand gewisse
Funktionalitaeten. zB die SPI & JTAG Programmierschnittstelle. Zum
Anderen sollte man beachten, dass waehrend diesem Zustand nichts kaputt
geht.
An diesen Programmier Pins kann man nachher ja etwas Anderes betreiben.
Die Programmierschnittstelle als SPI kann zB einen dort angehaengten
DAC beschreiben wenn die Pins grad richtig sind. und machen, dass zB ein
Motor Rueckwaerts dreht.
Jörg W. schrieb:> Wenn diese direkt am Portpin hängt,> egal ob nach GND oder Vcc, sollte sie bei High-Z nie leuchten.
Hängt sie aber nicht:
Start-Blitz schrieb:> Der steuert über PWM eine> Konstantstromquelle, an der eine 10W LED hängt.
Man sorgt also mit einem Pull für den gewünschten Resetzustand am PWM
Pin.
Matthias S. schrieb:> Jörg W. schrieb:>> Wenn diese direkt am Portpin hängt,>> egal ob nach GND oder Vcc, sollte sie bei High-Z nie leuchten.>> Hängt sie aber nicht:
OK, zu flüchtig gelesen.
> Start-Blitz schrieb:>> Der steuert über PWM eine>> Konstantstromquelle, an der eine 10W LED hängt.>> Man sorgt also mit einem Pull für den gewünschten Resetzustand am PWM> Pin.
Eigentlich schlechtes Design, nicht failsafe. Bei einer
Konstantstromquelle sollte es immer möglich sein, sie so zu
gestalten, dass sie ohne jegliches (aktiv getriebenes)
Steuersignal eigensicher ist, die LED also ausgeschaltet.
Vielleicht sollte er sein Problem erstmal analysieren. Kann gut sein,
dass da auch nur die Initialisierungsreihenfolge der PWM-Erzeugung
falsch herum ist, sodass die PWM für eine kurze Zeit mit 100 %
losfeuert oder der Portpin aktiv mit entsprechendem Pegel getrieben
wird, weil die PWM noch gar nicht angworfen worden ist.
Start-Blitz schrieb:> Kann man da in der Software irgendwas dagegen tun? Bzw gibt es eine> Reihenfolge in der initialisiert werden muss, damit dieses Verhalten> eben nicht auftritt? Oder wäre hier ein Pull-Down sinnvoll?Codix schrieb:> Erst alle Konfigurationen bzgl. Timer/PWM durchführen und danach die> Ports konfigurieren / aktivieren.
Umgekehrt.
Erst alle Ports auf definierten Zustand bringen (LOW in deinem Fall),
danach Timer und Interrupts.
Bleibt die Frage, was dein Programm so lange initialisiert, damit du
uberhaupt irgendwelches Blitzen merken kannst ?
Abgesehen davon, kann ein Pull-Down naturlich nicht schaden.
Marc V. schrieb:> Bleibt die Frage, was dein Programm so lange initialisiert, damit du> uberhaupt irgendwelches Blitzen merken kannst ?
Son AVR ist durchaus auf 64ms Startverzögerung parametrisierbar.
Wenn die Stromquelle in der Zeit voll losfeuert ist das durchaus zu
sehen.
Marc V. schrieb:> Codix schrieb:>> Erst alle Konfigurationen bzgl. Timer/PWM durchführen und danach die>> Ports konfigurieren / aktivieren.>> Umgekehrt.> Erst alle Ports auf definierten Zustand bringen (LOW in deinem Fall),> danach Timer und Interrupts.
Ne, Codix hat schon recht.
Der PWM-Ausgang richtet sich nicht nach dem Port-Latch. Man muß also
erst die PWM starten und nachdem der gewünschte Pegel anliegt, den Pin
auf Ausgang setzen. Im einfachsten Fall wartet man eine PWM-Periode
lang.
Peter D. schrieb:>> Umgekehrt.>> Erst alle Ports auf definierten Zustand bringen (LOW in deinem Fall),>> danach Timer und Interrupts.>> Ne, Codix hat schon recht.> Der PWM-Ausgang richtet sich nicht nach dem Port-Latch. Man muß also> erst die PWM starten und nachdem der gewünschte Pegel anliegt, den Pin> auf Ausgang setzen. Im einfachsten Fall wartet man eine PWM-Periode> lang.
Ne, hat er nicht.
ATMEL sagt:
Aber das ist mit Sicherheit nicht das Problem.
Jörg W. schrieb:> Man sieht problemlos 1 ms oder weniger.
Weiss ich.
Martin W. schrieb:> Son AVR ist durchaus auf 64ms Startverzögerung parametrisierbar.> Wenn die Stromquelle in der Zeit voll losfeuert ist das durchaus zu> sehen.
Stimme ich zu und da wird wohl sein Problem liegen (ohne Pull-Down).
Marc V. zitierte ATMEL im Beitrag #4426429:
> The Data Direction Register bit for the OC0x pin (DDR_OC0x) must be set> as output before the OC0x value is visible on the pin.
Ich würde das jetzt nicht als "DDR muss (unbedingt) vor dem Start des
PWM Moduls gesetzt werden" interpretieren sondern eher als "erst nachdem
DDR auf Ausgang gesetzt wurde kommt auch das OC0x Signal dort raus".
Marc V. schrieb:> The Data Direction> Register bit for the OC0x pin (DDR_OC0x) must be set as output before> the OC0x value is visible> on the pin.
So isses.
Da ich aber nirgends lesen kann, wie der PWM-Zustand nach einem Reset
ist, muß ich erst abwarten, bis die PWM in einen definierten Zustand
gegangen ist, ehe ich sie zum Ausgang durchschalte.
Dieter W. schrieb:> Ich würde das jetzt nicht als "DDR muss (unbedingt) vor dem Start des> PWM Moduls gesetzt werden" interpretieren sondern eher als "erst nachdem> DDR auf Ausgang gesetzt wurde kommt auch das OC0x Signal dort raus".
So sehe ich das auch.
Peter D. schrieb:> So isses.> Da ich aber nirgends lesen kann, wie der PWM-Zustand nach einem Reset> ist, muß ich erst abwarten, bis die PWM in einen definierten Zustand> gegangen ist, ehe ich sie zum Ausgang durchschalte.
So isses.
Aber das ist bestimmt nicht das, was seine LED aufblitzen last.
Jörg W. schrieb:> Eigentlich schlechtes Design, nicht failsafe. Bei einer> Konstantstromquelle sollte es immer möglich sein, sie so zu> gestalten, dass sie ohne jegliches (aktiv getriebenes)> Steuersignal eigensicher ist, die LED also ausgeschaltet.
Das ist es.
Start-Up Time kann bei Tiny45 nicht kleiner als 4ms sein, es sei
den, RSTDISBL is gesperrt. Da ich annehme, dass das nicht der
Fall ist, ist blitzen einfach nicht wegzukriegen, wenn die KSQ
auch ohne Signal (oder mit HiZ) losgeht.
Oder, wie gesagt, nur mit Pull-Down.
Hallo zusammen,
puhh, dass haut mich jetzt ehrlich gesagt um. So viele Antworten, damit
habe ich nicht gerechnet. Danke dafür!
Das mit dem Pull-Down habe ich probiert, bringt leider keine Änderung.
Da der Tiny45 nicht unter 4ms starten kann nehme ich diesen unschönen
Effekt einfach mal als gegeben hin und lebe damit. Ich danke allen für
ihre Mithilfe, echt grandios.
Viele Grüße
Jens
Deine LED geht an, wenn der Pin HIGH ist? Dann hilft ein Pull-Down
(sonst ein Pull-Up), um dem HiZ einen definierten Pegel zu geben. Wenn
du das getan hast und es nichts bringt, dann war es nicht dieser Fehler.
Jens schrieb:> Das mit dem Pull-Down habe ich probiert, bringt leider keine Änderung.
Wenn deine KSQ ein Highsignal braucht um anzugehen und der PullDown
nicht hilft hast du einen Fehler im Programm. Das wäre jetzt interessant
um den Fehler zu finden ;)
Rolf M. schrieb:> Jasch schrieb:>>> Mein Problem ist folgendes:>>> Wenn ich die Schaltung mit Spannung versorge, so blitzt die LED kurz>>> auf. Ich vermute das es daran liegt, dass die Zustände der Pins direkt>>> nach dem einschalten undefiniert sind.>>>> Nein, sind sie nicht.>> Doch, sind sie.
Was ist an „High-Z“ undefiniert. Das ist doch eine klare Ansage.
Vielleicht wäre es mal an der Zeit, Programm und Schaltplan zu zeigen.
Sonst rätselt man hier noch bis zum Sommer, woher der Blitz kommt.
Jörg W. schrieb:> Rolf M. schrieb:>>>> dass die Zustände der Pins direkt>>>> nach dem einschalten undefiniert sind.>>> Nein, sind sie nicht.>>>> Doch, sind sie.>> Das ist wohl jetzt eine Definitionsfrage …>> Für den einen ist Zustand „High-Z“ sehr wohl sauber definiert (denn> es ist nicht zufällig „low“ oder „high“ aktiv getrieben, so wie es> typisch bei RAM-Zellen der Fall ist), für den anderen ist es ein> „undefinierter Zustand“.
Aus dem Ursprungsposting geht klar hervor, dass letzeres gemeint ist. Es
dann für sich persönlich anders zu definieren und dann ohne Begründung
zu widersprechen ist wenig zielführend.
Rolf M. schrieb:> Aus dem Ursprungsposting geht klar hervor, dass letzeres gemeint ist.
Es geht mir nicht so klar hervor, wie du das meinst.
Ich denke immer noch, dass es gar nicht die Hardware ist, sondern
dass er die Initialisierung in der Software verhunzt hat. Da er uns
aber weder Schaltplan noch Firmware zeigen mag, muss er wohl damit
leben.
Kann das auch ein Problem deiner Konstantstromquelle beim Einschalten
sein? D.h. dass unabhaengig vom Tiny-Pegel die LED beim Einschalten kurz
aufblitzt.
Ich lasse den OC Port immer erstmal auf Eingang stehen, bis Timer und
PWM fertig initialisiert sind und laufen. Erst dann schalte ich den Port
auf Ausgang.
Michael K. schrieb:> Wenn deine KSQ ein Highsignal braucht um anzugehen und der PullDown> nicht hilft hast du einen Fehler im Programm. Das wäre jetzt interessant> um den Fehler zu finden ;)
Sollt ihr bekommen ;). Ist im Anhang.
Ich programmiere nicht hauptberuflich, also auch hier würde ich mich
über Anmerkungen freuen.
OCR=255 beduetet LED aus, 0 LED voll ein. Ich hatte es erst nicht
invertiert, aber so ging die LED nie ganz aus, deswegen ist die PWM
jetzt invertiert.
Zum Schaltplan:
Es ist ein Tiny45 an PB0 hängt die KSQ, an ADC1 überwacht ein NTC die
Temperatur und an den restlichen drei Pins hängen drei Schalter.
Bei der KSQ handelt es sich um einen China-Kracher,
ganz ähnlich dieser hier:
http://www.ebay.de/itm/3-Mode-Konstantstromquelle-3000mA-3A-6-18-Volt-Eingangsspannung-NEU-/272088142922?_trksid=p2141725.m3641.l6368
Datenblatt gibts natürlich keins dazu, die Kabel sind auch nicht auf
Lötpads sondern direkt an Bauteilbeinchen gelötet. Aber bei dem Preis
erwarte ich auch keine "Mercedes KSQ".
Allerdings habe ich das "PWM Kabel" zwischen Tiny und KSQ mal getrennt.
Auch ohne den Pull-Down bleibt die KSQ beim anlegen der
Spannungsversorgung inaktiv, also genau so wie es sein sollte. Es muss
also während des Start-Up des Tiny zu einem kurzen High-Impuls kommen.
Bleibt also die Frage: Ist es beim Tiny45 möglich, genau das zu
verhindern oder kann man dagegen nichts machen und die 4ms Start-Up Time
in der HIGH anliegen sind so hinzunehmen.
Ich danke für die Anteilnahme :)
Viele Grüße
Jens
Zur Sicherheit zwei Pins benutzen einen invertieren und beide mit und
verknüpfen per Hardware ic.
Dann solte nichts mehr passieren benötigt auch nicht viel Platz.