-
        

Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 46

Thema: Problem 1 mit Snake-Vision

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.12.2006
    Ort
    Saarland
    Alter
    37
    Beiträge
    314

    Problem 1 mit Snake-Vision

    Anzeige

    Hi
    Ich habe die snake erweiterung jetzt zu sammen gebastelt nur habe ich ein kleines problem mit der Programmierung habe schon paar mal drüber geschaut aber der sagt mir immer etwas vom Token wo keiner ist und laut Buch keiner hin soll

    Hier mal der Code

    Code:
    #include "asuro.h"
    
    #define THRESH1 20
    #define THRESH2 80
    #define THRESH3 200
    
    void ThermalData (unsigned int *data)  {
    
    ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;
    
    ADCSRA |= (1 << ADSC);
    
    while (!(ADCSRA & (1 << ADIF)));
    
    ADCSRA |= (1 << ADIF);
    
    data[0] = ADCL + (ADCH) << 8);
    
    ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT;
    
    ADCSRA |= (1 << ADSC);
    
    while (!(ADCSRA & (1 << ADIF)));
    
    ADCSRA |= (1 << ADIF);
    
    data[1] = ADCL + (ADCH) << 8);
    
    }
    
    int main(void)
    {
    unsigned int tdata[2];
    unsigned int speed;
    signed int diff,sum;
    	Init();
    		
    	MotorDir(FWD,FWD);
    		
    	while(1);
    	{
    	ThermalData(tdata);
    	sum=tdata[0]+tdata[1];
    	if (sum>THRESH1) {
    		StatusLED(GREEN);
    		speed=140;
            }
    		if (sum>THRESH2) {
    		StatusLED(YELLOW);
    		speed=200;
    		}
    		if (sum>THRESH3) {
    		StatusLED(RED);
    		speed=255;
    		}
    		
    		diff=((signed)tdata[0]-(signed)tdata[1])*32/sum;
    		if (diff>4) {
    		BackLED(ON,OFF);
    		MotorSpeed(0,speed);
    		}
    		else if (diff<-4) {
    			BackLED(OFF,ON);
    			MotorSpeed(speed,0);
    			}
    		else {
    		BackLED(OFF,OFF);
    		MotorSpeed(speed,speed);
    			}
    		}
    		else {
    		StatusLED(OFF);
    		BackLED(OFF,OFF);
    		MotorSpeed(0,0);
    		}
    	}
    		
    	return 0;
    }
    Und Hier die Fehlermeldung

    Code:
    > "make.exe" all
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=asuro.lst  -std=gnu99 asuro.c \
    | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > asuro.d; \
    [ -s asuro.d ] || rm -f asuro.d
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test_i2cmaster.lst  -std=gnu99 test_i2cmaster.c \
    | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test_i2cmaster.d; \
    [ -s test_i2cmaster.d ] || rm -f test_i2cmaster.d
    
    -------- begin --------
    avr-gcc (GCC) 3.4.6
    Copyright (C) 2006 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    Compiling: test_i2cmaster.c
    avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test_i2cmaster.lst  -std=gnu99 test_i2cmaster.c -o test_i2cmaster.o
    In file included from asuro.h:82,
                     from test_i2cmaster.c:1:
    C:/WinAVR/avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete.  Use <avr/interrupt.h>."
    test_i2cmaster.c: In function `ThermalData':
    test_i2cmaster.c:17: warning: suggest parentheses around + or - inside shift
    test_i2cmaster.c:17: error: syntax error before ')' token
    test_i2cmaster.c:27: warning: suggest parentheses around + or - inside shift
    test_i2cmaster.c:27: error: syntax error before ')' token
    test_i2cmaster.c: In function `main':
    test_i2cmaster.c:71: error: syntax error before "else"
    test_i2cmaster.c: At top level:
    test_i2cmaster.c:76: error: syntax error before '}' token
    test_i2cmaster.c:79:2: warning: no newline at end of file
    make.exe: *** [test_i2cmaster.o] Error 1
    
    > Process Exit Code: 2
    > Time Taken: 00:02
    Bitte um Hilfe

    Edit: OK habe es gefunden habe es so geschrieben data[0] = ADCL + (ADCH) << ;
    muss haber data[0] = ADCL + (ADCH << ; so sein habe hinter der 8 ein ) das nicht dahin gehört

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    funktionierts denn?
    kleinschreibung ist cool!

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.12.2006
    Ort
    Saarland
    Alter
    37
    Beiträge
    314
    nö die Status LED ist grün wenn sie keine Wärmequelle findet sollte er eigendlich aus sein

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    hast ihn mal vor den kühlschrank gehalten? oder gegen eine kalte glasscheibe? oder eben gegen irgend was anderes kaltes? mal am poti gedreht? quelltext genau gecheckt?
    kleinschreibung ist cool!

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.12.2006
    Ort
    Saarland
    Alter
    37
    Beiträge
    314
    da ist kein Potie habe gerade angst bekommen nur ein Taster habe probiert geht aber nicht wie gesagt die Status LED wird grün müsste eigendlich aus sein

    EDIT: da wird doch ein LM78L05Z oder gleichbares verlangt habe bei reihcelt disen aber nicht bekommen der hat mir einenn µA 78L05 als alternative angezeigt . Meint ihr du das es das richtige ist?

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.12.2006
    Ort
    Saarland
    Alter
    37
    Beiträge
    314
    Ich glaube ich habe den fehler gefunden beim nach messen ist mir aufgefallen das ein Elko nichts anzeigt und noch etwas ist mir aufgefallen weiss ja nicht ob das normal ist aber meine Accus haben halbwegs frisch geladen 8,63Volt ich habe hier öfters was von 6 volt gehört das sind ja direkt 2,6 volt mehr ist das normal?

  7. #7
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    Ein vollgeladener akku sollte UNTER LAST etwa 1,2 volt bringen. 4 akkus = 4,8 Volt. 4 Batterien (diese bringen etwa 1,5 volt) haben 6V. Akkus und batterien die nicht unter last stehen (asuro aus, nix angeschlossen, nur der prozessor läuft oder ähnlich; halt kein wirklicher verbraucher wie zB die motoren) können eine deutlich höhere spannung haben.

    elkos zeigen nichts an. elkos speichern strom. theoretisch sollte der widerstand gegen unendlich gehen, es fliesst kein strom durch.
    kleinschreibung ist cool!

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.12.2006
    Ort
    Saarland
    Alter
    37
    Beiträge
    314
    hmm dann weiss ich auch nicht warum mein Asuro die Erweiterung nicht nimmt Ich habe nach brücken geschaut aber es sind keine vorhanden alle sachen sind neu und haben beim nachmessen alle die richtigen werte verstehe wer will ich leider nicht. Habe immer irgendwo eine ... drin kann nicht mal was auf anhieb funktionieren

  9. #9
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    hm.. versuche es mal mit extrem kalten gegnständen. was passiert da? und prüfe den quelltext nochmal genau. wirklich alles korrekt?

    oder hast du die erweiterungsplatine falschrum? die gedruckten leitungen müssen auf der UNTERSEITE sein.
    kleinschreibung ist cool!

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.12.2006
    Ort
    Saarland
    Alter
    37
    Beiträge
    314
    Hi

    Ich habe ihn ins gefrierschrank gehalten 4 Sterne bis zu -18 C und es passiert überhaupt nichts habe es mit einem Teelämpchen versucht das funktioniert auch nicht leider.

    Quelltext habe ich locker 15 mal nach geschaut aber finden tu ich da auch nichts leider


    Code:
    #include "asuro.h" 
    
    #define THRESH1 20
    #define THRESH2 80
    #define THRESH3 200
    void ThermalData(unsigned int *data)  {
    	ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;
    	ADCSRA |= (1 << ADSC);
    	while (!(ADCSRA & (1 << ADIF)));
    	ADCSRA |= (1 << ADIF);
    	data[0] = ADCL + (ADCH << 8);
    	ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT;
    	ADCSRA |= (1 << ADSC);
    	while (!(ADCSRA & (1 << ADIF)));
    	ADCSRA |= (1 << ADIF);
    	data[1] = ADCL + (ADCH << 8);
    }
    
    int main(void) {
    	unsigned int tdata[2];
    	unsigned int speed;
    	signed int diff,sum;
    	Init();
    	MotorDir(FWD,FWD);
    	while(1);
    	{
    		ThermalData(tdata);
    		sum=tdata[0]+tdata[1];
    	
    		if (sum>THRESH1) {
    			StatusLED(GREEN);
    			speed=140;
    			if (sum>THRESH2) {
    			StatusLED(YELLOW);
    			speed=200;
    			}
    			if (sum>THRESH3) {
    			StatusLED(RED);
    			speed=255;
    			}
    		
    			diff=((signed)tdata[0]-(signed)tdata[1])*32/sum;
    			if (diff>4) {
    				BackLED(ON,OFF);
    				MotorSpeed(0,speed);
    			}
    			else if (diff<-4) {
    				BackLED(OFF,ON);
    				MotorSpeed(speed,0);
    			}
    			else {
    				BackLED(OFF,OFF);
    				MotorSpeed(speed,speed);
    			}
    		}	
    		else {
    			StatusLED(OFF);
    			BackLED(OFF,OFF);
    			MotorSpeed(0,0);
    		}
    	}
    		
    	return 0;
    }
    Ich flashe die richtige datei und es ist diesmal auch wirklich die richtige datei wo ich es geschrieben habe (nicht wie beim LCD^^).

    Die Platiene ist narren sicher Die aufdrücke müssen aber oben sein weil sonst die Sensoren nach unten schauen Die Leiterbahnen sind aber unten.

    Ich wünschte es würde noch einer Die Erweiterung fertig haben und schreiben obs bei ihm funktioniert.

Seite 1 von 5 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •