PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gleich zwei Fragen!! Ihr müsst mir weiterhelfen



hunni
15.04.2008, 20:58
Hallo zusammen,
ich bin fast am verzweifeln. Könnt ihr mir sagen, wie ich unter bascom eine Uhr einbinde. ich habe mir das zwar durchgelesen, aber ihrgendwie komme ich nicht mit den befehlen klar. Ich möchte nämlich einen entfernungsmesser bauen, der auf ultraschallsensoren basiert. nun muss ich doch messen, wie viel zeit der schall doch gebraucht hat. mit der echtzeituhr komme ich nicht klar.
Dann habe ich noch eine zweite frage. Ich möchte gerne ausgerechnete ergebnisse oder variablen gerne speichern, am besten auf einer sd karte, oder auf dem avr selber. wie mache ich das? Ich kenne das nur so vom c64, dass man einfach seine speicheradresse angegeben hat und gut (save 8,1 zum beispiel wo 8 die geräteadresse und 1 der track auf der diskette darstellt). Geht das auch so einfach beim avr. ich möchte die daten hinterher auch noch abrufen können.

Ich bedanke mich schon mal in voraus.
Hunni O:)

python_rocks
15.04.2008, 23:43
ultraschallsensoren basiert. nun muss ich doch messen, wie viel zeit der schall doch gebraucht hat.
[...]
Ich möchte gerne ausgerechnete ergebnisse oder variablen gerne speichern
Hallo Hunni!

Die Echtzeituhr arbeitet nur im Sekundentakt. Zum Messen von Entfernungen kannst du das vergessen. Nimm lieber schnellen und genauen Quarz. Du kannst die Zeit die vergeht mit einem der eingebauten Timer stoppen.

Viele AVRs haben einen EEPROM eingebaut. Auf diesem kannst du Daten speichern. Welchen µC setzt du ein? Mit wievielen Daten in welchem Zeitraum rechnest du?

mfg
Gerold
:-)

hunni
16.04.2008, 14:46
also ich wollte es mit einem atmega 8 probieren.
das mit dem timer hört sich gut an. ich wollte das in ungefähr so machen:
(nur das grundporgramm)

$regfile = "m8def.dat"
$crystal = 4000000

Config Portb.0 = Output
Config Portb.1 = Input

Do
Portb.0 = 1
'dann soll hier der Timer das Messen
If Portb.1 = 1 Then 'hier soll er stoppen und mir das ergebnis anzeigen

end

Ist meine Überlegung soweit richtig?


Wie speicher ich das den dann ab, kannst du mir dafür den befehl sagen?

hunni

python_rocks
16.04.2008, 15:00
Zwischenfrage: Wie lange kann es dauern, bis du ein Signal zurück bekommst?


PS: ``WRITEEEPROM`` schreibt Daten in den eingebauten EEPROM.


PS2:
- https://www.roboternetz.de/wissen/index.php/Ultraschall_Interface
- https://www.roboternetz.de/wissen/index.php/Ultraschall_SRF05_an_RN-MiniControl
- https://www.roboternetz.de/wissen/index.php/Ultraschall_SRF10_an_RN-Control
- https://www.roboternetz.de/wissen/index.php/Sensorarten#Ultraschall_Sensoren
- https://www.roboternetz.de/wissen/index.php/Navigation#1._Akustische_Abtastung

.

Jon
16.04.2008, 15:01
Wie lange ist denn das Signal? Vielleicht reicht ja der Pulsein Befehl.

jon

hunni
16.04.2008, 16:12
also ich habe zwei ultraschallsensoren, ein sender und einen empfänger.
um jetzt z.b. eine entfernung zu messen nehme ich mir einen gegenstand und lege genau in einer entfernung von einem meter den ultraschallmesser hin.Jetzt kommt der timer ins spiel:
man misst ganz einfach ab den zeitpunkt, wo man eine kleine spannung am sender anlegt und hört dann auf, wenn am empfänger eine kleine spannung anliegt. soweit konnte ich mir das alleine denken, jetzt brauche ich nur den befehl für den timer.
Aber die seite die mir python_rocks gegeben hat erklärt das ganz gut.
nur das mit dem abspeicher n ist mir jetzt noch nicht so ganz klar.

digitali
16.04.2008, 20:33
Hallo,

das ganze ist ueberhaupt nicht schwer und tut auch nicht weh.
Die Erde ist naemlich eine grosse Gooogle. Und auf dieser befindet sich z.B. diese Seite: http://www.icplan.de/seite11.htm

Bei der Angelika (http://www.reichelt.de/) gibt es dazu guenstig die Zutaten. Der Rest ist dann nur noch lesen, verstehen und das Ganze irgendwie umsetzen.

So, und wie haekelt man die Weichware unter Bascom zurecht? Ganz einfach. Man schaue sich die Schaltung an. Dort sieht man das der US-Sender einfach mittels eines Ports aktiviert wird. Dieser bruellt nun unhoerbar los und der Empfaenger empfaengt irgendwann mal was. Das Empfangene wird in dem LM393 aufbereitet und steht am Kollektor des BC547 als Schaltsignal zur Verfuegung.

In der Software wird zunaechst der US-Sender eingeschaltet und zugleich Timer0 gestartet. Hier inkrementiere ich mit jedem Timerdurchlauf eine Variable (voll total simpel). Sobald nun das Schaltsignal vom US-Empfaenger kommt, wird beim AVR ein Interrupt ausgeloest. In der Int0_isr wird dann sofort der Timer0 gestoppt und der US-Sender ausgeschaltet (noch simpler). Als naechstes wird der Wert der hochgezaehlten Variable entsprechend umgerechnet (man macht zuvor ein paar Probemessungen und berechnet den Faktor aufgrund einiger definierter Abstaende und der hochgezaehlten Variablenwerte).
Die dann ausgerechnete Laengenangabe in Zentimeter wird nun auf ein LC-Display zur Anzeige gebracht. Das Ganze geschieht zyklisch alle 500ms.

Funktioniert uebrigens wunderbar.

Das ganze war mit googlen, zusammenbruzzeln und Software stricken innerhalb von 4 Stunden erledigt. Und das ohne tagelange Fragerei im Forum. ;)

Ein paar Bilderchen:
http://www.elektronik-web.de/atmel/us/

Die Weichware:


$regfile = "m128def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 16
$framesize = 40

Config Pinc.6 = Output
Config Pind.1 = Output
Config Pind.0 = Input
Config Int0 = Falling
Config Timer0 = Timer , Prescale = 1
Config Graphlcd = 240 * 64 , Dataport = Porta , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6
On Timer0 Timer0_isr
On Int0 Int0_isr
Enable Timer0
Enable Int0
Enable Interrupts
Stop Timer0

Dim Us As Long
Dim Cm As Single
Dim Scm As String * 10
Us_tm Alias Portd.1
Us_tm = 1
Bl Alias Portc.6
Bl = 1
Us = 0

Cursor Off
Cls

Locate 1 , 1
Lcd "Abstandsmessung mit"
Locate 2 , 1
Lcd "Ultraschall"
Start Timer0
Us_tm = 0

Do
Us_tm = 0 'US-Transmitter An
Start Timer0
Waitms 500

Cm = Us / 3.91
If Cm > 500 Then Scm = "--"
Scm = Fusing(cm , "#.#")

Locate 5 , 10
Lcd Scm ; " cm "
Locate 10 , 10
Lcd Us ; " "
Us = 0

Loop

End

Timer0_isr:
Incr Us
Return

Int0_isr:
Stop Timer0
Us_tm = 1 'US-Transmitter Aus


Und btw: Wenn Du im Betreff dieses Fred's etwas gehaltvolleres wie z.B. "Problem mit Ultraschallabstandsmessung" geschrieben haettest, wuerde dieser Thread sicherlich mehr Beachtung finden. Somit erhoehen sich die Chancen auf Antworten.

Mit freundlichen Gruessen
Digitali

hunni
16.04.2008, 20:53
ich gebs auf, jetzt versteh ich die welt nicht mehr, was war an meiner behauptung so falsch. egal ich werd mir ihrgendetwas anderes einfallen lassen müssen, da ich jetzt nix mehr verstehe.
Bin woll doch noch zu sehr auf Commodore 64 getrimmt. :-s :-s
hunni

hunni
16.04.2008, 21:06
P.S. trotzeem danke für eure antworten und mühen mir das klar zu machen, aber jetzt zweifel ich an meinen Programmiererischen fähigkeiten.
Ich glaub ds wird mir zu komliziert. Ich wollte mir eigentlich folgendes bauen:

Ich wollte den Distanzsensor in mein Modellflugzeug einbauen und gucken, wie hoch ich komme. Diese Werte wollte ich dann speichern.

NUR ICH VERSTEH ES NICHT!!!

Ich komm da nicht mit, einige befehle habe ich in meiner Basic zeit noch nie benutzt.

Trotzdem noch mal danke für eure mühen, aber ich lass es jetzt lieber bleiben.

Aber das mit dem Epromm versteh ich jetzt. :)

hunni
16.04.2008, 22:02
Es ist jetzt 10:00 und ich konnte einfach nicht locker lassen und jetzt habe ich es verstanden!!! Ich habe mir das alles noch 3 mal durchgelesen und am symolator aufprobiert und jetzt kann ich es!!!
Vielen dank
Hunni

tobiastob
16.04.2008, 22:05
Hallo Hunni,

vielleicht kann dir das hier http://books.google.com/books?id=4K6ZEzju6u4C&printsec=frontcover&hl=de&sig=mVSAgEOPRy3Z4ATbQc92nXiVUUA&source=gbs_ViewAPI
ja beim Verständnis helfen. Da werden die Befehle genauer erklärt.
Wird schon werden ;)

Viele Grüße
tob