Hallo Mikrocontroller Gemeinde, nachdem ich mich in der Vergangenheit überwiegend mit Softwareentwicklung beschäftigt habe, versuche ich mich nun auch mal an der Hardware und arbeite Schritt für Schritt in die AVR Welt ein. Die meisten Probleme erledigen sich ja beim genauen Lesen der Datenblätter, aber heute machen sich meine fehlenden E-Technik Kenntnisse bemerkbar. Vielleicht kann mir jemand weiterhelfen. Auf einem atmega8 erzeuge ich ein biphase mark signal mit einer Frequenz von 1-2 kHz. Wenn ich das mit dem Oszilloskop messe, dann stelle ich fest, dass insbesondere die Fall-Time des Portpins, also der Übergang von 1 nach 0 ziemlich lange dauert (ca. 300uSec) und bei einem 2kHz signal sogar nichtmal ganz auf 0 runter geht, bevor schon die nächste eins geschrieben wird. Die rise-Time hingegen liegt bei 10uSec. Derzeit messe ich ohne irgendeine Beschaltung direkt am Port. Gibt es eine Möglichkeit, die Übergänge schneller zu machen? Fehlt vielleicht nur die richtige Beschaltung des Ports? Gespannte Grüße, Dan
Danski schrieb: > dass insbesondere die Fall-Time des Portpins, also der Übergang > von 1 nach 0 ziemlich lange dauert (ca. 300uSec) und bei einem 2kHz > signal sogar nichtmal ganz auf 0 runter geht, bevor schon die nächste > eins geschrieben wird. Vergessen den betreffenden Pin zuvor auf Ausgang zu konfigurieren? Denn dann würdest Du nur in schneller Folge den Pullup ein und ausschalten (der wird nämlich zufällig auch über das PORT-Register gesteuert) an einem Pin der ansonsten hochohmig ist (weil Eingang), das kann zu einem solchen Symptom führen. Wenn er korrekt auf Ausgang steht solltest Du richtig knackige Schaltflanken sehen, weit weniger als 1µs.
Aha, tatsächlich - ich dachte, der Port wäre per default ein Ausgang und müsste nur bei Bedarf als Eingang definiert werden. Nun habe ich das entsprechende Bit im DDRD gesetzt
1 | DDRD |= (1 << PD7) |
... und siehe da, beide Zeiten liegen im Nanosekunden Bereich. Super - vielen Dank für den Tip!!! Dann muss ich nachher nicht schlecht gelaunt ins Bett gehen ;)
es gibt einen ganz einfachen grund, warum IOs per default inputs sind: du kannst mit extern anliegenden signalen weniger kaputt machen, bis der uc gebootet hat...
Hi, Danke für die Erklärung. Das leuchtet ein. In dem Zusammenhang vielleicht auch noch eine Frage, die mich immer schon interessiert hat. Welchen Zustand haben die Ports eines atmega Controllers beim Einschalten/booten? Nehmen wir mal an, ich habe eine Lackiermaschine deren Ventile per MC gesteuert werden. Es gäbe ja eine ziemliche Sauerei, wenn beim Einschalten zufällig Ventile öffnen. Wie schützt man sich vor undefinierten Zuständen? heißen Dank, Dan
Danski schrieb: > Wie schützt man sich vor undefinierten Zuständen? In dem die Treiberschaltung fuer die Ventile das verhindert, das ist sache des Schaltungsentwicklers auf sowas zu achten.
Verstehe. Kannst Du mir einen groben Hinweis geben, wie sowas elektrisch funktioniert? Meine Vorstellung war, dass am Prozessorpin quasi nur ein Mosfet hängt, der dann z.B. ein Magnetventil schaltet. Wäre die Vorgehensweise nun, dass man die Schaltspannung erst nach einer bestimmten Zeit freigibt, so dass ein Durchschalten des Mosfets einfach keine Auswirkung hat? Oder funktioniert sowas noch ganz anders?
Danski schrieb: > Meine Vorstellung war, dass am Prozessorpin quasi nur ein Mosfet hängt, > der dann z.B. ein Magnetventil schaltet. Im simpelsten Fall reicht ein Widerstand vom Gate zu GND. Im extremfall wird da noch ein Hardwarewatchdog in Form eines Monoflops eingebaut das staendig getriggert werden muss.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.