PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Immer noch Problem mit der Ultraschallerweiterung!



Adelzhausen
27.01.2007, 00:49
Und wieder was neues:

Inzwischen habe ich meine US-Platine fertiggestellt und angeschlossen. Jetzt zum Test. Ich habe mit folgendem Code getestet.


#include "asuro.h"

void LocalInit(void)
{
// Change Oscillator-frequency of Timer 2
// to 40kHz, no toggling of IO-pin:
TCCR2 = (1 << WGM21) | (1 << CS20);
OCR2 = 0x64; // 40kHz @8MHz crystal
ADCSRA = 0x00; // ADC off
// Analog comparator:
ACSR = 0x02; // Generate interrupt on falling edge
ADMUX = 0x03; // Multiplexer for comparator to
// ADC pin 3
SFIOR |= (1 << ACME); // Enable muliplexing of comparator
DDRD &= ~(1 << 6); // Port D Pin 6 is input!
}


void Ping(unsigned char length)
{
count72kHz = 0;
TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
// Toggling of IO-Pin on

// generate the Chirp
while(count72kHz < length) {
OCR2 = 0x64 + length / 2 - count72kHz;
}

TCCR2 = (1 << WGM21) | (1 << CS20); // Toggling of IO-Pin off
OCR2 = 0x64; // set frequency to 40kHz
}


int main(void)
{
int pos, i;
int posmarker;
Init();
LocalInit();
while(TRUE) {
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);
MotorSpeed(200, 200);
}
else {
StatusLED(RED);
MotorDir(FWD, RWD);
MotorSpeed(0, 200);
for(i = 0; i<100; i++) { Sleep(200); }
}
}

return 0;
}


Ja, schön und gut, nur dreht sich mein asuro leucht rotend im Kreis.

Was ist passiert ? Hab ich was falsch zusammengelötet oder mach ich hier einfach nur nen Denkfehler ?

liebe Grüße,

damaltor
27.01.2007, 11:01
ich vermute, dass irgend etwas nicht stimmt mit der platine, er sollte ja eigentlich ausweichen wenn der us-sensor ein echo hört. scheinbar hört er das immer =) also fährt er im kreis. es könnte z.b. sein dass er dauerhaft nicht das echo, sondern das losgesendete schallsignal hört, und deshalb schon denkt dass er irgendwo davorsteht.
fährt er rückwärts?

Adelzhausen
27.01.2007, 14:50
ich vermute, dass irgend etwas nicht stimmt mit der platine, er sollte ja eigentlich ausweichen wenn der us-sensor ein echo hört. scheinbar hört er das immer =) also fährt er im kreis. es könnte z.b. sein dass er dauerhaft nicht das echo, sondern das losgesendete schallsignal hört, und deshalb schon denkt dass er irgendwo davorsteht.
fährt er rückwärts?

Er hängt hier fest:



else {
StatusLED(RED);
MotorDir(FWD, RWD);
MotorSpeed(0, 200);
for(i = 0; i<100; i++) { Sleep(200); }
}


Ich schliesse, dass wirklich das Signal reflektiert wird. Mal sehen. Ich werde erstmal Sender und Empfänger ein wenig weiter auseinander legen und dann mal schauen was passiert.

Nur mal interessehalber: Kann es denn sein, dass irgendwas mit den vorderen Konnektoren nicht stimmt ? Also T10, Con1, D11, Con2, T9 ? Will sagen vielleicht fehlerhafte Lötstellen ? Nicht dass ich glaube dass ich da was verbockt hab, aber hey, man weiß ja nie... ;)

radbruch
27.01.2007, 15:32
Hallo,

wie groß ist den die Variable posmarker?

if(posmarker > 10) {

Ich würde mal die 10 schrittweise erhöhen, bzw. mal gross (100, 1000?) machen. Oder den Wert mit PrintInt(posmarker) über die IR-Schnittstelle senden um festzustellen ob überhaupt was erkannt wird und, wenn ja, in welchen Abstand etwas erkannt wird.

Gruß

mic

m.a.r.v.i.n
27.01.2007, 15:44
Hi,

Hast du die Erweiterungplatine richtig herum bestückt (Leiterbahnen liegen auf Lötseite). Die ist nämlich leider nicht symmetrisch.

Adelzhausen
27.01.2007, 17:17
"Problem erkannt. Das US Modul kann so nicht mehr mit der neuen Asuro Bibliothek funktionieren."

Das weiß ich jetzt schonmal. also original drauf und trotzdem das selbe
er fährt weiterhin rot leuchtend gegen den Uhrzeigersinn...

Palmström reist mit einem Herrn von Korf in ein sogenanntes böhmisches Dorf. Unverständlich bleibt ihm alles dort [...].

aber ich hoffe ihr könnt mir ein wenig weiterhelfen... ;)

Adelzhausen
27.01.2007, 17:56
Hallo,

wie groß ist den die Variable posmarker?

if(posmarker > 10) {

Ich würde mal die 10 schrittweise erhöhen, bzw. mal gross (100, 1000?) machen. Oder den Wert mit PrintInt(posmarker) über die IR-Schnittstelle senden um festzustellen ob überhaupt was erkannt wird und, wenn ja, in welchen Abstand etwas erkannt wird.

Gruß

mic

das hat leider auch nix geholfen da es in dieser lib kein printint gibt...

radbruch
27.01.2007, 20:13
Hallo

Mit c und dem Compilieren stehe ich auch noch auf dem Kriegsfuß, hier die Funktion aus der asuro.c (v2.0):


void PrintInt(int wert)
{
char text[16]=" ";
itoa(wert,text,10);
SerWrite(text,strlen(text));
}


Ich hoffe mal, dass ich mit diesem Posting keine Urheberrechte oder sonstiges verletze.

Gruß

mic

m.a.r.v.i.n
27.01.2007, 23:59
Hi,

PrintInt sowie serielle Ausgabe generell funktioniert nicht während der Ultraschall Modul angesprochen wird. Dazu müßte man für jede serielle Ausgabe vorher die Init Funktion aufrufen. Danach dann wieder die Ultraschall Init Funktion zum Ansprechen des Ultraschall Moduls.

Adelzhausen
28.01.2007, 03:19
Hi,

PrintInt sowie serielle Ausgabe generell funktioniert nicht während der Ultraschall Modul angesprochen wird. Dazu müßte man für jede serielle Ausgabe vorher die Init Funktion aufrufen. Danach dann wieder die Ultraschall Init Funktion zum Ansprechen des Ultraschall Moduls.

Hi, das dachte ich mir schon. Ich denke dass warscheinlich hier:


while(count72kHz < length) {
OCR2 = 0x64 + length / 2 - count72kHz;
SerWrite("....");
}

nix passiert. da bleibt er zumindest auch schonmal hängen.

Leider hab ich kein oszi oder eine Katze hier, und somit weiß ich nicht ob es überhaupt funktioniert... Weiss denn jemand von euch, welche Spannungswerte an SR und ST anliegen müssen (400sr und 400st) ? vielleicht ist ja da was falsch...

fragen über fragen... ;)

m.a.r.v.i.n
28.01.2007, 11:26
Hi,

hast du den Ultraschall Sensor mit dem Poti abgeglichen?
Nimm dazu am besten alle MotorSpeed Funktionsaufrufe aus dem Programm raus (Asuro soll stehen bleiben). Nur die StatusLEDs sollten angesteuert werden. Dann bei freier Sicht des ASURO nach vorne langsam am Poti drehen, bis die StatusLED grün anzeigt.

Fehlersuche ohne Oszi ist wohl aussichtslos.

Adelzhausen
28.01.2007, 17:49
Hi,

hast du den Ultraschall Sensor mit dem Poti abgeglichen?
Nimm dazu am besten alle MotorSpeed Funktionsaufrufe aus dem Programm raus (Asuro soll stehen bleiben). Nur die StatusLEDs sollten angesteuert werden. Dann bei freier Sicht des ASURO nach vorne langsam am Poti drehen, bis die StatusLED grün anzeigt.

Fehlersuche ohne Oszi ist wohl aussichtslos.

Hi,

Ich habe jetzt die Motoranweisungen auskommentiert und gaanz langsam von rechts nach links und zurück gedreht. Leider kein Effekt...

Hast du noch irgendwelche Ideen ?

Adelzhausen
29.01.2007, 19:53
Hast du noch irgendwelche Ideen ?

Hm, anscheinend sind Ultraschallsensoren hir nicht das allzu interessante Thema...

Naja, ich hab jetzt nochmal alle Lötstellen an der Verbindungsbrücke überprüft und messe von der Vorderseite, also Batterien hinten:

T10 (links)=> 3.4 V beim Einschalten, später etwa 1.1V
T10 (rechts)=> 5.2V
Conn => 4.28V beim Einschalten, später etwa 2.5V
D11 vorne => GND
D11 hinten => 4.3V beim Einschalten, Später wechselnd zwischen 0V - 2.5V - 3.1V
Conn => 4.5V beim Einschalten, dann kurzer Spannungseinbruch, dann wieder 4.5V
T9 (links)=> 2.5V beim Einschalten, dann wechselnd zwischen 1.6V - 2.6V
T9 (rechts)=> 3.6V beim Einschalten, dann wechselnd zwischen 1.2V - 1.3V

Keine Ahnung, was mir das sagen soll, wenn Ihr irgendwelche Ideen hättet wäre ich ziemlich dankbar.

Ich schätze mal, dass die unterschiedlichen Werte zwischen T9 und T10 durch das Senden und Empfangen kommen, wenn er das überhaupt macht....](*,)

HELP!

Asuro.Maus
30.01.2007, 09:26
Ich kann dich beruhigen, ich habe das gleiche Problem wie du ;//

Ich werde jetzt mal Versuchen die US Softwareseitig ein wenig einzustellen, aber mal schaun, wenn ich mehr weis geb ich hier natürlich gleich bescheid....

Gruss

//EDIT: Also Meine US geben einen Wert von ca. 0-1 aus, das heißt sie sind entweder total auser Betrieb ( funktionieren nicht oder falsch gelötet ) oder die angegebene Zeit zwischen dem Sender/Empfänger ist zu kurz....

Anscheinend hat die Platine einen Wackler, wenn ich ein wenig ruckel funktioniert kurz alles so wie es solll....

Ich werde mal weiterschaun...

Gruss

//EDIT2:

So jetzt läuft er, wir haben ALLE Lötstellen nochmal ( ausser Betrieb ) überprüft und haben 1 kalte Lötstelle und 2 Wackler am IC-Pin entdeckt...

Vielleicht solltest du alles mal mit einem Multimeter überprüfen ob auch durchfluss stattfindet...

Gruss

Adelzhausen
30.01.2007, 18:25
Ich kann dich beruhigen, ich habe das gleiche Problem wie du ;//

Ich werde jetzt mal Versuchen die US Softwareseitig ein wenig einzustellen, aber mal schaun, wenn ich mehr weis geb ich hier natürlich gleich bescheid....

Gruss

//EDIT: Also Meine US geben einen Wert von ca. 0-1 aus, das heißt sie sind entweder total auser Betrieb ( funktionieren nicht oder falsch gelötet ) oder die angegebene Zeit zwischen dem Sender/Empfänger ist zu kurz....

Anscheinend hat die Platine einen Wackler, wenn ich ein wenig ruckel funktioniert kurz alles so wie es solll....

Ich werde mal weiterschaun...

Gruss

//EDIT2:

So jetzt läuft er, wir haben ALLE Lötstellen nochmal ( ausser Betrieb ) überprüft und haben 1 kalte Lötstelle und 2 Wackler am IC-Pin entdeckt...

Vielleicht solltest du alles mal mit einem Multimeter überprüfen ob auch durchfluss stattfindet...

Gruss

Hm, ich vermute eher mal, dass ich Probleme mit den Konnektoren habe. Die US-Platine habe ich jetzt nochmals überprüft und also .. ähm .. wenn jetzt noch was nicht in Ordnung mit der Platine sein sollte, dann hör ich glaub ich auf mit dem asuro *lol* ... Ne, aber im Ernst, da sollte alles in Ordnung sein.. Kannst du mir vielleicht mal den Gefallen tun und mir sagen, welche Spannungswerte du am Board anliegen hast ? Also die T9,T10,D11 und Conn. Das wär total super, dann könnte ich schonmal ausschließen dass damit was falsch ist..

liebe Grüße,

Asuro.Maus
31.01.2007, 13:19
Mach ich... kann nur bis morgen dauern da ich erst morgen wieder drann komme, ich habs mir aber in der Schule schon notiert ;D

Gruss

Adelzhausen
03.02.2007, 14:03
Mach ich... kann nur bis morgen dauern da ich erst morgen wieder drann komme, ich habs mir aber in der Schule schon notiert ;D

Gruss

Und, schon was neues ?

lg,