• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Expander PCF 8574 dekaracja pinów jako define
#1
Witam!
W moim projekcie brakło mi wyjść więc zakupiłem dwa expandery PCF8574 i wszystko działa jak należy, jednak powstał problem po dołączeniu do projektu płytki VS1053 odpowiedzialnej za dźwięk. Skorzystałem z biblioteki adafruit i też Arduiono gra jak należy. 
Do brzegu:
Płytka VS1053 zajmuje mi w arduino zbyt wiele pinów, ale mam kilka wolnych z ekspandera, ale nie mogę sobie poradzić z deklaracją pinów ekspandera tak by przerzucić piny z arduino na ekspander. Jeżeli chodzi o kod to użyję skrótu myślowego, gdyż całego nie ma sensu wrzucać:
Kod:
‪#‎include‬ <PCF8574.h>
#include <Wire.h>
// include SPI, MP3 and SD libraries
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>
// --------------------------Chodzi właśnie o te zdefiniowane piny by użyć tych z ekspandera
//‪#‎define‬ CLK 13 // SPI Clock, shared with SD card
#define MISO 12 // Input data, from VS1053/SD card
#define MOSI 11 // Output data, to VS1053/SD card
// Connect CLK, MISO and MOSI to hardware SPI pins.
// See http://arduino.cc/en/Reference/SPI "Connections"
// These are the pins used for the breakout example
//#define BREAKOUT_RESET 9 // VS1053 reset pin (output)
#define BREAKOUT_CS 10 // VS1053 chip select pin (output)
#define BREAKOUT_DCS 8 // VS1053 Data/command select pin (output)
// These are common pins between breakout and shield
#define CARDCS 4 // Card chip select pin
// DREQ should be an Int pin, see http://arduino.cc/en/Reference/attachInterrupt
#define DREQ 3 // VS1053 Data request, ideally an Interrupt pin

//---------------Tu mam zdefiniowany ekspander
PCF8574 expander;

void setup()
{
//-----------------------definiowanie wyjść pierwszego ekspandera
expander.begin(0x20); //pierwszy ekspander
expander.pinMode(0, OUTPUT); //pierwsza dioda oko BB
expander.pinMode(1, OUTPUT);
expander.pinMode(2, OUTPUT);
expander.pinMode(3, OUTPUT);
expander.pinMode(4, OUTPUT);
expander.pinMode(5, OUTPUT);
expander.pinMode(6, OUTPUT); //hologram
//--------------------funkcja odpowiedzialna za wydobywanie dźwięku
voices(3);
}
void loop(){
}

void voices(int nr){
//--------------------Tu są zdefinowane te piny które chcę przerzucić
Adafruit_VS1053_FilePlayer musicPlayer =
Adafruit_VS1053_FilePlayer(BREAKOUT_RESET, BREAKOUT_CS, BREAKOUT_DCS, DREQ, CARDCS);
Serial.begin(9600);
if (! musicPlayer.begin()) { // initialise the music player
Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
while (1);
}
SD.begin(CARDCS); // initialise the SD card
musicPlayer.setVolume(0,0);
musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT); // DREQ int
if(nr==1)
musicPlayer.playFullFile("track001.mp3");
if(nr==2)
musicPlayer.playFullFile("track002.mp3");
if(nr==3)
musicPlayer.playFullFile("track003.mp3");
if(nr==4)
musicPlayer.playFullFile("track004.mp3");
if(nr==5)
musicPlayer.playFullFile("track005.mp3");
if(nr==6)
musicPlayer.playFullFile("track006.mp3");
}
 
Odpowiedź
#2
Witam,
To się nie uda. Piny o których wspominasz to piny sprzętowego interfejsu szeregowego SPI. Biblioteka obsługująca układ VS1053 korzysta ze sprzętowego SPI własnie ( stąd wymaganie obecności biblioteki SPI ).
 
Odpowiedź
#3
No spoko ale jeśli się nie uda to musi być jakiś sposób by to obejść... inaczej do arduino nie można by było podpiąć za wiele...
 
Odpowiedź
#4
(07-03-2016, 20:07)Magikkomputerowy napisał(a): No spoko ale jeśli się nie uda to musi być jakiś sposób by to obejść... inaczej do arduino nie można by było podpiąć za wiele...

Ale dlaczego nie ? Myślę, że nieco mylisz pojęcia.
Expanderem podłączonym do szyny I2C można zwiększyć ilość wejść i wyjść cyfrowych. Jeśli mowa o PCF8574 to można ich podłączyć 8 sztuk do jednej szyny. Są także expandery z 16 wyjściami/ wejściami ( np. MCP23017 ).
Wejścia/ wyjścia analogowe także można "dokładać".
Również do magistrali szeregowej SPI można podłączyć WIELE układów na raz pod warunkiem, że każdy z tych układów będzie miał osobny pin CS.
Ale nie da się na tych wyjściach emulować sprzętowej magistrali SPI ! Expandery są po prostu za wolne. Nie mówiąc już o tym, że musiał byś przepisać bibliotekę obsługującą układ V1053 a domyślam się, że to nie wchodzi w grę Wink
Podłączasz więc układ V1053 pod sprzętowe SPI arduino, zgodnie ze schematem, a resztę pinów cyfrowym ogólnego przeznaczenia możesz sobie rozszerzyć odpowiednimi expanderami. Innej możliwości nie ma, nie tylko w Arduino.
 
Odpowiedź
#5
(09-03-2016, 14:56)zster napisał(a):
(07-03-2016, 20:07)Magikkomputerowy napisał(a): No spoko ale jeśli się nie uda to musi być jakiś sposób by to obejść... inaczej do arduino nie można by było podpiąć za wiele...

Ale dlaczego nie ? Myślę, że nieco mylisz pojęcia.
Expanderem podłączonym do szyny I2C można zwiększyć ilość wejść i wyjść cyfrowych. Jeśli mowa o PCF8574 to można ich podłączyć 8 sztuk do jednej szyny. Są także expandery z 16 wyjściami/ wejściami ( np. MCP23017 ).
Wejścia/ wyjścia analogowe także można "dokładać".
Również do magistrali szeregowej SPI można podłączyć WIELE układów na raz pod warunkiem, że każdy z tych układów będzie miał osobny pin CS.
Ale nie da się na tych wyjściach emulować sprzętowej magistrali SPI ! Expandery są po prostu za wolne. Nie mówiąc już o tym, że musiał byś przepisać bibliotekę obsługującą układ V1053 a domyślam się, że to nie wchodzi w grę Wink
Podłączasz więc układ V1053 pod sprzętowe SPI arduino, zgodnie ze schematem, a resztę pinów cyfrowym ogólnego przeznaczenia możesz sobie rozszerzyć odpowiednimi expanderami. Innej możliwości nie ma, nie tylko w Arduino.
Matka jest potrzebą wynalazków, dlatego wymyśliłem inne rozwiązanie użyję samego ATMega do obsługi części funkcji robota i dołożę drugiego do obsługi innej częsci... Wiem, że może nie najwydajniejsze rozwiązanie, ale rozwiąże problem, bo niestety potrzebuję jeszcze kilka pinów SPI. To tak jakbym pakował dwa arduina do jednego robota, ale sytuacja tego wymaga. Za kilka dni pokażę w sieci co buduję i jak to działa... Przede mną sporo pracy w, z i na Arduino Wink
 
Odpowiedź
#6
Można i tak choć to przerost formy nad treścią Smile Jednym można załatwić wszystko i to w prosty sposób...
Ale trzymam kciuki - w razie czego pomożemy Smile
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości