PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kann mir einer die Asuro-Dateien erklären?



Lunarman
28.02.2006, 11:21
Hallo,
okay, hat was mit ASURO zu tun, aber ich denke, hier ist C gravierender. Und zwar meine Frage: kann mir einer diesen Codeschnipsel aus der asuro.c erklären? Das dürfte mir bei der programmierung meines ersten Bots helfen, den ich jetzt bald in Angriff nehme. Der Codeschnipsel:


/* Set motor direction */
inline void MotorDir(unsigned char left_dir, unsigned char right_dir)
{
PORTD = (PORTD &~ ((1 << PD4) | (1 << PD5))) | left_dir;
PORTB = (PORTB &~ ((1 << PB4) | (1 << PB5))) | right_dir;
}

Meine Vermutungen dazu.
1. Zeile Kommentar zum Lesen :-)
2. Zeile Hier wird wohl eine Funktion aufgemacht?
3. Zeile Hier wird gesagt, dass PORT D gemeint ist. dann versteh ich dieses &~ nicht - was bedeutet das? So. Dann 1 << PD4. Schätze, dass eben Pin 4 an Port D irgendiwe aktiviert werden soll? Und wofür ist dieser | Strich in der Mitte?
Das Ende versteh ich wieder, da wird halt definiert, dass es sich bei dieser Ausgabefolge um das handelt, was bei right_dir berücksichtigt werden soll.
4. Zeile eigentlich halt die gleichen Fragen...

Kann mir das irgendjemand erklären?

super_castle
28.02.2006, 13:39
hallo, nach den fragen nach verstehst du das winavr-c nicht.
du musst dich erst damit einmal ordentlich beschäftigen, ansonsten sieht es um deinem asuro nicht rosig aus. du wirst dann nur pleiten erleben. und der asuro wir dir keinen spass bringen, nur frusst.

das programmieren mit winavr-c, das datenblatt lesen vom avr8 und der asuro selber gehören eng zusammen, wenn du irgendwo schwächen hast kommst du nicht weiter. und deine c-schwächen sind sehr gross.

SprinterSB
28.02.2006, 14:11
& ist ein bitweise AND (binärer Operator), löscht Bits.
| ist ein bitweise OR (binärer Operator), setzt Bits.
^ ist ein bitweise EXOR (binärer Operator), dreht Bits um (kommt hier nicht vor).
~ ist bitweise NOT (unärer Operator) dreht alle Bits um
<< ist SHIFT-LEFT Operator (binär) a << b schiebt a um b Stellen nach links bzw multipliziert a mit 2^b (2 hoch b).
( und ) dienen zur Priorisierung. Genauso wie 1+2*3 was anderes ist als (1+2)*3. (Wenn es auf deinem Taschenrechne das gleiche ist, klopp ihn in dieTonne!).

Lunarman
28.02.2006, 14:45
Also heißt
PORTD = (PORTD &~ ((1 << PD4) | (1 << PD5))) | left_dir;
auf "deutsch" nichts anderes als
PORTD = (PORTD Nicht Löschen 1 um PD4 nach links oder 1 um PD5 nach links oder left_dir? äh... das macht jetzt in meinen Augen keinen Sinn...
super-castle, ich frage WEIL ich das nicht versteh.

ogni42
28.02.2006, 14:56
Also, übersetzt ins Deutsche heissen die Anweisungen:

Lösche in PORTD Bits 4 und 5 (das entspricht dem bitweisen UND von PORTD und 11001111 (das Bitmuster entspricht der NEGATION von 00110000 das entspricht (1<<PD4)|(1<<PD5).

Hier http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial findest Du ein sehr gutes Tutorial.

Bevor Du damit anfängst den Asuro zu programmieren würde ich an Deiner Stelle einen ATMega 8, ein Steckbrett ein paar Widerstände, LEDs und einen einfachen Programmieradapter kaufen und die Grundschaltungen sowie die Beispielprogramme aus dem Tutorial ausprobieren. Daran kannst Du sehr gut lernen wie man den ATMega in C programmiert und es kann nicht so viel kaputt gehen. Und wenn was kaputt geht ist es schlimmstenfalls ein ATmega 8 für 3€ und nicht der teure Asuro (bei dem die Fehlersuche auch schwerer ist).

Lunarman
28.02.2006, 15:18
nene, der ist ja schon (erfolgreich) programmiert, aber ich wüßte halt mal gerne, woher der mega8 versteht, wenn ich zum Beispiel
MotorSpeed(100,100);
eintippe, dass er dann die PWM-Pins/Ports mit einer bestimmten Pulsweitenmodulation anschalten muss. Port D Pin 4 & 5 sind doch PWM?

ogni42
28.02.2006, 15:36
Ich habe zwar keinen Asuro, aber das sind beim ATMega 8 keine PWM Pins.

Das was Du an Code gepostet hast, ist die Richtungssteuerung für die Motoren. PORTD ist für den linken, PORTB für den rechten Motor. left_dir und right_dir geben dann die Richtung an (Vor, Zurück und wahrscheinlich bremsen).

Die PWM läuft davon unabhängig. Es werden nur die Richtungen für den Motortreiber (meines Wissens eine diskret aufgebaute H-Brücke beim Asuro) geschaltet. Die PWM Signale kommen dann nochmal extra (beim Mega 8 können das PB1, PB2 oder PB3 sein).

Lunarman
28.02.2006, 15:42
Achja, sorry, ich hab hier ne Skizze vom Mega32 hängen #-o
Und dass dir die Richtung ist, müsste ich eigentlich auch wissen... Gott.

super_castle
28.02.2006, 19:57
nimm dir erst einmal ein steckbrett plus avr8 und die datenblätter und die syntax von winavr-c dazu. ansonsten kannste deinen asuro bald in die tonne kloppen.
du musst dich mehr mit winavr-c beschäftigen.