Pages: [1]   Go Down
Author Topic: SPI in einer Bibliothek nutzen [gelöst]  (Read 585 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Leute,

ich versuche gerade eine Bibliothek zu schreiben.

Datenstruktur:
 "../arduino-1.0.3/libraries/AD7730/AD7730.h"
 "../arduino-1.0.3/libraries/AD7730/AD7730.cpp"
 "../arduino-1.0.3/libraries/AD7730/keywords.txt"

AD7730.h:
Code:
/*
  AD7730.h - Library for Analog Devices AD7730
*/

#ifndef AD7730_h
#define AD7730_h


class AD7730
{
  public:
    void init(); // Initialisierung laut Definitionen
    //void init(int SYNC,int POL,int RST,int STBY,int CSS,int RDY);
  private:
    void setPINs(void);
    int _AD7730_NCS;
    int _AD7730_NSYNC;
    int _AD7730_POL;
    int _AD7730_NRST;
    int _AD7730_NSTBY;
    int _AD7730_NRDY;
};

/*
Pinmap AD7730
             #########################
SCK------01-###SCLK             DGND###-24------GND
XTAL1----02-###MCLK IN          DVDD###-23------5VD
XTAL1----03-###MCLK OUT          DIN###-22-----MOSI
A0-------04-###POL              DOUT###-21-----MISO
A1-------05-###/SYNC/          /RDY/###-20-------A2
RST------06-###/RESET/          /CS/###-19-------A3
NC-------07-###VBIAS       /STANDBY/###-18------5VD
GND------08-###AGND            /ACX/###-17-------NC
5VD------09-###AVDD              ACX###-16-------NC
Vref/2---10-###AIN1(+)     REF IN(-)###-15------GND
DMS------11-###AIN1(-)     REF IN(+)###-14-----Vref
NC-------12-###AIN2(+)/D1 AIN2(-)/D2###-13-------NC
             #########################
*/

//###########   AD7730 Definitionen   ######################

#define    AD7730_PIN_NSTANDBY   0  //VCC
#define    AD7730_PIN_NRESET     0  //Reset uC
#define    AD7730_PIN_NCS       A3
#define    AD7730_PIN_NRDY      A2
#define    AD7730_PIN_NSYNC     A1
#define    AD7730_PIN_POL       A0
#endif


AD7730.cpp:
Code:
/*
  AD7730.cpp - Library for Analog Devices AD7730
*/
#include <SPI.h>
#include <Arduino.h>
#include "AD7730.h"

void AD7730::init()
{ _AD7730_NCS  =AD7730_PIN_NCS;
  _AD7730_NSYNC=AD7730_PIN_NSYNC;
  _AD7730_POL  =AD7730_PIN_POL;
  _AD7730_NRST =AD7730_PIN_NRESET;
  _AD7730_NSTBY=AD7730_PIN_NSTANDBY;
  _AD7730_NRDY =AD7730_PIN_NRDY;
  setPINs();  
  //SPI
 SPI.setDataMode(SPI_MODE0);
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV16);
  SPI.begin();

}
/*void AD7730::init(int SYNC,int POL,int RST,int STBY,int CSS,int RDY)
{
}
*/
void AD7730::setPINs(void){
  if (_AD7730_NSTBY){
  pinMode(_AD7730_NSTBY     , OUTPUT);
  digitalWrite(_AD7730_NSTBY,   HIGH);
  }
  if (_AD7730_NRST){
  pinMode(_AD7730_NRST       , OUTPUT);
  digitalWrite(_AD7730_NRST  ,   HIGH);
  }
  if (_AD7730_NCS){
  pinMode(_AD7730_NCS       , OUTPUT);
  digitalWrite(_AD7730_NCS  ,   HIGH);
  }
  if (_AD7730_POL){
  pinMode(_AD7730_POL       , OUTPUT);
  digitalWrite(_AD7730_POL ,   HIGH);
  }
  if (_AD7730_NSYNC){
  pinMode(_AD7730_NSYNC     , OUTPUT);
  digitalWrite(_AD7730_NSYNC,   HIGH);
  }
  pinMode(_AD7730_NRDY      ,  INPUT);
}


wie gesagt, bin dabei...

dann rufe ich es in einem sketch auf:

Code:
#include <AD7730.h>
AD7730 ADC;

void setup(){
  ADC.init();
}

....

Problem ist das ich in der init Funktion schon fehler bekomme: 'SPI' was not declared in this scope

was mache ich falsch?!
« Last Edit: February 25, 2013, 01:11:39 pm by pumuckel » Logged

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2741
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bevor diese interessante Frage verloren geht:
Ich weiss es auch nicht ...

In meiner SPI.h  (in arduino-1.0.3\libraries\SPI ) steht

extern SPIClass SPI;

Damit sollte das Objekt SPI deklariert sein.

Allerdings steht bei mir in SPI.h auch
static void setDataMode(uint8_t);

in deiner AD7730::init Routine könntest du also  
   SPIClass::setDataMode(SPI_MODE0);
schreiben. Verändert das irgendwas ? Rutscht der Fehler eine Zeile weiter ... ?

Was passiert in der Arduino IDE, wenn du  #include <SPI.h> ganz am Anfang deines sketch einfügst ?

Nachtrag:
und was ändert sich, wenn du deine eigene library nicht in arduino-1.0.3\libraries sondern im libraries Ordner deiner sketches ( empfohlen, damit sie nicht beim nächsten Upgrade weg ist )
oder zum Testen erstmal in zusammen mit deinem Test in einen gemeinsamen Ordner packst, und in deinem Test
#include "AD7730.h"  // Anführungszeichen statt spitzer Klammern
schreibst ?
 
« Last Edit: February 25, 2013, 05:32:30 am by michael_x » Logged

Meran/BZ/IT
Offline Offline
Full Member
***
Karma: 0
Posts: 184
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo!

Füg mal in der cpp folgendes ein:
AD7730::AD7730 () {}

und in der .h unter public:
AD7730();

Gruß
Reinhard

Ps.: vielleicht löst folgender Forumsbeitrag das Problem:
http://arduino.cc/forum/index.php?PHPSESSID=6e433eb991f09036d8720720dd79ec7b&topic=150472.0
« Last Edit: February 25, 2013, 09:01:29 am by spaceball » Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4702
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das hat mit der Art und Weise zu tun, wie die IDE eruiert, was zum Sketch gehört, also auch compiliert und gelinkt werden muss. Wenn Du im Sketch am Anfang kein

Code:
#include "SPI.h"

einfügst, weiss die IDE nicht, dass sie diese Bibliothek auch compilieren muss, damit das ganze Programm am Schluss gelinkt werden kann.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
In meiner SPI.h  (in arduino-1.0.3\libraries\SPI ) steht

extern SPIClass SPI;

Damit sollte das Objekt SPI deklariert sein.

Allerdings steht bei mir in SPI.h auch
static void setDataMode(uint8_t);

in deiner AD7730::init Routine könntest du also 
   SPIClass::setDataMode(SPI_MODE0);
schreiben. Verändert das irgendwas ? Rutscht der Fehler eine Zeile weiter ... ?

so wie ich es verstanden hab bedeutet das extern in der header datei nur das es wo anders deklariert wird, was es in der SPI.cpp dann wird, da wird die Klasse SPIclass als Objekt SPI instanziiert.

am Konstruktor und destruktor lag es nicht, da hatte ich es vorher drinn.
und bei dem anderen Forumsbeitrag war die Klasse nicht instanziert, was bei mir ja der Fall war.


ABER
Quote
#include <SPI.h>
im Sketch hat es behoben, hatte es auch mal in dem Header probiert, aber das macht keinen Unterschied.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Pumukel,

hast Du die Lib fertig bekommen? Ich wäre sehr daran interessiert da ich die gleiche Hardware für mein Projekt nutze. Hättest Du interesse die Lib zu veröffentlichen?

Vielen Dank
ToM
Logged

Pages: [1]   Go Up
Jump to: