Show Posts
Pages: 1 2 [3] 4 5 ... 91
31  International / Software / Re: Tab Multiple on: December 03, 2013, 10:57:09 am
Ho appena controllato, la cartella LPD8806 si trova, con i rispettivi files all´interno nella cartella "libraries" di Arduino.

L´ho sempre inserita cosí una libreria e ha sempre funzionato.

Forse ho sbagliato a creare il file .h ? Perché per crearlo ho semplicementecreato un nuovo file e poi ho modificato l´estensione da .ino a .h .

Grazie
32  International / Software / Re: Tab Multiple on: December 03, 2013, 10:51:39 am
eh é quello che mi stavo chiedendo. Sta nelle libraries di arduino, dove ci sono tutte le altre librerie.

devo metterlo nella stessa directory del file .h ?
33  International / Software / Re: Tab Multiple on: December 03, 2013, 10:49:14 am
ok. Grazie mille . Ste cose dovrei saperle ma purtroppo essendo MAtlab il mio ambiente di programmazione preferito le dimentico spesso.

Comunque ho aggiunto al mio file initialization.h :

Code:
#include "Arduino.h"
      // LIBRARIES /////////////////////////////////////////////////////     
      // Library for the LED Strip
      #include <LPD8806.h>
      // Library for the DAC and the SD which are both working over SPI
      #include <SPI.h>
      // Library for more mathematical functions
      #include <math.h>
      // Library for Strings
      #include <String.h>
      // Library for SD card
      #include <SD.h>     

Ma ricevo un errore:
In file included from Controller_v3_2.ino:8:
/initialization.h:6: fatal error: LPD8806.h: No such file or directory
compilation terminated
34  International / Software / Re: Tab Multiple on: December 03, 2013, 09:39:59 am
se ho un file .h é buona norma averne anche uno .cpp ? e organizzare il tutto come in una libreria? oppure posso farne a meno e lasciare solo il file .h per definire i valori iniziali delle variabili e inserirci i vari prototipi?
35  International / Software / Re: Tab Multiple on: December 03, 2013, 09:10:59 am
io ho un file .h che contiene l´inizializzazione delle variabili ma non i prototipi delle funzioni.

Devo inserire all´interno del file .h anche i prototipi delle funzioni?

Per prototipo intendi la firma giusto?

EDIT: se quello che dici é vero riguardo l´ordine alfabetico. Perché se rinomino la tab "parsing" in "a_parsing" il tutto funziona?
36  International / Software / Tab Multiple on: December 03, 2013, 08:41:16 am
Ciao a tutti,

ho un programma scritto nell´arduino ide che é diventato abbastanza grande e quindi l´ho separato in diverse tabs.

Sono a conoscenza del fatto che l´arduino IDE compila le tabs in ordine alfabetico ma ho il seguente problema :

ho il mio main in un file chiamato "Controller_v3_2" l´unico con la lettera maiuscola delle mie tabs.
In questo file ci sta setup e loop

ho altre tabs tra cui quella "controller" in cui é implementata una funzione che ha la seguente firma:
Code:
void simplecontroller(float &V, int L,float Ldot, int &flag, int &S1, int &S2, int S1_delay_up, int S1_delay_down);

Questa funzione utilizza due funzioni:

Code:
void parse_delay(String &c, int (&delay_values)[16], boolean (&rise_fall_values)[16]);
void check_voltage_divider(String c);

queste funzioni sono implementate in una tab chiamata: "parsing" .

Quindi in ordine alfabetico ho:
Controller_v3_2, controller, parsing

Quando provo a compilare mi dice che la funzione:
parse_delay(.....); é undefined.

Sono daccordo con il compilatore ma non riesco a capire perché l´errore non me lo da con l´altra funzione chiamata:
check_voltage_divider();
Mi aspetterei un errore anche per questa funzione perché anch´essa é definita in una tab che in ordine alfabetico sta dopo la tab "controller" in cui viene richiamata.

vi dico anche che nella funzione simplecontroller() implementata nella tab "controller" la funzione
check_voltage_divider();
viene richiamata prima di quella che mi da errore:
parse_delay(.....);
Quindi mi aspetterei che l´errore sia prima dato dalla check_voltage_divider() e poi da parse_delay(.....);

Qualcuno puó aiutarmi?
Grazie.
37  International / Generale / Re: Arduino uno on: November 19, 2013, 08:50:40 am
Di nulla. A presto.

É sempre un piacere dare un aiuto quando ne sono capace.
Fab.
38  International / Generale / Re: Quadricottero low cost on: November 19, 2013, 08:49:47 am
io l'ho guardata tempo fa quando era ancora solo arduino, e aveva già queste capacità.
Se per te quella è stabilità siamo messi proprio bene  smiley-mr-green

Quoto Astro. La stabilitá di un quadricottero al momento é quando un quadricottero é appeso a un filo ....... ma il filo non c´é.

Vi assicuro che con un budget di 200/400€ questa cosa é fattibile, ma non semplice!
39  International / Generale / Re: Quadricottero low cost on: November 19, 2013, 08:44:49 am
Probabilmente é un´intromissione troppo al di fuori di quello che volete raggiungere peró quando lavoravo a Zurigo (in ETH al PixHawk Lab dove i quadricotteri hanno piú ore di volo di quelle di cammino delle persone) un ragazzo cercava di hackerare questo:
http://www.hobbyking.com/hobbyking/store/__24650__Walkera_QR_Ladybird_Ultra_Micro_Quadcopter_Bind_and_Fly_.html

Qualcuno di voi ci ha provato?

PErché sarebbe una soluzione abbastanza low cost. Io li ho visti volare sti cosini e sono molto divertenti, se si potesse accedere al firmware sarebbe stupendo smiley.
40  International / Generale / Re: Arduino uno on: November 19, 2013, 08:35:19 am
Prima di tutto ti consiglio di darti una spolverata al concetto di PWM:
http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM

Poi dai un´occhiata a questo:
http://arduino-for-beginners.blogspot.de/2011_02_01_archive.html

41  International / Generale / Re: Arduino uno on: November 19, 2013, 08:30:38 am
Ciao se non vado errato dovresti avere i seguenti fili:

- Rosso -> V+
- Nero  -> GND
- Blu    -> Control Pin
- Giallo -> Tachometer

Naturalmente questo é un esempio , per essere certo della corrispondenza dei colori devi dare un´occhiata al datasheet della ventola.
Hai un codice?

Quindi se questo fosse lo schema circuitale della tua ventola dovresti collegare V+ a 12V e GND al GND di Arduino. Il control pin ti permetterebbe di controllare la ventola dandogli un segnale PWM (alcuni pin dell Arduino uno sono configurati giá per il PWM). Probabilmente ti serviranno delle resistenze peró su questo non posso aiutarti, basta che cerchi su internet : "4 wire fan control Arduino".

Aggiornaci,
Fab.
42  Using Arduino / Storage / Re: Text file on SD to String on: November 18, 2013, 07:26:17 am

The output:
Code:
Request_Mode=<Auto>
Set_Temp=<190>
So far i'm fine, it succesfully reads from the SD.
But now i want to put this output into a string, so i uncomment the "//SD_Read=SD_Read+statusFile.read();" line and comment the "Serial.write(statusFile.read());" line. Now the output of SD_Read is:
Code:
8210111311710111511695771111001016160651171161116210831011169584101109112616049574862

What kind of format is this? Any tips how to fix this?

Big thanks,
Nico

Those numbers are the decimal values corresponding to :
Code:
Request_Mode=<Auto>
Set_Temp=<190>

Infact :
R=82
e=101
q=113
...
...
etc!
43  International / Software / Re: Arduino + SD card (Ethernet Shield) + DAC MCP4922 on: November 13, 2013, 08:55:46 am
Ho risolto. Posto il codice appena possibile.

Alla fine ho semplicemente aggiunto un :

Code:
digitalWrite(CS_dac,LOW)

prima di scrivere sul DAC

e un:
Code:
digitalWrite(CS_dac,HIGH)
dopo aver scritto sul DAC.

Cosa molto importante é che nella

Code:
void setup(){
....
....
pinMode(CS_dac,OUTPUT);
pinMode(CS_sd,OUTPUT);
digitalWrite(CS_dac, HIGH);
digitalWrite(CS_sd, HIGH);

}

Spero sia utile a qualcuno,
Fab.
44  International / Software / Re: Arduino + SD card (Ethernet Shield) + DAC MCP4922 on: November 13, 2013, 07:29:22 am
Code:
   void setup() {
        
       // initialize serial communication at 115200 bits per second:

       Serial.begin(baudRate);
      
        Serial.print("Initialization of the Serial Port at baudRate: ");
        Serial.print(baudRate);
        Serial.print(" ...");
        Serial.println("Done!");
      
        Serial.print("Initialization of the Array of Readings...");
       for (int thisReading = 0; thisReading < numReadings; thisReading++)
       readings[thisReading] = 0;        
        Serial.println("Done!");
        
        Serial.print("Initialization of the LED Strip...");
        strip.begin();
        Serial.println("Done!");
       // Update the strip, to start they are all 'off'
       strip.show();
       const int CS_sd = 4;
///////////////// Initialization SD Card Start
        while (!Serial) {
          ; // wait for serial port to connect. Needed for Leonardo only
        }
      
      
        Serial.print("Initializing SD card...");
        // make sure that the default chip select pin is set to
        // output, even if you don't use it:
        pinMode(10, OUTPUT);
        pinMode(4,OUTPUT);
        pinMode(52,OUTPUT);
        
        // see if the card is present and can be initialized:
        if (!SD.begin(CS_sd)) {
          Serial.println("Card failed, or not present");
          // don't do anything more:
          return;
        }
        Serial.println("card initialized.");
///////////////// Initialization SD Card End

///////////////// Initialization DAC  
        Serial.print("Initialization of the DAC MCP4922...");
        SPI.begin(CS_dac);
        SPI.setBitOrder(MSBFIRST);
//        pinMode(7,OUTPUT);
//        digitalWrite(7,HIGH);

        /* Our DAC can operate at Mode 0,0 (which corresponds to mode 0 in the SPI library) and in mode 1,1 (which corresponds to mode 3 in the SPI library) */
        
        /* I don´t know why instead the DAC is working with the following instruction??
         Everything works also without this instruction. I don´t know why!
         it´s working just with modes 2 and 3. Maybe these mode 2 and 3 corresponds
         to the mode 0,0 and 1,1 to which the MCP4922 datasheet is referring.
         To understand what I´m talking about give a look to the following page:
         http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
         in the section "Mode Numbers".
        */
        SPI.setDataMode(CS_dac, 2);
        /*
        From the datasheet we understand that the maximum frequency at which the DAC
        can operate is 20MHz. The Arduino DUE has a system clock of 84MHz so if we don´t say
        anything to the SPI library it won´t change the clock at which we will operate.
        84 MHz is too big for the DAC, to change this we can use the function SPI.setClockDivider(SS,divider)
        This function set the clock, for the device on pin SS, to 84/divider. The divider variable
        can only be an integer. For this reason for example to have an operating clock for our device of 1MHz we
        will write: SPI.setClockDivider(SS,84);
        to have an operating clock for our device of 2MHz we will write: SPI.setClockDivider(SS,42); and so on.
        By the way, seems that it works also without this instruction even if I have no idea what happens internally
        when you don´t specify the clock of the device. Maybe, I guess it goes up to the maximum frequency of the DAC
        but I´m not sure and for this reason I suggest to choose a frequency of operation and fix it with the
        instruction described before.
        */
        SPI.setClockDivider(CS_dac,21); // 4MHz
        Serial.println("Done!");
///////////////// Initialization DAC End      
      
    delay(2000);  
    }

La funzione dacSet(in value) funziona alla perfezione se fatta funzionare da sola, e anche con lo sketch precedente. Il problema é che se faccio partire lo sketch precedente non ho piú la possibilitá di scrivere sulla SD card. smiley-sad
Per farla rifunzionare mi basta eliminare la linea di codice:
Code:
       SPI.begin(CS_dac);
ma poi perdo la possibilitá di usare il DAC.

Qualcuno potrebbe aiutarmi?

So che la possibilitá sarebbe quella di utilizzare lo stesso CS pin e farmi carico di gestire per bene il bus SPI in modo tale che quando una SPI device é attiva l´altra é disattivata, ma visto che Arduino DUE da la possibilitá di utilizzare SPI devices diverse con CS diversi vorrei provare questa strada.

Grazie mille,
Fab.
45  International / Software / Arduino + SD card (Ethernet Shield) + DAC MCP4922 on: November 13, 2013, 07:28:59 am
Ciao a tutti. Sono riuscito finalmente a far funzionare la SD card e il DAC MCP4922 in maniera separata e in accoppiata con una Arduino ProtoShield (che mi serve per riportare sui pin 13 e 11 i pin 3 e 4 (Clock e MOSI) dell´SPI).
Lavoro con ARDUINO DUE.

Se faccio partire uno sketch che usa solo la SD card, come ad esempio l´esempio DataLogger della libreria SD, tutto funziona alla perfezione.

Se faccio partire uno sketch che usa solo il DAC, creato da me, tutto funziona alla perfezione.
Lo sketch per il DAC é il seguente se qualcuno é interessato:
Code:
/*
DAC _MCP4922 to DUE

This sketch allows you to interface the Arduino DUE with a DAC MCP4922.
The DAC needs a 16 bit word to work.
The first 4 bits are control bits and the remaining are bits which will contain the value you want to send.
We have 12 bit available for our message so we will have a range of values between 0 and 4095.

  Connections
  ====================================================
  
  +5V             > 4922 pin 1
  DUE pin CS      > 4922 pin 3   (SS - slave select)
  DUE SCK         > 4922 pin 4   (SCK - clock)
  DUE MOSI        > 4922 pin 5   (MOSI - data out)
  Ground          > 4922 pin 8   (LDAC)
  +3.3V           > 4922 pin 11  (voltage ref DAC B)
  Ground          > 4922 pin 12
  +3.3v           > 4922 pin 13  (voltage ref DAC A)
 
  4922 pin 14 DAC A > 1k resistor > SignalOUT(you can put this signal in a multimeter or oscilloscope to look at it)
  The other wire of the multimeter/oscilloscope should be at the same GND of the Arduino

*/

#include <SPI.h> // Include the SPI Library
// I suggest to give a first look to the following link:
// http://arduino.cc/en/Reference/SPI

#define CS 52 // It can be 10,4, or 52 . Be careful if you use an Ethernet Shield

//int value=1230;
  int value=0;
void setup() {
  // put your setup code here, to run once:
SPI.begin(CS);
SPI.setBitOrder(MSBFIRST);
pinMode(7,OUTPUT);
digitalWrite(7,HIGH);

/* Our DAC can operate at Mode 0,0 (which corresponds to mode 0 in the SPI library) and in mode 1,1 (which corresponds to mode 3 in the SPI library) */

/* I don´t know why instead the DAC is working with the following instruction??
 Everything works also without this instruction. I don´t know why!
 it´s working just with modes 2 and 3. Maybe these mode 2 and 3 corresponds
 to the mode 0,0 and 1,1 to which the MCP4922 datasheet is referring.
 To understand what I´m talking about give a look to the following page:
 http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
 in the section "Mode Numbers".
*/
SPI.setDataMode(CS, 2);
/*
From the datasheet we understand that the maximum frequency at which the DAC
can operate is 20MHz. The Arduino DUE has a system clock of 84MHz so if we don´t say
anything to the SPI library it won´t change the clock at which we will operate.
84 MHz is too big for the DAC, to change this we can use the function SPI.setClockDivider(SS,divider)
This function set the clock, for the device on pin SS, to 84/divider. The divider variable
can only be an integer. For this reason for example to have an operating clock for our device of 1MHz we
will write: SPI.setClockDivider(SS,84);
to have an operating clock for our device of 2MHz we will write: SPI.setClockDivider(SS,42); and so on.
By the way, seems that it works also without this instruction even if I have no idea what happens internally
when you don´t specify the clock of the device. Maybe, I guess it goes up to the maximum frequency of the DAC
but I´m not sure and for this reason I suggest to choose a frequency of operation and fix it with the
instruction described before.
*/
SPI.setClockDivider(CS,21); // 4MHz

}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(7,HIGH);
// Uncomment the following 3 lines if you want to ShutDown every 4 seconds the DAC  
//  digitalWrite(7,LOW);
//  delay(4000);11111010000
//  digitalWrite(7,HIGH);
    if(value>=3500){
    value=0;
    }
      
    DACset(value);
    value++;
  
}



// The following is the function needed to set a certain output of the DAC

void DACset(int value){
  // The entire message to send a 4095 number will be:
  // 0111 | 111111111111
  
  // The following is the value we want to send ;)
    //int value=1230;
  // With V_REF of 3.3 V and VDD of 5V , 2470 corresponds to 4.00V
  //                                     1230 corresponds to 2.00V
  
  // Value parsing (the following 3 lines are needed just to convert an int (32bit) in 2 bytes)  
    
    byte msg2=(byte)value;
    byte msg1=(byte)(value>>8);
    msg1=msg1 | 0b01010000;  
//  byte msg1=0b01010100; // 01111111
//  byte msg2=0b00000001; // 11111111
  
/* The DAC accepts only words of 16bit and here we are sending 2 bytes one after  another one. For more info about the SPI.transfer(…,…) function give a look to the following page: http://arduino.cc/en/Reference/SPITransfer */
  SPI.transfer(CS,msg1,SPI_CONTINUE);
  SPI.transfer(CS,msg2,SPI_LAST);
  delay(10);

}

Detto questo. Ora vorrei provare a far funzionare entrambi i dispositivi contemporaneamente anche se pilotati da due diversi CS (chipselect) cosa che dovrebbe essere fattibilissima su Arduino DUE perché ci sono 3 diversi Pins che possono funzionare da CS (10,4,52).

Allora ho scritto questo codice nel setup del mio sketch:
Pages: 1 2 [3] 4 5 ... 91