Archiv verlassen und diese Seite im Standarddesign anzeigen : ASURO - US-Erweiterungsplatine
Hio. Hab meinen Asuro jetzt auch endlich zusammengebaut :) und als kleines "Extra" noch den US-Teilsatz dazugekauft. Ich hab hier im Forum irgendwo gelesen, das beim US zwar alle Elektronik, aber keine Anleitung zum Bauen drin sei. Diese würde man nur in dem Buch "Mehr Spass mit Asuro" finden... Nujut, das steht auch dick und fett vorne auf dem Buch drauf, nur findet man Innen nicht mal 2 Seiten zum Thema! Nur nen kleinen Schaltplan, mit dem ich nichts anfangen kann. Hab ich da irgendwas übersehen, oder gibt's irgendwo anders eine Anleitung wie man das Ding zusammenbaut - und zwar so, das der Asuro danach auch noch funktioniert ;D? Theoretisch bräuchte ich nur diese abstrake Zeichnung von der Platine, auf welcher genau markiert ist, wo welches Bauteil hinkommt. Danke!
cu
Lutz
sind auf dem schaltplan nicht die einzelteile benannt? musst dann nur noch bei den widerständen aufpassen und bei dioden vielleicht.
linux_80
18.07.2005, 20:16
Hallo miteinander,
also der Schaltplan ist Handgemalt, es steht da schon dabei was was ist, nur brauchts dann schon etwas Vorstellungsvermögen, um dieses umzusetzen und auf die kleine Loch-Platine zu bringen. Es sind zwar ein paar Bilder dabei, aber nur SW und nur von oben !
Man weiss also nicht (ausser dem IC) wo was hingehören soll.
Wenn man die Beschreibung vom ASURO selber gewöhnt ist, wirds schwierig.
Metatron
18.07.2005, 20:38
Hai!
Der Plan ist wirklich zu kompliziert, wenn man den Asuro dazu als Vergleich nimmt. Nicht mal die Pins des ICs sind darin eingetragen...
Ein größeres Foto von beiden Seiten der kleinen Platine wäre eine grosse Hilfe gewesen, so muss man rätseln wie man das ganze zusammenflickt. Wer sich schon mit dem Asuro etwas schwer tat, kommt hier nicht weiter. Sollte verbessert werden.
Tschau Peter
Kann mir da vielleicht jemand helfen?
Moin,
ich konnte auch nicht wiederstehen und habe mir den ASURO gekauft und gebaut. Mitlerweile kann er schon Hindernissen ausweichen und einer Linie folgen. Ich habe auch die Erweiterungsplatine, noch original verpackt. Damit möchte ich eine Objekterkennung via IR realisieren.
Ich hab mir gestern eine Beschreibung vom SumoBot durchgelesen und der hat die gleichen Sensoren. Aber eine Frage: Wenn ich die Erweiterungsplatine aufgelötet habel, geht mir dann der Liniendetektor verloren ? (Ich habe das ASURO-Buch nciht und auch keine weitere Beschreibung).
mfG Sebastian
Moin,
dazu gleich noch ne Frage: Wieviele Erweiterungen könnte ich denn anschließen ? sprich wieviele Pins hat man frei ?
Reicht je ein IR Sensor für vorne und hinten oder sind zwei über Kreuz besser ?
@ Bremer: Zur ersten Frage: Ja, der Liniendetektor geht verloren (steht so im Asurobuch).
Ist es mir erlaubt hier die besagte Skizze der US-Platine hochzuladen, damit mir vielleicht ne Beschreibung liefern könnt, wie ich das US-Modul zusammen bekomme?
Ist es mir erlaubt hier die besagte Skizze der US-Platine hochzuladen, damit mir vielleicht ne Beschreibung liefern könnt, wie ich das US-Modul zusammen bekomme?
Hallo Luma,
wäre ich vorsichtig, ich weiß aus sicherer Quelle, dass Autor und Herausgeber mitlesen ;-)
Ich behaupte, du kriegst das auch selber hin! Ich empfehle vor dem Zusammenlöten eine Skizze auf einem Blatt Papier, um die Anordnung der Bauteile auszutüfteln. Das klappt dann ganz gut, wenn man die Bauteile, die im Schaltplan beieinander sind auch auf der Platine nahe zueinander setzt.
Das Datenblatt zum Operationsverstärker findet man im Internet, dadurch kommt man an die Pinbelegung. Am besten macht man für die Versorgungsspannung zwei Schinen mit blankem Draht und verbindet die Bauteile untereinander mit dünnem isoliertem Draht, wie im Schaltplan angegeben. Ein Multimeter zum Durchpiepsen ist beim fertigen Aufbau hilfreich.
Und wenn's dann funktioniert, dann kannst du ein Foto von der Platine und ihrer Unterseite hier reinhängen... Es wäre dem Überblick nicht zuträglich, wenn ich das machen würde.
BTW: Kritik angekommen, ich werde mich bemühen, die nächste Auflage (so es sie gibt) entsprechend zu modifizieren.
CU, Robin
Ich behaupte, du kriegst das auch selber hin! Ich empfehle vor dem Zusammenlöten eine Skizze auf einem Blatt Papier, um die Anordnung der Bauteile auszutüfteln. Das klappt dann ganz gut, wenn man die Bauteile, die im Schaltplan beieinander sind auch auf der Platine nahe zueinander setzt.
Hab mir ja auch schon Gedanken darüber gemacht. Aber als ich mir dann die Skizze mal ganz genau unter die Lupe nahm, hab ich eigentlich so ziemlich nichts kapiert. Irgendwie führen da die Drähte (= Linien) manchmal ins Nichts (dann steht da Vcc und GND dran) und manchmal findet man ganz separat noch ne andere Schaltung (gehört die dazu?). Ich muss euch leider sagen, dass wir das Lesen/Verstehen solcher Schaltungs-Skizzen in der Schule (bis jetzt) noch nicht gelernt haben...
Das Datenblatt zum Operationsverstärker findet man im Internet, dadurch kommt man an die Pinbelegung.
Ich nehm mal an das ist der µC...
Ein Multimeter zum Durchpiepsen ist beim fertigen Aufbau hilfreich.
Was ist ein Multimeter?
Hat mir vielleicht jmd. ein paar allgemeine Basics?
Also auf dem Schaltplan:
VCC und GND sind einfach + und - Pol. Ist zur Übersicht halt so dargestellt.
Multimeter:
Das Wort Meter kennen wir ja aus einigen Sachen als Messgerät. :D Und ein Multimeter, kann halt mehrere Dinge messen.
Die Dinger sehen heutzutage eigentlich meistens so aus, dass die ein Rad haben, an dem man den Modus einstellen kann und ein Display wo man den Wert abliest. Und an das Ding schließt man 2 Kabel an, mit denen man die Elektrik durchmesse kann.
Andun
Aha. Multimeter hab ich natürlich zu Hause...
Ich werd mir jetzt ne eigene Skizze anfertigen, auf welcher man "richtige" Verbindungen sehen kann und poste dann das hier und frag euch dann ob das so richtig ist.
wäre ich vorsichtig, ich weiß aus sicherer Quelle, dass Autor und Herausgeber mitlesen ;-)
Hehe ;-)
Archi wird wohl der Autor des Buchs sein (Robin...)...
Kann mir jemand sagen, wo ich VCC12, V+ sowie V- anschließe?
Schreib doch Archi eine PN, ob er dir nicht eine Skizze schicken kann. Wenn er es nicht macht, kannst es ja hier schreiben. Das wäre nicht so gut für sein Geschäft.
Gruss Waste
linux_80
23.07.2005, 14:27
@Archi, (und alle anderen)
bin grad am Plan nachzeichnen um besser zu verstehen wie alles zusammenhängt, dad hab ich gesehen, das bei D1 die Diode eine 1N4848 sein soll, so eine gibts aber nicht, oder, sollte einen 1N4148 sein ?!
Nur Wechstaben Verbuchselt ;-)
PS:
Vier Teile, plus Sockel, hab ich mich schon getraut festzulöten !
Schreib doch Archi eine PN, ob er dir nicht eine Skizze schicken kann. Wenn er es nicht macht, kannst es ja hier schreiben. Das wäre nicht so gut für sein Geschäft.
Hallo Waste,
klingt fast schon nach Erpressung... ;-) Enthält aber einen prinzipiellen Denkfehler: Eine Skizze, wie die Teile anzuordnen sind, ist (noch) nicht Teil des Buches, damit kriege ich auch keine Probleme mit meinem Verleger, wenn ich sie hier poste. Ich bin nur erst jetzt dazu gekommen eine zu machen (muss ja auch was arbeiten, wobei Geld reinkommt). Sie entspricht zwar nicht der Anordnung auf dem Foto im Buch, aber ich denke, so geht's übersichtlicher...
Die Seite mit den Bauteilen drauf ist von oben gesehen, das andere Bild nochmal gespiegelt von unten. Die "Hügel" deuten an, dass hier _keine_ Verbinung hergestellt werden soll.
Das Ganze ist erst heute morgen entstanden und noch _nicht_ verifizert. Ich würde mich freuen, wenn nochmal jemand drüberschauen könnte.
Und ja: DIe 1N4848 ist eine 1N4148 (Schreibfehler)
CU, Robin
linux_80
23.07.2005, 18:54
Ich hätte da noch eine Frage zu diesen US-sender/empfänger Teilen,
Wie kennt man die auseinander, und ist das wichtig ?
Ich hab die aus einem anderen Bausatz (Pollin) rausgemacht, da steht nix drauf was auf einen Typ schliessen lässt, sehen auch, soweit man das erkennen kann, gleich aus !
@archi
Nicht böse sein, wollte dir nur zufriedene Kunden bescheren. :)
Gruss Waste
Ich hätte da noch eine Frage zu diesen US-sender/empfänger Teilen,
Wie kennt man die auseinander, und ist das wichtig ?
Ich hab die aus einem anderen Bausatz (Pollin) rausgemacht, da steht nix drauf was auf einen Typ schliessen lässt, sehen auch, soweit man das erkennen kann, gleich aus !
Die Wandler sind austauschbar.
Manfred
Vielleicht hab ich ja was übersehen, aber woher weiß ich z.B. was R4 oder R1 für ein Wiederstand ist? Gibt's da noch ne Liste? Ansonsten find ich das Klasse von Archi!
linux_80
24.07.2005, 02:20
Hi luma,
die Werte stehen im Schaltplan mit dabei.
linux_80
24.07.2005, 15:06
Hallo,
also ich hab mir jetzt so ein Teil zusammengelötet,
da ich die ersten Teile schon drauf hatte bevor Archi das Layout gepostet hatte, hab ich weiter versucht es so aufzubauen wie man es aus den Bildern kennt. Auf der Asuro-CD ist noch ein etwas grösseres Bild in Farbe drauf, da kann man wenigstens ein paar Widerstände erkennen und zuordnen.
Ich hab also alle Teile verbraucht, und es ist nix übriggeblieben :-)
Hab auch schon alles durchgemessen mit Multimeter usw. schaut auch optisch soweit gut aus, als ersten Test hab ich die US-Platine aber an ein RN-Mega8 gehängt, damit ich nicht gleich den Asuro zerschiesse.
Beim Einschalten hats auch nicht geraucht ;-)
Jetzt zu den Problemen, das Programmbeispiel lässt sich nicht compilieren, schimpft wegen der 72kHz variablen, hab die Deklaration nach asuro.h verschoben.
Jetzt bräuchte ich aber noch ein paar Tipps (Hard- und Software) wie man weiter sucht, denn im moment funktioniert das noch nicht so wie es gedacht war.
Leider kann man keine Statusmeldungen über IR ausgeben, da der Ausgang zum chirpen benutzt wird :-(
Mit dem Oszi kann ich an OC2 ein paar Takte vorbeiflitzen sehen,
an ADC3 kommt immer die gleiche Spannung von ca. 2,6 V an.
Ein rumdrehen am Poti ändert nirgendwo was.
PS: wer diese Zeile liest ist mit dem Beitrag zu Ende :-)
PS: wer diese Zeile liest ist mit dem Beitrag zu Ende Freudig
Das versteh ich jetzt nicht ganz...
linux_80
24.07.2005, 16:16
Das versteh ich jetzt nicht ganz...
:-)
Da ich so lange Beiträge eigentlich nicht so gern hab, ich diesmal selber eine Seite voll habe, hab ich halt hingeschrieben das er jetzt doch schon zu ende ist ;-)
Das Freudig ist ein smiley.
Ich löte mir das auch gleich zusammen. Frage: Der AD-Wandler wird ja beim (oder für das) Chripen deaktiviert. Wenn man das einfach so programmieren würde, dass man immer nur vor dem Chirpen den AD-Wandler deaktiviert und dann wieder aktiviert? Hätte da vielleicht jemand ein bisschen Code? Ich bin da noch nicht so fitt, im AVR-Programmieren...
linux_80
24.07.2005, 17:33
Hallo,
wollt sagen das ich es geschafft habe, \:D/
nachdem ich die Beschreibung nochmal auswenig gelernt hab, hab ich doch noch einen Fehler gefunden, ich hatte nur eine Brücke vergessen.
Das mit den 215 mm Abstand stimmt auch fast.
juhu \:D/
@ linux_80: Ich hab noch ne Frage zum Löten und zwar zu den US-Kapseln. Auf dem Schaltplan von Archiv ist die obere U-S Kapsel mit ihren Beinchen ja einfach hinterein in die selbe Verbindung gelötet, oder? Und die Kapseln haben eine rote Markierung, die immer oben sein sollte, wenn ich die Dinger drauf klebe?
linux_80
24.07.2005, 20:20
Hi luma,
meine Kapseln sind so, das ein Pin mit dem Gehäuse verbunden ist, hier hab ich nach GND velötet, das andere Pin ist isoliert, und geht nach innen rein, hier hab ich die andere Leitung angelötet.
Auf der Zeichnung sieht man ja von oben drauf, deshalb sind die scheinbar gleich verbunden, ist aber nicht so. [-X
Ich hab bei mir bei beiden die Masseseite nach oben und mit einem Dicken Kupfer-Draht verlötet, damit wirds auch gleich stabiler.
Angefangen hab ich damit, das ich mir die Abstände der Kapseln auf einen Karton gezeichnet habe, dann hab ich die vier Löcher der Pins durchgestochen, dann hat das mit dem Abstand, Richtung usw. schon mal gepasst.
Hat auch den nebeneffekt, das man von vorne das gewurschtle meiner Löterei nicht sieht.
GELÖSCHT - Sorry wegen Doppelpost.
Moin. Also ich hab den Sch** gestern Nacht bis um ca. 2 Uhr zusammengelötet und einfach angeschlossen - war mir dann egal ob was he geht oder nicht ;D...
Nujut, Atmega ist nicht verbrannt (:)). Hab dann das Progrämmchen aus dem Buch in den ATmega geflasht. Nur funktioniert das jetzt nicht so richtig... Das Programm lässt den Bot ja etwas rückwärts fahren und die Status-LED rot aufleuchten, wenn ein Objekt in seiner Nähe ist und die Wellen reflektiert. Nur leuchtet die LED immer rot egal wie weit die Wand entfernt ist...
Ich glaub ich habe genau das gleiche Anfangsproblem wie linux_80. Bei dem kam ja auch nur ganz konstant eine Spannung an (wie/wo mess ich das). linux_80 könntest du mir vielleicht auf der Skizze zeigen wo du die Brücke vergessen hast?!
Oder es liegt daran, das ich die Kapseln falsch drauf habe. Ich sitz jetzt grad leider in der Schule und kann deswegen keine Fotos zeigen, deswegen bitt ich linux_80 doch ein gutes Foto von schräg hinten (damit ich seh wo welche (gibt ja unterschiedliche Kapseln) Kapsel hinkommt und wo die Anschlüsse hinkommen) sowie ein Foto von unten.
DANKE!
P.S.: Ich hab schon am Poti gedreht. Da ändert sich nichts.
:cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy:
Juhu, hat geklappt. Heut morgen um 2:00 war ich wohl nicht mehr so fitt und hab nen billigen Fehler in ner if-Abfrage im Programm gemacht und vergessen, ein Fuß eines Wiederstands noch anzulöten. Der Spaß im Wohnzimmer ging dann so lang, bis das Gute Teil gegen ein Stuhlbein fuhr - leider war das aus Metal. Naja, scheint als ob der Asuro noch lebt. Die Status-LED wecheslte auf Gelb, das wars. Ich lass den SelfTest noch durchlaufen zum checken.
:cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy: :cheesy:
linux_80
25.07.2005, 18:50
Hi luma,
ich hab ja nicht nach dem Layout von Archi gebaut, sondern so wie's auf den Bildern ist, deswegen helfen meine Bilder nicht unbedingt weiter.
Ich musste auch feststellen, das die Hinderniserkennung nicht so überwältigend ist, es wird nur das erkannt was in Richtung direkt davor ist, meiner bleibt auch immer an irgendwelchen Ecken hängen!
Aber ansonsten ist der Abstand genauso wie beschrieben, ca. 215 mm.
Die Status-LED wecheslte auf Gelb, das wars. Ich lass den SelfTest noch durchlaufen zum checken.
Ich hoff nur da ist wirklich nichts. Kann ich das irgendwie noch anders checken? Beim SelfTest > SwitchTest > T1 leuchtet die LED UND der linke Motor (ist das normal?). Hab gelesen, dass so ein Fehler Widerstandsbedingt sein könnte...
Edit: Ist es eigentlich schädlich wenn man die US-Platine wegmacht und den Asuro so betreibt? Und ist es eigentlich schädlich wenn ich SelfTest durchlaufen lasse und dieses so tut als ob die Linienverfolgunshardware noch dran ist, aber eigentlich die US-Platine draufsteckt?
[quote]
Edit: Ist es eigentlich schädlich wenn man die US-Platine wegmacht und den Asuro so betreibt? Und ist es eigentlich schädlich wenn ich SelfTest durchlaufen lasse und dieses so tut als ob die Linienverfolgunshardware noch dran ist, aber eigentlich die US-Platine draufsteckt?
Sollte eigentlich kein Problem sein!
CU, Robin
Hio. Das mit dem „Ich-habe-evetuell-was-zerstört“ an meinem Asuro hat sich erledigt – ist nichts kaputt :D.
Ich habe jetzt aber trotzdem noch mal ne Frage: Wie oben erwähnt, kann man ja den AD-Wandler nicht mehr verwenden, da der ja deaktiviert oder weiß Gott warum. Kann man den Beispiel-Code aus dem Buch „Mehr Spass mit Asuro“ nicht so ändern, dass kurz vor jedem Ping, „alles wichtige“ von den Registern her geändert wird damit gepingt werden kann (wie das in LocalInit() drin steht) und wenn dann Gepingt worden ist, alles wieder zurückgestellt wird, so das man die anderen Funktionen von asuro.h wieder verwenden kann (SerWrite, etc...)? Wäre sehr dankbar für kompletten Code. Ich bin da noch nicht so fit :(.
Grüße
Lutz
Hallo? Es kann doch nicht sein, dass hier niemand weiß wie man die Einstellungen die LocalInit() an den Registern vornimmt, temporär zurücknehmen kann, damit man SerWrite, Odometrie et cetera verwenden kann?!! Ich wäre euch äußerst dankbar, wenn mir jemand 2 Funktionen liefern könnte, die
1. Den AD-Wandler (und alles andere) wieder so zurückstellt, damit man die Odometrie sowie SerWrite und alles andere (Tasterauswertung...) wieder verwenden kann
sowie eine Funktion
2. Die alle Einstellungen "wiederherstellen" kann, damit ich wieder Chirpen kann.
Ich bräuchte das ziemlich dringend und mir selber ist es noch nicht gelungen die genannten Funktionen selber zu schreiben. Bin halt noch ein übelster Anfänger.
Lutz
P.S.: Soll ich den Code aus dem Buch (mit dem gechirpt wird) noch posten?
Hallo Lutz,
Die Einstellungen kannst Du sicher mit der Init() Funktion zurücksetzen, die brauchst Du nicht zu schreiben, die ist schon da.
Gruß Sebastian
Ja schon, aber bei Init() ist wahrscheinlich auch viel Balast dabei, oder?
Was heißt Balast,
die länge des Programms wird wohl gleich bleiben, weil die Init schon mal im Speicher drin ist,
und die Ausführungszeit dürfte auch sauschnell sein, weil da nichts anderes gemacht wird, als mehrere Register mit werten zu beschreiben
19 Zeilen werte in register schreiben, im Assembler gäbe das dann 38 Takte plus sei() 1 Takt.
Du kannst Dir auch anschauen, was Du geändert hast, und nur die Sachen aus der Init() übernehmen.
Gruß Sebastian
P.S.
Ich hoffe, daß ich das oben richtig gerechnet hab.
So hier noch ne kleine Meldung an alle die sich das US-Bauteil noch kaufen wollen. Auf http://www.arexx.com findet ihr unter Asuro >> Downloads eine kleine aber ausführliche Bauanleitung von mir zum Download bereit. Viel Spass!
pebisoft
05.08.2005, 21:07
kauft euch für den asuro einen srf04-ultra, ist sehr gut in winavr-c zu proggen und einfach anzuschliessen. im forum winavr-c gibt es unter anderem von mir ein programm, wie er funktioniert. lässt sich sehr fei proggen, bis auf 1cm genauigkeit und 3m weit.
mfg pebisoft
Hio. Ich hab jetzt ein bisschen weiter experimentiert. Der Beispielscode aus dem Buch war mir dann irgendwann zu langweilig. Ich meine, warum ein teures Ultraschallgerät verwenden, wenn einem die Software nicht einmal sagen kann, wie weit das Objekt welches die Strahlen reflektiert in [cm] von der Empfängerkapsel entfernt ist?
Deswegen habe ich eine kleine Bibliothek geschrieben. Sie basiert auf dem Beispielcode wurde aber stark bearbeitet und die Verwendung ist jetzt ganz anders. Es gibt die drei Methoden InitUlrasonics, ReinitAsuro sowie natürlich Chirp. Zuerst zu InitUlrasonics. Wie der Name schon sagt initialisiert diese Funktion die Chirp-Funktionalität von Asuro. Wenn diese Methode aufgerufen wurde, ist das Empfangen/Senden von Daten über USART sowie das Messen der Odometer nicht mehr möglich, da u.a. der AD-Wandler deaktiviert werden muss. Sonst macht diese Funktion nichts. Um nun den Asuro wieder wie gewohnt verwenden zu können gibt es die Funktion ReinitAsuro. Sie reinitialisiert den Asuro, soll heißen sie stellt alles wieder so ein, dass man Daten über USART schicken kann und die Odometer wieder auswerten kann. Allerdings sind diese beiden Funktionen eher unwichtig. Wichtiger ist Chirp. Mit dieser Funktion kann "gechirpt" werden. Mann muss ihr einen Parameter übergeben. Dieser Parameter sollte 0 (für false) oder 1 (für true) sein. Ist der Wert true so wird Asuro automatisch so umkonfiguriert, dass man vor dem chirpen nicht mehr erst InitUlrasonics aufrufen muss. D. h. Chirp ruft diese Funktion dann automatisch selber auf. Wenn die Funktion dann fertig "gechirpt" hat und wir immer noch von true (oder =1) als Parameterwert ausgehen, so ruft Chirp dann auch noch automatisch am Ende ReinitAsuro auf. So wird Asuro wieder automatisch zurückgestellt. D. h. auch in diesem Fall ruft Chirp dann automatisch eine Funktion auf, natürlicherweise ReinitAsuro. Und genau deswegen habe ich am Anfang geschrieben, dass die beiden Funktionen InitUlrasonics und ReinitAsuro eher unwichtig sind. Mit true (= 1) als Parameterwert übernimmt Chirp die Arbeit für uns.
Am Ende liefert uns Chirp dann die gemessene Entfernung in [cm]. Diese ist bei näheren Distanzen (+/- 1 Meter) schon noch einigermaßen genau. Ich habe im Anhang ein kleines Diagramm, da kann man die Abweichungen gut sehen. Wie man in dem Diagramm sieht werden die Wert erst ab ca. 1,00 Meter wirklich sehr ungenau. Aber ich glaube für diese Entfernung sind diese Ultraschall-Kapsel einfach zu billig.... Mann kann also sagen: Wer genaue Entfernungen messen will greift lieber zu IR-Sensoren, oder zu teureren Ultraschallkapseln. Die gelieferten sind für genaue Messungen eher ungeeignet.
Jetzt wünsche ich noch viel Spass beim chirpen!
Grüße
Lutz
SEHR WICHTIG: Wenn ihr versucht test.c mit eurem Makefile zu kompilieren gibts nen Fehler. Ihr müsst euer Makefile nämlich etwas bearbeiten. Geht dabei so vor: Startet MFile >> Öffnet euer Makefile >> Menupunkt Makefile >> Enable Editing of Makefile. Sucht jetzt in eurem Makefile folgende Zeile:
# If there is more than one source file, append them above, or adjust and
# uncomment the following:
SRC += asuro.c
und fügt dort ultrasonics.h dazu (mit Lehrzeichen dazwischen), also so:
# If there is more than one source file, append them above, or adjust and
# uncomment the following:
SRC += asuro.c ultrasonics.c
Weiter gehts dann so: Menüpunkt File >> Save As... >> In euer Verzeichnis mit dem Makefile wechseln altes löschen und dann auf speicher klicken (Löschen geht durch auswählen des Makefiles im Browser und dann einfach auf Entf auf der Tastatur drücken 8)). Fertig.
EDIT: Wer Verbesserungsvorschläge für die Software hat soll die nur rausrücken!
Hi
Also ich hab mir jetzt den Code nicht angeschaut, aber deiner Beschreibung und der Messerwerte zu Folge, hast du dir sehr viel Arbeit gemacht und es scheint wirklich was gebracht zu haben.
Hio. Das Problem der Software ist, dass sie nicht Rundet. Deswegen kann es sein das ein Objekt z.B. 10,9 cm weg ist meine Funktion aber nur 10 cm zurückgibt und nicht 11 cm...
IR-Sensoren sind auf jedenfall besser.
Hallo luma,
x = y +0.5;
11 = 10.9 + 0.5;
der Fehler liegt dann nur noch bei.... äh 0.5.
Gruss Winne
@ winne: Das verstehe ich jetzt nicht ganz. Ich habe in meinem Code expliziet auf Fließkommeberechnungen (oder wie man das nennt) verzichtet. Das spart unheimlich Flash-Speicher. D. h. ich multipliziere Kommazahlen mit z. B. 1000 und später wenn ich dann das Ergebnis habe wieder (je nachdem welche Einheit ich haben will - [cm] [mm]) durch 1000...
@luma: sorry, wenn die Antwort vorher zu kurz war!
in der Funktion int Chirp(unsigned char flag). Die Zeile durch die 0.5 erweitern und der Rundungsfehler ist dann von 0,9 unentlich periode nur noch 0,5.
Die Zeile sollten, wenn ich mich nicht irre, so ausehen.
dist = (unsigned int) (((long) ((344L * ((sleeptime * 1000L) / 72L) / 10000L) / 2L))+0.5);
Durch die Cast Operation (unsigned int) wird knallhard die Kommerstelle abgeschnitten.
Muss ich das ganze nicht davor (bevor ich + 0.5 mache) nicht alles in float mit (float) konvertieren? Das wäre ja sinnlos. Aber ich probiers aus!
linux_80
08.09.2005, 20:53
Hallo,
Am besten noch mal *10 und +5
dann gibts keine Probleme mit Kommas,
Barbara1
05.10.2005, 12:51
Hallo Lutz!
Wie sieht bei dir die Datei "asuro.h" aus?
Grüße
Barbara
Oh da hab ich wohl ne Frage übersehen! Ist zwar schon ein bissel her, aber egal.
Wie die ausro.h-Datei aussieht? Wiso willst du das wissen? Funktioniert irgendwas nicht? Ich glaube meine asuro.h "sieht" eigentlich identisch wie die von Weja (such mal hier im Unterforum nach Erweiterter Asurobibliothek). Ich hab meine nur ein bisschen mehr auskommentiert.
Gruß
Lutz
Barbara1
07.11.2005, 07:54
Hallo Lutz!
Bei mir gibts ein Problem mit der "ultrasonics"-Datei. Ich verwende auch die asuro.c und asuro.h -Dateien von weja. Ich bekomme immer eine Fehlermeldung, dass "autoencode" und "StartEncoder" in der ReinitAsuro-Funktion nicht bekannt sind.
Schöne Grüße
Barbara
Hallo zusammen,
@lutz ich hab mir mal deine messwerte angesehen: Da Du eine lineare Abweichung hast, kannst Du die einfach mit einem weiteren Faktor rausrechnen. So wie ich das sehe, mußt Du nur alle Werte mit mit etwa 1.1 multiplizieren, dass stimmt dann nur für die kleinen Werte <30 cm nicht so ganz, aber für alle anderen recht gut.
bei dem Rundungsproblem stimme ich für die variante von linux_80
Moritz
@ Barbara1: Ich poste hier heute Abend einfach meine ganze Bib... Die lläuft zu 100%
Barbara1
09.12.2005, 09:16
Hallo!
Bei meinem Asuro tritt folgendes Problem auf: Wenn ich die Funktion Encoder_Init() verwende, funktioniert die Funktion Chirp nicht mehr (liefert den Wert 0).
Barbara1
09.12.2005, 11:35
Mein Problem hat sich schon erledigt. Die Funktion Chirp funktioniert nach Aufruf von Init() wieder.
Hallo Leute
Ich bin neu hier im Forum.
Ich habe mir den Asuro samt Ultraschallortung aufgebaut. Zum testen habe ich mir die Bibliothek von @luma gezogen. --> vielen Dank an luma für die Arbeit und bereitstellung. Leider habe ich ein Problem damit.
Die Test.c lässt sich nicht kompilieren. Ich habe die Ultrasonics.c in den Makefile integriert.
Ich bekomme die folgenden Fehler angezeigt. Bin leider noch nicht soooo fit was c-Programmierung von AVRs angeht.
fahren.c:12: warning: implicit declaration of function `set_sleep_mode'
fahren.c:12: error: `SLEEP_MODE_IDLE' undeclared (first use in this function)
fahren.c:12: error: (Each undeclared identifier is reported only once
fahren.c:12: error: for each function it appears in.)
fahren.c:19: warning: implicit declaration of function `sleep_mode'
fahren.c:20: warning: implicit declaration of function `MSleep'
evtl. habe ich die falschen Bibliotheken Asuro.c Asuro.h ?!?!?
Ich hoffe mir kann noch geholfen werden.
Ich sag schon mal VIELEN DANK :)
Oliver
Ach ja.
Ich habe mir einLayout für die US-Platine erstellt.
Hallo
kann mir denn niemend einen Tipp geben welche Bibliotheken in der Lösung von luma verwendet werden, habe irgendwie nicht die richtigen gefunden...
Danke
Oliver
Hallo olima,
könntest Du mal den Code posten? Dann kann man vielleicht die ensprechenden Funktionen ändern.
Gruss,
stochri
OK , hier ist der Code :
#include "asuro.h"
void InitUlrasonics(void)
{
// Change Oscillator-frequency of Timer 2
// to 40kHz, no toggling of IO-pin:
TCCR2 = (1 << WGM21) | (1 << CS20);
OCR2 = 100; // 40kHz @8MHz crystal
ADCSRA = (0 << ADEN); // ADC deaktivieren
// Analog Comparator einstellen:
ACSR = (1 << ACIS1); // Comparator Interrupt on Falling Output Edge
ADMUX = 0x03; // ADC3-Eingang mit Komparator verbinden
SFIOR |= (1 << ACME); // ADC Multiplexer mit Komparator verbinden
DDRD &= ~(1 << 6); // Port D Pin 6 als Eingang schalten (AIN0)
}
int Chirp(unsigned char flag)
{
// Variablen definieren
unsigned int sleeptime = 0, dist = 0;
if(flag)
InitUlrasonics();
// Chripen:
count72kHz = 0;
while(count72kHz != 20) {
OCR2 = 100 + 20 / 2 - count72kHz;
}
TCCR2 = (1 << WGM21) | (1 << CS20);
OCR2 = 100;
// Echos auswerten:
for(;;) {
Sleep(1);
sleeptime += 1;
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;
}
}
//if(flag)
//ReinitAsuro();
return dist;
}
int main(void)
{
// Variablen
int chirpData = 0;
int speed =200;
// Asuro initialisieren
Init();
for(;;) {
chirpData = Chirp(TRUE);
if(chirpData>21){
MotorDir(FWD,FWD);
MotorSpeed(speed,speed);
}
else
{
MotorDir(RWD,RWD);
MotorSpeed(100,speed);
}
}
return 0;
}
Der Code der Ultrasonics.h von luma
/************************************************** *****************************
* Dateiname: ultrasonics.h
* Projekt: Erweiterte Asurobibliothek
*
*
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or any later version.
*
*
* Kleine Funktionsbibliothek, mit welcher man die Ultraschall-
* Erweiterungsplatine für Asuro betreiben kann.
*
*
* @version 1.0.0
* @since 13.08.2005
* @author Luma
************************************************** *****************************/
#ifndef ULTRASONICS_H
#define ULTRASONICS_H
#include "asuro.h"
/**
* Konfiguriert den Asuro so, das er die Ultraschall-Erweiterungsplatine in
* Betrieb nehmen kann. Hinweis: Diese Funktion wird automatisch von der
* Funktion Chirp aufgerufen und sollte sonst nicht verwendet werden.
*/
void InitUlrasonics(void);
/**
* Diese Funktion wird aufgerufen, wenn man den Asuro wieder zurückstellen
* will. (Das geschieht normalerweise nach einem "Chirp".). Auch diese
* Funktion sollte sonst nicht verwendet werden.
*
*/
void ReinitAsuro(void);
/**
* Sendet einen sogenannten "Chirp". Ist flag true (also = 1), so wird der
* Asuro nach dem Chrip wieder zurückgestellt, damit man wieder wie gewohnt
* alle Funktionen verwenden kann (während eines Chirps ist es z. Bsp. nicht
* möglich über USART Daten zu schicken/empfangen, da der ADC deaktiviert werden
* muss). Tritt irgendein Fehler auf, oder kann nicht gemessen werden, gibt
* die Funktion -1 zurück.
*
* @param flag Ist flag true wird der Asuro nach jedem Chirp
* wieder zurückgestellt und vor dem Chirpen,
* umkonfiguriert. Ist flag false so kann man
* mit den Funktionen InitUlrasonics sowie
* ReinitAsuro Asuro entweder zum Chirpen oder
* zum "Normalbetrieb" umkonfigurieren. flag auf
* true zu setzen wird empfohlen wenn man nur
* einzelne Messung macht.
* @return Gibt die gemessene Strecke in [cm] zurück
*/
int Chirp(unsigned char flag);
#endif
Danke schonmal für die Hilfe
Oliver
Hallo olima,
unter http://sourceforge.net/project/showfiles.php?group_id=155217
findest Du die aktuellen ASURO-libs.
Leider kann man es auch mit der aktuellen 2.6 nicht kompilieren, es gibt leider die Variable count72kHz nicht mehr öffentlich. Deshalb habe ich die lib etwas verändert und einfach die dort enthaltene Variable count36kHz global gemacht und einfach count72kHz durch count36kHz ersetzt. Möglicherweise stimmt die Frequenz jetzt um den Faktor 2 nicht, also falls es nicht geht, einfach alles Stellen an denen count36kHz vorkommt durch count36kHz/2 ersetzen. Dann könnte es theoretisch funtkionieren.
Ich habe als Entwicklungsumgebung AVR-Studio verwendet, das compilierte Projekt findest Du im ZIP-File.
Gruss,
stochri
RedBaron
04.01.2006, 14:49
Moin,
noch eine Anmerkung zur Vermeidung von Fließkomma-Arithmetik. Statt mit einem Faktor 10 hoch x zu arbeiten, ist es besser 2 hoch x zu wählen. Die Multiplikation mit 10... ist noch recht einfach. Aber die Division ist eher aufwändig. Durch eine Zweierpotenz läßt sich hingegen durch einfaches Rechtsscheiben dividieren.
Gruß Red Baron
vielen Dank @storchi für die klasse Unterstützung.
Leider klappt es immer noch nicht so ganz.
Anscheinend bleibt der AVR in der "InitUltrasonics" hängen.
Welche Funktion hat die count36khz denn überhaupt, und weshalb wurde die geändert ???
Sorry für die dummen Fragen.
Oliver
Wenn es nicht klappt, liegt das vermutlich an Deiner Installation von Win-AVR. Entweder hast Du eine sehr alte Version oder es ist sonst irgendwas faul
Gruss,
stochri
apotecarius
06.01.2006, 03:03
wer von euch weiß was das Erweiterungsset kostet mit dem kleinen LCD-Bildschirm
Bitte eine PN schicken Danke
apotecarius
m.a.r.v.i.n
08.01.2006, 15:54
Hallo Oliver,
ich habe das gleiche Problem wie du mit der Ultraschall Erweiterung und dem Programm von luma im Zusammenhang mit der aktuellen Asuro Bibliothek.
Das Programm bleibt einfach hängen.
Allerdings funktioniert das ganze mit dem Original Programm Beispiel und der Original Asuro Bibliothek ohne Probleme (Das Programm gibt es mit der Beschreibung von luma auf der Arexx-Homepage (http://www.arexx.com/downloads/asuro/us_bauplan.zip) .
Ich werde das ganze noch weiter untersuchen.
@apotecarius: das LCD Modul ist noch nicht verfügbar.
Gruß Peter
Edit:
Problem erkannt. Das US Modul kann so nicht mehr mit der neuen Asuro Bibliothek funktionieren. Mit Einführung der count36kHz Variablen wurde auch die IRQ Funktion von SIG_OUTPUT_COMPARE2 nach SIG_OVERFLOW2 geändert. Der Grund für die Umstellung war wohl der Umbau der IR Schnittstelle zur Kollisionserkennung.
Fazit:
Wer das US Modul benutzen will, muß mit der Original Asuro Bibliothek arbeiten!
Edit:
Problem erkannt. Das US Modul kann so nicht mehr mit der neuen Asuro Bibliothek funktionieren. Mit Einführung der count36kHz Variablen wurde auch die IRQ Funktion von SIG_OUTPUT_COMPARE2 nach SIG_OVERFLOW2 geändert. Der Grund für die Umstellung war wohl der Umbau der IR Schnittstelle zur Kollisionserkennung.
Fazit:
Wer das US Modul benutzen will, muß mit der Original Asuro Bibliothek arbeiten!
is there really no way to use the 'Ultraschall' module with the newer library? i tried to figure out what has change but couldn't really find any reference to the SIG_OUTPUT_COMPARE2 to SIG_OVERFLOW2 change, could you give me a pointer where to look?
thanks in advance
regards,
dopez
m.a.r.v.i.n
23.03.2006, 14:36
Hi dopez,
maybe it can be done by an #ifdef #else construct and a preprocessor define.
If the US Module is in use, the old code is included, else the new code.
The old Asuro Lib:
/* uses timer2 (36kHz for IR communication */
/* counts falling and rising edge => 36kHz*2 = 72kHz */
SIGNAL (SIG_OUTPUT_COMPARE2)
{
count72kHz ++;
}
/* Init function Processor will be initalized to work correctly */
void Init (void)
{
//-------- seriell interface programmed in boot routine and already running -------
// prepare 36kHz for IR - Communication
TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
OCR2 = 0x6E; // 36kHz @8MHz
TIMSK |= (1 << OCIE2); // 36kHz counter for sleep
The new Asuro Lib sources:
/* uses timer2 (36kHz for IR communication */
SIGNAL (SIG_OVERFLOW2)
{
TCNT2 += 0x25;
count36kHz ++;
if (!count36kHz) timebase ++;
}
/* Init function Processor will be initalized to work correctly */
void Init (void)
{
//-------- seriell interface programmed in boot routine and already running -------
// prepare 36kHz for IR - Communication
TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
OCR2 = 0x91; // duty cycle for 36kHz
TIMSK |= (1 << TOIE2); // 36kHz counter for sleep
Best reagrds m.a.r.v.i.n
Hi m.a.r.v.i.n
thanks for the reply, i will take a look if with that init values and that interrupt setting/handler (i guess?) get the new asuro lib working with Ultraschall
and else perhaps with a #ifdef #else construct
(the problem is that im quite a newbie when it comes to avr programming and C in general, i guess #ifdef #else would be easiest at first)
greetings,
dopez
I was able to intergrate functions for the Ultraschall module into the latest libasuro from MadMan2k, basicly you can now use it to see how far away an object or wall is and decide what to do with it, i've included a small example that keeps on going straight ahead using the Travel command and turns around when it 'sees' something.
All code in the zip is based on other people's work, please see the README file for more information and i'm sorry if i forgot to give credit to someone (let me know, i'll correct it)
Hopefully this is usefull to others too and maybe could be intergrated into future releases of libasuro/asurolib (will these two get merged?)
Thanks to all the people who made/helped making asurolib/libasuro and related software and hardware :)
greetings,
dopez
Hallo allerseits,
ich bin ganz neu und hoffe an der richtigen Stelle gelandet zu sein.
Ich habe mir ebenfalls einen ASURO gebaut und möchte ihn nun auch mit der Ultraschall-Erweterungsplatine aufrüsten.
Layouts etc habe ich hier schon gefunden, aber
wo finde ich den SCHALTPLAN der Ultraschallerweiterung ??
Kann mir da jemand helfen?
Danke
Gruß
Klaus
m.a.r.v.i.n
03.06.2006, 14:25
Hallo Klaus,
den Schaltplan gibt es leider nur in dem Buch
'Mehr Spaß mit ASURO Band 1'.
Gibt es z.B. bei http://www.science-shop.de/
Gruß m.a.r.v.i.n
Hallo m.a.r.v.i.n,
danke für die schnelle Antwort.
ich dachte nur - weil im US-Bauplan.pdf (auf einer AREXX-Seite) einleitend einem gewissen Robin für die Veröffentlichung eines guten Schaltplanes hier irgendwo gedankt wird.
Ich gehe mal davon aus, dass die Handskizze im o.g. Buch weiterhin aktuell ist.
Gruß
Klaus
linux_80
03.06.2006, 19:04
Hallo Klaus,
wenn Du diesen Thread von Anfang an durchschaust, findest Du die gewissen Leute incl. Plan ;-)
hi,
habe nun die US-erweiterungsplatine zusammengebaut, die anleitung von Lutz auf der arexx-webseite hat sehr geholfen. Die software ist auch von Lutz.
Jetzt passiert folgendes:
nach dem einschalten leuchtet die STATUS-LED und die zwei BAK-LED´s. Dann wechselt die statusLED zu grün und die motoren drehen vorwärts (wenn man am poti eingestellt hat, sonst dreht nur das rechte rad und das linke "zuckt" nur so komisch rückwärts). Der asuro fährt aber nur vorwärts, ohne vor einem hindernis anzuhalten...
Meine katze zeigt sich aber unbeeindruckt von den US-geräuschen. Ist schon alt (die katze), weiss nicht, ob sie noch so alles hört, was katzen sonst hören.
Kann ich es anders überprüfen ob der sender sendet?
danke schon mal für Euere hilfe...
damaltor
28.04.2007, 12:49
du kannst mal mit einem multimeter ((viel) besser wäre ein oszilloskop) an den anschlüssen der US-kapseln messen ob da überhaupt strom ankommt... ein multi müsste einen unkonstanten, recht kleinen wert anzeigen und ein oszi vermutlich eine regelmäßige welle
hi damaltor,
danke erstmal, folgendes habe ich gemessen:
transmitterseite, asuro abgeschaltet- liegen 0,28V an, asuro läuft (mit US-software) spannung schwankt zwischen 54,3 und 55,2 mV
receiverseite, ob asuro ein, oder aus ist, spannung 0V
damaltor
28.04.2007, 13:44
dann könnte es sein dass am receiver nix kommt... irgendwie muss da ja was gemessen werden, dazu muss eine spannung anliegen. 55 mV sind verdammt wenig, könnte aber sein weil ja immer nur kurze impule gesendet werden. was mich mehr stört, ist dass beim abgeschalteten asuro trotzdem spannung anliegt. erstmal zieht das die batterien leer, und ausserdem weist das auf eine brücke zwischen out+ und dem transmitter hin. untersuche nochmal deine platine! die dräte liegen sehr dicht beieinander, es könnte sein dass sich die isolierung der kabel durch lötwärme aufgelöst hat und sich jetzt zwei drähte berühren, die das nicht sollten.
also ich hab mir die platine noch einmal angeschaut, noch einmal ein paar drähte mit der isolation etwas angehoben, ein paar lötstellen nachgelötet. Die spannung beim abgeschaltetetm asuro am transmitter liegt immer noch bei 0,25V. Mir ist aber was anderes aufgefallen, von der logik her würde ich die beiden gehäusen der US sensoren an masse legen, es ist aber so, dass der isolierte pin des transmitters mit dem gehäuse des receivers verbunden ist und beide an out+ liegen.
Spielt die polarität bei den US sensoren eine rolle ?(nach dem stromlaufplan würde ich die frage verneinen). Kann man sender und empfänger gegeneinander tauschen?
danke...
edit: in der anleitung von luma steht:
--------------------------------------------------
D1: 1N4148 (Auf richtige Polung achten. Strich der Diode auf Strich
des eingezeichneten Dreieckes)
--------------------------------------------------
der strich auf der diode ist mit dem strich auf den das dreieck mit seiner spitze zeigt identisch - richtig?
--------------------------------------------------
damaltor
28.04.2007, 15:31
richtig.
die beiden ultraschallkapseln lassen sich nicht zwingend austauschen - such mal nahc den bestellnummern. bei einigen sensoren geht das allerdings - im endeffekt ist das ungefähr so wie ein lautsprecher, welchen man polungsfrei anklemmen kann, und welcher auch als mikrofon (nichts anderes ist der empfänger) benutzen kann. trotzdem ist bei einigen die polarität wichtig. wenn die bestellnummern verschieden sind, sind die beiden vermutlich nicht austauschbar.
irgendwo stimmt was nicht, bei ausgeschaltetem asuro sollte eigentlich kein strom fliessen... miss mal die spannung an out+ bei abgeschaltetem asuro. dann schau im stromlaufplan nach ob es eine dauerhafte verbindung gibt zwischen vcc und der kapsel
also:
- an out+ liegt beim abgeschaltetem asuro keine spannung an.
- im stromlaufplan gibt es keine dauerhafte verbindung zwischen vcc (wenn es identisch mit out+ ist?) und der/den kapseln
Ich werde jetzt noch einmal meine lötkünste direkt mit dem stromlaufplan vergleichen, bisher habe ich nur die skizze der "leiterbahnen" auf der rückseite und mein gelötetes verglichen...
die suche nach den teilebezeichnungen (UCM-40-T und UCM-40-R) ergab nur chinesisches zeug. Ich bin davon ausgegangen, dass T=transmitter und R=receiver ist...
Auch habe ich vergeblich danach gesucht, ob nun Q1 transmitter oder receiver ist. Im stromlaufplan steht beim Q1 die bezeichnung 40LR12, also habe ich dort auch das bauteil mit "R" eingebaut :-(
Mir schein es so (bitte nicht viel über die logik nachdenken), dass die schaltung bei Q1 komplizierter ist und am ADC3 ausgewertet wird, auch daraus schloss ich auf den receiver. Der transmitter braucht nicht so viel zeug drumrum...
hi damaltor,
ich habe keinen fehler gefunden. Habe jetzt den TLC272 (habe ich als alternative - siehe https://www.roboternetz.de/phpBB2/viewtopic.php?t=29797 - für den TS912IN eingesetzt) gegen einen anderen TLC272 getauscht, dadurch ist immerhin am transmitter beim abgeschalteten asuro "keine" spannung (40mV), am transceiver messe ich aber immer noch 0V...
und nun? Liegts doch am TLC272?
damaltor
28.04.2007, 19:12
hmm.. irgendwoher muss die spannung am bauteil kommen.
ziehe die erweiterungsplatine raus. schalte den asuro ab. dann miss nacheinander alle pins der erweiterungsplatine (also die verbinder auf der asuro platine) durch, irgendwo muss trotzdem noch spannung anliegen. vermutlich liegt es also an der asuro hauptplatine.
habs nun gemessen:
asuro auf dem rücken liegend, von links nach rechts, gemessen gegen den massebügel:
1 - 0V
2 - 2mV
3 - 0,4V
4 (oben) - 0V
5 (unten) - 1,5mV
6 - 47mV
7 - 0V
8 - 1,7mV
die beiden kontakte an den motoren beide 0V
damaltor
28.04.2007, 21:04
woher kommen die 0,4V??? die paar mV stören nicht, das passt schon... aber 0,4V??? nimm mal die batterien raus und miss nochmal... ich kann das gar nicht glaben...
perpetuum mobile? Ich messe an dem besagten punkt 3: 0,25V (unmittelbar nach herasunehmen der batterien)
damaltor
29.04.2007, 12:56
das ja witzig.. also liegt es vermutlich an irgendwelchen kondensatoren...
-asuro aus
-besagten punkt kurz (!) mit der masse verbinden
-nochmal messen
=)
batterien auch raus? Ich habe den asuro über nacht ohne batterien liegen lassen, dann konnte ich heute früh immer noch eine spannung von ca. 25mV messen...
damaltor
29.04.2007, 13:40
donnerwetter... =)
dannn nimm mal die batterien raus, und schliesse alle kondensatoren und elkos kurz, so dass sie sich entladen. anders kann ich das nicht erklären...
am besten tauche ich den asuro ins wasser...
edit: aber was bringt das kurzschliessen der kondensatoren? Die laden sich doch beim erneuten einschalten wieder auf oder?
damaltor
29.04.2007, 16:02
stimmt schon. ich wundere mich nur warum noch spannung anliegt obwohl alles aus ist. isrt aber auch egal.... komisches ding ist das.
kannst du irgendwie ein oszilloskop organisieren (und damit umgehen (lassen))?
damaltor
29.04.2007, 17:02
das ist ärgerlich..
naja. 25mV sind nicht weiter wild... 0,5V sind viel.
trotzdem muss es irgendwas an deiner erweiterungsplatine sein, wenn am mikrofon/receiver keine spannung ist dann ist das schon eigenartig.
ich werde in ein paar tagen wenn ich wiederheim bin mal an meinem asuro messen was da noch für spannung ist nach dem ausschalten.
ich habe neue erkenntnisse:
aus dem code (ich poste den hier mal, damit wir über das gleiche reden)
#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;
}
habe ich die motoren auskomentiert und zufällig festgestellt dass ohne dass ich was tue die status LED die farbe von grün in rot wechselt.
Bin dem nachgegangen und stellte fest, dass wenn ich in einer entfernung von ca. 4-5 cm vor den US kapseln die hand im bereich von ca. 2mm vor und zurück bewege sich das umschalten reproduzieren lässt.
Gleichzeitig mit dem wechsel auf rot ändert sich die spannung am transmitter von ca. 45mV auf 5mV. Bei dem receiver passiert spannungsmässig immer noch nix = 0V. Kann man damit was anfangen?
damaltor
29.04.2007, 20:04
hmm.... stören die motoren evtl zu stark? hlat den asuro mal in richtung von etwas festem (wand) und teste noch ein wenig... funktioniert das ganze doch?
hi damaltor,
ich wollte nicht zu früh hurraaa schreien, habe also noch ein paar tests gemacht, es funktioniert jetzt. Ich kann es mir nur so erklären, dass ich beim löten doch noch eine kalte löstelle hinterlassen habe und diesen fehler beim nachlöten behoben habe...
danke nochmals
edit:
p.s.
sind die programme von weja mit ultrasonic.c irgendwie in die neue lib als funktionen reingekommen oder nicht?
hi,
ich habe festgestellt, dass die reaktion auf hindernisse bei eingeschalteten motoren doch unzuverlässiger ist als zuerst gedacht. Ich nehme an, die US-kapseln werden (wie im forum schon mal beschrieben) durch den US-anteil bei dem krach den die motoren veranstallten gestört. Was kann ich dagen tun? Ändert sich das bei besser einstellung am poti? Ich habe mir auch überlegt - weil, wenn der asuro schräg gegen die wand ankommt, die US-kapseln nicht reagieren können - die seitlichen taster mit zu richtungsänderun zu nehmen, ich schaffe es einfach nicht, den teil des programms (im code auskomentiert) an die richtige stelle zu bekommen. Könntet ihr mir paar tipps geben? Zumindest wie ich die stelle erkennen kann, wo die US abfrage stattfindet, denn davor müsste ja die abfrage der tasten hin...
#include "asuro.h"
unsigned char sw, sw0, sw1, sw2;
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);
}
/*sw0=PollSwitch(); // Schalter einlesen und für eine Runde speichern
sw1=PollSwitch();
sw2=PollSwitch();
if ((sw0==sw1) && (sw0==sw2)) sw=sw0; else sw=0;
if (sw==32) {StatusLED (YELLOW);
//MotorDir(FWD, RWD);
//MotorSpeed(0, 200);
}
else if (sw==1) {StatusLED (YELLOW);
//MotorDir(FWD, RWD);
//MotorSpeed(0, 200);
}
else */
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;
}
danke...
damaltor
02.05.2007, 21:22
ich würde ganz primitiv versuchen, die ultraschallsensoren mit schaumstoff oder watte von hinten auszupolstern... vielleicht dämmt das die motoreneräusche minimal, zumindest von hinten...
Prinz_Byte
21.05.2007, 19:26
So ...
Also ich hab nen Asuro mit der Ultraschallerweiterung
(funzt soweit auch alles ganz gut...)
nun hab ich mal die neue lib 2.7 installiert und da gibts ja nun das
mit dem count72kHz nich mehr...
so... nun wollt ich mal wissen ob jemand das problem schonmal anschaulich
gelöst hat und mir da ggf mal helfen kann...
des weiterem find ich das mit der timebase cool das es ja nun gibt...
sowas in der richtung hab ich bei den älteren lib vermisst...
(und aus dieser anleitung für timer bei avr prozessoren heraus
was zu testen klappt bei mir auch nich so von daher ist das mit der timebase schon ganz nett...)
gibts denn ne möglichkeit diese 2 funktionen in der lib 2.7 nutzen zu können?
- ultraschall
- timebase...
Vielen Dank schonmal im vorraus...
damaltor
21.05.2007, 22:37
probier dich mal mit
count36khz
evtl musst du auch count36khz*2 nehmen, da 36khz halt nur die halbe geschwindigkeit ist.
Prinz_Byte
21.05.2007, 23:08
jo ich hab einfach mal (1 << count36kHz)
genommen...
klappt aber irgendwie nich das programm fährt sich fest...
damaltor
22.05.2007, 08:34
mmh. zeig doch mal den programmcode her...
m.a.r.v.i.n
22.05.2007, 09:12
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/*checkout*/asuro-tools/trunk/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;
Prinz_Byte
22.05.2007, 19:37
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?
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...
damaltor
22.05.2007, 22:13
Üben, üben, üben... und etwas zeit mitbringen um das datenblatt zu lesen.
klar, wer lesen kann ist eindeutig im vorteil, aber welches datenblatt?
Prinz_Byte
22.05.2007, 23:49
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
23.05.2007, 14:08
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
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...
damaltor
23.05.2007, 18:16
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.
Prinz_Byte
23.05.2007, 20:53
du brauchst einfach nur chirp() aufrufen und der return ist der abstand in cm...
alles andere wird automatisch gehandelt (in den funktionen)
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...
damaltor
24.05.2007, 11:53
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.
danke damaltor,
die kompilierung ergab jetzt nur noch die eine warnung bei Chirp, werde jetzt die hex datei testen...
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?
damaltor
24.05.2007, 12:18
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.
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?
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?
Prinz_Byte
24.05.2007, 14:03
wenn du den wert verarbeiten willst musst du ihn auch annehmen:
bsp:
int abstand;
abstand = Chirp();
ok,
was bedeutet aber das hier:
-----------
}
RestoreAsuro();
return dist;
}
---------------
wird da nicht der wert der variablen "dist" schon zurückgegeben?
Prinz_Byte
24.05.2007, 15:38
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...)
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;
}
damaltor
24.05.2007, 18:17
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().
siehe: https://www.roboternetz.de/phpBB2/viewtopic.php?p=287594#287594
braendieman
02.01.2008, 18:41
Hallo! Bin relativ neu hier und muss auf meiner Schule eine Facharbeit über den Ultraschallsensor des Asuros schreiben. So weit so gut! Hab den Bausatz schon auf der Platin zusammengelötet. Und nun meine Frage! In dem Schaltplan von "Mehr Spaß mit Asuro" ist VCC12 geschrieben! Was ist damit gemeint? Ich habe schon jede Leiterbahn mit V+1 und V+2 verbunden. Flashe ich nun das Ultraschall-Beispielprogramm, dann tut sich nichts...
Wie schon gefragt, was ist mit VCC12 gemeint
damaltor
02.01.2008, 18:49
vielleicht ist der grund, dass nichts passiert ja dass du jede leiterbahn mit v+1 und v+2 verbunden hast... :D
erstmal willkommen im forum. v+1 und v+2 sind spannungsanschlüsse, welche über einen kleinen widerstand laufen. ich vermute mit vcc12 sind genau diese punkte gemeint.
braendieman
02.01.2008, 18:56
](*,) Ja schade blöd ausgedrückt! Natürlich hab ich nich JEDE Leiterbahn damit verbunden! Also auf jeden Fall verwirrt mich im Schaltplan der Ausdruck VCC12, ich finde ihn sonst nirgendwo im Buch wieder! Ich hatte bisher gedacht, damit sind die Pins, die eh zusammen sind V+1 und V+2 gemeint. Aber wenn ich die Bilder der Erweiterungsplatine angucke, dann finde ich keine Leiterbahn, die dorthinführt...
linux_80
02.01.2008, 19:14
Hallo,
Du meinst sicher VCC/2 ! :-k
Davon gibt es zwei, einmal in der oberen Hälfte des Schaltplans, einmal in der unteren, diese beiden gehören einfach zusammen.
braendieman
02.01.2008, 23:29
Ja genau die mein ich! Aber drei gibs davon! Einmal unten rechts, dann mittig rechts und dann noch mal mittig mittig! An welchen Pin sollen diese denn gelötet werden? Hab sie momentan an V+1 und V+2, die ja zusammengehören, aber ist das der richtige Pin, weil die Schaltung funzt ja nicht wirklich? Es sei denn, da ist noch ein anderer Fehler drin! Danke für die bisherigen Antworten!
linux_80
02.01.2008, 23:49
Diese beiden VCC/2 gehören nur zusammen, sonst nix !
Wenn die an V+1 oder V+2 gehören würden, würde da auch eine Linie hingehen, tut es aber nicht, die sind unbenutzt !
braendieman
03.01.2008, 12:52
Gut, dann hab ich das schonmal falsch ](*,)
Das heißt also, dass ich die einfach an VCC(also Out+) hängen muss?
.
Oder wo gehören die drei nun hin?
Sorry falls ich hier total blöde Fragen stelle, aber ich hab meinen Schaltplan nach meinen Vorstellungen auf die Platine gebracht und nicht nach nem Modell..
linux_80
03.01.2008, 16:20
Nun zum dritten mal:
Warum drei, da sind nur zwei !
VCC ist was andres als VCC/2 !
Du sollst einfach nur die beiden VCC/2 miteinander verbinden sonstüberhauptgarnirgendswohin mit diesen beiden Leitungen !
VCC ist VCC, die landen an Out+
#-o
braendieman
05.03.2008, 14:11
Hallo! Habe da noch Fragen zu Funktion der Schaltung!
Ich stelle erstmal die Funktion so dar, wie ich sie verstanden habe, also berichtigt mich, wenn ich da Falsch liege!
1. Wird ein Ultraschallsignal über den Timer 2 an OC2 mit 40Khz ausgegeben. Eine Wechselspannung von maximal 5 Volt liegt dort an, also einer Wechselspannungsamplitude von 2,5 Volt. Dabei wird der Kondensator vom RC-Glied voll aufgeladen.
2.Dann wird der Timer 2 abgeschaltet und es wird gemessen. Dabei fällt die Spannung des RC- Gliedes über den Widerstand ab und zwar exponentiell. Diese Spannung wird von PD6 gemessen und über den Komperator (Frage: wo sitzt der eigentlich?) mit dem Empfangssignal vom Ultraschall an ADC2 verglichen.
3.Wenn dieser Wert übereinander stimmt, dann ist wohl ein Ultraschallecho zurückgekommen oder?
Was ist eigentlich mit den zwei Komperatoren auf der Platine, die vom IC. Der eine dient als Operationsverstärker mit Trimmer und der andere?
Danke braendieman
braendieman
12.05.2008, 21:26
Hallo! Muss bald meine Facharbeit vorführen und da wollte ich das Thema elektonische Funktion der US- Erweiterung nochmal "aufmischen"
Kann mir vielleicht eine die genaue Funktionsweise der Schaltung erklären?
Danke braendieman
demagoge
16.05.2008, 11:10
... mir gehts da ziemlich ähnlich
ich verstehe die schaltung auch nicht und muss in 2 wochen meine seminararbeit für die schule darüber abgeben (zum glück kapieren das meine lehrer aber auch kaum)
...
jetzt hab ich ein problem:
ich hab die platine nach einem plan im asurowiki verlötet:
http://asuro.pytalhost.de/pmwiki/pmwiki.php/Main/UltraschallEntfernungsmesser
.. zwar hab ich mich gewundert über einige kontaktstellen zwischen den daht-bahnen (weil die auf dem schaltplan in "mehr spaß mit dem ASURO" nicht eingezeichnet sind)
da ich aber wie gesagt die schaltung noch nicht verstanden habe und andererseits in "mehr spaß mit dem asuro" die rede von "unisoliertem schaltdraht" ist hab ich mich dann überwunden, einfach mal drauf los zu löten
alles war gut, bis ich auf den link von "luma" (auf s.2) gestoßen bin:
http://arexx.com/arexx.php?cmd=goto&cparam=p_asuro_downloads
-> "bauanleitung für asuro"
hier sind genau die kontaktstellen NICHT durchkontaktiert, über die ich mich schon gewundert hatte (nämlich alle, außer den verbindungen mit us-transmitter q2, die auf meinem plan oben rum laufen)
bitte helft mir
.. muss ich die brücken noch mal aus machen oder ist das von der schaltung her egal
.. ich hab nur noch wenig zeit
vielen dank
demagoge
demagoge
16.05.2008, 11:16
..hab mich vertippt
.. nach dem link zu arexx auf
-> "bauanleitung für asuro ultraschall sensor"
demagoge
16.05.2008, 11:35
noch was:
VCC/2
ist das zwischen R7 und R8
(würde ja sinn machen, weil die zwischen VCC und GND liegen und beide den selben widerstand (10k) haben
... wieso ist das bei luma's plan da kein kontakt
(oder lese ich den plan falsch... wenn bei einer kreuzung zwischen zwei drähten der eine eine bogen über den anderen macht sind die doch nicht verbunden.. das würde aber keinen sinn machen, dann hätte man gleich 20k nehmen können
außerdem ist an dieser stelle in "mehr spaß mit dem asuro" eindeutig ne verbindung mit dem ic bzw C4 eingezeichnet
ums mal in einen satz zu fassen:
ich bin verwirrt
!
braendieman
16.05.2008, 12:51
Aber da ist doch Kontakt oder nicht?
Von R8 geht ein Bein direkt zum Operationsverstärker und bei R7 eins zum Kondensator und dann auf masse, verbunden am andern Kontakt von R8.
Der andere Kontakt von R7 geht dann auf VCC, oben auf der Erweiterungsplatine
Das heißt ja, dass der Strom dazwischen abgegriffen wird....
demagoge
16.05.2008, 16:47
stimmt
der fuß "rechts oben" am ic liegt zwischen R7 und R8 (so ist das auch im plan aus "mehr spaß mit dem asuro" eingezeichnet.
was genau ist denn dann VCC/2?
(ich hatte gedacht das wäre die halbe spannung von VCC, dashalb die annahme, das müsste zwischen R7 und R8 sein)
.. vom ic gehen laut "mehr spaß mit dem asuro" 3 füße auf VCC/2
in limas plan sind 3 füße miteinander verbunden und gehen unter C4 durch nach PD6
das könnte dann ja VCC/2 sein
ist VCC/2 dann einfach die 2. stromversorgung
.. könntet hr mir n crashkurs geben welche funktion welches füßchen des operationsverstärkers hat?
braendieman
17.05.2008, 01:19
Ja ich glaube son Crashkurs bräuchte ich auch mal! Also vom Prinzip her wird die Schaltung ja im Buch "Mehr Spaß für den Asuro" beschrieben, aber nicht detailliert und wenn man dann auf den Schaltplan eingeht ist man hilflos überfordert.... Obwohl er wahrscheinlich eigentlich sehr einfach ist.
demagoge
18.05.2008, 19:31
hallo braendieman
(bzw. die anderen natürlich auch)
.. so wie es scheint interessiert sich grad niemand für unsere frage
... ich hab mich mittlerweie einigermaßen damit abgefunden, dass ich nur so grob weiß, welche funktionen die bauteile haben (-> nur so viel wie in "mehr spaß mit dem ASURO")
... da ich auf n allgemeinbildendes gymnasium geh hab ich aber auch überhaupt keine ahnung, was in dem dazugehörigen programm passiert
(die einzige zeile, die ich kapiere ist die mit "//port d pin 6 is input" und ich kann das main lesen, verstehs aber nicht)
hast du das programm verstanden?
könntest du s mir erklären?
(es würd auch reichen 2 einleitende sätze und dann nur das main zu erklären)
danke
linux_80
18.05.2008, 21:45
Hallo ihr beiden,
habt ich auch schon mal die Suche angeworfen, evtl. auch per Google nur auf dieser Domain suchen lassen ?
Denn es gibt schone in paar ältere Threads, in denen das diskutiert wurde, von Leuten die sowas selbstgebaut haben !
demagoge
18.05.2008, 23:06
ja, also ganz faul war ich bisher nicht
.. mir fehlen nur viele grundlagen, um die artikel, die ich bisher gefunden habe zu verstehen
(z.b. henkessoft.de)
.. also im bezug auf das programm und die schaltung
wenn du gerade ein paar links parat hast bin ich dir sehr dankbar
.. ich denke, dass problem ist, dass der asuro schon ein bisschen älter ist und die grundlagendiskussionen deshalb vor längerer zeit statt gefunden haben
aktuelles findet man hauptsächlich details
(hab ich den eindruck)
demagoge
19.05.2008, 00:00
@braendieman
... das könnte dir helfen
http://www.mikrocontroller.net/articles/Entfernungsmessung_mit_Ultraschall
.. ganz kapiert hab ichs den schaltplan damit noch nicht, ganz zu schweigen vom programm
linux_80
19.05.2008, 02:44
Suchen meinte ich hier im Forum, oder im Wiki:
https://www.roboternetz.de/wissen/index.php/Ultraschall_Interface
dann auch den Link wieder zurück ins Forum.
Hi,
mal eine ganz dumme Frage, ich bin über das Asuro Wiki hergekommen, stellt die Platine ein analoges oder digitales Signal zur Verfügung?
Oder liefert sie überhaupt nur High/Low?
Ist nämlich kein Schaltplan oder sonst eine gute Erklärung im web zu finden.
Lg,
Nils
Den US modul hat 2 analoge ausgangen. Einer ist das verstarktes US signal (am ADC3 pin). Das andere ist den spannung eines leerlaufende RC glied (paralel wiederstand-kondensator, am PD6 pin). Das ist weil echos von kurze distanz starker sind wie echos weiter weg. Beiden signalen kan man an einer eingangen der internen (atmega8) comparator schalten. Wenn das verstarktes US signal grosser ist wie den spannung uber das RC glied soll es einer schwaches echo detectiert haben. Also 'das digitale signal' ist nur mit hilfe den atmega chip selbst und den comparator interupt.
P.S. Das schaltbild und der weitere erklarung steht im buch "Mehr Spass mit Asuro, band 1". Aber habe den schaltbild auch in dem USmodul-kit von Conrad bekommen.
Hier gibts den bauanleitung auf dem Arexx site:
http://www.arexx.com/arexx.php?cmd=goto&cparam=p_asuro_downloads.dat
Hier ist ein schaltbild (am ende), aber ohne den werten der bauteilen. Aber das prinzip der wirkung kan man dammit verstehen.
http://www.henkessoft.de/Roboter/ASURO.htm
Danke für die ausfürhliche Antwort :-)
Mfg,
Nils
den plan gibts auch bei http://www.arexx.com/ als download mit bauanleitung!!!!!
gruß josua
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.