RoboterNetz.de Foren-Übersicht Werbung Controllerboard
 Home  •  Forum  •  Suchen •  Mitgliederliste  •  RN-Landkarte  •  Ränge  •  Statistik  •  Download •  Album  •  Links  •  Kalender  •  Letzte Themen
 RN-Wissen Artikelbereich  •  Mitarbeiter  •  Benutzergruppen  •  Chat  •  Registrieren  •  FAQ  •  Profil  •  log in, Nachrichten zu lesen  •  Login
Kalender 
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Neues Thema eröffnenNeue Antwort erstellen
Vorheriges Thema anzeigen Dieses Thema einem Freund schickenZeige Benutzer, die dieses Thema gesehen habenDieses Thema als Textdatei speichernPrintable versionlog in, Nachrichten zu lesen Nächstes Thema anzeigen
Autor Nachricht
m.a.r.v.i.n

Roboter Genie
Roboter Genie




Anmeldungsdatum: 24.07.2005
Beiträge: 1073
Wohnort: Berlin

germany.gif
Beitrag Verfasst am: 22.05.2007, 08:12 Antworten mit ZitatNach oben

Hi,

der Code für die US Erweiterung funktioniert nicht ohne Anpassung mit der Asuro Lib 2.7. Du kannst aber den angepaßten Code von RN-User dopez aus der Asuro Lib 3.0 verwenden. Ich habe es aber selbst noch nicht getestet.
http://svn.gna.org/viewcvs/*checkou.....k/lib/ultrasonic.c?rev=10

Evtl. muß aus der ISR(TIMER2_COMP_vect) Funktion noch die folgende Zeile entfernt werden, damit es funktioniert.

        TCNT2 += 0x25;

_________________
Gruß m.a.r.v.i.n

Homepages:
http://www.asurowiki.de
http://www.robotfreak.de/blog
Offline Benutzer-Profile anzeigen Website dieses Benutzers besuchen
Prinz_Byte

Öfters hier
Öfters hier




Anmeldungsdatum: 21.05.2007
Beiträge: 7

Beitrag Verfasst am: 22.05.2007, 18:37 Antworten mit ZitatNach oben

Danke m.a.r.v.i.n!

ich hab das ding verwendet, auch die zeile code entfernt und es funzt wunderbar (mit der codezeile fährt es sich nur wieder fest...)
Danke!
woher bezieht ihr eigentlich eure infos über die ganzen variablen und so die es gibt und die verschiedenen systemkomponenten was die ansteuerung betrifft?
Offline Benutzer-Profile anzeigen
inka






Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

germany.gif
Beitrag Verfasst am: 22.05.2007, 21:06 Antworten mit ZitatNach oben

hi prinz_byte,

könntest du vielleicht bitte etwas ausführlicher über dein weg zum erfolg berichten? bei mir funktionierts nämlich nicht...

wie und in welche asuro.c hast du den code eingebaut? welche asuro lib verwendet?

danke dir...

_________________
gruß inka
Offline Benutzer-Profile anzeigen
damaltor

Robotik Einstein
Robotik Einstein




Anmeldungsdatum: 28.09.2006
Beiträge: 3536
Wohnort: Jena
Alter: 23

germany.gif
Beitrag Verfasst am: 22.05.2007, 21:13 Antworten mit ZitatNach oben

Üben, üben, üben... und etwas zeit mitbringen um das datenblatt zu lesen.

_________________
kleinschreibung ist cool!

Image

damaltor
Offline Benutzer-Profile anzeigen E-Mail senden MSN Messenger ICQ-Nummer
inka






Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

germany.gif
Beitrag Verfasst am: 22.05.2007, 21:58 Antworten mit ZitatNach oben

klar, wer lesen kann ist eindeutig im vorteil, aber welches datenblatt?

_________________
gruß inka
Offline Benutzer-Profile anzeigen
Prinz_Byte

Öfters hier
Öfters hier




Anmeldungsdatum: 21.05.2007
Beiträge: 7

Beitrag Verfasst am: 22.05.2007, 22:49 Antworten mit ZitatNach oben

lib V2.7

hey linka ... zieh dir mal die datei die marvin verlinkt hat und
schau mal rein da findest du nen teil der in die asuro.c muss (steht auch drin...) dann kommentierst du wie marvin beschrieben hat eine zeile aus
und übersetzt das ganze und danach nutzt du einfach die anderen funktionen die in der datei welche da verlinkt ist mit enthalten sind...
Offline Benutzer-Profile anzeigen
damaltor

Robotik Einstein
Robotik Einstein




Anmeldungsdatum: 28.09.2006
Beiträge: 3536
Wohnort: Jena
Alter: 23

germany.gif
Beitrag Verfasst am: 23.05.2007, 13:08 Antworten mit ZitatNach oben

hier ist das datenblatt für den prozessor. n glas rotwein dabei, und etwas zu viel zeit, dann kann man sich das mal zu gemüte führen. da sind teilweise auch schöne programmbeispiele drin.
http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf

_________________
kleinschreibung ist cool!

Image

damaltor
Offline Benutzer-Profile anzeigen E-Mail senden MSN Messenger ICQ-Nummer
inka






Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

germany.gif
Beitrag Verfasst am: 23.05.2007, 14:23 Antworten mit ZitatNach oben

Prinz_Byte hat folgendes geschrieben::
lib V2.7

hey linka ... zieh dir mal die datei die marvin verlinkt hat und
schau mal rein da findest du nen teil der in die asuro.c muss (steht auch drin...) dann kommentierst du wie marvin beschrieben hat eine zeile aus
und übersetzt das ganze und danach nutzt du einfach die anderen funktionen die in der datei welche da verlinkt ist mit enthalten sind...


ok, habe es mir angeschaut Traurig
so wie ich es verstehe, muss praktisch der ganze code in die asuro.c, wäre auch noch kein problem...
Aber schliesslich brauche ich ja noch etwas womit ich die in dem (in die asuro.c kopierten) code beinhalteten funktionen, wie "InitUltrasonics" , "RestoreAsuro" oder "Chirp" auch aufrufen bzw. auswerten kann?

das ist mir (ich hoffe nur im augenblick) zu hoch...

_________________
gruß inka
Offline Benutzer-Profile anzeigen
damaltor

Robotik Einstein
Robotik Einstein




Anmeldungsdatum: 28.09.2006
Beiträge: 3536
Wohnort: Jena
Alter: 23

germany.gif
Beitrag Verfasst am: 23.05.2007, 17:16 Antworten mit ZitatNach oben

na in der main funktion kannst du diese funktionen aufrufen... mit InitUltrasonics(); wird das us-modul eingeschaltet, mit RestoreAsuro(); wird es wieder ausgeschaltet (irgend etwas wurde durch das modul behindert, weiss nich mehr was). mit chirp() wird ein piepton abgesetzt.

_________________
kleinschreibung ist cool!

Image

damaltor
Offline Benutzer-Profile anzeigen E-Mail senden MSN Messenger ICQ-Nummer
Prinz_Byte

Öfters hier
Öfters hier




Anmeldungsdatum: 21.05.2007
Beiträge: 7

Beitrag Verfasst am: 23.05.2007, 19:53 Antworten mit ZitatNach oben

du brauchst einfach nur chirp() aufrufen und der return ist der abstand in cm...
alles andere wird automatisch gehandelt (in den funktionen)
Offline Benutzer-Profile anzeigen
inka






Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

germany.gif
Beitrag Verfasst am: 24.05.2007, 09:08 Antworten mit ZitatNach oben

hi,

ich habe nun den folgenden code in die asuro.c eingefügt:
/*****************ultrasonic********************************/
/**
 * being used insted TIMER2_OVF_vect during ultrasonic polling
 */
ISR(TIMER2_COMP_vect)
{
   TCNT2 += 0x25;
   count36kHz++;
   if(!count36kHz) timebase++;
}

/**
 * initialises the Ultrasonic module
 * this function is automaticly called by Chirp
 */
void InitUltrasonics(void)
{
   // Change Oscillator-frequency of Timer 2
   // to 40kHz, no toggling of IO-pin:
   TCCR2  = (1 << WGM21) | (1 << CS20);
   OCR2   = 100;              // 40kHz @8MHz crystal
   TIMSK |= (1 << OCIE2);     // OCIE2:  Timer/Counter2 Output Compare Match Interrupt Enable

   ADCSRA = (0 << ADEN);      // deactivate ADC
   ACSR  |= (1 << ACIS1);     // Comparator Interrupt on Falling Output Edge

   ADMUX  = 0x03;             // connect ADC3-input with comparator
   SFIOR |= (1 << ACME);      // connect ADC multiplexer to comparator
   DDRD  &= ~(1 << 6);        // use Port D Pin 6 as input (AIN0)
}

/**
 * restores the hardware after using the Ultrasonic module
 * this function is called automaticly after a Chirp
 */
void RestoreAsuro(void)
{
   TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
   OCR2  = 0x91;              // duty cycle for 36kHz
   TIMSK |= (0 << OCIE2);     // OCIE2:  Timer/Counter2 Output Compare Match Interrupt Enable

   ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); // clk/64
   ACSR  |= (0 << ACIS1);

   if(autoencode) {
      EncoderInit();
   }

   Sleep(1);
}

/**
 * @return distance in cm
 */
int Chirp(void)
{
   unsigned int sleeptime = 0, dist = 0;

   InitUltrasonics();

   // chripen:
   count36kHz = 0;

   while(count36kHz != 20) {
      OCR2 = 100 + 20 / 2 - count36kHz;
   }

   TCCR2   = (1 << WGM21) | (1 << CS20);
   OCR2   = 100;

   // analyse echoes:
   while(TRUE) {
      Sleep(1);
      sleeptime++;

      if((ACSR & (1 << ACI))) {
         dist = (unsigned int) ((long) ((344L * ((sleeptime * 1000L) / 72L) / 10000L) / 2L));
         ACSR |= (1 << ACI);
         break;
      }

      ACSR |= (1 << ACI);

      if(sleeptime > 3500) {
         return -1;
      }
   }

   RestoreAsuro();
   return dist;
}


aufgerufen wird es durch:

#include "asuro.h"

int main(void)
{
   
  Init();

  {
 
   SerWrite("\r\n  --- georgs ultrasonic test ---",35);
   Msleep(1000);
   StatusLED(OFF);
 
   do
     {
    Chirp();
     SerWrite("\r\n distanz in cm: ",30);
     Msleep(500);
      PrintInt(dist);
     }
   while(1);
    }

  return 0;
}


das ergebnis beim kompilieren sieht nicht so furchtbar schlecht aus:


../ultrasonic.c: In function `main':
../ultrasonic.c:16: warning: implicit declaration of function `Chirp'
../ultrasonic.c:19: error: `dist' undeclared (first use in this function)
../ultrasonic.c:19: error: (Each undeclared identifier is reported only once
../ultrasonic.c:19: error: for each function it appears in.)
make: *** [ultrasonic.o] Error 1
Build failed with 3 errors and 1 warnings...


aber trotzdem scheint es irgendwo zu klemmen. Könnte mir jemnad einen tipp geben welche datei denn noch irgendwo fehlt? benutzt habe ich die lib 2.7., habe vorsichtshalber alle parts als sources eingefügt (entfernen kann ich sie nach erfolgreichem kompilieren probeweise ja immer noch...)

danke...

_________________
gruß inka
Offline Benutzer-Profile anzeigen
damaltor

Robotik Einstein
Robotik Einstein




Anmeldungsdatum: 28.09.2006
Beiträge: 3536
Wohnort: Jena
Alter: 23

germany.gif
Beitrag Verfasst am: 24.05.2007, 10:53 Antworten mit ZitatNach oben

die fehler bedeuten dass die variable dist noch nicht deklariert wurde... kann das sein?

die warning heisst dass die funktion chirp() nicht oder doppelt deklariert wurde... weiss nich warum =)

füg erstmal die variable ein.

_________________
kleinschreibung ist cool!

Image

damaltor
Offline Benutzer-Profile anzeigen E-Mail senden MSN Messenger ICQ-Nummer
inka






Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

germany.gif
Beitrag Verfasst am: 24.05.2007, 11:02 Antworten mit ZitatNach oben

danke damaltor,

die kompilierung ergab jetzt nur noch die eine warnung bei Chirp, werde jetzt die hex datei testen...

_________________
gruß inka
Offline Benutzer-Profile anzeigen
inka






Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

germany.gif
Beitrag Verfasst am: 24.05.2007, 11:09 Antworten mit ZitatNach oben

also, die erste zeile, die die distanzmessung ankündigt wird am terminal ausgegeben, weiter passiert nichts. Ich nehme an, dass es keinen sinn macht am poti zu drehen, wenn die hardware mit der ursprünglichen US-software lief?
bleibt also die warnung:
../ultrasonic.c:16: warning: implicit declaration of function `Chirp'

was kann ich da tun?

_________________
gruß inka
Offline Benutzer-Profile anzeigen
damaltor

Robotik Einstein
Robotik Einstein




Anmeldungsdatum: 28.09.2006
Beiträge: 3536
Wohnort: Jena
Alter: 23

germany.gif
Beitrag Verfasst am: 24.05.2007, 11:18 Antworten mit ZitatNach oben

tu mal die funktion chirp nicht in die asuro.c, sondern in deine test.c. sie muss ÜBER der main-funktion stehen!!

evtl liegt es daran, dass die funktoin zwar in der asuro.c steht, aber in der asuro.h fehlt. das würde dadurch behoben. allerdings müste dann die gleiche meldung bei den anderen us-funktionen auch stehen.

_________________
kleinschreibung ist cool!

Image

damaltor
Offline Benutzer-Profile anzeigen E-Mail senden MSN Messenger ICQ-Nummer
inka






Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

germany.gif
Beitrag Verfasst am: 24.05.2007, 11:35 Antworten mit ZitatNach oben

ok, habe ich gemacht, die warnung über Chirp ist weg, dafür aber zwei warnungen für "initultrasonics" und "restoreasuro"...

soll ich die beiden auch in die test.c einfügen?

_________________
gruß inka
Offline Benutzer-Profile anzeigen
inka






Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

germany.gif
Beitrag Verfasst am: 24.05.2007, 11:46 Antworten mit ZitatNach oben

habe jetzt folgendes versucht:

die drei funktionen, wie ursprünglich gehabt, in die asuro.c
folgende 3 zeilen in die asuro.h:
-----------------------
void InitUltrasonics(void);
void RestoreAsuro(void);
int Chirp(void);
-------------------------

jetzt kam keine warnung beim kompilieren, im hyperterminal erscheint aber immer noch nur die erste zeile, die die messung ankündigt. Also doch noch ein fehler beim aufruf der chirpfunktion?

_________________
gruß inka
Offline Benutzer-Profile anzeigen
Prinz_Byte

Öfters hier
Öfters hier




Anmeldungsdatum: 21.05.2007
Beiträge: 7

Beitrag Verfasst am: 24.05.2007, 13:03 Antworten mit ZitatNach oben

wenn du den wert verarbeiten willst musst du ihn auch annehmen:
bsp:
int abstand;
abstand = Chirp();
Offline Benutzer-Profile anzeigen
inka






Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

germany.gif
Beitrag Verfasst am: 24.05.2007, 13:59 Antworten mit ZitatNach oben

ok,

was bedeutet aber das hier:
-----------
}

RestoreAsuro();
return dist;
}
---------------

wird da nicht der wert der variablen "dist" schon zurückgegeben?

_________________
gruß inka
Offline Benutzer-Profile anzeigen
Prinz_Byte

Öfters hier
Öfters hier




Anmeldungsdatum: 21.05.2007
Beiträge: 7

Beitrag Verfasst am: 24.05.2007, 14:38 Antworten mit ZitatNach oben

RestoreAsuro() ruft die funktion auf die die timer und die ganzen dinger
die "verbogen" worden wieder zurücksetzt damit die restlichen asuro funktionen wieder laufen...
return dist gibt einfach die errechnete distanz als returnwert zurück
( das ist der wert den du dann zurückbekommst zum auswerten von der Chirp() funktion...)
Offline Benutzer-Profile anzeigen
inka






Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

germany.gif
Beitrag Verfasst am: 24.05.2007, 15:02 Antworten mit ZitatNach oben

das habe ich auch so verstanden, was mich gewundert hat ist,warum ich die variable "abstand" brauche, wenn mir der wert "dist" schon geliefert wird?

welche möglichkeiten habe ich, um nachzuforschen, warum dieser code ausser der grün leuchtenden StatusLED nicht die erwünschten Chirp-abstände liefert, bzw. ausdruckt?
#include "asuro.h"
int dist;
int abstand=0;



int main(void)
{
  Init();
 {
   SerWrite("\r\n  --- georgs ultrasonic test ---",35);
   Msleep(1000);
   do
     {
   abstand=Chirp();
   //abstand=dist;

     SerWrite("\r\n distanz in cm: ",40);
     Msleep(500);
     PrintInt(abstand);
     }
   while(1);
    }
  return 0;
}

_________________
gruß inka
Offline Benutzer-Profile anzeigen
damaltor

Robotik Einstein
Robotik Einstein




Anmeldungsdatum: 28.09.2006
Beiträge: 3536
Wohnort: Jena
Alter: 23

germany.gif
Beitrag Verfasst am: 24.05.2007, 17:17 Antworten mit ZitatNach oben

dist ist ein return-wert, keine variable!! so wie pollswitch, musst du "abstand=Chirp();" aufrufen. der wert deiner variable dist wird nicht verändert!! chirp wird benutzt wie pollswitch. variable=funktion().

_________________
kleinschreibung ist cool!

Image

damaltor
Offline Benutzer-Profile anzeigen E-Mail senden MSN Messenger ICQ-Nummer
Beiträge vom vorherigen Thema anzeigen:      
Neues Thema eröffnenNeue Antwort erstellen
Vorheriges Thema anzeigen Dieses Thema einem Freund schickenZeige Benutzer, die dieses Thema gesehen habenDieses Thema als Textdatei speichernPrintable versionlog in, Nachrichten zu lesen Nächstes Thema anzeigen



 Gehe zu:   



Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen




Die große Community für Robotik-, Mikrocontroller- und Elektronik Bastler als auch Experten
 Roboternetz RSS2.0 News Feed
Alle Zeiten sind GMT + 1 Stunde