www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik Ultraschallsensor per TWI (I²C) abfragen mit 8051 / Assembler

Autor: F. M. (timmee-sp)
Datum:
Angehängte Dateien:

Mahlzeit!

Ich benutze für ein Studienprojekt einen Atmel AT89C5131.
Programmiersprache ist Assembler. Welcher kann ich nicht sagen. Aussage
des Dozenten: "Assembler, 8051 kompatibel" Ich habe mal eine
Befehlsliste angehängt, die vielleicht etwas Licht ins Dunkel bringt.

Nun möchte ich einen Ultraschallsensor (SRF02) per TWI abfragen. Leider
habe ich keinen Schimmer von TWI und bin auch allgemein ein Anfänger was
µC und deren Programmierung betrifft.

Kann mir jemand die Sache etwas näherbringen? Bitte postet keine
Beispiele die "so ähnlich" sind, das hilft mir leider nicht. Hab mir
schon ne menge Programme angesehen, werde daraus aber nicht schlau, da
es sich entweder um eine falsche Programmiersprache handelte oder das
Beschreiben eines Eproms oder die Kommunikation zwischen zwei
Controllern. Ich möchte den Sensor ansprechen und von ihm Daten
erhalten. Was TWI ist und wie es grundsätzlich funktioniert ist mir
klar, "nur" an der Programmierung scheitert es.

Mit dieser TWI-Geschichte steht und fällt unser Projekt, wäre daher für
hilfe mehr als Dankbar.


Alternative zum I-Net:
Kennt sich vielleicht jemand damit aus und wäre bereit mir und meinem
Kollegen die Sache an einem Nachmittag persönlich etwas näher zu
bringen? Wir wohnen im Raum Hannover und würden ca 2 Stunden Fahrt auf
uns nehmen. Der Unterricht sollte auch nicht umsonst sein Wink

Danke und Gruß

Timmee
Autor: Lothar Miller (lkmiller) Benutzerseite
Datum:

Du wirst also das I2C Protokoll in 8051-Assembler abbilden müssen. Das
ist nicht allzu schwierig.
Allerdings ist das, wie wenn einer sagt: "Fahr mal mit dem Fahrrad
Slalom um die Hütchen dort". Nicht weiters schwer, wenn man Fahrrad
fahren kann. Schwieriger wirds, wenn man erst noch Fahrrad fahren lernen
muß :-/

> Leider habe ich keinen Schimmer von TWI
Wie gesagt: nicht weiter schwer...
> bin auch allgemein ein Anfänger was µC und deren Programmierung betrifft.
...das macht die Sache allerdings anspruchsvoll :-o
> an einem Nachmittag
Ab hier wirds unmöglich. Da hast du m.E. allerdings irgendwie falsche
Vorstellungen zum Thema.
> für ein Studienprojekt
Wieviel Zeit hast du, bis die Arbeit abgeliefert sein muß?

> Ich möchte den Sensor ansprechen und von ihm Daten erhalten.
Und dann? Ab damit in die Tonne?
Autor: F. M. (timmee-sp)
Datum:

> Wieviel Zeit hast du, bis die Arbeit abgeliefert sein muß?
Abgeliefert sein muss das Teil am 2.09.09


> Und dann? Ab damit in die Tonne?
Natürlich nicht ;-) Wir bauen ein autonom fahrendes RC-Car und nutzen
den Ultraschallsensor zur Hinderniserkennung. D.h. der die Daten des
Sensors sollen im einem Register abgelegt werden, welches wir dann im
weiteren Programm abfragen und das auto entsprechen langsamer fahren
lassen oder eben anhalten.


Das Fahrzeug ist nahezu komplett, also ist hier nicht mehr viel Aufwand
nötig. Es scheitert "nur" an der Programmierung, bzw an der
TWI-Geschichte. Wie die gewonnenen Daten dann weiter verarbeitet werden
ist dann nicht mehr das Problem.
Autor: Walter (Gast)
Datum:

Hallo Florian,

Du hast die Frage ja schon mal am 12.6. gestellt
Beitrag "TWI mit AT89C5131 / 8051". Da war es zwar ein
Infrarotsensor, das Prinzip ist aber sicher gleich. Und der Meister
persöhnlich (Peter Dannegger) hat Dir geantwortet und auch Beispielcode
in C mitgeschickt, denn von Assembler war in der ersten Anfrage noch
keine Rede. Im Elektronik-Projekt-Forum
(http://www.elektronik-projekt.de/thread.php?postid=54075) und im
Roboternetz (http://www.roboternetz.de/phpBB2/viewtopic.php?t=48602)
findet man die gleichen Anfragen (gegoogled). Dabei habe ich auch das
gefunden:
http://www.atmel.com/dyn/products/tools_card.asp?t...

Mit Beispielen in C und in Assembler. Selbst der Source steht zum
Download bereit. Als Student sollte man das aber allein finden können.

Walter.
Autor: F. M. (timmee-sp)
Datum:

Das stimmt, allerdingas habe ich die Fragen da auch etwas
unqaulifizierter gestellt als dieses mal, deswegen habe ich nochmals
einen Thread aufgemacht. Das TWI-Beispiel von Atmel habe ich schon vor
der ersten Fragestellung gehabt, allerdings bin ich daraus nicht schlau
geworden. Und ja, ich habe auch dieses Thema in einem andren Forum
gepostet .. nach dem Motto "viel hilft viel" ;) Und ich habe, auf
Hinweis des Meisters, DIESES Thema eröffnet! ;-)

In dem ATNEL-Beispiel wird eine Include-Datei verwendet, mit der ich
absolut nichts anfangen kann, ich habe ansatzweise versucht den Code an
zu passen, woran ich aber grandios gescheitert bin.

Was genau beinhaltet diese Datei?
Ist sie zwangsläufig erforderlich oder geht es auch ohne?
Autor: Walter (Gast)
Datum:

Die Include-Datei ist nicht zwingend erforderlich, erleichtert aber das
Arbeiten. Beispiel:

Auszug aus reg_C51.inc:

...

; TWI
PI2  DATA    0F8h
SSCON  DATA  093H
SSCS  DATA  094H

...

;--- IEN0 Bits -----
EA     BIT  0AFH
...

IEN1  DATA  0B1H


Auszug aus twi.a51:

...
ORL SSCON,#40h;                     /* enable TWI */
SETB EA;                            /* interrupt enable */
ORL IEN1,#02h;                      /* enable TWI interrupt */
...

Wenn Du nun auf die reg_C51.inc verzichten willst, müsste das Programm
in den drei Zeilen:

ORL 093H,#40h;
SETB 0AFH;
ORL 0B1H,#02h;

sprich: das Programm ist für den Menschen vorher leichter lesbar. dem
Assembler oder Compiler ist es egal, ob Du SSCON oder 093H schreibst. Du
musst dem Assembler oder Compiler halt nur vorher erzählen, was SSCON
ist und dazu bindest Du reg_C51.inc ein. Du tipps doch auch lieber
www.mikrocontroller.net anstatt 188.40.52.210 ein. Ersteres lässt sich
für den Menschen besser merken.

Walter.
Autor: F. M. (timmee-sp)
Datum:

Habe ich das dann jetzt richtig verstanden, dass in der Include-D. quasi
nur eine "Variablendeklaration" passiert?

Ist eine spezielle Syntax erforderlich, sprich: sind gewisse angaben
unbedingt erforderlich, oder kann ich die Include nach "Belieben"
konfigurieren?

Ich habe die aus dem ATMEL-Beispiel (wie den Source-Code auch) aus dem
PDF in eine .inc (bzw. .a51) geschrieben. Hier kamen auch wiederum
Befehle vor, die mir die meisten nicht geläufig waren. Gibt es für die
.inc einen speziellen (erweiterten) Befehlssatz oder werden hier die
gleichen Befehle wie für den restlichen SC verwendet?
Autor: F. M. (timmee-sp)
Datum:
Angehängte Dateien:

So, ich habe mich nochmal ein bisschen schlauer gemacht und auch schon
diverse Idnge versucht um den Sensor zum Laufen zu bekommen .. leider
immernoch erfolglos. Ich habe das Beispielprogramm von Atmel
(beschreiben eines EPROMs) genommen und versucht es an zu passen. Was
mir jedoch maximal gelingt ist, den ersten Programmblock zu senden, Also
die Adresse des Sensors und das Register 0. Im nächsten Schritt will ich
dann wieder die adresse senden und den Befehl (0x51 - Messung in cm)
senden .. doch dazu kommt es leider nicht. Überprüft habe ich das mit
einem Oszilloskop. kann mir jemand ein Wenig auf die Sprünge helfen?

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net