Hi,
habe seit 2 tagen meinen Asuro fertig und auch schon fleißig programmiert.
Hat bis vor ner Stunde auch alles geklappt.
Habe dann ein Programm drauf gespielt um den Asuro mit der Fernbedienung zu steuern.
Code:/ ******************************************************************************* * * Description: Asuro lässt sich per IR-Fernbedienung steuern * *****************************************************************************/ #include "asuro.h" #include <stdlib.h> #define CH_DN 0x21 #define CH_UP 0x20 #define VOL_DN 0x11 #define VOL_UP 0x10 #define FULL_SCRN 0x2E #define ZERO 0x00 #define OFFSET 100 #define STEP 60 int speedLeft,speedRight; volatile unsigned int rxdata; volatile unsigned char rxbits; SIGNAL (SIG_OVERFLOW0) { rxbits++; rxdata<<=1; rxdata |= (PIND & (1 << PD0)); // liest Datenbits TCNT0 = 34; // Timer auf 1778µs if(rxbits==14){ TCCR0 &= ~((1 << CS01) | (1 << CS00)); // stoppt Timer } } void Driver(void) { unsigned char leftDir = FWD, rightDir = FWD; leftDir = rightDir = FWD; if (speedLeft < 0) leftDir = RWD; if (speedRight < 0) rightDir = RWD; if (speedLeft > 240) speedLeft = 240; if (speedLeft < -240) speedLeft = -240; if (speedRight > 240) speedRight = 240; if (speedRight < -240) speedRight = -240; MotorDir(leftDir,rightDir); MotorSpeed(abs(speedLeft),abs(speedRight)); } void IRFwd(void) { speedRight += STEP; speedLeft += STEP; if (abs(speedLeft) < OFFSET) {speedRight += STEP; speedLeft += STEP;} FrontLED(ON); BackLED(OFF,OFF); } void IRRwd(void) { speedRight -= STEP; speedLeft -= STEP; if (abs(speedLeft) < OFFSET) {speedRight -= STEP; speedLeft -= STEP;} FrontLED(OFF); BackLED(ON,ON); } void IRLeft (void) { FrontLED(OFF); BackLED(ON,OFF); if (speedLeft != 0){ speedLeft /= 4; Driver(); Msleep(80); speedLeft *= 4; } else{ speedLeft = -150; speedRight = 150; Driver(); Msleep(80); speedLeft = speedRight = 0; } } void IRRight (void) { FrontLED(OFF); BackLED(OFF,ON); if (speedRight != 0){ speedRight /= 4; Driver(); Msleep(80); speedRight *= 4; } else{ speedLeft = 150; speedRight = -150; Driver(); Msleep(80); speedLeft = speedRight = 0; } } void IRStop(void) { speedRight = speedLeft = 0; FrontLED(OFF); BackLED(OFF,OFF); } int main(void) { static unsigned int cmd; Init(); for (;;) { rxbits = 1; rxdata = 0; TIMSK |= (1 << TOIE0); // Interrupt scharf while(PIND & (1 << PD0)); // warte auf 1. Flanke TCNT0 = 90; // Timer auf 1333µs TCCR0 = (1 << CS01) | (1 << CS00); // Start Timer while(rxbits < 14); // warte bis alle Bits empfangen cmd = (rxdata & 0x3F); // 6 Command-Bits werden verwertet switch (cmd) { case CH_DN : IRRwd(); break; case CH_UP : IRFwd(); break; case VOL_DN: IRLeft(); break; case VOL_UP: IRRight(); break; case ZERO : case FULL_SCRN : IRStop(); break; } Driver(); } return 0; }
Hat auch halbwegs gut geklappt.
Tja, und dann... wollte ich wieder ein normales "Fahr den Raum ab" drauf flashen, aber dann kam folgendes
Open COM1 --> OK !
Bulding RAM --> OK !
Connect to ASURO --> OK !
Sending Page 001 of 029 --> v.v.v.v.v.v.v.v.v.v.
TIMEOUT !
Not successful, Flash contents will be invalid!
Was ist passiert??? Auf dem Hyperterminal die IR vom Transceiver gecheckt. Läuft. Nur mit dem flashen geht garnix mehr.
Was kann ich machen ???
HELP plz
grüße mayo







Zitieren

Lesezeichen