PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Servo reagiert nicht



miicchhii
17.07.2011, 12:47
Ich hab mir gestern ein paar Billig-Servos vom C geholt,
und mit dem Code versucht:




#include <avr/io.h>
#define F_CPU 2E6
#include <util/delay.h>


int main()
{
DDRB=0xFF;
DDRA=0b00000001;
while(1)
{
PORTA=0xFE;
if(!(PINA & (1<<PA3)))
{
PORTA |= (1<<PA0);
_delay_us(1000);
PORTA &= (0<<PA0);
_delay_us(20000);
}

if(!(PINA & (1<<PA4)))
{
PORTA |= (1<<PA0);
_delay_us(2000);
PORTA &= (0<<PA0);
_delay_us(20000);
}
}
}
Leider macht der Servo garnichts...
ich habe gelb und schwarz (aussen) für + und Masse angeschlossen, rot (Mitte) an die Steuerung,
mit gelb als Steuerung und rot als + hab ichs auch schon probiert, geht nicht...

Ich habe hier 1ms für Rückwärts, 2ms für Vorwärts genommen, mit je 20ms Pause.

Bitte um Hilfe!

mfg michi

oberallgeier
17.07.2011, 13:14
Hmmm, also einen Pin setze ich auf Null mit PORTA &= ~(0<<PA0), Du sparst Dir die Tilde vor der Klammer. Das dürfte ein (der?) Fehler sein.

PS: wenns nach ner Stunde keine Antwort gibt, (https://www.roboternetz.de/community/showthread.php?53843-Problem-mit-schwachem-Motor&p=518300&viewfull=1#post518300) müsste man nicht gleich nen neuen Thread aufmachen - es gibt Menschen die Sonntags auch mal Mittagessen . . . .

Hubert.G
17.07.2011, 13:19
Also ich schreibe immer so zum auf Null setzten:

PORTA &= ~(1<<PA0);

radbruch
17.07.2011, 13:28
rot +
schwarz -
gelb Signal

ist richtig.

PORTA &= (0<<PA0); bedeutet PORTA = PORTA & 0; Es werden alle Pins auf Low bzw. ohne internen PullUp geschaltet.
(PORTA &= ~(0<<PA0) bedeutet PORTA = PORTA & 0b11111111;)

Ich würde delay.h misstrauen. Wofür steht eigentlich #define F_CPU 2E6? Wenn die Taktfrequenz falsch angegeben wird sind die Zeiten von delay.h nicht richtig.

oberallgeier
17.07.2011, 13:52
Hast Du eigentlich die Verbindung gemacht wie hier in der Schaltung im Wiki gezeigt? (http://www.rn-wissen.de/index.php/Servo#Ansteuerung:_Signalform_und_Schaltung) Da hatte ich extra auf die notwendige GND-Verbindung zwischen allen Komponenten hingewiesen, weil das so ein lausiger, immer wieder auftauchender Fehler ist. Anm.: die in der Schaltung gezeigten Anschlüsse am Mikrocontroller sind NUR BEISPIELHAFT - also kein Muss. Aber der gemeinsame GND ist ein absoluts Muss.


......http://www.rn-wissen.de/images/d/d6/Servoansteuerg_02.gif

miicchhii
18.07.2011, 06:34
Kann es sein dass die Servoversorgungsspannung von 5V nicht ausreicht?Die Stellgeschwindigkeiten sind bis etwas unter 5V angegeben,Damit ist doch die Versorgung gemeint oder?Ich hab jetzt alles von der selben Versorgung also ist Common GND vorhanden.Den Code konnte ich leider noch nicht ändern und probieren,Danke für eure Hilfe, hab mich mit dem löschen etwas vergriffen,Wollte mir dir tilde sparen, dafür einen nuller statt einem einser shiften ;-)Mfg michi

miicchhii
18.07.2011, 17:26
Danke für eure Hinweise bzgl Code!Hab den Code geändert und die Versorgung auf 12V hochgeschraubt, ich hoffe das schadet dem Servo nicht allzusehr? Danke nochmal!Mfg michi

Abnormal
18.07.2011, 20:28
naja - gugg mal in das Datenblatt Deines Servos, dann weißt du es.
ich vermute das der kaum mehr als 5 Volt ausgelegt sein wird.
in der Regel ist die mittlere Ader am Servostecker +Versorgung.
Die Zeiten sind je nach Servotype recht unterschiedlich, auch weil die meisten Servos viel weiter drehen können als notwendig wäre.
Das probiert man a, besten aus.
mit einem oszi würde ich mal chzecken, ob der Controller überhaupt das Signal liefert das Du erwartest und dann mal den Servo richtig anschließen...
So was ähnliches hab ich erst kürzlich probiert:
http://www.flickr.com/photos/64306223@N08/5893910928/
war wirklich - auch für mich als "blutiges Greenhorn" - sehr einfach und ohne Vorkenntnisse zu realisieren.

miicchhii
20.07.2011, 17:18
Wie gesagt: danke für die Tipps und Hilfe, der Code hat nicht gepasst jetzt funktioniert alles perfekt.Hab mir schon eine steckplatine für die zwei dinger gebastelt^^Ich hab leider kein datenblatt dazu, das ist so einer um 2,99€,Normalerweise sind die für nur 5V ausgelegt oder wie? Mfg michi

Abnormal
20.07.2011, 18:08
http://www.produktinfo.conrad.com/datenblaetter/225000-249999/230500-da-01-en-TopLine_Mini_Servo_ES_05_Graupner.pdf

vielleicht der, kostet aber 5 Euro, einen billigeren hab ich nicht beim Conrad entdecken können.

oberallgeier
20.07.2011, 18:19
... kein datenblatt ... so einer um 2,99€ ... für nur 5V ausgelegt ...? ...Modellbauservos sind üblicherweise für 4,8 bis 6 Volt ausgelegt. Dabei würde ich diese Betriebsgrenzen nicht wirklich eng sehen - vor allem bei dem Einstandspreis. Ich hatte bei meinen Billigservos festgestellt, dass die (auch) beim Betrieb innerhalb der Betriebsgrenzen eine relativ geringe Lebensdauer haben. Diese Feststellung ist aber nicht allgemeingültig.

miicchhii
20.07.2011, 18:34
http://www.produktinfo.conrad.com/datenblaetter/225000-249999/230500-da-01-en-TopLine_Mini_Servo_ES_05_Graupner.pdf

vielleicht der, kostet aber 5 Euro, einen billigeren hab ich nicht beim Conrad entdecken können.

nein, die die ich hab sind denk ich nicht im Katalog,
die waren überall ein paar aufgehängt mit dem Ziel sie loszuwerden nehm ich an ;-)

edit: es sind S-325 HB, eigenmarke wie mir scheint (von der etikette her)
ich such mal nach einem datenblatt dazu

radbruch
20.07.2011, 19:26
...der Code hat nicht gepasst jetzt funktioniert alles perfekt.Wie sieht der Code denn jetzt aus?

miicchhii
20.07.2011, 19:42
Wie sieht der Code denn jetzt aus?

weil ich so dankbar bin ;-) :


#include <avr/io.h>
#define F_CPU 12E6
#include <util/delay.h>


int main()
{
DDRB=0xFF;
DDRA=0b00000000;
while(1)
{
PORTA=0xFF;
if(!(PINA & (1<<PA3)))
{
PORTB |= (1<<PB1);
_delay_us(1000);
PORTB &= ~(1<<PB1);
_delay_us(20000);
}


if(!(PINA & (1<<PA4)))
{
PORTB |= (1<<PB1);
_delay_us(100);
PORTB &= ~(1<<PB1);
_delay_us(20000);
}

if(!(PINA & (1<<PA5)))
{
PORTB |= (1<<PB3);
_delay_us(1000);
PORTB &= ~(1<<PB3);
_delay_us(20000);
}


if(!(PINA & (1<<PA6)))
{
PORTB |= (1<<PB3);
_delay_us(100);
PORTB &= ~(1<<PB3);
_delay_us(20000);
}
}
}


die Zeiten stimmen zwar nicht zusammen (delay.h hat sonst immer gut funktioniert)
aber ich kann meinen bot jetzt vor und rückwärts fahren lassen :D

radbruch
20.07.2011, 19:50
Krass, aber wenn es funktioniert ist es ok.


weil ich so dankbar binDavon kann sich niemand was kaufen. Aber aus einem finalen und funktionierenden Programm können viele was lernen. Das ist natürlich nicht persönlich gemeint, eher allgemein.

Gruß

mic

miicchhii
20.07.2011, 20:11
Davon kann sich niemand was kaufen. Aber aus einem finalen und funktionierenden Programm können viele was lernen. Das ist natürlich nicht persönlich gemeint, eher allgemein.


ich hab das mit dem "weil ich so dankbar bin" als scherz gemeint,
den hätte ich ohnehin hergegeben wenn wer fragt oder auch so.

mfg michi

edit: Video ist online auf meiner Website unter "My Robot"