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ß
Welcher Sensor? Datenblatt? immer ein kmpl. Programm posten!
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 ?
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.
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...
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.
Lies Dir mal durch wie der SPI-Bus bzw. IIC (I2C) funktioniert, dann wird das klarer.
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.
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.
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... ;-)
so ist das wenn man mit einer Materie anfängt. Deshalb habe ich hier gehofft auf Antworten zu treffen
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.
>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.
@ 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.
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....)
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.
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
Herrlich Ivan, wirklich herrlich. Und falls Du den Thread dann mal liest, wirst Du auch einige Deiner eigenen Fragen selbst beantworten können.
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?
Иван 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)
Иван 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.
>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.
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
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.
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!
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. :(
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)
@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.
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.
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.
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.
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"
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.
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.
>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.
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!
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | #include "m50530.h" |
4 | #include <stdlib.h> |
5 | |
6 | |
7 | #define DDR_SPI DDRB
|
8 | #define PORT_SPI PORTB
|
9 | #define PIN_SPI PINB
|
10 | |
11 | #define DD_BMA020_CS PB4
|
12 | #define DD_MOSI PB5
|
13 | #define DD_MISO PB6
|
14 | #define DD_SCK PB7
|
15 | |
16 | #define P_BMA020_CS PB4
|
17 | #define P_MOSI PB5
|
18 | #define P_MISO PB6
|
19 | #define P_SCK PB7
|
20 | |
21 | #define acc_z 7
|
22 | |
23 | #define read 7
|
24 | |
25 | |
26 | void SPI_MasterInit(void) |
27 | {
|
28 | // Set MOSI and SCK output, all others input
|
29 | DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK); |
30 | |
31 | // BMA020 ChipSelect is output (low active)
|
32 | DDR_SPI |= (1<<DD_BMA020_CS); |
33 | |
34 | // Deselect BMA020
|
35 | PORT_SPI |= (1<<P_BMA020_CS); |
36 | |
37 | // Enable SPI, Master, set clock rate fck/16, SPI Mode 3
|
38 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPOL)|(1<<CPHA); |
39 | }
|
40 | |
41 | void SPI_MasterTransmit(char cData) |
42 | {
|
43 | /* Start transmission */
|
44 | SPDR = cData; |
45 | /* Wait for transmission complete */
|
46 | while(!(SPSR & (1<<SPIF))) |
47 | ;
|
48 | }
|
49 | |
50 | char getZ(void) |
51 | {
|
52 | // Select BMA020
|
53 | PORT_SPI &=~ (1<<P_BMA020_CS); |
54 | |
55 | // Send command: Read z_acceleration
|
56 | SPI_MasterTransmit((1<<read)|(acc_z)); |
57 | |
58 | // Send dummy byte
|
59 | SPI_MasterTransmit((1<<read)|(acc_z)); |
60 | |
61 | // Deselect BMA020
|
62 | PORT_SPI |= (1<<P_BMA020_CS); |
63 | |
64 | // Return z acceleration
|
65 | return SPDR; |
66 | }
|
67 | |
68 | |
69 | int main(void) |
70 | {
|
71 | uint16_t z=0; |
72 | uint16_t i=0; |
73 | char string[20]; |
74 | |
75 | |
76 | // Wait 2 ms for the BMA020
|
77 | _delay_ms(2); |
78 | |
79 | // Initialize LCD and SPI
|
80 | LCDInit(); |
81 | SPI_MasterInit(); |
82 | |
83 | |
84 | while(1) |
85 | {
|
86 | // Read z-axis via SPI
|
87 | z=getZ(); |
88 | |
89 | // Convert z To String
|
90 | itoa(z, string, 10); |
91 | |
92 | // Print z on LCD
|
93 | LCDWrite(string); |
94 | |
95 | // Set CoursorPosition to [0,0]
|
96 | LCDSetCursorPos(0,0); |
97 | }
|
98 | return 0; |
99 | }
|
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
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?
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 :-)
Floh schrieb: > MasterInSlaveOut gehört an den SerialDataIn vom Sensor > MOSI an SDO Vergiss es, ich hatte grad n Brett vorm Kopf -.-
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
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?
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
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
1 | When the SPI is configured as a Master (MSTR in SPCR is set), the user |
2 | can determine the direction of the SS pin. |
3 | |
4 | * If SS is configured as an output, the pin is a general output pin |
5 | which does not affect the SPI system. Typically, the pin will be |
6 | driving the SS pin of the SPI Slave. |
7 | |
8 | * If SS is configured as an input, it must be held high to ensure |
9 | Master SPI operation. If the SS pin is driven low by peripheral |
10 | circuitry when the SPI is configured as a Master with the SS pin |
11 | defined as an input, the SPI system interprets this as another |
12 | 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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.