Sida 4 av 5

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 26 november 2014, 14:51:21
av sodjan
> Då kommer den att gå '1' -> '0' -> '1' vilket kan vara olämpligt,

Man kan undvika det om man väljer OR för "set" och AND för "clear".

För att sätta en bit (bit 3 i detta fall):

PORTA |= 0b00001000;

För att "cleara" samma bit:

PORTA &= 0b11110111;

Här används konstanter. Om aktull bit ska vara dynamisk för man skapa
rätt bitmönster i ett register först och sedan anda/ora mot det.

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 26 november 2014, 16:35:09
av Magnus_K
@Icecap:
Tack för det förtydligandet!

@sodjan:
Ahaaa, har även sett detta i annans kod innan men inte förstått anledningen eller funktionen. Känns som att man bara går från klarhet till klarhet.

På något sätt känns det som att det här var en nyckel till att kunna hantera/behandla/modifera registren på ett otroligt flexibelt och användbart sätt. Det har redan löst flera frågor jag har i mitt block om hur jag ska läsa ur vissa värden ur register och slå samman med andra etc.
Ja, väldigt tacksam är jag.

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 26 november 2014, 17:11:18
av sodjan
Avslutningsvis så vill jag bara notera att om prestanda har en större
betydelse i det aktuella fallet, så kan det vara bra att kolla ASM
listningen från kompilatorn. Det som ser kompakt och "smart" ut
i C-koden kan generera mer kod än vad lite mer C-kod hade gjort.
Det är ju det som är själva meningen med kompilatorer, att skriva
lite egen kod och få mycket maskinkod tillbaka... :-)

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 26 november 2014, 17:25:32
av Magnus_K
Hur osannolikt det än låter så hade den tanken redan slagit mig!
Det måste ju vara ett utmärkt sätt att kolla hur effektiv koden blir för att tex, som i mitt fall, få bra prestanda i en interrupt-rutin.

Får leveransen imorrn och ska knåpa med detta i helgen. Återkommer!

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 26 november 2014, 17:40:44
av hanzibal
sodjan skrev:> Då kommer den att gå '1' -> '0' -> '1' vilket kan vara olämpligt,

Man kan undvika det om man väljer OR för "set" och AND för "clear".

För att sätta en bit (bit 3 i detta fall):

PORTA |= 0b00001000;

För att "cleara" samma bit:

PORTA &= 0b11110111;

Här används konstanter. Om aktull bit ska vara dynamisk för man skapa
rätt bitmönster i ett register först och sedan anda/ora mot det.
Det finns fall där inte heller detta ger önskat resultat beroende på typ av uC och hur porten är konfigurerad (t.ex. vid open drain eller liknande). Då funkar det bara genom att ha ett globalt skuggregister i RAM som man alltid först manipulerar och sen skriver till porten. Denna lärdom blev mig en gång mycket dyrköpt :D

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 26 november 2014, 18:41:47
av sodjan
OK... :-)

För att sätta en bit (bit 3 i detta fall):

LATA |= 0b00001000;

För att "cleara" samma bit:

LATA &= 0b11110111;

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 26 november 2014, 18:52:54
av hanzibal
Antar att de där är portlatcharna *på PIC* och då existerar ju inte problemet.

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 26 november 2014, 19:10:05
av sodjan
Ja, jag kan inte hålla reda på vad var och en kör.
Jag tror inte det har framgått i denna tråd...

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 26 november 2014, 19:30:53
av Icecap
Det finns lite olika sätt att lösa det på, vilket sätt som passar bäst får avgöras från situation till situation. TS verkar iaf. ha sett ljuset och det är det viktiga!

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 5 december 2014, 01:50:30
av Magnus_K
Nu kommer vi antagligen tillbaka till att jag inte kan det digitala men ytterligare en sak jag inte förstår:

A/D-convertern jag köpt är som sagt en MCP3201.
Jag ska mata denna med Vdd, Vss, Vref, IN+ och IN-. Ut ska jag sedan få spänningen digitalt över SPI.

Ett exempel. Matar med:
  • Vdd = 5V
    Vss = 0V
    Vref = 5V
    IN+ = 3V
    IN- = 0V
Enligt denna formeln
Formel.JPG
så ska ovan data generera en "Digital output code" på "2457,6".
Det är detta jag inte förstår. Hur skrivs 2457,6 binärt? Eller snarare, vad är det för värde som kommer ut?

Har säkert läst detta i databladet men inte förstått.

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 5 december 2014, 06:28:12
av Andax
Du får ut ett heltal. AD har inga decimaler. Har du en 12-bitars AD så får du ut ett tal mellan 0 och 4095 där 0 är vid 0V in och 4095 är vid Vref in.

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 5 december 2014, 11:29:48
av Magnus_K
:doh:
Tack Andax.
Nu ska jag gå och dra något gammalt över mig.

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 5 december 2014, 11:55:25
av AndersG
Orkade inte läsa igenom alla inlägg, men jag har en konstruktion någonstans med isolerad SPI/I2C, skall kolla vad jag använde där...

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 5 december 2014, 12:09:20
av Icecap
Magnus_K: detta är just problemet med AD-omvandling. Man kan bara få heltal varför man tappar värden som ligger mitt emellan. Man kan delvist lösa detta vid att ha en AD men fler bit men dessa kostar, tar tid för en omvandling och har andra problem.

Så "bäst möjlig" kan ha få bit men vara satans snabb - eller ha många bit och vara långsam. Har man riktigt bra med pengar kan man köpa snabba omvandlare med många bit.

Re: Vad ska man tänka på om man isolerar SPI genom optokoppl

Postat: 5 december 2014, 15:38:21
av TomasL
Du kan ju också köra det hela genom en isolerad RS232 eller RS485-krets utan problem.