Vad ska man tänka på om man isolerar SPI genom optokopplare?
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Umpf, mycket att tänka på. Men det är väl också syftet med den här tråden..
Snällt av dig att ta dig tid och bläddra i det bladet också.
Lägger till detta till min "att-tänka-på"-lista.
EDIT: Då kanske jag ska kika närmre på dom där logik-isolatorerna som jag länkade till istället.
Snällt av dig att ta dig tid och bläddra i det bladet också.
Lägger till detta till min "att-tänka-på"-lista.
EDIT: Då kanske jag ska kika närmre på dom där logik-isolatorerna som jag länkade till istället.
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Du skulle kunna ta en ADUM1401 och göra den hålmonterad med ett litet adapterkort.
http://www.ebay.com/itm/5pcs-SO16-SSOP1 ... 2a3b95c4a7
Alternativt så funkar denna adapter http://www.lawicel-shop.se/prod/SOIC-to ... 68/SWE/SEK
http://www.ebay.com/itm/5pcs-SO16-SSOP1 ... 2a3b95c4a7
Alternativt så funkar denna adapter http://www.lawicel-shop.se/prod/SOIC-to ... 68/SWE/SEK
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Varför inte ta en PIC, låta den mäta spänningen och skicka data seriellt via en enda optokopplare som då kan kostas på lite och köra skapligt snabbt via UART?
Är hastighet viktig kan isoleringen ske med en transformator och en op-amp, då kan man komma upp i trevliga hastigheter - fast det ju inte behövs.
Fördelen med UART-möjligheten är att kör man väldig låg baudrate klarar en simpel optokopplare lätt jobbet och mottagningen kan ske med interruprstyrd mottagning och därmed belasta "huvuddatorn" minimalt.
Är hastighet viktig kan isoleringen ske med en transformator och en op-amp, då kan man komma upp i trevliga hastigheter - fast det ju inte behövs.
Fördelen med UART-möjligheten är att kör man väldig låg baudrate klarar en simpel optokopplare lätt jobbet och mottagningen kan ske med interruprstyrd mottagning och därmed belasta "huvuddatorn" minimalt.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Det är helt klart ett alternativ Micke_s. Tror till och med jag kan ha någon sån här adapter hemma...
Så kan man säkert också göra Icecap dock så skulle jag vilja få ordning på just SPI och hantera 12-bitars data, något jag aldrig gjort innan. Å andra sidan så kvarstår din idé som ett alternativ!
Det jag inte har någon som helst koll på är det du trycker på sist; hur man belastar "huvuddatorn" minimalt.
Jag har funderat en del på detta men inte kommit så långt då jag inte har så bra koll på SPI och hur det fungerar.
Originaltanken var att ADC:n matar data på SPI snöret i den takt den kan hantera medans huvuddatorn plockar datan först när den behöver. Alltså någon slags timer/interrupt som jag ställer in som jag vill.
Normalt sett, om man har lite koll på vad man håller på med, så misstänker jag att man går åt andra hållet än vad jag gör här. Dvs man vet från börjar hur många samples per sekund man vill ha till "huvuddatorn" och sedan dimensionerar optokopplaren/ADC:n utefter det.
I mitt fall så har jag inte en aning men vill köpa hem lite olika komponenter som i alla fall fungerar ihop. Om det i slutändan visar sig att det går för långsamt så har jag i alla fall mer kött på benen för att göra nya inköp.
I nuläget blir det nog en MCP3201 som ADC och SPI till µC:n via en sån där ADUM1X01. Det känns som en kul första möjlig lösning.
Så kan man säkert också göra Icecap dock så skulle jag vilja få ordning på just SPI och hantera 12-bitars data, något jag aldrig gjort innan. Å andra sidan så kvarstår din idé som ett alternativ!
Det jag inte har någon som helst koll på är det du trycker på sist; hur man belastar "huvuddatorn" minimalt.
Jag har funderat en del på detta men inte kommit så långt då jag inte har så bra koll på SPI och hur det fungerar.
Originaltanken var att ADC:n matar data på SPI snöret i den takt den kan hantera medans huvuddatorn plockar datan först när den behöver. Alltså någon slags timer/interrupt som jag ställer in som jag vill.
Normalt sett, om man har lite koll på vad man håller på med, så misstänker jag att man går åt andra hållet än vad jag gör här. Dvs man vet från börjar hur många samples per sekund man vill ha till "huvuddatorn" och sedan dimensionerar optokopplaren/ADC:n utefter det.
I mitt fall så har jag inte en aning men vill köpa hem lite olika komponenter som i alla fall fungerar ihop. Om det i slutändan visar sig att det går för långsamt så har jag i alla fall mer kött på benen för att göra nya inköp.
I nuläget blir det nog en MCP3201 som ADC och SPI till µC:n via en sån där ADUM1X01. Det känns som en kul första möjlig lösning.
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Det kan nog bli tillräckligt bra så som du tänkt och du kommer att märka att SPI är väldigt enkelt - särskilt i detta fall där kommunikationen med mcp3201 ju är enkelriktad - i princip klockar du ut data från ett 15-bitars skiftregister.
Mcp3201 är enkel att hantera och ger nog viss uC-avlastning om än inte så mycket som Icecaps förslag.
Det skulle förresten förvåna mig om mcp3201 inte huvudsakligen är en PIC under huven. Microchip gör ofta så.
Mcp3201 är enkel att hantera och ger nog viss uC-avlastning om än inte så mycket som Icecaps förslag.
Det skulle förresten förvåna mig om mcp3201 inte huvudsakligen är en PIC under huven. Microchip gör ofta så.
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Magnus_K: med tanke på dina trådar i allmänhet skulle jag tro att du kommer att lösa timingen i SPI-kommunikationen med delay() eller liknande. Detta kommer att låsa µC'n under tiden och om det är med UART eller SPI betyder mindre om bara det hela kör med interruptstyrning.
Utan interruptstyrning är speciellt långsam kommunikation ett problem.
Själv har jag lösa 1-Wire® kommunikation med en timer-interrupt, omvandlingen och hämtning av data sker ju inte blixtsnabbt - men den sker och tar väldig liten µC-tid.
Använder du redan interrupts är det riktigt bra, fortsätt med det och i så fall har jag helt fel.
Använder du inte interrupts är det verkligen dags att börja, det kommer att ändra väldigt mycket och göra livet mycket lättare.
Utan interruptstyrning är speciellt långsam kommunikation ett problem.
Själv har jag lösa 1-Wire® kommunikation med en timer-interrupt, omvandlingen och hämtning av data sker ju inte blixtsnabbt - men den sker och tar väldig liten µC-tid.
Använder du redan interrupts är det riktigt bra, fortsätt med det och i så fall har jag helt fel.
Använder du inte interrupts är det verkligen dags att börja, det kommer att ändra väldigt mycket och göra livet mycket lättare.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Jodå, vänliga forum-medlemmar har lärt mig använda interrupts, som tex i denna tråd.
Här förstår jag att jag måste använda interrupts och är redan inställd på det det var det jag menade lite kryptiskt med nedan "Alltså någon slags timer/interrupt som jag ställer in som jag vill".
Det låter bra det du säger hanzibal och testar detta till en början. Förhoppningsvis blir det en bra övning och underlättare för vidare utveckling.
Tackar för hjälpen!
EDIT: Måste bara få fråga dig Micke_s om ADUM-IC:n. Är det av någon speciell anledning som du tycker jag ska välja 4-kanalers interfacet? Då jag bara behöver en kanal så ser jag ingen direkt skillnad i "performance" till den mindre 2-kanalers, i samma serie. ADUM1201

Här förstår jag att jag måste använda interrupts och är redan inställd på det det var det jag menade lite kryptiskt med nedan "Alltså någon slags timer/interrupt som jag ställer in som jag vill".
Det låter bra det du säger hanzibal och testar detta till en början. Förhoppningsvis blir det en bra övning och underlättare för vidare utveckling.
Tackar för hjälpen!
EDIT: Måste bara få fråga dig Micke_s om ADUM-IC:n. Är det av någon speciell anledning som du tycker jag ska välja 4-kanalers interfacet? Då jag bara behöver en kanal så ser jag ingen direkt skillnad i "performance" till den mindre 2-kanalers, i samma serie. ADUM1201
Senast redigerad av Magnus_K 23 november 2014, 16:51:54, redigerad totalt 1 gång.
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Magnus_K: skitbra! Då kommer det att gå som på räls!
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Jag är också förespråkare av interrupthantering men...
Om jag fattat rätt bör man kunna klocka mcp3201 uppåt 1,5MHz.
Då skulle man med väldigt kompakt kod (ett fåtal nop:ar i loopen beroende på uC-hastighet) kunna bitbanga in de 15 bitarna på mycket kort tid.
*Om* man bara behöver göra detta några gånger i sekunden skulle det bli ett väldigt enkelt och ganska resurssnålt alternativ.
Om jag fattat rätt bör man kunna klocka mcp3201 uppåt 1,5MHz.
Då skulle man med väldigt kompakt kod (ett fåtal nop:ar i loopen beroende på uC-hastighet) kunna bitbanga in de 15 bitarna på mycket kort tid.
*Om* man bara behöver göra detta några gånger i sekunden skulle det bli ett väldigt enkelt och ganska resurssnålt alternativ.
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
hanzibal: har du missat optokopplar-isoleringen?
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Trodde man hade en snabb optokopplare som det där adumxx-chipet.
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Om det är 15 bit som ska överföras blir det "alltid" i bytes, alltså 16 bit.
Det ska ganska sannolikt skickas ett "gör en konvertering"-kommando också, jag antar att det är andra 16 bit, bara för att göra det enkelt.
För 1 uppdatering behöver man ändra en sak i sekvensen runt 66 gångar (32 klockpulser + handskakningen med CS).
Alltså 1 ändring av data varannan gång samt en höjning/sänkning av klockan. Detta är en mycket snabb rutin att utföra.
Detta betyder att för att få en uppdatering 3gg/sek behövs en timer-interrupt på 198Hz, säg 200Hz.
Själva rutinen kommer att gå väldigt snabbt för varje interrupt varför belastningen blir väldig minimal.
Det ska ganska sannolikt skickas ett "gör en konvertering"-kommando också, jag antar att det är andra 16 bit, bara för att göra det enkelt.
För 1 uppdatering behöver man ändra en sak i sekvensen runt 66 gångar (32 klockpulser + handskakningen med CS).
Alltså 1 ändring av data varannan gång samt en höjning/sänkning av klockan. Detta är en mycket snabb rutin att utföra.
Detta betyder att för att få en uppdatering 3gg/sek behövs en timer-interrupt på 198Hz, säg 200Hz.
Själva rutinen kommer att gå väldigt snabbt för varje interrupt varför belastningen blir väldig minimal.
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Det blir faktiskt ännu bättre eftersom chipet kör enkelriktad SPI. Kovertering startar så snart klockan går hög efter att man sänkt !CS och två klockpulser senare kommer första databiten (MSB först) följd av resterande 11.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Sitter och läser ikapp som en dåre på SPI kommunikation och försöker hänga med på det ni skriver.
Tänkte återkomma med en liten sammanfattning men jag har några lite halv-OT frågor som jag måste få passa på att ställa innan jag blir precis tokig:
Säg att jag har ett "data buffer register(BUF)" och ett "shift register (SR)" som används vid SPI-kommunikationen. Registren är på 8-bitar. När 8 bitar data (1 byte) anlänt så så skiftas det över från SR till BUF och jag får en interrupt-flagga.
Först när denna skiftningen sker så kommer jag åt datan från BUF och kan använda den vidare.
Tre frågor om detta:
Fråga 1 och 2: Hur tar jag hand om data som är över 8 bitar med ett register som bara är 8 bitar?
Säg att datan är 15 bitar. Först anländer som 8 första och skiftet sker. Skiftar den över från SR till BUF så snabbt så ingen bit går förlorad??
Fråga 3. Tömmer jag buffern till ett annat ställe och sedan slår jag ihop den datan ihop med nästa byte och placerar detta, vart?
(Som ni förstår är det kanske lite mer relaterat till programmering men tänkte att det går lite hand i hand just nu)
Tänkte återkomma med en liten sammanfattning men jag har några lite halv-OT frågor som jag måste få passa på att ställa innan jag blir precis tokig:
Säg att jag har ett "data buffer register(BUF)" och ett "shift register (SR)" som används vid SPI-kommunikationen. Registren är på 8-bitar. När 8 bitar data (1 byte) anlänt så så skiftas det över från SR till BUF och jag får en interrupt-flagga.
Först när denna skiftningen sker så kommer jag åt datan från BUF och kan använda den vidare.
Tre frågor om detta:
Fråga 1 och 2: Hur tar jag hand om data som är över 8 bitar med ett register som bara är 8 bitar?
Säg att datan är 15 bitar. Först anländer som 8 första och skiftet sker. Skiftar den över från SR till BUF så snabbt så ingen bit går förlorad??
Fråga 3. Tömmer jag buffern till ett annat ställe och sedan slår jag ihop den datan ihop med nästa byte och placerar detta, vart?
(Som ni förstår är det kanske lite mer relaterat till programmering men tänkte att det går lite hand i hand just nu)
Re: Vad ska man tänka på om man isolerar SPI genom optokoppl
Du kommer att få ta emot 16 bitar, en byte i taget och du hinner spara undan den höga byten (den första) i den vänstra halvan av en 16-bitars variabel som du deklarerat.
När den lägre byten kommer, sparar du den i den högra halvan av din variabel och sen skiftar du allt ett steg till höger innan du vid behov slutligen AND:ar med 0xfff.
När den lägre byten kommer, sparar du den i den högra halvan av din variabel och sen skiftar du allt ett steg till höger innan du vid behov slutligen AND:ar med 0xfff.
Kod: Markera allt
// din 16-bit variabel
unsigned short val;
// spara hög byte vid 1:a interrupt
val = BUF;
val <<= 8;
// spara låg byte vid 2:a interrupt
val |= BUF;
// färdigställ
val >>= 1;
val &= 0xfff;