PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Portzustand nach dem einschalten?



Roberto
24.01.2009, 10:22
Hallo Leute

Folgendes Problem:

Ich habe einen MEGA32 und eine Schaltung, die mir einen Motor ansteuert (PWM)
Die Schaltung hat einen Enable Eingang der mir den Motor ausschaltet wenn Low anliegt.
Der AVR steuert das einschalten des Motor's mit diesem Eingang.
Nach dem aktivieren des AVR soll der Motor zuerst mal ausgeschalten bleiben um dann vom AVR erst aktiviert werden..

Jetzt habe ich aber beim (ganz neu) einschalten das Problem, das der Motor kurz anläuft ](*,)

Ich vermute jetzt mal, dass nach dem einschalten des AVR's alle Ports mal auf High gehen (oder zumindest auf Eingang) und nachher erst den richtigen (programmierten) Zustand einnehmen ?!

Beim mir muss die Enable Leitung zuerst aber auf Low bleiben..

Ich schätze mal, Programmtechnisch werde ich dem Problem wohl nicht zu leibe rücken können (Watchdog oder so...)

Meine Überlegungen wären jetzt ein kleines Relais auf die Leitung zu hängen, die mit einem Co die Enable-Leitung erst nach einer gewissen Zeit freigibt (= vorher gegen Masse zieht)... oder vielleicht einfach einen Inverter in die Leitung hängen.
Das muss ich dann aber wohl mit einer Diode machen, weil andere Schaltungsteile die Leitung auch gegen Masse ziehen können müssen. O:)

Das Problem ist nur, dass das Layout schon steht und ich da nicht mehr viel ändern kann/will.... :-$


Was habt Ihr dazu so für Gedanken ? [-o<

l.G. Roberto

oberallgeier
24.01.2009, 10:56
Hi,

... Folgendes Problem ... Was habt Ihr dazu so für Gedanken ...Das Problem ist einfach: Du hast die Dokumentation nicht gelesen. Meine Gedanken dazu sind: RTFM.
... Ich vermute jetzt mal, dass nach dem einschalten des AVR's alle Ports ...Auf Seite 64 - neueste doc : 2503K–AvR–08/07 - steht für jeden einzelnen Portpin der initial value.

Ich persönlich arbeite derzeit fast ausschließlich mit dem m168 - aber die AvR´s sind in dieser Hinsicht vermutlich fast alle gleich. Gleich zu Beginn meines mains habe ich die wichtigsten Initialisierungen. Problem ist allenfalls, dass die start up Zeit (siehe fuses, dort ist sie in Grenzen definierbar) und die anschließenden grundlegenden Initialisierungen (SP etc) möglicherweise auch in der kürzesten, bei Dir noch funktionierenden, Dauer so lang sind, dass Deine Motoren schon anlaufen. Immerhin sind 4 ms nicht Null - das ist schon in der Größenordnung der Zeitkonstanten von Motoren . . . .


... Programmtechnisch werde ich dem Problem wohl nicht zu leibe rücken können (Watchdog oder so...) ...Was hat der Watchdog damit zu tun? Das versteh ich jetzt nicht. Aber ich bin auch noch nicht firm mit den Controllern.


... Das Problem ist nur, dass das Layout schon steht ...Jemand hatte hier im Forum mal einen schwierigen Satz gesagt: "... wenn das Layout schon steht und dann die Überlegungen anfangen ...". Da musst Du wohl oder übel durch. Ideen hast Du ja schon.

Klingon77
24.01.2009, 11:26
hi,

bei meiner C-Control habe ich es so gemacht, daß die PortPin´s über einen "Pull-down" Widerstand (10 k)gegen Masse gezogen werden.

Evtl. kannst Du den in Deiner Schaltung noch unterbringen?

liebe Grüße,

Klingon77

Roberto
24.01.2009, 13:01
Hallo
Danke für die schnellen Antworten :-)

@oberallgeier

Meine Gedanken dazu sind: RTFM.
Was meinst Du damit ??

Auf Seite 64 - neueste doc : 2503K–AvR–08/07 - steht für jeden einzelnen Portpin der initial value.
Wo finde ich die ?
Am Anfang vom Programm wird mein Port eh Initialisiert.... aber da scheint noch was dazwischen zu sein..

start up Zeit (siehe fuses, dort ist sie in Grenzen definierbar) und die anschließenden grundlegenden Initialisierungen (SP etc) möglicherweise auch in der kürzesten, bei Dir noch funktionierenden, Dauer so lang sind, dass Deine Motoren schon anlaufen. Immerhin sind 4 ms nicht Null - das ist schon in der Größenordnung der Zeitkonstanten von Motoren . . . .
Start up Zeit.... Interessant
Das Problem ist nur, wenn ich die Spannung ganz weg habe.
Wenn in den Elkos noch ein wenig drinnen ist kommt es nicht zu dieser Reaktion.
Auch nicht bei einem Reset!

@Klingonn77


bei meiner C-Control habe ich es so gemacht, daß die PortPin´s über einen "Pull-down" Widerstand (10 k)gegen Masse gezogen werden.
Das geht leider nicht, weil ich schon einen Pull_up habe
Die Leitung ist somit auf High und jeder Schlatungsteil der will, kann sie dann gegen Masse ziehen.. ( = Motor abschalten)

l.G. Roberto

oberallgeier
24.01.2009, 13:41
... RTFM ... Was meinst Du damit ...? ? ? Schon mal was von google gehört? Das ist ein metacrawler - tipp die Buchstaben dort ein, drück die Eingabetaste - und Du wirst sehen: Internet bildet.


... neueste doc ... Wo finde ich die ...Ist schon lustig - Dein Layout steht - aber Du weißt nicht, wo Du die doc zu Deinem Controller (http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf) findest.


... Am Anfang vom Programm wird mein Port eh Initialisiert ...Dann ist doch alles bestens!


... aber da scheint noch was dazwischen zu sein ...Soweit ich Dich verstanden habe, ist das der Kernpunkt Deines Problemchens.

McJenso
24.01.2009, 16:23
Hallo,



Das geht leider nicht, weil ich schon einen Pull_up habe
Die Leitung ist somit auf High und jeder Schlatungsteil der will, kann sie dann gegen Masse ziehen.. ( = Motor abschalten)

Kannst du das bitte näher erläutern. Wer zieht das auf Masse, wenn der Controller noch nicht soweit ist? Das ist vermutlich die Ursache deines Problems. Wie sieht es mit einem Schaltplan (als png) aus?

Gruß

Jens

oberallgeier
24.01.2009, 17:03
Genau so hatte ich zeitweise auch gedacht, dass ein Hardware-Pull_down wohl der Bringer wäre. Den Rest dann per Software.

Klingon77
24.01.2009, 17:19
hi,

bei meinen (früheren) Basteleien habe ich prinzipiell mit PullDown gearbeitet.

Erstmal alles "tot" machen!
Wenn dann ein Signal erzeugt werden soll muß halt gearbeitet werden.

Mitunter verbaute ich so ein paar Bausteine mehr; ist aber für den Hobby-Bereich egal.


Die PullDown / PullUp kann man auch gut bei den CE (ChipEnable) einsetzen.
Die Bausteine werden prinzipiell so gesetzt, daß sie ausgeschaltet sind.



liebe Grüße,

Klingon77

for_ro
24.01.2009, 17:23
Das geht leider nicht, weil ich schon einen Pull_up habe
Die Leitung ist somit auf High und jeder Schlatungsteil der will, kann sie dann gegen Masse ziehen.. ( = Motor abschalten)

Warum hast du denn an einem Ausgang einen PullUp dran? Das ist doch dann genau das Problem. Oder schaltest du den Pin im Programm zwischendurch mal auf Eingang?
Mach den weg und schon ist gut. Evtl noch den PullDown dran, wie Klingon77 vorgeschlagen hat.

Gruß

Rolf

Roberto
24.01.2009, 18:14
Genau so hatte ich zeitweise auch gedacht, dass ein Hardware-Pull_down wohl der Bringer wäre. Den Rest dann per Software.
Ganz so einfach ist es leider nicht...
Hier der Schaltplan..
http://www.pukshofer.com/Privat/Projekte/Segi/Hauptseite.htm
der sich inzwischen insofern geändert hat, dass der AVR jetzt über nur eine Leitung und per Dioden, DIE Treiber gegen Masse zieht.
Wogegen die Komparatoren ihren jeweiligen Treiber einzeln gegen Masse ziehen können (Enable)
Aber das ändert ja nix am Problem ;-)

Derzeit tentiere ich zu der Überlegung einen pin vom Port über einen Inverter und dann über eine Diode, die Enable Leitung gegen Masse ziehen zu lassen... ?

Mich würde interessieren, ob der AVR prinzipiell beim Einschalten, alle Ports zuerst auf High schaltet ? Und erst dann, wenn das Programm was anderes sagt, sie Port's dementsprechend schaltet..?


l.G. Roberto

oberallgeier
24.01.2009, 18:36
... Ich vermute jetzt mal, dass nach dem einschalten des AVR's alle Ports mal auf High gehen ...
... Auf Seite 64 - neueste doc : 2503K–AvR–08/07 - steht für jeden einzelnen Portpin der initial value ...
... neueste doc : 2503K–AvR–08/07 ... Wo finde ich die ...
... die doc zu Deinem Controller (http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf) ...
... Mich würde interessieren, ob der AVR prinzipiell beim Einschalten, alle Ports zuerst auf High schaltet ...
Was soll ich nun auf die letzte Frage antworten? Dass wir wieder bei der Eingangsfrage sind? Das doc hier hereinkopieren? Oder vorlesen? Ich hatte angenommen, die Angabe der Quelle, der Link dazu, das Stichwort und die zugehörige Seitenangabe würde reichen.

Roberto
24.01.2009, 20:29
mmhhh..
Ok.... du meintest das Doc vom Meg32...
Ok.. ich hatte noch ein altes... (danke für den Link)
(leider kann ich aber nicht gut englisch :-( )

steht für jeden einzelnen Portpin der initial value
Das funktioniert ja, sonst würde es ja gar nicht klappen..

Was meinst Du eigentlich mit RTFM ?

McJenso
24.01.2009, 20:57
Hallo,



Derzeit tentiere ich zu der Überlegung einen pin vom Port über einen Inverter und dann über eine Diode, die Enable Leitung gegen Masse ziehen zu lassen...

Halte ich für eine gute Idee. Die Halbbrückentreibern haben einen internen Pullup. Ein Pulldown würde da nur zu weiteren Schwierigkeiten führen.
Ich habe in meiner Versorgungseinheit tatsächlich ein Relais vorgesehen, dass von einem Controller angesteuert wird und die Motorspannung nach dem 'Power up' zuschalten und im Fehlerfall trennen kann.

BTW: RTFM read the fucking manual. Ließ das verdammte Handbuch. Aber das hast du ja jetzt.



Zitat:
steht für jeden einzelnen Portpin der initial value

Das funktioniert ja, sonst würde es ja gar nicht klappen..

Okay, hier in der Kurzfassung. Wenn der Controller eingeschaltet wird, sind alle I/O's Eingänge. Das heist, sie sind Tri-State (sprich hochohmig). Erst wenn du in deinem Programm die I/O's zu Ausgängen machst, hast du einen definierten Pegel. Bis dahin ist nur der interne Pullup des Treibers wirksam. Je nach Fusebiteinstellung kann das einige ms dauern, auch wenn das in deinem Programm sofort gemacht wird.

Gruß

Jens

Roberto
25.01.2009, 02:12
Hallo Jens
Danke für die sehr konstruktive Antwort! \:D/

Kannst Du mir das vielleicht sagen, wo das genau im Mega32.pdf steht ?
Möchte mal probieren, ob ich das lesen kann.

Inzwischen bin ich noch drauf gekommen, dass ich im Programm einen leichten Fehler drin gehabt habe...
Irgendwie hat sich da eine kleine Zeitschleife reingeschummelt :-b
Jetzt ist es viel besser, aber ich habe noch einen kleinen Impuls beim einschalten. Der stört aber nicht mehr sonderlich..

In Zukunft werde ich bei sowas eine Logik einplanen, wo die Endstufe nur sicher eingeschalten werden kann.. (z.B. Pin 1 muss High und Pin 0 muss Low sein)

Danke !!

l.G. Roberto

Tido
25.01.2009, 08:21
Moin,

leider wird bei mir der verlinkte Schaltplan nicht angezeigt, aber wenn du eine klassische H-Brücke verwendest (mit zwei Eingängen für die Drehrichtung) könnte es mit je einem Pullup für die beiden Leitungen funktionieren:

Wenn beide Eingänge für die Drehrichtung High sind, arbeitet die Brücke als EMK-Bremse (Motoranschlüsse sind kurzgeschlossen).
Wird also die Betriebsspannung eingeschaltet ist der Enable-Eingang durch den Pullup auf High, der Motor würde also anlaufen. Da aber durch die beiden Pullups an den Drehrichtungspins der Motor kurzgeschlossen wird, kann er nicht anlaufen.
Im Programm wird dann bei der Initialisierung zuerst der Enable-Pin auf Low gesetzt, danach die Drehrichtungspins.

Christopher1
25.01.2009, 08:46
Kannst Du mir das vielleicht sagen, wo das genau im Mega32.pdf steht ?
Möchte mal probieren, ob ich das lesen kann.


Hi!
Wie schon erwähnt steht das auf Seite 64, beim Unterpunkt Register
Description for I/O Ports und dann guckst du rechts auf die Grafik bei Initial Value und stellst fest, dass die alle Eingänge sind ;-)

McJenso
25.01.2009, 10:06
Hallo,


in dem Zusammenhang ist auch in eben diesem Kapitel I/O Ports der Abschnitt Configure the Pin mit Tabelle 20 interessant.

Gruß

Jens

Roberto
25.01.2009, 10:41
Hallo

in dem Zusammenhang ist auch in eben diesem Kapitel I/O Ports der Abschnitt Configure the Pin mit Tabelle 20 interessant.
Danke, das scheint das zu sein:


The port pins are tri-stated when a reset condition becomes
active, even if no clocks are running

@christopfer

Wie schon erwähnt steht das auf Seite 64, beim Unterpunkt Register
Description for I/O Ports und dann guckst du rechts auf die Grafik bei Initial Value und stellst fest, dass die alle
Achso...... das hatte ich falsch gedeutet.
Also die Werte die dort stehen(Initial Value), sind die Werte nach dem Einschalten ?

@Tito

eider wird bei mir der verlinkte Schaltplan nicht angezeigt, aber wenn du eine klassische H-Brücke verwendest
Link müsste eigentlich gehen...?!

Es sind zwei H-Brücken mit jeweils zwei IR2184
Die /SD Eingänge von einer H-Brücke sind zusammengefasst.
Die /SD Eingänge werden einerseits vom Komperator gegen Masse gezogen (bei zu hoher Belastung) oder halt vom AVR, wenn er die Endstufe abgeschaltet.
Zuerst hatte ich auch die Funktion Bremsen.... braucht ich aber nicht!

l.G. Roberto