PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem:Servo schluckt Signal



kif
10.02.2011, 15:41
Hey,

ich habe folgendes Problem.
Ich gebe an einen Port das Signal für einen Servo aus. Das Signal stimmt (mit Oszilloskop nachgemessen), sobald ich jedoch den Servo anschließe verschwindet das Signal, obwohl der Mikrocontroller weiterläuft.

Hat jemand eine Idee wo das Problem liegen könnte?
Bei dem Controller handelt es sich um eine Atmel At89S8252 (Platine von der Schule)

Mfg Kif

Hubert.G
10.02.2011, 16:09
Port 0 ist OpenDrain, da könntest du Probleme bekommen.
Port 1 sollte funktionieren für deine Anwendung.

kif
10.02.2011, 17:00
Ich habe den Port2.1 für das Signal verwendet.
Was genau bedeutet OpenDrain.

PICture
10.02.2011, 17:49
Hallo!

Ohne Strommessung des für Servosteuerung benutzten Pins fällt mir leider nichts ein. :(

MfG

Hubert.G
11.02.2011, 09:02
Port2.1 sollte funktionieren. Hast du ihn auch als Ausgang konfiguriert.
OpenDrain bedeutet das der Ausgang nur nach GND schaltet.

kif
11.02.2011, 13:22
Den Port2.1 hab ich nicht als Ausgang konfiguriert. Wie kann man mit Assembler Ports als Ausgang definieren? Ich kann das ganze erst wieder Donnerstag testen (in der Schule) trotzdem schonmal Danke.

oberallgeier
11.02.2011, 14:09
... Wie kann man mit Assembler Ports als Ausgang definieren ...Beim AT89S8252 kann man die IO-Ports mit internem PullUp etwa so als Ein- bzw. Ausgang initialisieren wie unten für einen tiny13.

;================================================= ==================================
; Initialisierungprozeduren, für µC, ADC und Timer-ISR
;================================================= ==================================
;
mc_init: ;=== Initialisiere Mikrocontroller
; PB0 (servo1) + PB3 (servo2) = Ausgang, PB4 (poti1) = ADC-Eingang
ldi r16,0b00001000 ;Ausgang (1) auf PB3, Eingang (0) auf PB4
out ddrb,r16 ;Datenrichtungsbits setzen, Port ist Ausgang
ldi r16,0b11100111 ;Portbits setzen
out portb,r16 ; und initialisieren
ret ;=====----->>>>>
Genaueres zu Deinem controller steht im Datenblatt (klick hier) (http://www.atmel.com/dyn/resources/prod_documents/doc0401.pdf), leider kenne ich die Registernamen für die Ports nicht auswendig.

kif
12.02.2011, 19:39
Kann das sein das das genannte Programm nicht funktionieren würde? Der Atmel At89S8252 Controller gehört zu der 8051 Familie und in der Schule haben wir nie die Befehle "ldi" oder "out" sondern nur "move" etc.
Wie schon gesagt ich kann es erst wieder am Donnerstag in der Schule testen.

oberallgeier
12.02.2011, 21:41
... Beim AT89S8252 kann man die IO-Ports ... etwa so ... initialisieren wie unten für einen tiny13 ...
Kann das sein das das genannte Programm nicht funktionieren würde ...Stimmt, MEIN Beispielprogramm zeigt die Vorgehensweise. Es ist ja nicht für DEINEN Controller bzw. Deinen Assembler geschrieben. Der Ausdruck "etwa so" heißt ja eben nicht "genau so". Die für Deinen Controller bzw. die für Deinen Assembler zutreffenden Befehle und Register musst Du selbst aus Deinen Unterlagen raussuchen. Genau das sagt eindeutig der letzte Satz in meinem oberen Posting.

kif
13.02.2011, 11:46
Ja gut, aber auf mikrocontroller.net finde ich wiederrum einen Thread wo steht das man bei der 8051 Familie das nicht definieren muss, deshalb frag ich lieber nochmal nach ob das überhaupt geht.

((http://www.mikrocontroller.net/topic/58375 "vierter Post"))

Und das mit dem Datenblatt ist ja gut, aber für einen Laie ist das schwer zu verstehen, wenn ihr mir einen Hinweiss gibt unter welchen Unterpunkt ich schauen soll dann mache ich das gern, aber davor man sich knapp 41 Seiten übersetzten muss, darf man ja auf ein bisschen Hilfe aus dem Forum hoffen.

Mfg Kif und danke für die Mühe

Searcher
13.02.2011, 13:20
Ich meine, daß der Ausgangspin zu wenig Strom liefern kann.

Hab mal in das Datenblatt geschaut. Da steht drin, daß Port 2 Buffers in der Lage sind 4 TTL Eingänge zu versorgen. Das ist sehr wenig Strom im high Zustand. Dazu hab ich leider keine allgemein gültigen Angaben gefunden.

Es gibt ein FAQ http://www.8052.com/faqs/153713

Danach könntest Du versuchen bei VCC 5V einen Pullup von 100k an den den Pin zu schalten (I il wird mit 50µA in DC Charakteristics angegeben - keine Ahnung ob das als die "pulldown capability" des Ports anzunehmen ist) und hoffen, daß Dein Servo dann reagiert. Sonst messe mal, wie Picture schon geschrieben hat, den Strom, den das Servo auf der Signalleitung braucht, um zu funktionieren. Eventuell Treiber an den Port schalten.

In der Hoffnung selber alles richtig interpretiert zu haben...

EDIT: Ich seh grad im Datenblatt unter der "DC Characteristics" die "Notes 1".

Maximum IOL per port pin: 10 mA
Maximum IOL per 8-bit port: Port 0: 26 mA; Ports 1, 2, 3: 15 mA
Maximum total IOL for all output pins: 71 mA

Damit kannst Du meiner Ansicht nach mit dem externen Pullup schon auf 5k oder noch weniger gehen.

Gruß
Searcher

kif
13.02.2011, 16:03
Also als Strom zwischen Port und Servosignaleingang habe ich 40µA gemessen (So ziemlich rechter Anschlag).

Also der 5k Widerstand soll ja zwischen Port2.1 und dem Servosignaleingang, habe ich das richtig verstanden?

Mfg Kif

Searcher
14.02.2011, 06:27
Widerstand (kann auch 4,7k sein) zwischen Portpin und Vcc des µC (5V). Signalleitung des Servo auf Portpin.
Funktionstest.
Widerstand auf 1k verkleinern. Funktionstest.
Strombedarf des Servo an Servotester oder sonswie unabhängig vom µC messen.
Grundlagen lernen: http://www.rn-wissen.de/index.php/Pullup_Pulldown_Widerstand#Pullup-Widerstand

Ansonsten ist die http://www.8052.com/ Seite eine Fundgrube für Deine Fragen und ohne Englisch geht es bei tieferem Einstieg in diese Materie kaum.

Sorry, keine Zeit, viel Erfolg.

Gruß
Searcher

oberallgeier
14.02.2011, 15:08
... Datenblatt ist ja gut, aber ... knapp 41 Seiten übersetzten ...Tja, es ist eben aktuell so, dass Datenblätter in der Elektronik oft nur in englisch erhältlich sind.


... darf man ja auf ... Hilfe aus dem Forum hoffen ...JAAAAAAAAA - und ich habe etwas gefunden.

Vermutlich ist Dein Board das 89S8252 Flash-Board aus Elektor 12/2001! Mittlerweile ist der AT89S8252 offiziell abgekündigt worden. Zu dem Board gibt es von Burkhard Kainka ein Buch "Basiskurs Mikrocontroller" - klickmich - (http://www.b-kainka.de/buch.htm#basismi) im Elektorverlag. Und da der gute Burkhard ein gewissenhafter (und sehr guter Autor ist) hat er auf seiner Homepage (klickhierschonwieder) (http://www.b-kainka.de/basismikro.htm) zu diesem Buch etliche Beispieltexte versteckt. Siehe dort Download der Beispieldateien und Programme. (http://www.b-kainka.de/basismikro.zip)

Vermutlich hilft Dir dort der eine oder andere Codeschnippsel in Assembler bei Deinem Problem.

Viel Erfolg

Richard
14.02.2011, 17:22
(klickhierschonwieder)[/url] zu diesem Buch etliche Beispieltexte versteckt.

Wow, "Der Interpreter Basic-52 54", da kommen alte Gefühle auf. :-)

Gruß Richard

kif
15.02.2011, 17:45
Es handelt sich nicht um das genannte Board. Ich glaube das Board meiner Schule hat keinen bestimmten Namen. Was mir erst eingefallen ist das die ganzen Ports eigentlich schon in Benutzung sind, sprich LEDs, Display etc (hab keinen Schaltplan). Könnte es sein das dadurch zuviel Strom gezogen wird?

Richard
15.02.2011, 17:59
Es handelt sich nicht um das genannte Board. Ich glaube das Board meiner Schule hat keinen bestimmten Namen. Was mir erst eingefallen ist das die ganzen Ports eigentlich schon in Benutzung sind, sprich LEDs, Display etc (hab keinen Schaltplan). Könnte es sein das dadurch zuviel Strom gezogen wird?

Ja, DAS geht schon einmal überhaupt nicht! Die Servo Daten Leitung gibt PPM = Puls/Pausen Modulation aus, ähnlich PWM. Je nachdem was noch an den Pin angeschlossen ist werden diese Signale verfälscht oder ganz "platt" gemacht. :-(

Du musst also einen Pin frei machen.

Gruß Richard

kif
15.02.2011, 18:14
Gut das werde ich am Donnerstag als erstens probieren, habe das vollkommen vergessen da ich nie einen Schaltplan vor Augen hatte.


Edit: Habe den Servo jetzt an einen unbenutzen Port angeschlossen und es funktioniert!
Danke für die Hilfe