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


von Florian M. (timmee-sp)


Angehängte Dateien:

Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

von Florian M. (timmee-sp)


Lesenswert?

> 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.

von Walter (Gast)


Lesenswert?

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?tool_id=3421

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.

von Florian M. (timmee-sp)


Lesenswert?

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?

von Walter (Gast)


Lesenswert?

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.

von Florian M. (timmee-sp)


Lesenswert?

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?

von Florian M. (timmee-sp)


Angehängte Dateien:

Lesenswert?

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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.