SPI-problem, Arduino med flera SPI-enheter

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
JanErik
Inlägg: 3191
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

SPI-problem, Arduino med flera SPI-enheter

Inlägg av JanErik »

Har en ethernet-shield med ENC28J60 och en AS3935 åskdetektor som jag vill få att fungera tillsammans.
Enskilt fungerar AS3935 bra, men inte på ethernet-shielden.
Ethernet-shielden använder CS på pin 10, den ser jag till att skriva hög direkt, och den stannar också hög.
AS3935 har jag satt CS på pin 4, den dras också låg som den ska.
Men av nån anledning drar ethernet-shielden MISO (12) låg, AS3935 försöker mata ut data men orkar bara en 600 mV. Om jag kopplar ur den ledningen ger den en puls vid uppstart.
På SCK (13) och MOSI(11) ser jag pulståg.
Har både prövat initialisera ethernet-modulen och helt lämna bort dess bibliotek, likadant.
JanErik
Inlägg: 3191
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av JanErik »

Har kommit fram till att den är kopplad såhär med en AND-grind som buffert;
http://forum.arduino.cc/index.php?topic=19041.0

Borde man då kunna sätta en resistor från grindens utgång till shieldens pin 12 så att den inte kan dra MISO låg, som säkert går emot SPI-standarden?
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av Icecap »

Problemet är att grinden inte "släpper" MISO. Grinden är med för att fungera som nivå-omvandlare.

Och det går att omvandla nivån på ett sätt som fungerar - men då måste grinderna bort och ersättas av var sin LL N-MOSFET samt ett par motstånd. Det blir en del pillande men det går.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av hanzibal »

@JanErik: Om du använder Arduino skall väl 3v3-logik funka på miso och då bör du ju kunna löda bort den där bufferten/nivåomvandlaren och koppla direkt till enc28j60.

Detta skulle då kräva att man stänger av Arduino-intern 5V pull-up på miso och kör med extern pull-up till 3v3 istället.

Alternativt kör du om möjligt åskchipet på i2c så ethernet har spi för sig själv.
JanErik
Inlägg: 3191
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av JanErik »

Satte en 15k resistor i serie, funkar bra.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av hanzibal »

Det var ju smidigt :) Antar ett detta försvagar nivåomvandlarens "pull-down"-effekt varvid åskchipet orkar lyfta med hjälp av Arduinons pull-up?
JanErik
Inlägg: 3191
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av JanErik »

Funkade inte så bra det även om åskchippet fungerade och det gick att skicka paket, men Atmegans SPI håller tydligen MISO låg så den orkade inte dra upp den genom en 15k resistor.
Det ledde till att det inte gick att läsa inkommande paket även om det gick att sända, lustigt nog.

Bytt ut resistorn till en diod istället...
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av hanzibal »

Det är väl AtMega som kör SPI-bussen så att den skulle hålla MISO låg blir ju väldigt kontraproduktivt om den samtidigt förväntar sig data där...
JanErik
Inlägg: 3191
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av JanErik »

Får dem fortfarande inte att fungera tillsammans.
Med bara en resistor på MISO går det att skicka paket med AS3935 inkopplad, men inte att ta emot - nätkontaktens LED blinkar dock och nätchippet drar ner sin interrupt när den borde få ett paket.

Med bara en diod på MISO går det både att sända och ta emot paket, men så fort man drar AS3935:s CS hög slutar ethernet fungera - när man försöker skicka ett paket blinkar nog LEDen men inget kommer fram. Ingen skillnad om man sätter den hög före eller efter att ethernet-chippet har initialiserats.

Med både diod och pulldown på 15k funkar ethernet inte alls ensamt, bara när AS3935 är inkopplad, men slutar fungera när man sätter dess CS hög.

Har mätt på AS3935 och dess MISO går klart i högimpedans när man sätter CS hög, steg till ungefär 0.5V oinkopplad.

Förstår inte vad jag ska pröva som nästa, är enda möjligheten en tri-state buffer på ethernets MISO? Kan AS3935 ha för höga kapacitanser eller nåt med CS hög?

Borde kolla med skopet så att den inte skriver nåt när CS dras hög. Har använt en simple UDPClient-sketch utan att alls blanda in AS3935:s bibliotek.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av hanzibal »

AS3935 stödjer som sagt även kommunikation via i2c. Är det pga du använder en färdig "shield" som du inte kan köra i2c med AS3935?

Enc28j60 hade ju annars fått ensamrätt till SPI-bussen och problemet ett minne blott.
JanErik
Inlägg: 3191
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av JanErik »

Nej, det är för att det finns färdigt bibliotek för SPI ;)
Och för att det SKA fungera. Dessutom ska jag haka på ännu en SPI-enhet (radiomodul) och då måste det fungera.
Verkar som UIP-Ethernet sätter SPI-bussens klocka till fosc/2, kanske borde pröva lite lägre hastighet.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av hanzibal »

Jag har uppfattat att det är enc28j60-kortets nivåomvandlare (nand) som ställer till det. Det är ju korrekt att AS3935 lägger hiZ på miso när man driver dess cs hög.

Det rätta är nog att ersätta enc28j60-kortets nivåomvandlare med något eget som inte stör miso när cs är hög.

Om det hjälper har jag ett enc28j60-kort liggande utan nivåomvandlare som du kan få av mig. Är dock ingen shield utan enkelt breakout-kort.
JanErik
Inlägg: 3191
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av JanErik »

Verkar nog som det bara hängde på hastigheten - satte den till clk/16 nu i ENC28J60:s initialisering och det fungerar. Det skulle AS3935:s initialisering också ha gjort men det fungerade ändå inte.
Tar också och skriver hög till båda CS _före_ jag sätter dem till utgångar som beskrivits här; https://code.google.com/p/arduino/issues/detail?id=888
JanErik
Inlägg: 3191
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: SPI-problem, Arduino med flera SPI-enheter

Inlägg av JanErik »

Har nu också en modul utan AND-grind som nivåskift, ska man tro dethär funkar som nivåskift; http://husstechlabs.com/support/tutoria ... l-shifter/ ?
Skriv svar