PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ultraschall Platine Störungen



braendieman
26.01.2008, 15:07
Hallo! Brauche ein bisschen Hilfe von euch! Und zwar mach ich gerade eine Facharbeit über den Asuro mit Ultraschall Erweiterung. Dazu habe ich mir den Band 1 gekauft, wo die Bestückungsliste und alles andere zur US Platine erklärt wird. Habe alles nach Schaltplan auf Lochrasterplatine gebracht- funktioniert auch mit dem Ultraschall Programmen, die ich bei arexx gedownloaded habe, jedoch mit Störungen...

Das heißt im Detail: Ich schalte den Asuro an, US Platine drauf, dann ruckelt die StatusLED von Rot auf Grün oder umgekehrt. Mit andern Worten ist es so, dass der rechte Motor rückwärtsfährt bei Rot und beide vorwärts wenn Grün.

Er "wechselt" also imme die Fahrtrichtung, obwohl sich vorm Ultraschall nichts befindet, was ein Echo zurückgeben könnte....

Am Poti gedreht, hab ich auch schon. Es passiert folgendes:
Dreh ich den Poti zu weit, dann fährt er nur noch vorwärts, egal ob etwas vor dem Asuro liegt oder nicht.
Dreh ich den Poti in die andere Richtung, dann fährt der Asuro nur noch rückwärts, obwohl nichts vor ihm liegt, was ein Echo reflektiert....

Eigentlich müsste ich die goldene Mitte treffen, richtig? Aber dann kommt das Problem mit dem "ruckeln" zwischen vorwärts und rückwärts.

Ich hab auch schon gedacht, ob es vielleicht hier im Raum ein Ultraschall-Geräusch gibt, was den Asuro stören könnte, aber auch draußen funktioniert es nicht so ganz, wie es soll mit der Erweiterung!

Könnte es vielleicht an dem Programm liegen, was geflasht wurde?

Ich benutze die Ultraschallkapseln von Reichelt, die müssten ja eigetnlich passen....
link: http://www.reichelt.de/?;ACTION=3;LA=4;GROUP=B6;GROUPID=3190;ARTICLE=2218 8;START=0;SORT=artnr;OFFSET=16;SID=251xLpi38AAAIAA A9cZisf680a99a4a5cae1dca20773b2da86c51
http://www.reichelt.de/?;ACTION=3;LA=4;GROUP=B6;GROUPID=3190;ARTICLE=2218 7;START=0;SORT=artnr;OFFSET=16;SID=251xLpi38AAAIAA A9cZisf680a99a4a5cae1dca20773b2da86c51

Danke im Vorraus
Gruß!

pinsel120866
26.01.2008, 15:16
Hi braendieman,

zum Einstellen des US-Potis gibt es folgenden Code:


#include "asuro.h"
int abstand=0;

int main(void)
{
Init();
SerWrite("\r\n --- ultrasonic test ---",29);
Msleep(1000);

do
{
abstand = Chirp();
SerWrite("\r\n distanz in cm: ",20);
Msleep(500);
PrintInt(abstand);
}
while(1);
return 0;
}

Kompilieren, flashen und Hyperterminal starten. Dann den Poti solange drehen bis die Werte im HT stimmen.

Hansi41
26.01.2008, 16:14
hallo
also wenn ich das richtig verstanden habe:
"so, dass der rechte Motor rückwärtsfährt bei Rot und beide vorwärts wenn Grün."
deine motoren selber laufen also gar nicht, sondern die leds stehen für vor oder rückwärts?
Meintest du das so, oder habe ich das falsch verstanden?
Ich habe nämlich schon vcon vielen ghehört, dass die motoren wohl große störfaktoren sein#
mfg hans

braendieman
26.01.2008, 16:36
@pinsel
Hallo! Danke erstmal! werde es morgen mal ausprobieren...

@hansi
Ähm nein es ist das Grundprogramm und da gehen die Motoren mit an! Also wenn die StatusLED(GREUN) dann sind beide Motoren im "vorwärtsgang", bei rot der rechte Motor nach Rückwärts!

danke erstmal ihr beiden! Wenn es noch jemanden gibt, der mit störungen probleme hatte, bitte alles schreiben!
Danke!
gruß

braendieman
26.01.2008, 16:44
@pinsel
Woher kommt die Funktion Chirp()? Wenn ich compiliere findet er die Fkt. nicht in der Asuro.c..... Ist eigentlich die 2.70 die ich benutze...

danke....

pinsel120866
26.01.2008, 20:05
Wenn die die Lib 2.71 verwendest, ist die Funktion dabei.

Für die Lib 2.70 schau mal unter https://www.roboternetz.de/phpBB2/ze.....0&postorder=asc&start=103

braendieman
27.01.2008, 11:45
Hallo! Hab die neue Lib runtergeladen und mit eingebunden.
Habe nun folgendes Problem beim Compilieren:

Build started 27.1.2008 at 12:39:28
avr-gcc.exe -I"C:\Dokumente und Einstellungen\***\Desktop\Schule\Asuro\Ultraschall \Potitest\..\..\..\..\..\..\..\Programme\Asuro_Lib 2.71\lib\inc" -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fsho
rt-enums -MD -MP -MT potitest.o -MF dep/potitest.o.d -c ../potitest.c

../potitest.c: In function 'main':
../potitest.c:8: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
../potitest.c:13: warning: implicit declaration of function 'Chirp'
../potitest.c:13: error: invalid lvalue in assignment
../potitest.c:14: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
make: *** [potitest.o] Error 1
Build failed with 1 errors and 3 warnings...



Was hab ich falsch gemacht?
Danke
[/code]

damaltor
27.01.2008, 14:22
die funktion Chirp() existiert scheibbar immer noch nicht. aber doie sollte doch eigentlich in der lib drin sein... 0o

mit dem anderen programm, was du zuerst verwendet hast, hat es funktioniert?

braendieman
27.01.2008, 14:45
Sooo...
Also hatte vergessen die ultrasonic.c als sourcefile mitanzugeben... dachte eigentlich, die wird in der neuen asuro.c verknüpft...

Aber jetzt tauchen warnungen auf:

../pottitest.c: In function 'main':
../pottitest.c:7: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
../pottitest.c:11: warning: implicit declaration of function 'Chirp'
../pottitest.c:12: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
avr-gcc.exe -I"C:\Dokumente und Einstellungen\Braendieman\Desktop\Schule\Asuro\Ult raschall\Pottitest\..\..\..\..\..\..\..\Programme\ Asuro_Lib2.71\lib\inc" -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields
-fpack-struct -fshort-enums -MD -MP -MT asuro.o -MF dep/asuro.o.d -c ../../../asuro.c

avr-gcc.exe -I"C:\Dokumente und Einstellungen\Braendieman\Desktop\Schule\Asuro\Ult raschall\Pottitest\..\..\..\..\..\..\..\Programme\ Asuro_Lib2.71\lib\inc" -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields
-fpack-struct -fshort-enums -MD -MP -MT ultrasonic.o -MF dep/ultrasonic.o.d -c ../../../ultrasonic.c

avr-gcc.exe -mmcu=atmega8 pottitest.o asuro.o ultrasonic.o -L"C:\Programme\Asuro_Lib2.71\lib" -lasuro -o pottitest.elf
avr-objcopy -O ihex -R .eeprom pottitest.elf pottitest.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex pottitest.elf pottitest.eep || exit 0
c:\WinAVR-20070525\bin\avr-objcopy.exe: there are no sections to be copied!

AVR Memory Usage
----------------
Device: atmega8

Program: 1728 bytes (21.1% Full)
(.text + .data + .bootloader)

Data: 70 bytes (6.8% Full)
(.data + .bss + .noinit)


Build succeeded with 3 Warnings...



Hab sie jetzt erst ignoriert aber wenn ich flashe und mit hyperterminal verbinde dann kommt nur

---- ultrasonic test ----


und das wars dann auch...

Kann mir da jemand weiterhelfen?

pinsel120866
27.01.2008, 16:01
Hast du den US-Code in die Datei "test.c" des Ordners "Firsttry" der Lib 2.71 hineinkopiert und den Orginalinhalt überschrieben?

braendieman
27.01.2008, 16:38
Nein hab ich nicht, da ich alles mit dem AVR Studio mache und die lib und die inc's miteinbinde. Da benenne ich jedes file extra und nie "test"....
Ich hab die 2.71.zip runtergeladen, in c:/programme/Asurolib_2.71/ entpackt und miteingebunden....
komisch sowas....

ich glaub allerdings nicht, dass es am poti liegt....

Ähm ich habe alles auf Lochraster gemacht, deswegen sieht die Platine von unten auch entsprechend aus. Kann es sein, dass ich da irgendwelche Störungen bekomme?
Ich hab den Schaltplan auch selber auf die Platine gemacht, das heißt das die Anordnung der Bauteile auch nicht die dollste ist, aber die US Platine funktioniert... -nur halt mit irgendwelchen Störungen, die ich nicht zuordnen kann!
gruß

Hansi41
27.01.2008, 18:13
welchen schaltplan hast du denn für deine us erweiterung gewählt, den aus dem Buch "Mehr Spaß mit ASURO"?

pinsel120866
27.01.2008, 18:16
Hab sie jetzt erst ignoriert aber wenn ich flashe und mit hyperterminal verbinde dann kommt nur

---- ultrasonic test ----


Wenn dein US-Modul funktioniert müsste dann etwas kommen wie:

distanz in cm: 20
distanz in cm: 25
.
.
.

In diesem Fall ermittelt dein Bausatz KEINE Werte. Ich vermute mal dass sich ein Hardwarefehler eingeschlichen hat.

braendieman
27.01.2008, 22:49
@hansi
Ich benutze den aus dem Buch... Mehr Spaß mit Asuro I


@pinsel
Ich kann ja halt nichts falsches finden an der Erweiterung.... Aber es kommen ja auch drei Warnungen beim compilieren, die sind ja auch nicht einfach so da? Da muss doch irgendwas noch dazu faul sein...
Ich mein der Ultraschall funktioniert ja eigentlich, nur sind halt immer Störungen drauf...
Hab auch schon gedacht, das die Frequenz vom US Sender falsch ist und er dann sein eigenes Echo zu früh hört.... versteht ihr?

HAWK-Matze
03.02.2008, 11:42
Ich habe das gleiche problem...

Edit: Jetzt nicht mehr, wenn man alles richtig einfügt wie auf
http://www.henkessoft.de/Roboter/ASURO.htm
beschrieben, dann gehts!

Hier ein Programm ohne Chirp, dann kannst du testen ob es an der hardware liegt


// *******************************************
// * 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);
MotorSpeed(200,200);
} else {
StatusLED(RED);
MotorDir(FWD,RWD);
MotorSpeed(0,200);
Sleep(20000);
}
}
return 0;
}

Theux
05.02.2008, 12:03
ähm wenn cih dien prgramm bei mir drauf-flash dann fährt das rechte rad immer nur rückwärts- led immer nur rot und manchmal fährt auch das linke rad ien stücken vorwährts

HAWK-Matze
05.02.2008, 17:13
ups... funktioniert dein asuro ohne us-platine noch?
Ich lade es mal runter und flashe bei mir nochmal... edit kommt gleich

Dein Asuro denkt die ganze zeit das er zu nah an etwas dran steht!!!
bei mir funktioniert es!

flash mal das hier drauf und öffne den hyperterminal, dann wird angezeit wie weit der asuro von einem hindernis weg ist. mit dem trimmer kannst du dann mal nen bisschen spielen bis es passt, danach sollte das obige programm funktioniern

Theux
06.02.2008, 12:51
ok thx jetzt weiß ich schonmal in welche richtung ich gehn muss weil er zeigt mir an:
Distance in cm: 0
obwohl die nächste wand locker 25 cm weg is

ich experimentier etz ertmal mit dem poti und mach dann ein edit

edit: ok am poti liegt es auch nicht weil ich kann es drehen wie ich will immer kommen 0cm raus, also wird es wahrscheinlich ein hardware-fehler sein oda? :cry:

pinsel120866
06.02.2008, 15:26
Ja, dann muss es an der Hardware liegen. Kontrolliere alle Bauteile (Position, Funktion) und Lötstellen mittels Multimeter. Wenn du keine vorgeätzte Platine hast, zusätzlich alle Verbindungen.

HAWK-Matze
06.02.2008, 16:07
da kommst du jetzt nicht drum rum... fehler suchen ist immer toll!
IC richtig rum(hatte beim ersten start vergessen ihn in den sockel zu setzten... lol)? Analoge Masse verbunden(die hätte ich fast vergessen)?
richtigen sensor an richtige stelle und richtig gepolt?.. wenns davon nichts ist.... viel spaß beim suchen

Theux
07.02.2008, 08:49
ja ich hab ne bessere idee: da ich ja die lochrasterplatine genommen hab ist das auf der rückseite alle sehr unordentlich, deshalb mach ich mir etz eine selbstgeätzte platine und dann müsste es eig hardware-mäßig klappen ;-)

aber danke HAWK-Matze für dein programm

mfg Theux

damaltor
07.02.2008, 19:07
/me schenkt Theux eine tüte voller "J"... dann brauchste bei "jetz" oder "jetzt" nicht mehr so zu sparen... ;)

pinsel120866
08.02.2008, 06:06
Da kann man nichts machen, das ist eben die SMS-Generation :-)

braendieman
09.02.2008, 15:35
hallo! Also ich hab jetzt mal das Messprogramm geflasht....
Folgendes kommt dabei heraus:

Hab eine Wand genommen mit 10cm abstand.
nun hab ich mal kopiert, was er mit im hyperterminal rausgibt:

distanz in cm: 10
distanz in cm:
distanz in cm: 0
distanz in cm: 10
distanz in cm: 10
distanz in cm: 10
distanz in cm: 11
distanz in cm: 10
distanz in cm: 10
distanz in cm: 10
distanz in cm: 10
distanz in cm:
distanz in cm: 10
distanz in cm:

Also es waren ja Störungen hab ich gemeint. Und siehe da, er zeigt mir auch 0cm an, was ja heißt, dass er sofort zurück soll mit dem motor richtig? Das heißt also jetzt für mein Problem, dass es an der Hardware liegt oder?

Mfg braendieman

damaltor
09.02.2008, 15:48
die werte sind eigentlich ganz in ordnung. du solltest mal eine größere testreihe machen, und dann schauen wie viele werte wirklich falsch sind. ansonsten lässt sich sowas eher softwaretechnisch beheben.

braendieman
21.02.2008, 15:21
Tach Leute! Meine Facharbeit ist noch immer in arbeit und daher wollte ich nun ein fertiges US-Programm mit der neuen 2.71 lib schreiben! Also erst einmal Chirp-Wert auslesen lassen....

Mein Programm:


#include "asuro.h"
#include "ultrasonic.h"

int abstand = 0;
int main()
{
Init();
do
{
abstand = Chirp();
SerPrint("\r\n Abstand in cm");
Msleep(500);
PrintInt(abstand);
}
while(1);
return 0;
}

Also Compilieren funzt super, flashen auch. Nur wenn ich nun Hyperterminal starte zeigt er mir absolut nichts.... Woran kann das liegen?

Also Ultraschall hab ich soweit, dass er mit der alten Lib funktioniert. Das heißt also quasi mit dem Code, der aus dem Buch stammt... Nur irgendwie muss ich in meiner Facharbeit die neue Lib nehmen. Eigentlich ist das ja auch Vorteil für mich, da ich ja mit Chirp() gleich die Distanz vom Gegenstand bekomm. Dann ist es gar nicht so schwer irgendein Programm dafür zu schreiben!

Danke braendieman

braendieman
21.02.2008, 16:49
Ich noch mal! Also ich glaube, dass es an der Funktion Chirp() liegt, dass nichts passiert, weil wenn ich das Programm von HAWK-Matze flashe zum Auslesen des Potis dann funktioniert es. Versuch ichs aber mit der Variante von mir oder Pinsel passiert nichts ab abstand = Chirp(); Ist da schon was drüber bekannt, dass es macken mit Chirp gibt?