Guten Tag,
Ich habe ein Projekt begonnen wobei es darum geht, dass eine Plastik
Figur geschlagen wird und je nach dem wie hart diese geschlagen wird,
gibt ein Speaker andere Ausdrücke aus.
Beschreibung zum Problem:
Ich will das ganze mit einem Beschleunigungssensor und SPI realisieren.
Dazu habe ich bereits zwei Leiterplatten welche mit einem Flachbandkabel
verbunden sind. Auf der Hauptplatine ist ein PIC16F1787 und ein Header
worauf ich SPI verbunden habe (natürlich noch weiter Bauteile). Auf der
Messplatine ist wie gesagt ein Beschleunigungssensor und wiederum ein
Header worauf ich SPI gezogen habe.
Jetzt versuche ich schon eine Weile das Signal richtig zu übertragen.
Ich habe leider nur wenig SPI Vorkenntnisse und das Datenblatt des
Sensors hilft mir auch nicht gerade weiter.
Das Ziel ist:
Ich möchte auf einem LCD Display den einen Wert zwischen 1 und 8 (1
schwache Bewegung, 8 sehr starke Bewegung) ausgeben.
Ps: Schemaauszüge sind im Anhang. Ich wäre sehr dankbar wenn mir jemand
dabei helfen könnte. Für Fragen oder Unklarheiten einfach fragen.
Datenblatt Beschleunigunssensor :
http://www.mouser.com/ds/2/609/ADXL345-879145.pdf
Datenblatt Mikrocontroller:
http://www.mouser.com/ds/2/268/40001637C-1066570.pdf
Das Datenblatt des Sensors hast du gelesen und verstanden ? Also musst
du einfach mal diese Signal so bringen. Allenfalls benoetigst du dazu
ein Oszilloskop. Ich wuerd's zu Beginn ohne die SPI funktionalitaet des
Controllers machen, erst mal nur mit Portpins hoch-tief setzen. Die SPI
funktinalitaet, die automatisieren kann kommt spaeter, wenn's man's
begriffen hat.
Dean Tschanz schrieb:> je nach dem wie hart diese geschlagen wird
Die Frage ist, willst du den Schlag messen oder die Bewegung der Figur
danach? Für den Schlag ist nach meinem Gefühl der Messbereich von 16 g
zu gering.
Georg
Martin W. schrieb:> Ich bin auch der Meinung, dass für den Schlag der Messbereich von 16 g> zu gering ist.
Das kommt doch völlig drauf an, wie hart das Plastik ist, d.h. in
welcher Zeit der Impuls übertragen wird.
Dean Tschanz schrieb:> Jetzt versuche ich schon eine Weile das Signal richtig zu übertragen.> Ich habe leider nur wenig SPI Vorkenntnisse und das Datenblatt des> Sensors hilft mir auch nicht gerade weiter.
Verstehst du das Datenblatt nicht, oder tust du dich beim Programmieren
schwer? Gibt es für den Pic keine Community und keine Bibliotheken, wie
für die AVRs mit Arduino?
Georg schrieb:> Die Frage ist, willst du den Schlag messen oder die Bewegung der Figur> danach?
Wie willst du mit einem Bescheunigungssensor die (gleichförmige)
Bewegung nach dem Schlag messen?
Wolfgang schrieb:> Gibt es für den Pic keine Community und keine Bibliotheken, wie> für die AVRs mit Arduino?
Es gibt fast für alles Bibliotheken und auch Communities mit mehr oder
weniger vielen Ahnungslosen ;-)
Dean Tschanz schrieb:> Jetzt versuche ich schon eine Weile das Signal richtig zu übertragen...
Dann zeig doch mal und versuche zu beschreiben, was dabei rauskommt...
Volker S. schrieb:> Es gibt fast für alles Bibliotheken und auch Communities mit mehr oder> weniger vielen Ahnungslosen ;-)
Für den ADXL345 gibt es doch nun wirklich genug Beispiele im Netz, aber
es gibt natürlich auch fast beliebig viele exotische
Programmiersprachen.
So Guten Morgen allerseits,
Georg schrieb:> Die Frage ist, willst du den Schlag messen oder die Bewegung der Figur> danach? Für den Schlag ist nach meinem Gefühl der Messbereich von 16 g> zu gering.
Ich will die Bewegung der Figur messen und nicht die Schlagkraft.
Wolfgang schrieb:> Verstehst du das Datenblatt nicht, oder tust du dich beim Programmieren> schwer?
Es geht darum das ich nicht verstehe was ich dem Sensor schicken muss,
damit dieser mir einen Wert zurück gibt. Also fällt mir beides schwer.
Wolfgang schrieb:> Gibt es für den Pic keine Community und keine Bibliotheken, wie> für die AVRs mit Arduino?
Communitys habe ich leider keine zu dem Pic gefunden, da dieser schon
etwas älter ist. Ich habe aber mit einem Codeconfigurator eine SPI
Biblithek erstellt.
Wolfgang schrieb:> Wie willst du mit einem Bescheunigungssensor die (gleichförmige)> Bewegung nach dem Schlag messen?
Ja, so in etwa. Ich will einfach unterscheiden, wie schnell sich die
Figur bewegt hat.
Volker S. schrieb:> Dann zeig doch mal und versuche zu beschreiben, was dabei rauskommt...
Also, ich programmiere das ganze in MPLAP X IDE v3.35.
Meine SPI Bibliothek:
1
/**
2
MSSP Generated Driver File
3
4
@Company
5
Microchip Technology Inc.
6
7
@File Name
8
spi.c
9
10
@Summary
11
This is the generated driver implementation file for the MSSP driver using MPLAB(c) Code Configurator
The generated drivers are tested against the following:
20
Compiler : XC8 1.35
21
MPLAB : MPLAB X 3.40
22
*/
23
24
/*
25
(c) 2016 Microchip Technology Inc. and its subsidiaries. You may use this
26
software and any derivatives exclusively with Microchip products.
27
28
THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
29
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED
30
WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A
31
PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP PRODUCTS, COMBINATION
32
WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.
33
34
IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
35
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
36
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS
37
BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE
38
FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN
39
ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
40
THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
41
42
MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE
43
TERMS.
44
*/
45
46
/**
47
Section: Included Files
48
*/
49
50
#include<xc.h>
51
#include"../Include/spi.h"
52
53
/**
54
Section: Macro Declarations
55
*/
56
57
#define SPI_RX_IN_PROGRESS 0x0
58
59
/**
60
Section: Module APIs
61
*/
62
63
voidSPI_Initialize(void)
64
{
65
// Set the SPI module to the options selected in the User Interface
66
67
// R_nW write_noTX; P stopbit_notdetected; S startbit_notdetected; BF RCinprocess_TXcomplete; SMP Middle; UA dontupdate; CKE Idle to Active; D_nA lastbyte_address;
Ein Beschleunigungssensor misst die Beschleunigung, und nicht die
Geschwindigkeit. Die Beschleunigung aufzuintegrieren ist nicht wirklich
trivial. Auch ein Frage des Sampleintervalls.
Zum Code. Ich hab's zuwenig betrachtet um zu sehen, ob's fuer das SPI
Interface reicht. Der Chip scheint etwas mehr zu wollen. Der hat Duzende
von Registern. Mindestens ein paar wird man initialisieren wollen. Wie
soll der Sensorchip initialisiert werden ?
Was ich sehe ist etwas HAL.
Sapperlot W. schrieb:> Ein Beschleunigungssensor misst die Beschleunigung, und nicht die> Geschwindigkeit. Die Beschleunigung aufzuintegrieren ist nicht wirklich> trivial. Auch ein Frage des Sampleintervalls.>> Zum Code. Ich hab's zuwenig betrachtet um zu sehen, ob's fuer das SPI> Interface reicht. Der Chip scheint etwas mehr zu wollen. Der hat Duzende> von Registern. Mindestens ein paar wird man initialisieren wollen. Wie> soll der Sensorchip initialisiert werden ?>> Was ich sehe ist etwas HAL.
Wie gesagt habe ich nur wenig SPI Vorkenntnisse und wäre dankbar wenn
mir jemand bei der Initialisierung/Ansteuerung helfen könnte.
Dean T. schrieb:> Communitys habe ich leider keine zu dem Pic gefunden, da dieser schon> etwas älter ist. Ich habe aber mit einem Codeconfigurator eine SPI> Biblithek erstellt
Nur die neueren PICs sind im MCC implementiert ;-)
Warum nimmst du nicht die von AD angebotene und im Datenblatt des
Sensors verlinkte Bibliothek.
https://wiki.analog.com/resources/tools-software/uc-drivers/microchip/adxl345#supported_devices
So wie ich das sehe, brauchst du dann nur drei Funktionen SPI_Init(),
SPI_Write() und SPI_Read() bereit zu stellen und kannst alle Funktionen
benutzen.
Die Beispiele sind zwar nicht für PIC16, aber das sollte eigentlich kein
riesiges Problem sein. Du müsstest den Inhalt der Funktionen in
Communication.c und die GPIO Definitions im Header anpassen.
Ja, steht im Manual, ab Seite 16.
Wie man die Befehle rueberschiebt ist das Sache des SPI.
Welche Register des Sensors muessen wie initialisiert werden ?
Geh mal durch die Liste durch und ueberlege dir was noetig ist.
Selftest p16
Register p23
Application p28
Formats p32
Allenfalls weicht das Analog Devices Timing etwas vom vorgegebenen SPI
Timing des Controllers ab...
Daher bitte die Timings vorher genau anhand der Datenblaetter studieren
und allenfalls einen Tag oder so sparen.
Dieses scheint zu passen.
Ich habe das Gefühl die meisten hier denken, dass ich bereits eine
Datenübertragung via SPI hergestellt habe, aber diese nicht richtig
funktioniert. Aber das habe ich nicht. Mein Problem ist, dass ich
überhaupt keine Verbindung herstelle kann. Ich kann keine Daten
übertragen.
Kennt sich hier jemand mit MPLAB und dem dazugehörigen Codeconfigurator
aus?
Nein.. Die Datenuebertragung ist eine Sache, und was zu uebertragen ist
die andere Sache. Beides ist interessant zu tun. Das doofe ist, dass
Etwas zu senden ist mit dem Oszilloskop ueberpruefbar. Es kommt aber
nichts zurueck .. ausser man sendet das Richtige.
Deswegen muss man erst mal durch die Materie duch, was denn zu
kommunizieren ist. Und wenn du glaubst sicher zu sein, was denn zu
kommunizieren ist, kannst du das auch probieren. Das wirst du auch mit
dem Oszilloskop verifizieren muessen.
Und erst dann machen die Daten einen Sinn. Irgendwas wirst du dann noch
mit den erhaltenen Daten anstellen muessen.
Sapperlot W. schrieb:> Das doofe ist, dass Etwas zu senden ist mit dem Oszilloskop ueberpruefbar.> ...> dem Oszilloskop verifizieren muessen.
Ein Oszilloskop ist dafür nur bedingt das passende Werkzeug. Viel
nützlicher wäre ein kleiner Logikanalysator, mit dem man nicht nur die
Signale sehen, sondern auch gleich dekodieren kann - und das
minutenlang.
So ein Ding gibt es, im Gegensatz zu einem Oszilloskop, für wenige Euro.
(bspw. ebay 201541710029)
Dean T. schrieb:> Mein Problem ist, dass ich überhaupt keine Verbindung herstelle kann.> Ich kann keine Daten übertragen. Kennt sich hier jemand mit MPLAB und> dem dazugehörigen Codeconfigurator aus?
Ich glaube, dein Hauptproblem ist nicht die IDE. Du musst zuerst
wenigstens die die Grundlegende Funktionsweise des SPI verstanden haben.
Ich sehe z.B. kein CS Signal in deinem Code.
SPI ist nun wirklich keine Raketenwissenschaft und es gibt genügend Info
im Netz.
Dann holst du dir den Beispielcode von AD und versucht mit dem
Datenblatt des Sensors zu verstehen, warum....