neo98
28.10.2010, 18:38
Hallo zusammen,
ich hab mir vor kurzem einen Asuro zugelegt. Der Zusammenbau, das flashen usw. hatt alles problemlos funktioniert. Aber je mehr Programme ich schreib, desto verrückter werd ich. Ich verwende zum Programmieren Programmers Notepad 2 so wie in der Anleitung beschrieben. Nur, selbst wenn Programmers Notepad keine Fehler noch Warnungen, ausgibt, macht der Asuro manchmal einfahc was er will. Manchmal überspricht er einfach manche Programmschleifen und springt einfach weiter zur nächsten. So wie beim folgenden Programm die erste Schleife übersprungen wird:
#include "asuro.h"
#include <stdio.h>
unsigned char colo = FALSE;
unsigned char zahl[5];
int i = 0;
int main(void)
{
int zaehler = 0;
unsigned int data[2], licht;
Init();
licht = 5;
data[0] = 0;
MotorDir(FWD, FWD);
MotorSpeed(102, 95); //Motoren laufen unterschiedlich
ODOMETRIE_LED_ON;
StatusLED(RED);
while(1) {
DDRC &= ~((1 << PC0) | (1 << PC1)); // Input => no break LED
ADMUX = (1 << REFS0) | WHEEL_RIGHT; // AVCC reference with external capacitor
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
data[1] = ADCL + (ADCH << 8);
licht += data[1];
data[0]++;
if(data[0] > 50)
break;
}
StatusLED(GREEN);
licht = licht / 50;
MotorSpeed(0, 0);
for(i = 0; i < 600; i++)
Sleep(255);
MotorSpeed(100, 100);
while(zaehler < 126){
ADMUX = (1 << REFS0) | WHEEL_RIGHT; // AVCC reference with external capacitor
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
data[1] = ADCL + (ADCH << 8);
if((data[1] < licht) && (colo == FALSE)) {
colo = TRUE;
zaehler = zaehler + 1;
}
else
colo = FALSE;
sprintf(zahl, "%d\n", data[1]);
SerWrite(zahl, 5);
}
StatusLED(RED);
MotorSpeed(0, 0);
while(1);
return 0;
}
Die zweite Schleife funktioniert auch erst wie durch ein Wunder durch hinzufügen von spritnf und serwrite. Kann mir jemand sagen was ich falsch mach?
MfG Neo
ich hab mir vor kurzem einen Asuro zugelegt. Der Zusammenbau, das flashen usw. hatt alles problemlos funktioniert. Aber je mehr Programme ich schreib, desto verrückter werd ich. Ich verwende zum Programmieren Programmers Notepad 2 so wie in der Anleitung beschrieben. Nur, selbst wenn Programmers Notepad keine Fehler noch Warnungen, ausgibt, macht der Asuro manchmal einfahc was er will. Manchmal überspricht er einfach manche Programmschleifen und springt einfach weiter zur nächsten. So wie beim folgenden Programm die erste Schleife übersprungen wird:
#include "asuro.h"
#include <stdio.h>
unsigned char colo = FALSE;
unsigned char zahl[5];
int i = 0;
int main(void)
{
int zaehler = 0;
unsigned int data[2], licht;
Init();
licht = 5;
data[0] = 0;
MotorDir(FWD, FWD);
MotorSpeed(102, 95); //Motoren laufen unterschiedlich
ODOMETRIE_LED_ON;
StatusLED(RED);
while(1) {
DDRC &= ~((1 << PC0) | (1 << PC1)); // Input => no break LED
ADMUX = (1 << REFS0) | WHEEL_RIGHT; // AVCC reference with external capacitor
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
data[1] = ADCL + (ADCH << 8);
licht += data[1];
data[0]++;
if(data[0] > 50)
break;
}
StatusLED(GREEN);
licht = licht / 50;
MotorSpeed(0, 0);
for(i = 0; i < 600; i++)
Sleep(255);
MotorSpeed(100, 100);
while(zaehler < 126){
ADMUX = (1 << REFS0) | WHEEL_RIGHT; // AVCC reference with external capacitor
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
data[1] = ADCL + (ADCH << 8);
if((data[1] < licht) && (colo == FALSE)) {
colo = TRUE;
zaehler = zaehler + 1;
}
else
colo = FALSE;
sprintf(zahl, "%d\n", data[1]);
SerWrite(zahl, 5);
}
StatusLED(RED);
MotorSpeed(0, 0);
while(1);
return 0;
}
Die zweite Schleife funktioniert auch erst wie durch ein Wunder durch hinzufügen von spritnf und serwrite. Kann mir jemand sagen was ich falsch mach?
MfG Neo