PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuru fährt nicht



Fleix
26.09.2010, 16:27
Hallo,
mit diesem Code


#include "asuro.h"

int main(void)
{
Init ();

while (1)
{
MotorDir (FWD, FWD);
MotorSpeed (150, 150);
StatusLED (GREEN);
}

while (1);
return 0;
}

sollte Asuru eigentlich geradeausfahren, aber er macht einfach...nix

mfg Fleix

markusj
26.09.2010, 18:15
Funktioniert der Selbsttest? Nach der Fehlerbeschreibung in deinem anderen Thread stimmt etwas mit deiner Hardware nicht ...

mfG
Markus

Valen
26.09.2010, 21:29
Habst du den .c Datei gespeichert vor dem du das Make Kommando gegeben hat. Vermutlich habst du ein hex Datei geflashed das den FirstTry program Gehört.

Genau was markusj sagt. Erst sicher machen das deine Kommunikationsstelle richtig arbeitet.

Ceos
03.10.2010, 11:09
die motorrichtung und geschwindigkeit in einer endlosschleife dauernd einzustellen kann schon das problem sein, denn meines wissens nach stoppt das ändern den drehrichtung ständig den motor und danach VERSUCHST du ihn wieder anlaufen zu lassen, was aber durch die folgende richtungsänderung gleich wieder verhindert wird!


das while(1) am ende des programm soll nur verhindern, dass die main() methode verlassen wird, was zu undefinierten zuständen im µC führen kann!!

wenn du eine ÄNDERUNG der zustände des asuro (speed richtung oder sonstwas) erreichen willst, solltest du IMMER kontrollieren, ob sich der neue zustand vom alten unterscheidet und nur DANN die änderung herbeiführen! sonst einfach weiterschleifen ^^

markusj
03.10.2010, 11:37
Einspruch, Ceos!
Wenn er den Zustand nicht ändert macht es auch nichts wenn er zum hundertsten Mal MotorDir aufruft.

Problematisch sind dagegen eher große Änderungen in hoher Frequenz, weil dann das Risiko besteht dass diese überschrieben werden ehe sie sich auswirken können.

mfg
Markus

Ceos
03.10.2010, 11:51
okay ich gestehe, dass meine kenntnisse über die asurolib veraltet sind, ich wusste nicht dass dort bereits eine derartige zustandsüberwachung integriert ist (ist sie doch oder??)
denn meines wissens nach stoppt das ändern den drehrichtung ständig den motor man kann sich ja auch mal irren ^^

dennoch sollte man über die unsinnigkeit des while(1) im oberen teil des programms informiert sein :p (oder des while(1) am ende, da es eh nicht erreicht wird)

meckert der compiler denn da garnicht ? nicht mal ne warnung ?

EDIT: in nem anderen thread hab cih schonmal den overhead der methoden erwähnt, den sollte man auch nchit verachten und der rechenzeit wegen unnötige methodenaufrufe sparen ^^ (ein reiner designhinweis)

markusj
03.10.2010, 12:42
okay ich gestehe, dass meine kenntnisse über die asurolib veraltet sind, ich wusste nicht dass dort bereits eine derartige zustandsüberwachung integriert ist (ist sie doch oder??)
denn meines wissens nach stoppt das ändern den drehrichtung ständig den motor

Nö, die Geschwindigkeitswerte werden direkt in die Output-Compare-Register (PWM) geschrieben, die Richtungswerte gehen direkt auf die Konfigurationspins der H-Brücken. Das ganze ist komplett unabhängig vom alten Zustand.

Der Inhalt von MotorDir() aus der DLR-Lib:

PORTD = (PORTD &~ ((1 << PD4) | (1 << PD5))) | left_dir;
PORTB = (PORTB &~ ((1 << PB4) | (1 << PB5))) | right_dir;
Der Code aus der RN-Lib macht genau das gleiche, meine Lib ebenso.

mfG
Markus