Dann werde ich das wohl mal machen müssen.
Hast Du noch einen Tipp wo ich die Bauteile herbekomme? Ich habe einen Conrad direkt vor Ort, oder ist eine Bestellung besser, z.B. Reichelt?
Druckbare Version
Dann werde ich das wohl mal machen müssen.
Hast Du noch einen Tipp wo ich die Bauteile herbekomme? Ich habe einen Conrad direkt vor Ort, oder ist eine Bestellung besser, z.B. Reichelt?
Wenn du einen Conrad direkt vor Ort hast schau erstmal da nach. Sind zwar etwas teurer dort als bei Reichelt aber bei Reichelt hast du noch 5,90€ Versand und das rechnet sich nicht für zwei Transistoren.
Die kosten bei Conrad 0,98€ pro Stück:
http://www.conrad.de/ce/de/product/153470/
Danke für die Tipps, ich melde mich dann wieder wenn die neuen Bauteile eingelötet sind.
Doch, weiterlaufen wird es. Schau mal die SelbTest Code an:
Code:SelfTest.c:
... // line 46
SerWrite("Odometrie Test\n\r",16);
FrontLED(ON);
for (i = 0; i < 0xFFF0; i++)
OdometrieTest();
StatusLED(OFF); FrontLED(OFF);
...
Es misst einfach nur die Spannungswerten 65520 mal und lasst den StatusLED leuchten. Aufhängen kann das Programm nur wann irgendwie ein Reset-situation detektiert wird. (Spannungseinbruch tiefer als Reset-pin Bedingung, und vielleicht blockiert den Bootloader wegen schwache Akku-spannung) Sonnst wird das Programm in einiger Sekunden weiter gehen mit den Motor Test.Code:Test.c:
...
// line 104
/* ---------- Odometrie Sensor Test ------------- */
/* Left Sensor -> Status LED GREEN ON when Light on
Left Phototransistor bright enough */
/* Right Sensor -> Status LED RED ON when Light on
Right Phototransistor bright enough */
void OdometrieTest(void)
{
unsigned int data[2];
OdometrieData(data);
StatusLED(OFF);
if (data[0] < 512)
StatusLED(GREEN);
if (data[1] < 512)
StatusLED(RED);
}
/* END Odometrie Sensor Test ------------------- */
Das verstehe ich als Neuling ehrlicherweise nicht ganz. Die StatusLED leuchtet dauergrün. Bedeutet das nun, daß das Programm wegen dieses Reset als ganzes beendet wird? Müsste durch diesen Reset nicht auch die LED erlöschen?
Wann ein Reset eintrit, wird das laufende Programm beendet. Den Prozessor wird komplett neu eingestellt als wie bei anschalten. Und dann startet den Bootloader von anfang an. Also, wann diese Reset wirklich passiert wurdest du das dadurch erkennen. Nach dem Bootloader abgearbeitet ist geht er weiter mit das gespeicherte Programm. (nur nicht wann die Akku spannung nicht reicht) In deinem Fall sollte das dass SelbTest Programm sein. Aber das wird auch den Statusled Gelb oder Rot leuchten lassen. Ein Reset ist es dan vermutlich doch nicht.
Hat er zwischen den OdometrieTest und 'aufhängen' den MotorTest gemacht? Dann ist er vermutlich schön bei den sehr langweilige Serielle KommunikationsTest an gekommen. Diese Test wartet ganz lange wann es kein Zeichen empfangt. (Mit StatusLED grun! ;) ) Es wartet ein Timeout-dauer ab äquivalent zu 65534 Zeichen (timeout= FFFE hexadezimal), mal 10 bits pro Zeichen ist 655340 UART-bits, ist 273 Sekunden timeout (mit 2400 Baud). Und das versucht er 254 mal (FE hexadezimal etwas zu empfangen und dann dass nächste höher Zeichen zu senden. Also dauert den SerielTest total 69342 Sekunden, oder 19 Uhr bis den Selbtest wieder von Start mit "-- ASURO Testing --" widerholt. Wann die Empfang Baustein nichts bekommt! Das könnte sicher den Eindrück von 'aufhängen' geben. Aber dann musste erst den Motoren (versucht) gedreht (zu) haben.
[EDIT] Vielleicht irre ich mich mit den Timeout Sekunden dauer. Könnte auch nur 65534 mal testen des UCSRA Register sein ob etwas empfangen ist. Was sicher schneller passiert. Aber keine ahnung wieviel genau.
Code:void SerialTest(void)
{
unsigned char data;
unsigned char i;
for (i = 0; i < 0xFE; i++) {
StatusLED(GREEN);
SerRead(&data,1,0xFFFE);
StatusLED(RED);
if (data != 'T') data += 1;
SerWrite(&data,1);
}