-         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: US-Sensor, Pinbelegung und Ansteuerung über ATMega8

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    13.08.2007
    Beiträge
    13

    US-Sensor, Pinbelegung und Ansteuerung über ATMega8

    Anzeige

    Hallo leute,
    zunächst vornweg, ich bin leider (noch) kein Asuro besitzer.
    Derzeit versuche ich mich einfach an der Messdatenauswertung eines Ultraschallsensors über einen ATMega8 Microcontroller. Diese soll er dann auf einem LCD ausgeben. Das LCD funktioniert bereits.

    Nun habe ich nach der Anleitung von Arexx dieses hübsche Ultraschallmodul gelötet. Dummerweise ist mir erst im Nachhinein aufgefallen, dass ich mit der Pinbelegung nicht viel anfangen kann.

    Könnte mir jemand das Prinzip dahinter erklären? Ich werde daraus nciht schlau - zumal ich keine Plände für den Asuro habe...

    Soweit bin ich:
    CON 1 geht beim Mega8 auf OC2 also PIN17
    CON 2 geht beim Mega8 auf INT0 also PIN 4

    was ist mit den anderen Anschlüssen? Ich bin absolut unsicher wo ich zum Beispiel den Strom draufgeben muss... Nach stöberei in euren Wikis bin ich der Meinung, dass Out+ und Out- sich auf die Ausgänge des Asuro beziehen und daher tatsächlich für die US Anlage der Eingang ist. Also habe ich da Vcc (5V) und Masse meines AVR angelötet.

    Wie verfahre ich mit den anderen pins? Voher waren ja Dioden im Asuro eingesetzt, also ist es wahrscheinlich unzweckmäßig, wenn an den Verbindungen überall Steuerleitungen zum mega8 anliegen. Ich schätze das bei den pins noch irgendwo masse und VCC anliegen muss, bin aber unsicher.

    Aus dem Schaltplan geht auch hervor, dass V+1 und V+2 auf dem Ultraschallmodul verbunden sind. Was verbrigt sich tatsächlich dahinter? Ist das nochmal eine 5V Versorgungsspannung oder sind es Datenleitungen zum avr?

    Interessant wäre auch, gibt es einen Unterschied zwischen V+ und Vcc? Oder kann ich da einfach 5V anlegen?

    Vielleicht mag mir einer von euch helfen.

    Grüße
    Karmek

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    32
    Beiträge
    3.991
    out+ und out- ist ein direkter anschluss an die batterie. vcc ist also fein.

    welche pins brauchst du noch? vorher war nur eine diode eingesetzt, die beiden anderen teile sind fototransistoren.

    die beiden anderen V+... sind über einen widerstand mit vcc vernunden. man könte hier eine spannungsversorgung nehmen, oder ein pullup signal abgreifen.

    auch vcc anzuschliessen sollte jedoch möglich sein.
    kleinschreibung ist cool!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    13.08.2007
    Beiträge
    13
    Hi, ich habe nun folgendes gemacht:

    Out+ and 5V
    Out- auf Masse
    V+1 nicht angeschlossen
    V+2 nicht angeschlossen
    ADC3 an freien ADC3 Eingang des mega8
    INT0 nicht angeschlossen
    PD6 an freien Port PB4 des mega8 (Port D ist koplett für mein LCD Display belegt)
    RGND nicht angeschlossen, da Masse bereits über Out- vorhanden
    OC2 an freien OC2 (PB3) eingang des mega8
    ADC2 nicht angeschlossen

    Meinst du, dass könnte so funktionieren?
    Die jeweils nicht angeschlossenen Kontakte decken sich (aus meiner Sicht) mit den Schaltplänen, wäre aber gut wenn das nochmal jemand kontrollieren könnte. Ich hab jedenfalls nirgendwo Abgriffe an der Platine sehen können.

    Mein nächstes Problem ist nun eine entsprechende lib anzupassen. Habe mir hier aus dem Forum eine Version von dopez gezogen:
    https://www.roboternetz.de/phpBB2/ze...10907&start=66

    Sah eigentlich erstmal gar nicht so schlecht aus. Habe mir aus den Programmdateien die Schnipsel der Funktionen zur Initialisierung und zur Abstandsmessung in mein Programm kopiert.
    Bei der Initialisierung habe ich folgende Zeile
    Code:
    	DDRD  &= ~(1 << 6);  // Port D Pin 6 als Eingang schalten (AIN0)
    in diese verändert:
    Code:
    	DDRB  &= ~(1 << 4);
    damit entsprechend mein gnutzter Pin als Eingang verwendet wird.

    Im folgenden viel mir auf, dass ich dadurch, dass ich keine libasuro verwende, auch nicht die Variable count36khz besitze. Daher meckert nun der Compiler

    Jemand eine Idee? Könnt Ihr mir verraten wie ich die Variable initialisieren muss, damit das ganze funktioniert?

    Grüße und danke schonmal

    Karmek

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    32
    Beiträge
    3.991
    diese variable wird von einem timer-interrupt 36000 mal pro sekunde um 1 erhöht. du musst also eine interruptroutine erstellen, die mit dieser geschwindigkeit die GLOBALE variable erhöht.
    kleinschreibung ist cool!

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    13.08.2007
    Beiträge
    13
    Okay das ist doch schonmal was.
    Könntest du mir da vielleicht die Vorlage vom asuro posten oder per pm schicken? Ich bin nicht sicher wie sowas asuzusehen hat.
    Verstehe ich das richtig, dass dieser "Zähler" dann permanent im Hintergrund laufen muss?

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    32
    Beiträge
    3.991
    der zähler ist in der hardware des prozessors integriert. er zählt automatisch, unabhängig vom laufenden programm, mit einer bestimmten, vom systemtakt abhängigen eigenen takt bis zu einem bestimmten wert, und löst immer wenn der wert erreicht wurde, einen interrupt aus. in der programmierung muss bei jedem interrupt des zählers die variable um 1 erhöht wird. wie du die counter ansprichst, musst du in deinem datenblatt zum prozessor herausfinden.
    kleinschreibung ist cool!

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    13.08.2007
    Beiträge
    13
    Danke für die Information!
    Ich habe mich eben ein wenig eingelesen und habe nun den Grundgedanken verstanden.
    Mein Quarz arbeitet mit 3.6864 MHz, das ermöglicht meinem AVR also 3686400 Taktzyklen in der Sekunde. Wenn ich also jedes mal den Zähler incrementiere, habe ich 3686400/256=14400 Overflows pro Sekunde.
    Mit entsprechenden Vorteilern (zB. 1024) lässt sich dann das ganze weiter anpassen, sodass ich über Interrupts dann bei jedem Overflow einen speziellen Programmcode ausführen könnte.

    Stimmen diese Überlegungen so?

    Da es mittlerweile recht spät ist, werde ich mir da evtl mal morgen weiter Gedanken machen.

    Grüße
    Karmek

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    13.08.2007
    Beiträge
    13
    Ok, habe mir grade nochmal den Titel meines Posts durchgelesen und das passt ja mittlerweile gar nicht mehr. Ich werde u.U. einen seperaten Post dafür aufmachen. Danke für die Hilfe

    Um mal zum Thema zurückzukommen, eine abschließende Frage habe ich da noch:
    Welcher Pin am US-Modul dient als eingang und welcher als Ausgang?
    Achja und wofür ist dann der 3. Pin?

    Grüße
    Karmek

  9. #9
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    32
    Beiträge
    3.991
    ändere lieber den titel...

    dazu musst du deinen ersten beitrag editieren.

    leider habe ich kein US-modul, und kann deshalb auch nicht weiterhelfen.

    mit den timern ist soweit alles richtig, der vorteiler 1024 jedoch erzeugt ein problem:

    3686400 / 1024 = 3.600

    also 3,6 khz und NICHT 36 khz. also schön aufpassen...
    evtl könnte man, auf kosten der genauigkeit, die variable mit 3,6 hz um 10 erhöhen. allerdings gibt es ein risiko: bei bestimmten werten könnte es durch einen überlauf der vriable zu endlosshleife kommen.
    kleinschreibung ist cool!

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    13.08.2007
    Beiträge
    13
    Hast du bei deiner Berechnung nicht das Fassungsvolumen der Register vergessen?
    Ich habe das so verstanden, dass ich zB. 3686400 / 1024 = 3.600 errechne und anschließend das Ergebnis durch 256 teile. Das Ergebnis sollten dann die Register- Overflows pro Sekunde sein, in dem Fall also 14,0625. Bei einem Overflow würde ich doch jetzt den Zähler incrementieren, oder wird das direkt bei jedem Systemtakt getan?

    Unter http://www.arexx.com/downloads/asuro/us_bauplan.zip findet man die Bauanleitung für den US-Sensor nach der ich vorgegangen bin. Vielleicht kann ja jemand mit etwas mehr Erfahrung als ich den Sinn und Zweck der Anschlüsse aus dem Schaltplan entnehmen.
    Einen anderen Schaltplan findet man im asurowiki unter http://www.asurowiki.de/pmwiki/pmwik...fernungsmesser

    Grüße
    Dennis

    EDIT:
    Anscheinend wird der Zähler tatsächlich synchron zum Systemtakt incrementiert. Die Anzahl der Overflows pro Sekunde ist wohl nur wichtig, wenn man bei einem Overflow zB. einen Interrupt auslößt um darüber zB. Ports auf Hi oder Lo zu schalten. Korrigiert mich, falls ich mich irre.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •