also ich möchte jetzt mal nen Servo von meinem Verbrenner steuern aber ich weis ja nicht ein mal wo ich den anschliessen muss bzw wie ich den dann ansteuern muss !!!!! ?????
Druckbare Version
also ich möchte jetzt mal nen Servo von meinem Verbrenner steuern aber ich weis ja nicht ein mal wo ich den anschliessen muss bzw wie ich den dann ansteuern muss !!!!! ?????
Klick jetzt mal auf das blaue "Servo" und schaust welchen Servo du hast und schließt die signal leitung an scl und hier steht was zum port definieren
Code:
Port definieren
Für jeden port gibt es drei register, in denen jeweils 8 bit gespeichert werden. sinnvollerweise steht immer das nullte bit für den nullten pin, das erste bit für den ersten usw. bis zum siebten bit für den siebten pin. es gibt (zumindest rein auf informatischer ebene =) weder ein achtes bit noch einen achten port =)
als beispiel nehme ich port D, für alle anderen ports muss nur jeweils der großbuchstabe geändert werden.
die drei register heissen
DDRA,DDRB,DDRC,DDRD für die RICHTUNG
-für jedes bit gilt, 1=ausgang,0=eingang
PORTA,PORTB,PORTC,PORTD für den ausgangspegel oder die pullups(später)
1=strom an, 0 = aus ODER 1=pullup an, 0=aus
PINA,PINB,PINC,PIND für das eingangssignal.
1 gelesen = strom von aussen ist an, 0=aus
wenn ich also PD2 zum beispiel einschalten möchte, dass 5v spannung ausgegeben werden, muss ich
zuerst in das richtungsregister an die entsprechende stelle eine 1 schreiben. damit die anderen bits nicht verändert werden, wird das ganze mit einer ODER-bedingung verknüpft.
damit man nicht immer alle bitwerte in hex-zahlen umrechnen muss (was aber durchaus möglich ist) wird einfach nur eine 1 verschoben, wie recht weit obern geschrieben mit dem << - operator.
für pd2:
DDRD |= (1<<2);
also im register DDRD wird das zweite bit gesetzt. der pin ist jetzt ein ausgang.
jetzt wollen wir strom anlegen, dafür ist das register PORTD da. hier muss eine 1 gesetzt werden zum einschalten oder eine null zum ausschalten. aber um eine null zu setzen, muss man umdenken: man verschiebt eine 1 an die entsorechende stelle, (00000100) invertiert das ganze mit dem ~ operator (11111011) und verknüpft das ganze mit dem und-operator.
PORTD |= (1<<2); //eingeschaltet
PORTD &= ~(1<<2); //ausgeschaltet.
damit kannst du zb schon leds anschalten usw, du kannst ja einfach im schaltplan rausfinden an welchem pin die jeweilige led angeschlossen ist.
um einen pin als eingang zu nutzen, zb um einen taster auszulesen, muss der taster gegen masse an den pin angeschlossen werden.
also GND --- taster --- atmega
dann schaltest du dein pin auf eingang:
DDRD &= ~(1<<2);
und den pullup-widerstand ein. das ist nötig um festzuegen dass der pin solange high ist bis der taster gedrückt wird.
PORTD |= (1<<2); //das gleiche register wie für den ausgangpegel, aber hier für den pullupverwenndet
wenn du jetzt wissen willst ob der taster gedrückt wurde, mach folgendes
unsigned char test;
test = PIND & (1<<2);
wenn test >0 ist, dann wurde die taste NICHT gedrückt, wenn test gleich null ist, wurde die taste gedrückt.
ich versteh erhlich gesagt nur Bahnhof :-k :-k :-k :-k :-k :-k
Hallo
Ich versuchs mal einfacher zu erklären.
Wenn du die M32 hast schließt den den Servo an die 5V Stromversorgung (rotes und schwarzes Kabel) dann bleibt ein Kabel (Orange oder Weiß meistens) über. Über dieses Kabel wird der Servo angesteurt bzw die Position übermittelt bis wohin er sich drehen soll --> das so genannte PWM Signal (Pulsweitenmodulation). Dieses Steuerkabel ( in Zukufnt PWM-Kabel genannt) wird an einen Ausgang des Robos (in dem Beispiel an die I/O Ports der M32 Platine geklemmt).
Das PWM Kabel bekommt dann (bedingt durch das Programm) jeweils einen kurzen Impuls der dem Servo sagt was er machen soll.
Im Programm sieht die Methode dann so aus:
void Servo(uint8_t pos)
{
DDRC |= IO_PC4; //I/O Port als Ausgang deffinieren
PORTC |= IO_PC4; // Impulsstart
sleep(pos); // so und soviel ms warten
PORTC &= ~IO_PC4; // Impulsende
sleep(185); // 18,5ms warten
}
In der main Methode wird dann zB gesagt:
...
int x;
for(x=0;x<50;x++)
{
Servo(20);
}
...
Dann dreht sich der Servo auf eine bestimmte Position (unabhängig von seiner vorherigen Position das is das geniale bei Servos) und bleibt dort bis er weiter angesteuert wird.
Die Positionen sind bei meiner Methode zwischen 3-23 wählbar (Anschlag auf einer Seite bzw auf der anderen)
Ich hoffe es ist so etwas verständlicher ;)
Gruß Thund3r
Geht mir grad auch so ;)
Aber wenn du den Text 2x durchliest, wirds dir klarer :)
@ Thund3r :
meinst du mit M32 das erweiterungsmodul?
das hab ich nämlích nicht :mrgreen:
@RoboNull:
Geht mir auch so
@I♥ROBOTIC (Was ist das für ein Name?)
Ja er meint das MEGA32 Erweiterungsmodul
Hallo
Ja das mein das MEGA32 Erweiterungsmodul
Geht aba auch mit der Base so ähnlich.
Gruß Thund3r
ja leider ne kleine planänderung:
ich darf mir zurzeit nichts kaufen, also auch keine servos :frown: :frown: :frown:
tja hat sich also erledigt......ich meld mich wieder wenn ich dann Teile hab....
@roboter14
dieses #&...; sollte eigentlich als herz dagestellt werden :mrgreen: schau mal in deinen Beitrag da wird der name richtig angezeigt :mrgreen:
Ich weiß nicht wie du das Herz in deinem Nicknamen geschrieben hast, sollte es aber so aussehen:
greift der XSS Filter des Boards ;)Zitat:
<3