| Autor |
Nachricht |
m.a.r.v.i.n
Roboter Genie


Anmeldungsdatum: 24.07.2005
Beiträge: 1073
Wohnort: Berlin

|
|
|
 |
Prinz_Byte
Öfters hier


Anmeldungsdatum: 21.05.2007
Beiträge: 7
|
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? |
|
|
|
 |
inka

Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

|
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 |
|
|
 |
damaltor
Robotik Einstein


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

|
Üben, üben, üben... und etwas zeit mitbringen um das datenblatt zu lesen. |
_________________ kleinschreibung ist cool!
damaltor |
|
|
 |
inka

Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

|
klar, wer lesen kann ist eindeutig im vorteil, aber welches datenblatt? |
_________________ gruß inka |
|
|
 |
Prinz_Byte
Öfters hier


Anmeldungsdatum: 21.05.2007
Beiträge: 7
|
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... |
|
|
|
 |
damaltor
Robotik Einstein


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

|
|
|
 |
inka

Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

|
| 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
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 |
|
|
 |
damaltor
Robotik Einstein


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

|
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!
damaltor |
|
|
 |
Prinz_Byte
Öfters hier


Anmeldungsdatum: 21.05.2007
Beiträge: 7
|
du brauchst einfach nur chirp() aufrufen und der return ist der abstand in cm...
alles andere wird automatisch gehandelt (in den funktionen) |
|
|
|
 |
inka

Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

|
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 |
|
|
 |
damaltor
Robotik Einstein


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

|
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!
damaltor |
|
|
 |
inka

Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

|
danke damaltor,
die kompilierung ergab jetzt nur noch die eine warnung bei Chirp, werde jetzt die hex datei testen... |
_________________ gruß inka |
|
|
 |
inka

Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

|
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 |
|
|
 |
damaltor
Robotik Einstein


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

|
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!
damaltor |
|
|
 |
inka

Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

|
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 |
|
|
 |
inka

Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

|
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 |
|
|
 |
Prinz_Byte
Öfters hier


Anmeldungsdatum: 21.05.2007
Beiträge: 7
|
wenn du den wert verarbeiten willst musst du ihn auch annehmen:
bsp:
int abstand;
abstand = Chirp(); |
|
|
|
 |
inka

Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

|
ok,
was bedeutet aber das hier:
-----------
}
RestoreAsuro();
return dist;
}
---------------
wird da nicht der wert der variablen "dist" schon zurückgegeben? |
_________________ gruß inka |
|
|
 |
Prinz_Byte
Öfters hier


Anmeldungsdatum: 21.05.2007
Beiträge: 7
|
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...) |
|
|
|
 |
inka

Anmeldungsdatum: 29.10.2006
Beiträge: 541
Wohnort: pirna

|
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 |
|
|
 |
damaltor
Robotik Einstein


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

|
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!
damaltor |
|
|
 |
|
|
|
|