-         

Ergebnis 1 bis 10 von 10

Thema: Ultraschallerweiterung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71

    Ultraschallerweiterung

    Anzeige

    Hallo malwieder.
    ich hab mir die Ultraschallerweiterung zusammengebaut. und zwar mit ner selbstentworfenen Platine. Alles gleich auf anhieb funktioniert. Fals jemand Interesse am Layout hat, stelle ich es gerne zur Verfügung.
    Jetzt meine Frage:
    Als Programm verwende ich folgendes:
    Code:
    // *******************************************
    // * Ultraschall für ASURO                   *
    // * Roboter versucht Hindernissen           *
    // * auszuweichen                            *
    // * Achtung: asuro.c ist geändert           *
    // * (c) 2005Robin Gruber                    *
    // * Details zum Code in:                    *
    // * "Mehr Spaß mit ASURO, Band I"           *
    // *******************************************
    
    #include "asuro_us.h"
    
    
    void LocalInit(void)
    {
    	// Change Oscillator-frequency to 40kHz, no toggling of IO-pin
    	TCCR2 = (1 << WGM21) | (1 << CS20);
    	OCR2  = 0x64; // 40kHz @8MHz
    	// ADC off
    	ADCSRA = 0;  
    	
    	// Analog Comparaot
    	ACSR = 0x02; // Generate Interrupt on falling Edge
    	ADMUX=0x03; // Multiplexer for Comparator to ADC pin 3
    	SFIOR|=(1<<ACME);
    	
    	DDRD&=~(1<<6);
    	
    }
    
    
    void Ping(unsigned char length)
    {
    	count72kHz=0;
    	TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
    	while (count72kHz<length) {
    		OCR2=0x64+length/2-count72kHz;
    	};
    	TCCR2 = (1 << WGM21) | (1 << CS20);
    	OCR2=0x64;
    
    }
    
    
    int main(void)
    {
    	int pos;
    	int posmarker;
    	int odata[2];
    	Init();
    	LocalInit();
    	while(1) {
    //		OdometrieData(odata);
    		posmarker=0;
    		Ping(20);
    		for (pos=0; pos<100; pos++) {
    			Sleep(10);
    			if ((ACSR&(1<<ACI))!=0) {
    				if (posmarker==0) {posmarker=pos;}
    			} 
    			ACSR|=(1<<ACI);
    		}
    		if (posmarker>10) {
    			StatusLED(GREEN);
    			MotorDir(FWD,FWD);
    			BackLED(OFF,OFF);
    			MotorSpeed(200,200);
    		} else {
    			StatusLED(RED);
    			MotorDir(FWD,RWD);
    			BackLED(ON,ON);
    			MotorSpeed(0,200);
    			Sleep(20000);
    		}
    	}
    	return 0;
    }
    welches ich mir im Netz heruntergeladen habe. Da war ne .hex-Datei mit dabei und wenn ich es flashe--funktioniert auch alles.
    Wenn ich den Code kopiere, und in meine Testdatei einfüge, compilliere, und dann flashen will passiert nix.
    Woran kann das liegen?? Ich benutze die neueste Lib.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken dscn1228.jpg   dscn1229.jpg  

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Code:
    Sleep(20000);
    Habst du kein compilier fehler meldung bekommen? Sleep(x) kan nur mit "unsigned char" werten arbeiten. Also "x" muss irgend was sein zwisschen 0 und 255. Nicht grösser.

    Msleep(20000) ist möglich in die neue lib. Das sind "int" werten, also zwischen -32.768 und 32.767. Ich verstehe aber nicht warum die lib-guru's es kein "unsigned int" gemacht haben. Negatiefe warte zeiten machen kein sinn.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    keine fehlermeldung erhalten.[/code]
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken unbenannt_113.jpg  

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Die neueste AsuroLib enthält eigene Funktionen für den Ultraschallsensor. Bei der Lib ist auch ein entsprechendes Beispielprogramm dabei. Damit sollte es eigentlich funktionieren.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    Ja, den US Test. Aber nur zum Auslesen und anzeigen der Entfernung. das funktioniert ja auch bei mir.
    Gruß Frank

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    und was geht jetzt nicht? oder hast du probleme das programm für dich passend zumachen?

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    Als Programm verwende ich folgendes, welches ich mir im Netz heruntergeladen habe. Da war ne .hex-Datei mit dabei und wenn ich es flashe--funktioniert auch alles.
    Wenn ich den Code kopiere, und in meine Testdatei einfüge, compilliere, und dann flashen will passiert nix.
    Woran kann das liegen?? Ich benutze die neueste Lib.
    Code:
    // *******************************************
    // * Ultraschall für ASURO                   *
    // * Roboter versucht Hindernissen           *
    // * auszuweichen                            *
    // * Achtung: asuro.c ist geändert           *
    // * (c) 2005Robin Gruber                    *
    // * Details zum Code in:                    *
    // * "Mehr Spaß mit ASURO, Band I"           *
    // *******************************************
    
    #include "asuro_us.h"
    
    
    void LocalInit(void)
    {
       // Change Oscillator-frequency to 40kHz, no toggling of IO-pin
       TCCR2 = (1 << WGM21) | (1 << CS20);
       OCR2  = 0x64; // 40kHz @8MHz
       // ADC off
       ADCSRA = 0; 
       
       // Analog Comparaot
       ACSR = 0x02; // Generate Interrupt on falling Edge
       ADMUX=0x03; // Multiplexer for Comparator to ADC pin 3
       SFIOR|=(1<<ACME);
       
       DDRD&=~(1<<6);
       
    }
    
    
    void Ping(unsigned char length)
    {
       count72kHz=0;
       TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
       while (count72kHz<length) {
          OCR2=0x64+length/2-count72kHz;
       };
       TCCR2 = (1 << WGM21) | (1 << CS20);
       OCR2=0x64;
    
    }
    
    
    int main(void)
    {
       int pos;
       int posmarker;
       int odata[2];
       Init();
       LocalInit();
       while(1) {
    //      OdometrieData(odata);
          posmarker=0;
          Ping(20);
          for (pos=0; pos<100; pos++) {
             Sleep(10);
             if ((ACSR&(1<<ACI))!=0) {
                if (posmarker==0) {posmarker=pos;}
             }
             ACSR|=(1<<ACI);
          }
          if (posmarker>10) {
             StatusLED(GREEN);
             MotorDir(FWD,FWD);
             BackLED(OFF,OFF);
             MotorSpeed(200,200);
          } else {
             StatusLED(RED);
             MotorDir(FWD,RWD);
             BackLED(ON,ON);
             MotorSpeed(0,200);
             Sleep(20000);
          }
       }
       return 0;
    }

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Wenn ich den Code kopiere, und in meine Testdatei einfüge, compilliere, und dann flashen will passiert nix.
    Zwischen "Einfügen" und "Kompillieren" das "Speichern" vergessen?

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71
    Alles versucht, es funzt nur die hex- Datei die dabei war. Vieleicht braucht man die UR_LIB( nur so ne Idee)
    gruß Frank

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    @Valen
    Guter Tip an die 'Gurus?'. In der nächsten Lib ist in Msleep nun ein "unsigned int" als Parameter vorhanden.

    Gruß Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

Berechtigungen

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