mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Über Mikrocontroller Beschleunigungssensor auslesen


Autor: Protoss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Vorab: Bin blutiger Anfänger mit MCs.
ich möchte über einen AtMega168 Daten aus einem Beschleunigungssensor 
auslesen. Hierzu habe ich Bit4 und Bit5 von PortC auf Eingang 
geschalten. Bit4 ist mit den Daten verbunden und Bit5 mit dem Clock des 
Sensors. Die Daten des Sensors befinden sich in dessen Register (z.B. 
06h Bit0). Wie komme ich von diesem Bit am Mikrocontroller an das 
Register und die Daten des Sensors?

So hatte ich mal angefangen...
DDRC &= ~( ( 1 << DDC4 ) | ( 1<<DDC5) );
uint8_t bPortC;
bPortC = PINC;

Gruß

Autor: Protoss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Update: Ich arbeit mit AVR Studio und C

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher Sensor? Datenblatt?

immer ein kmpl. Programm posten!

Autor: nicht-den-sensor-seher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm,

mach es uns doch einfacher...

1. Was steht an den Pins des ATMega ?
2. Was ist das für ein Sensor ?!
3. Hast Du die Datenblätter ?

...

Diese auch schonmal gelesen ?

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute mal, das war im wesentlichen schon das Programm und das 
Hauptproblem ist die serielle, synchrone Übertragung. Wenn wir Glück 
haben hat der Sensor IIC Bus oder sowas. Da kann er dann eine fertige 
Routine von hier nehmen.

Autor: Protoss (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Beschleunigungssensor: BMA020 von Bosch

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah. Und? Was ist jetzt das Problem?

Autor: Protoss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
natürlich habe ich schon die datenblätter durchgelesen. dadurch weiß ich 
ja, dass sie z.b. das zu lesende register für den x-wert des sensors in 
06h befindet. Jedoch kann ich nicht nachvollziehen, wie ich aus einem 
Bit der MCs aus dem Sensor mehrere Daten bekommen soll...

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also gut:
Du liest ein Bit, dann liest Du das nächste Bit, danach das folgende, 
dann das darauf folgende, dann das nächste und das nächste auch noch, 
dann noch eins und dann das letzte. Das sind dann 8 Bit. Geben ein Byte.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lies Dir mal durch wie der SPI-Bus bzw. IIC (I2C) funktioniert, dann 
wird das klarer.

Autor: Donald S. (protoss85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke ;). Jetzt sind wir wieder am Anfang der Menschheit...

Mein Problem: Was muss man dem Mikrocontroller sagen, dass er mir alle 
Daten aus dem Register des BMA020 ausspuckt (am besten noch in einem 
File)?

PortC Bit4 muss als Eingang deklariert werden!?
Anschließend muss ich ihm sagen, hole mir bitte die Daten aus dem 
RegisterA, dann RegisterB und RegisterC.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yannick Simon schrieb:
> Danke ;). Jetzt sind wir wieder am Anfang der Menschheit...

Tja. Irgendwo muss man anfangen.

Und wenn man neu in eine Materie einsteigt, ja dann fängt man im 
übertragenen Sinne beim Anbegin der Menschheit an.
So ist das nun mal.

> Mein Problem: Was muss man dem Mikrocontroller sagen, dass er mir alle
> Daten aus dem Register des BMA020 ausspuckt (am besten noch in einem
> File)?

Wie ich derartige Redereien hasse. Sie kommen meistens von den Leuten, 
die 0 Ahnung davon haben, wie so eine CPU funktioniert oder worums beim 
Programmieren überhaupt geht.

Autor: sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Datenblatt werden 11 Seiten nur darauf verschwendet, dir zu erklären, 
wie die Daten in deinen uc kommen. (Tipp: Schau mal Kapitel 4 an... ;-)

Autor: Donald S. (protoss85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so ist das wenn man mit einer Materie anfängt. Deshalb habe ich hier 
gehofft auf Antworten zu treffen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yannick Simon schrieb:

> PortC Bit4 muss als Eingang deklariert werden!?
> Anschließend muss ich ihm sagen, hole mir bitte die Daten aus dem
> RegisterA, dann RegisterB und RegisterC.

Fang mal an, das Tutorial hier durchzugehen.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Besser wäre allerdings, wenn du zuvor erst mal 1 oder 2 Monate 
C-Programmierung auf dem PC übst. Die Frustrate ist dort nicht so hoch.

Wenn du dann mit dem Tutorial so einigermassen klar kommst, bist du in 3 
bis 4 Monaten soweit, den Sensor ohne Verwendung einer fertigen Library 
auslesen zu können.

Wenn du fleissig übst, selbstverständlich.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Danke ;). Jetzt sind wir wieder am Anfang der Menschheit...
Genau das wollte ich sagen. Ich bin aber heute auch etwas bissiger als 
Dir angenehm sein kann.

>Mein Problem: Was muss man dem Mikrocontroller sagen, dass er mir alle
>Daten aus dem Register des BMA020 ausspuckt (am besten noch in einem
>File)?

Dein Problem ist, das Dir da in der Mitte zwischen einer Taktleitung, 
einem Datenbit und den Register und "was muss man dem Mikrocontroller 
sagen" eine ganze Menge an kleinen Verständnisschritten fehlt.

Deswegen mein Hinweis Dir mal Dokumente über IIC und SPI durchzulesen.

Das ist nicht eben mal mit zwei Befehlen getan. Wobei gerade die ATmegas 
schon eingebaute Hardware für diese beiden Busse haben. Schau Dir auch 
hier mal die Tutorials an. Da ist glaube ich auch was mit IIC und SPI 
dabei.

Also wenn Du wirklich noch keine Ahnung hast, dann richte Dich auf 
mindesten ein Viertelajahr intensives Hobby ein.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Karl Heinz

>Wie ich derartige Redereien hasse. Sie kommen meistens von den Leuten,
>die 0 Ahnung davon haben, wie so eine CPU funktioniert oder worums beim
>Programmieren überhaupt geht.

Mich erinnert das immer an die Anzeigen in den Fernsehzeitschriften in 
denen Leute die unser Wirtschaftssystem völlig durchblickt haben, 
Methoden zum schnelle Geldverdienen anbieten.
Daher stammt wahrscheinlich auch die Mär, das man keine Ahnung haben 
muss, sondern nur, wo es steht. (oder wen man fragen muss). :-) IM FORUM 
latürnich.

Autor: ms (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Mär ist ja auch korrekt. Man muss nur eben nicht nur wissen WO es 
steht (das ist der leichte Teil) sondern auch wissen WAS man sucht (und 
da setzt es hier im Forum schon oft aus....)

Autor: nicht-den-sensor-seher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nehmt ihn doch nicht gleich auseinander.

In den Haufen den er gesetzt hat, haben wir ihn doch schon mit der Nase 
reingehalten.

Jetzt ist er am Zug, bzw am Lötkolben und Rechner ;)


Lerning By Doing ist jetzt angesagt.

Wenn Du bei einem Speziellen Problem :

1. nicht selbst draufkommst
2. Google,
3. die Forensuche
4. oder die Artikel Dir nicht weiterhelfen

-> Post ein Frage die Du sorgfälltig ausformuliert hast.


Wir entwickeln hier nicht zusammen Deine Projekt,
wir helfen uns "*nur*" gegenseitig.

Autor: Иван S. (ivan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Protoss, hier meine kleinen Gedqanken zu deinem Problem:

Protoss schrieb:
> Vorab: Bin blutiger Anfänger mit MCs.

Das macht grundsätzlich ja nichts, das Problem uC+Beschleunigungssensor 
ist durchaus als Anfangsprojekt adequat.

> ich möchte über einen AtMega168 Daten aus einem Beschleunigungssensor
> auslesen.

Hier fehlen zwei wesentliche Informationen um dir helfen zu können:
a.) Um welchen Beschleunigungssensor handelt es sich
b.) Wie ist jener an den uC angebunden. SPI, I²C, parallel, oder ganz 
anders?

> Hierzu habe ich Bit4 und Bit5 von PortC auf Eingang geschalten.
> Bit4 ist mit den Daten verbunden und Bit5 mit dem Clock des Sensors.

Das könnte SPI sein. Ist "Chip Select" am Sensor richtig beschaltet? 
Bit5 (dein Clock) müsste dann allerdings ein Ausgang sein, da du bei SPI 
nur lesen kannst, wenn gleichzeitig (vom uC aus gesehen) geschrieben 
wird. Ausserdem fehlt dir dann (bei SPI) eine Leitung.

Falls es TWI (I²C) ist: Hast du den Sensor überhaupt korrekt 
andressiert?

> Die Daten des Sensors befinden sich in dessen Register (z.B.
> 06h Bit0). Wie komme ich von diesem Bit am Mikrocontroller an das
> Register und die Daten des Sensors?

Ganz einfach: Entsprechenden Befehl zum Registerlesen rüberschicken, die 
Antwort ist der entsprechende Wert. Bit0 aus dem empfangenen Byte 
herausextrahieren. Bei I²C korrekt adressieren, bei SPI die richtige 
Länge senden.

> So hatte ich mal angefangen...
> DDRC &= ~( ( 1 << DDC4 ) | ( 1<<DDC5) );
> uint8_t bPortC;
> bPortC = PINC;

Schaut nach C aus, hilft aber keinem weiter.

Viel Erfolg und Glück auf wünscht Iwan

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herrlich Ivan, wirklich herrlich. Und falls Du den Thread dann mal 
liest, wirst Du auch einige Deiner eigenen Fragen selbst beantworten 
können.

Autor: Иван S. (ivan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahem schrieb:
> Herrlich Ivan, wirklich herrlich. Und falls Du den Thread dann mal
> liest, wirst Du auch einige Deiner eigenen Fragen selbst beantworten
> können.

Ich habe den Thread vorab gelesen. Vielleicht bin ich aber auch blind. 
Also, Butter bei die Fische, Wo sagt der OP welchen Sensor er verwendet 
und wie er ihn angebunden hat?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Иван S. schrieb:
> Ahem schrieb:
>> Herrlich Ivan, wirklich herrlich. Und falls Du den Thread dann mal
>> liest, wirst Du auch einige Deiner eigenen Fragen selbst beantworten
>> können.
>
> Ich habe den Thread vorab gelesen. Vielleicht bin ich aber auch blind.
> Also, Butter bei die Fische, Wo sagt der OP welchen Sensor er verwendet
> und wie er ihn angebunden hat?

OK: Wie er ihn angebunden hat, hat er tatsächlich nicht gesagt.
Aber zum Thema Sensor: Er hat sogar das Datenblatt gepostet (was ja 
grundsätzlich löblich ist)

Autor: Иван S. (ivan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Иван S. schrieb:
> Ahem schrieb:
>> Herrlich Ivan, wirklich herrlich. Und falls Du den Thread dann mal
>> liest, wirst Du auch einige Deiner eigenen Fragen selbst beantworten
>> können.
>
> Ich habe den Thread vorab gelesen. Vielleicht bin ich aber auch blind.
> Also, Butter bei die Fische, Wo sagt der OP welchen Sensor er verwendet
> und wie er ihn angebunden hat?

Edit: Sorry, anscheined wirklich blind (Bosch-Datenblatt nicht gesehen).

Der Controller kann jedenfalls SPI und I²C. Meine Ausführungen von oben 
waren gar nicht so verkehrt, hatte leider das DB überlesen.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Sorry...
Naja. Keine Frage von Schuld. Schon ok.

Ich meine wir haben unterschiedliche Aufassungen darüber, wo sich die 
Kenntnisse des Thread-Openers bewegen. Er fragt ja, "welches Kommando" 
er geben muss, nachdem er Daten und Takt an den uC angeschlossen hat, um 
"die Register zu lesen".
Er weiss also garnicht was ein Bus, was Adressierung usw. beim IIC oder 
SPI ist. Es gibt noch andere Hinweise.

Die Sequenz
>> Die Daten des Sensors befinden sich in dessen Register (z.B.
>> 06h Bit0). Wie komme ich von diesem Bit am Mikrocontroller an das
>> Register und die Daten des Sensors?

>Ganz einfach: Entsprechenden Befehl zum Registerlesen rüberschicken, die
>Antwort ist der entsprechende Wert. Bit0 aus dem empfangenen Byte
>herausextrahieren. Bei I²C korrekt adressieren, bei SPI die richtige
>Länge senden.

ist ja nicht falsch, aber zwischen den Bits auf der Leitung und dem 
senden eines Befehls sind soviele gedankliche Zwischenschritte nötig.... 
Was soll er da mit so einer Antwort? Um sie umsetzen zu können müsste 
man schon wissen, das es sowas wie Befehle/Adressen auf dem I2C gibt. 
Welche Buszustände es gibt. Das der Atmel eine Hardware TWI hat. Wo die 
Portpins sind uswuswf.
D.h. hier fehlen schon die Grundlagen, die man haben muss um Deine 
Antwort zu verstehen. Und ich meine das ist relativ gut zu erkennen.

Und das hat mich geärgert, das ich (und andere hier) sich mit dem Niveau 
der Fragestellung auseinandergesetzt haben und dann einer mal kurz 
drüberfliegt und mit einem kurzen "einfach so" meint, das erledigen zu 
können, was mehr damit zu tun hat, dem Thread-Opener gleichzeitig seine 
momentanen Grenzen aufzuzeigen und ihm Hinweise zu geben in welche 
Richtung er gehen kann.
Deine kurze Antwort aber suggeriert, das wir hier alle verkannt haben 
wie simpel das Problem eigentlich ist. Wenn ich aber in einem relativ 
langen Thread von verschiedenen Antwortern die Qualität der 
Fragestellung thematisiert sehe, dann wäre es vielleicht sinnvoll diese 
mal etwas näher anzuschauen, anstatt mit einem: "ist doch ganz einfach" 
so reinzupoltern.

Naja. So weltbewegend ist das nun auch nicht. Also Schlagsahne drüber, 
aber das wollte ich mal loswerden.

Autor: Иван S. (ivan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahem schrieb:
>>Sorry...
> Naja. Keine Frage von Schuld. Schon ok.
> Ich meine wir haben unterschiedliche Aufassungen darüber, wo sich die
> Kenntnisse des Thread-Openers bewegen. Er fragt ja, "welches Kommando"
> er geben muss, nachdem er Daten und Takt an den uC angeschlossen hat, um
> "die Register zu lesen".

Zumindest weiß er ja schon, welches Bit aus welchem Register er auslesen 
will, das ist doch schon was ;-)

> Er weiss also garnicht was ein Bus, was Adressierung usw. beim IIC oder
> SPI ist. Es gibt noch andere Hinweise.

Klar, aber dann muß er einfach mal sagen, wie er die zwei Schaltkreise 
überhaupt zusammengeschaltet hat und was grundsätzlich schon 
funktioniert.
Der uC scheint ja immerhin schon zu laufen, also hat er zumindest 
grundlegende Ahnungen.

> ist ja nicht falsch, aber zwischen den Bits auf der Leitung und dem
> senden eines Befehls sind soviele gedankliche Zwischenschritte nötig....
> Was soll er da mit so einer Antwort? Um sie umsetzen zu können müsste
> man schon wissen, das es sowas wie Befehle/Adressen auf dem I2C gibt.
> Welche Buszustände es gibt. Das der Atmel eine Hardware TWI hat.

Wer, wenn nicht der OP, soll wissen wie er es angeschlossen hat. Daß es 
SPI und I²C gibt traue ich dem OP schon zu zu wissen. Zumindest nach dem 
Lesen dieses Threads wird er die grundsätzlichen Konzepte beider Systeme 
verstehen, bzw. sich die Literatur dazu besorgen.

> D.h. hier fehlen schon die Grundlagen, die man haben muss um Deine
> Antwort zu verstehen. Und ich meine das ist relativ gut zu erkennen.

Ports kann er anscheinend schon ansprechen (das C-Snippet sagt natürlich 
nichts aus), er ist zumindest auf einem guten Weg sein Projekt mit der 
Hilfe die er hier bekommt zu verwirklichen.

> Und das hat mich geärgert, das ich (und andere hier) sich mit dem Niveau
> der Fragestellung auseinandergesetzt haben und dann einer mal kurz
> drüberfliegt und mit einem kurzen "einfach so" meint,

Falls es so rübergekommen ist tut es mir leid, das war nämlich 
mitnichten meine Intention. Ich wollte nur "meine kleinen Gedanken" dem 
OP kundtun auf daß es ihm vielleicht irgendwie helfe.

> das erledigen zu können, was mehr damit zu tun hat, dem Thread-Opener
> gleichzeitig seine momentanen Grenzen aufzuzeigen und ihm Hinweise zu
> geben in welche Richtung er gehen kann.

So in etwa habe ich mir das auch gedacht. Ich habe von I²C und SPI 
geschrieben, damit sich der Opener klarer darüber wird, daß es 
Bussysteme gibt die man einfach verstanden haben muß um den Sensor 
auszulesen. Deshalb hatte ich auch die Adressierung bei TWI 
angesprochen, damit der OP erkennt, da könnte etwas wichtig sein. Oder 
daß bei SPI Lesen gleich Schreiben ist, das ist für den OP auch wichtig. 
Die Grundlagenpapers kann ihm ja keiner vorlesen, aber daß es 
grundsätzliche Konzepte gibt die man in der Elektronik beherschen muß, 
das wollte ich beibringen.

> Deine kurze Antwort aber suggeriert, das wir hier alle verkannt haben
> wie simpel das Problem eigentlich ist.

Wie gesagt, daß war bestimmt nicht meine Intention. Durch deine Kritik 
habe ich jedoch einiges gelernt, in Bezug auf Wahrnehmung fremder 
Postings. Ich werde daher versuchen mich in Zukunft besser auszudrücken.
So gesehen hast du mich wieder ein kleines Stück auf dem richtigen Weg 
weitergebracht.

> Wenn ich aber in einem relativ langen Thread von verschiedenen
> Antwortern die Qualität der Fragestellung thematisiert sehe, dann wäre
> es vielleicht sinnvoll diese mal etwas näher anzuschauen, anstatt mit
> einem: "ist doch ganz einfach" so reinzupoltern.

Die Qualität der Fragestellung war mein erster Kritikpunkt an den OP. 
Bis jetzt weiß man nur, daß er einen ATMega hat, den er anscheinend 
programmieren kann. Und den Bosch-Sensor, welcher I²C und SPI 
beherrscht. Er will nun Erkennen, ob ein bestimmtes Bit im Sensor 
gesetzt ist. Mehr haben wir bis dato einfach nicht erfahren.

Ich hatte die Frage ursprünglich als Anfrage an Radio Jerewan 
kategorisiert, daher auch meine entsprechende Antwort.

Frage an Radio Eriwan: Ich habe einen ATMega und einen 
Bosch-Beschleunigungssensor. Im Controller wird durch bestimmte Umstände 
ein Bit gesetzt. Geht das einfach auszulesen?

Antwort von Radio Eriwan: Im Prinzip ja. Allerdings ist die korrekte 
Verbindung zwischen Controller und Sensor sicherzustellen. Der 
Controller kann SPI und I²C. Beachte, daß bei SPI jede Leseoperation 
einer Schreiboperation entspricht. Bei I²C ist die korrekte Adressierung 
des Sensors essentiell. Die entsprechenden Befehle zum Lesen und 
Beschreiben der Register können bestimmt dem Datenblatt entnommen 
werden. Den mitgelieferten Code haben wir ob seiner irrelevanz leider 
nicht weiter beachten können. Mit armenischem Gruße, (Red.)

> Naja. So weltbewegend ist das nun auch nicht. Also Schlagsahne drüber,
> aber das wollte ich mal loswerden.

Kein Problem, deine konstruktive Kritik ist in keinem Falle zu 
verurteilen, ich bin Dir dankbar darüber. Begründete, sachliche Kritik 
kann nur zum Vorteil beider Diskutanden sein.

In diesem Sinne, lass uns eine Friedenspfeife rauchen.
LG aus dem OOE-Zentralraum, Iwan

Autor: Maik Fox (sabuty) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Aber zum Thema Sensor: Er hat sogar das Datenblatt gepostet (was ja
> grundsätzlich löblich ist)

Ich find das Datenblatt interessant, vor allem das "Confidential" auf 
jeder Seite.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Iwan

Paff, paff.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahem,

gesetzt den Fall, Du würdest Daten aus dem Sensor rausbekommen, was soll 
denn dann damit geschehen? Ich mein der Controller, der den Sensor 
anspricht, soll sicher irgend etwas tun.

Am einfachsten ist es Du versuchst erstmal eine Kommunikation zu deinem 
Controller aufzubauen (RS232?) oder eine LED blinken zu lassen.
Wenn Du so weit bist, kannst Du die das Atmega DB hernehmen und die 
Beispiele zum SPI oder IIC abtippen(je nachdem was Du benutzt) und 
versuchen zu verstehen.

Wenn Du das geschafft hast kannst Du auf die Antwort vom Sensor 
reagieren indem du eine Nachricht ausgibst oder ne LED blinken lässt.

Irgendwie hab ich das Gefühl Du musst noch bisschen mehr tun als SPI/IIC 
zum laufen zu bekommen.

Viel Erfolg noch!

Autor: Karl-alfred Römer (karl-alfred_roemer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte auch mal mit dem Gedanken gespielt einen Beschleunigungs-
messer zu bauen. (um im Flugzeug die Gs zu messen) Ich wollte das
so realisieren, dass ich Beschleunigungssensoren verwende, die
analoge Spannungen ausgeben. Die dann in einen Mega8 über die
AD-Wandler einlesen und in menschlesbare Dezimalzahlen umwandeln
und sagen wir im Sekundentakt auf einem Display ausgeben zu lassen.

Weil ich schon kleinere Projekte mit AVR-Assembler gemacht hatte und
das AVR-Tutorial mir sehr gut geholfen hat, würde ich auch diesmal
wieder Assembler wählen. Mein Programm wäre dann nichts weiter als
eine Schleife, die andauernd Wandler ausließt, Daten in den Dezimal-
zahl-String konvertiert und diesen dann auf dem Display ausgibt.
Danach ein Einsekundendelay und alles wieder von vorne.

Langfristig würde ich aber lieber wieder auf irgendeine Hochsprache
wechseln, weil ich  es in Assembler irgendwie nicht schaffe,
strukturiert zu programmieren.  Am liebsten wäre mir ja Pascal.
Aber das gibt es für die AVRs ja afaik nicht. :(

Autor: Donald S. (protoss85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, wieder bei der Arbeit...

ich schicke euch dann meine Bachelorarbeit, wenn ich in knapp 3 Monaten 
damit fertig sein muss (soviel zum Thema 3-4 Monate Einarbeitung)

Autor: Donald S. (protoss85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Gast (Gast): Der Controller soll den Beschleunigungswert (X, Y und Z) 
lesen. Vorab werden 3 Wertebereiche (Lage, Ruhe und Panik) eingestellt 
und bei Überschreitung der Bereiche (z.B. 0,4G - 1,0G) ein Alarm 
ausgelöst.

Es handelt sich hierbei um I²C (2-Wire) und der Beschleunigungssensor 
ist schon in einer komplexen Schaltung integriert. Zum Glück sind in der 
Schaltung schon LEDs vorhanden, womit ich mich mal herangetastet habe 
und natürlich auch ein "Blinklicht" erstellt habe. Dies hilft mir 
allerdings nicht mit der Ansteuerung des BMA020, sondern nur um zu 
wissen wie man Ports anspricht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yannick Simon schrieb:
> euch dann meine Bachelorarbeit,

Das war jetzt unklug :-)

> wenn ich in knapp 3 Monaten
> damit fertig sein muss (soviel zum Thema 3-4 Monate Einarbeitung)

Mit einer Bachelorarbeit von der du keine Ahnung hast, wie man das 
realisiert, beeindruckst du hier niemanden. Wir sind Techniker. Für uns 
zählt nur, was einer kann und was er nicht kann und nicht welchen Titel 
er hat. Von einem Bachelor, der sich so ausdrückt wie du und in I2C 
nicht selbsttätig einarbeiten kann, halten wir (*) nicht viel. Wieder 
ein Bachelor mehr, der von der FH kommt, und dem man in der Arbeit erst 
mal die Grundlagen beibringen muss. Gerade von einem Bachelor erwarte 
ich nämlich, dass er sich das selber beibringen kann. Noch dazu, wenn er 
dazu 3 Monate Zeit hat.

Edit:
(*) Mit ist klar, dass ich nicht für die Gesamtheit der regelmässigen 
Forenantworter schreibe. Bei Bedarf bitte 'wir' durch 'ich' ersetzen.

Autor: Donald S. (protoss85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mooooment,

ich wollte gewiss nicht damit prahlen, sondern lediglich sagen, dass ich 
nur noch 3 Monate dafür zeit habe und mir keine Einarbeitungszeit von 3 
Monaten leisten kann.

Man lernt während eines Studiums zu vielen verschiedenen Themen was 
(dies geschieht aber eher oberflächlich). Klar ist, dass ich mich mit 
einem Semester Mikrocontroller nicht so gut auskennen kann wie ihr (die 
jahrelange Erfahrung habt).

Ja, da kommt wieder PISA ins Gespräch... Nun ist es so, wenn man von der 
Schule kommt und dann in die Berufswelt einsteigt hat man auch wenig 
Ahnung und nur weil ich meinen Bachelor mache heißt das nicht, dass ich 
mich in jedem elektronischen Bereich bestens auskenne, aber ich denke, 
dass man das auch von niemandem erwarten kann. Ich schätze, dass auch Du 
(K. Buchegger) am Anfang erst einmal eingelernt werden musstest. So ist 
der Lauf der Dinge...

Ich wollte gerne nach meinem Studium in die Materie eindringen und daher 
hat mich diese Bachelorarbeit interessiert. Ich befasse mich sozusagen 
zum ersten mal genauer mit MCs und deren Funktion und dies ist für mich 
eine Herausforderung!

Es ist schade, dass einem hier nur Kritiken gemacht werden, anstatt ihm 
ein wenig konstruktiv zu helfen (wofür ein Forum eigentlich da sein 
sollte?!). Aber ich will hier keinem Vorwürfe machen. Ihr habt ja schon 
genug meine Inkompetenz zu Beweis gestellt.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht nicht darum, ob du sich schon super auskennst. Es geht um die 
Fähigkeit sich selbstständig in ein Thema einzuarbeiten und zumindest 
sich erstmal die Grundlagen selber durchliest.

Frage: Hast du z. B. das AVR-Tutorial und das GCC-Tutorial schonmal 
durchgearbeitet?  Dann würde dir auf einmal alles viel klarer werden.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yannick S. schrieb:

> Es ist schade, dass einem hier nur Kritiken gemacht werden, anstatt ihm
> ein wenig konstruktiv zu helfen (wofür ein Forum eigentlich da sein
> sollte?!).

Du bist noch nicht lange im Forum, daher ist das OK.
Aber wenn mir jemand mit der Aufgabenstellung kommt "Ich will einen 
Sensor über eine serielle Schnittstelle auslesen" und alles was er 
selber bisher rausgefunden hat ist, wie man die Schnittstelle auf 
Eingang schaltet, dann ist das nicht gerade viel.

Arbeite dich weiter ein, finde raus wie das geht, such im Web nach I2C 
Code (oder welche Schnittstelle du auch immer von diesem Sensor benutzt) 
und wenn du konkrete Fragen zum Thema hast dann helfen wir gerne weiter.

Aber auf die Frage "Ich mach in 3 Monaten meinen Abschluss als Chirurg 
und soll jetzt eine Blinddarmoperation machen. Wie rum muss ich das 
Skalpell halten?" darfst du dir auch in einem hilfsbereiten Forum keine 
grossen Hoffnungen auf sinnvolle Antwort machen.

Es gehört auch zum Berufsbild eines 
Informatikers/Programmierers/Softwareentwicklers, dass er ein wenig 
abschätzen kann, wo die Grenzen liegen und welche Aufgabenstellung für 
ihn in welcher Zeit machbar ist. Interesse zu haben ist super, aber im 
Berufsleben ist das zuwenig. Du kannst deinem zukünftigen Chef auch 
nicht einfach sagen: "Ich interessiere mich sehr für Quantenphysik. Wie 
war das nochmal? Kraft ist Weg mal Geschwindigkeit, oder wie? Da such 
ich mir doch heimlich glatt ein Forum, welches mir die Grundlagen der 
Physik aufschreibt, damit ich in 3 Monaten was für sie habe"

Autor: Donald S. (protoss85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Aber auf die Frage "Ich mach in 3 Monaten meinen Abschluss als Chirurg
> und soll jetzt eine Blinddarmoperation machen. Wie rum muss ich das
> Skalpell halten?" darfst du dir auch in einem hilfsbereiten Forum keine
> grossen Hoffnungen auf sinnvolle Antwort machen.

Es wäre dennoch nett, wenn Du ihm vor der Operation sagen würdest, dass 
er die scharfe Kante in Richtung des zu Operierenden halten soll bevor 
er sich selber weh tut :)

@Klaus: AVR-Tutorial und GCC-Tutorial habe ich schon gelesen (eher 
überflogen..), keine Antwort gefunden und daher hier gelandet.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yannick S. schrieb:

> dass man das auch von niemandem erwarten kann. Ich schätze, dass auch Du
> (K. Buchegger) am Anfang erst einmal eingelernt werden musstest.

Irrtum.
Ich stamme noch aus einer Programmierer-Generation, die ohne Web 
aufgewachsen ist, sich nächtelang Handbücher reingezogen hat, 
stundenlang Codevariationen durchprobiert hat und jeden Fetzen Code 
studiert hat, den man nur irgendwo kriegen konnte (und das war nicht 
viel).
Und in meinem Studium war das ganz normal. Da wurde von allen erwartet, 
dass sie selbsttätig den Vorlesungsstoff als Anregung auffassen, die 
Uni-Bibliothek heimzusuchen, sich dort weiter einzulesen und den 
einzigen "Grossrechner" nächtens mit 3 Minuten Rechenzeit zu belegen 
(mehr kriegte man im Batchbetrieb nicht) um das durchzuprobieren.

Autor: Guido Körber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich stamme noch aus einer Programmierer-Generation, die ohne Web
>aufgewachsen ist

:)

Irgendwie beschleicht mich immer mehr der Eindruck, dass heutzutage im 
Studium der E-Technik und Informatik viel zu wenig auf die Grundlagen 
eingegangen wird. Bei mir war Assembler noch eine Pflichtveranstaltung, 
aber auch da gab es schon jede Menge Leute, die die Meinung vertraten 
das bräuchte man doch garnicht.

Bachelor? Das ist doch so ähnlich wie Vordiplom. Falls Du nicht bei 
einem der Großkonzerne landen willst oder als Laborhelfer, mach den 
Master hinterher, das ist dann wenigstens halbwegs wie Diplom, nur 
leider ohne eingeständiges Arbeiten gelernt zu haben.

Nun aber zum Thema: Hast Du ansatzweise verstanden wie IIC funktioniert? 
Wenn nicht, dann das entsprechende Kapitel im Datenblatt mal ganz genau 
durchlesen und ggf. mal Tante Google fragen, die hat da auch noch mehr 
zu dem Thema.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Leute,

ich versuche auch den BMA020 auszulesen. Leider bis jetzt ohne Erfolg. 
Ich lese für die z-Beschleunigung immer eine 0.


Vielleicht kann einer von den Profis mal ein Auge auf den Code werfen? 
Danke!
#include <avr/io.h>
#include <util/delay.h>
#include "m50530.h"
#include <stdlib.h>


#define DDR_SPI DDRB
#define PORT_SPI PORTB
#define PIN_SPI PINB

#define DD_BMA020_CS PB4
#define DD_MOSI PB5
#define DD_MISO PB6
#define DD_SCK PB7

#define P_BMA020_CS PB4
#define P_MOSI PB5
#define P_MISO PB6
#define P_SCK PB7

#define acc_z 7

#define read 7


void SPI_MasterInit(void)
{
  // Set MOSI and SCK output, all others input
  DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
  
  // BMA020 ChipSelect is output (low active)
  DDR_SPI |= (1<<DD_BMA020_CS);
  
  // Deselect BMA020
  PORT_SPI |= (1<<P_BMA020_CS);
  
  // Enable SPI, Master, set clock rate fck/16, SPI Mode 3
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPOL)|(1<<CPHA);
}

void SPI_MasterTransmit(char cData)
{
  /* Start transmission */
  SPDR = cData;
  /* Wait for transmission complete */
  while(!(SPSR & (1<<SPIF)))
  ;
}

char getZ(void)
{  
  // Select BMA020
  PORT_SPI &=~ (1<<P_BMA020_CS);
  
  // Send command: Read z_acceleration
  SPI_MasterTransmit((1<<read)|(acc_z));
  
  // Send dummy byte
  SPI_MasterTransmit((1<<read)|(acc_z));
  
  // Deselect BMA020
  PORT_SPI |= (1<<P_BMA020_CS);
  
  // Return z acceleration
  return SPDR;
}


int main(void)
{
  uint16_t z=0;
  uint16_t i=0;
  char string[20];
      
  
  // Wait 2 ms for the BMA020
  _delay_ms(2);

  // Initialize LCD and SPI
  LCDInit();
  SPI_MasterInit();
  

  while(1)
  {
    // Read z-axis via SPI
    z=getZ();  
    
    // Convert z To String
    itoa(z, string, 10);
    
    // Print z on LCD
    LCDWrite(string);
    
    // Set CoursorPosition to [0,0]
    LCDSetCursorPos(0,0);
  }
  return 0;
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel schrieb:
> Moin Leute,
>
> ich versuche auch den BMA020 auszulesen. Leider bis jetzt ohne Erfolg.
> Ich lese für die z-Beschleunigung immer eine 0.

Kannst du andere Register korrekt auslesen? Wie zb die Chip Id im 
Register 0

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und danke für die Antwort.


Ich habe es ausprobiert und ich bekomme auch im Register 1 eine Null.

Ich denke ich hab das Ding schon kaputt gespielt.


Wenn ich aber zum Beispiel Register 2 anspreche springt er zwischen 0, 
128 und 192 hin und her.

Aus dem Register 15 z.B schickt er mir konstant eine 2.



Interruptpin: unbeschaltet
MISO <-> SDO
MOSI <-> SDI
SCK <-> SCK
SS <-> CSB


Ist da noch was zu machen?

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel schrieb:
> Interruptpin: unbeschaltet
> MISO <-> SDO
> MOSI <-> SDI
> SCK <-> SCK
> SS <-> CSB

Ich glaub das ist was falsch:

MasterInSlaveOut gehört an den SerialDataIn vom Sensor
MOSI an SDO

Glaub ich zumindest :-)

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Floh schrieb:
> MasterInSlaveOut gehört an den SerialDataIn vom Sensor
> MOSI an SDO

Vergiss es, ich hatte grad n Brett vorm Kopf -.-

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
>> Mein Problem: Was muss man dem Mikrocontroller sagen, dass er mir alle
>> Daten aus dem Register des BMA020 ausspuckt (am besten noch in einem
>> File)?
>
> Wie ich derartige Redereien hasse. Sie kommen meistens von den Leuten,
> die 0 Ahnung davon haben, wie so eine CPU funktioniert oder worums beim
> Programmieren überhaupt geht.

DU bist auch so ein CPU ... erstmal selber lernen, dann andere maßregeln

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lehrmann Michael schrieb:
> Karl heinz Buchegger schrieb:
>>> Mein Problem: Was muss man dem Mikrocontroller sagen, dass er mir alle
>>> Daten aus dem Register des BMA020 ausspuckt (am besten noch in einem
>>> File)?
>>
>> Wie ich derartige Redereien hasse. Sie kommen meistens von den Leuten,
>> die 0 Ahnung davon haben, wie so eine CPU funktioniert oder worums beim
>> Programmieren überhaupt geht.
>
> DU bist auch so ein CPU ... erstmal selber lernen, dann andere maßregeln

Was genau willst du mir jetzt (über 1 Jahr danach) mitteilen?

Autor: Dest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey!

Ist zwar schon ne Weile her aber wollt auch mal was dazu sagen...

@ Daniel: Hast du das Problem gefunden? Habe ein änliches mit dem 
gleichen Sensor....Meinen Code habe ich nicht gepostet, weil ich gestern 
erst ngefangen hab den Sensor auszuprobieren. Und noch will ich selbst 
probieren und suchen sonst wird das eh nie was, wenn ich nichtmal 
versteh was ich selbst schreib.....

An den Rest von euch. Nicht alle Bachelor sind so ich hab derzeit auch 
meine Thesis in dem Themengebiet (scheint irgendwie bei Konzernen recht 
beliebt zu sein) und ich hatte Anfangs auch keine Ahnung.
Muss aber auch zugeben, dass ich blauäugig ran gegangen bin und nach dem 
Tutorial das Forum befragt hab. Durch langes rumprobieren hab ich aber 
gemerkt, dass es eher klappt wenn man sich einfach auf den A**** setzt 
und das System versucht zu verstehen.
Ein Pro bin ich noch lange nicht (nicht mal ansatzweise) aber es macht 
immer mehr Spaß an den Teilen zu arbeiten/programmieren.
Zum Thema Vorlesungen und Studium....
Wir hatten uC Vorlesung und haben in Assembler angefangen.
war aber nicht so der  Bringer. ich hab in den letzten Wochen sehr viel 
mehr gelernt als in nem halben Jahr Vorlesung.
Und nur als Klarstellung der Bachelor entspricht NICHT dem Vordiplom!
Bei mir an der Hochschule wurde lediglich das erste Praxissemester weg 
gelassen und im 7. Semester eine Aufteilung gemacht: 50% Vorlesung 
geblockt auf die ersten 3 Monate und 50% Abschlussarbeit.
Bin von dem ganzen Teil nicht begeistert da eine Abschlussarbeit in 3 
Monaten mehr als unrealistisch ist. Denn egal welches Thema braucht man 
mindestens 1-2 Monate Einarbeitung.

So und zu guter Letzt....
Mal generell Danke an die Leute die im Forum ihr fachliches Wissen zur 
Verfügung stellen. Die Suche ist (durch manchmal schlecht definierte 
Themen) gelegentlich umständlich aber dennoch sehr hilfreich!

Grüße Rapha

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dest schrieb:
> Hey!
>
> Ist zwar schon ne Weile her aber wollt auch mal was dazu sagen...
>
> @ Daniel: Hast du das Problem gefunden? Habe ein änliches mit dem
> gleichen Sensor....Meinen Code habe ich nicht gepostet, weil ich gestern
> erst ngefangen hab den Sensor auszuprobieren. Und noch will ich selbst
> probieren und suchen sonst wird das eh nie was, wenn ich nichtmal
> versteh was ich selbst schreib.....


Ich hab jetzt den vorher geposteten Code nicht vollständig auseinander 
genommen.
Aber bei SPI gibt es eine böse Falle: den /SS Pin

Aus dem Datenblatt des Mega16
When the SPI is configured as a Master (MSTR in SPCR is set), the user
can determine the direction of the SS pin.

* If SS is configured as an output, the pin is a general output pin
  which does not affect the SPI system. Typically, the pin will be
  driving the SS pin of the SPI Slave.

* If SS is configured as an input, it must be held high to ensure
  Master SPI operation. If the SS pin is driven low by peripheral
  circuitry when the SPI is configured as a Master with the SS pin
  defined as an input, the SPI system interprets this as another
  Master selecting the SPI as a Slave and starting to send data to it.

Mit anderen Worten
Entweder du konfigurierst den /SS Pin als Output, oder aber du stellst 
sicher, dass der Pin auf High light (Pullup einschalten). Tust du das 
nicht, dann arbeitet SPI nicht. Zumindest nicht als Master.

Autor: Udo Schmitt (urschmitt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dest schrieb:
> Bin von dem ganzen Teil nicht begeistert da eine Abschlussarbeit in 3
> Monaten mehr als unrealistisch ist. Denn egal welches Thema braucht man
> mindestens 1-2 Monate Einarbeitung.

Dann muss man halt etwas mehr Gas geben. Ich weiß, das klingt jetzt 
überheblich ist aber nicht so gemeint. Eine Abschlußarbeit ist halt mal 
eine extreme Zeit.
Als ich meinen Dipl. gemacht habe war die Diplomarbeit auf exakt 3Monate 
begrenzt. Und wenn du angefangen hast, dann wurde spätestens nach 1 
Woche das auch offiziell gemeldet. Überziehen war nicht.
Ich habe mich damals in die Thermodramatik einew Dieselmotors 
einarbeiten müssen und nebenbei in C und in ein Unixähnliches 
Rechnersystem. Ich kam damals von der Turbopascal Schiene und dem PC mit 
DOS.
Das ging auch aber Nachtschichten gabs durchaus auch mal.
Ach so für die Ausarbeitung habe ich auch mal schnell noch LaTeX 
gelernt, und damals hat auf meinem PC-XT die 100 Seiten-Übersetzung von 
Latex 5-10 Minuten gedauert.
Ach so ich war und bin KEIN Überflieger, es geht also wirklich.
So jetzt haben wir den alten Thread genug gequält.
Viel Spass und Erfolg noch allen bei Ihren Abschlussarbeiten

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail ü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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.