Skrivning till flera portar samtidigt i Arduino UNO möjligt?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Skrivning till flera portar samtidigt i Arduino UNO möjligt?

Inlägg av Spisblinkaren »

Hej!

Jag undrar om man kan skriva parallellt till flera portar samtidigt i Arduino UNO.

Om det är möjligt vore det trevligt med en liten syntax.

Syntaxen får gärna också innehålla hur man definierar vilka portar man vill skriva till.

MVH/Roger
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av sodjan »

Vad menar du i praktiken med "parallellt" och "samtidigt"?

Processorn i en Arduino UNO kan självklart bara göra en sak i taget,
men det kanske ändå är tillräckligt för just *dina* definitioner av
"parallellt" och "samtidigt"...
Zkronk
Inlägg: 1423
Blev medlem: 23 augusti 2005, 16:44:36
Ort: Uppsala

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av Zkronk »

Användarvisningsbild
mankan
EF Sponsor
Inlägg: 908
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av mankan »

Pilla på direkt på processorns register: https://www.arduino.cc/en/Reference/PortManipulation är det vad jag kan komma på. Mindre än en till två instruktioners fördröjning mellan skrivningar till olika portar är nog svårt att undvika. Annars får du väl ha nåt externt latchat shiftregister.
SeniorLemuren
Inlägg: 7812
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av SeniorLemuren »

rogerk8 skrev:Hej!

Jag undrar om man kan skriva parallellt till flera portar samtidigt i Arduino UNO.

Om det är möjligt vore det trevligt med en liten syntax.

Syntaxen får gärna också innehålla hur man definierar vilka portar man vill skriva till.

MVH/Roger
Om man bara skall svara på frågan så blir svaret rätt och slätt nej.

mankan föreslår en lösning om du vill ställa om fler än 8 bitar samtidigt.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av lillahuset »

Arduino är ett gift.
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av Spisblinkaren »

mankan skrev:Pilla på direkt på processorns register: https://www.arduino.cc/en/Reference/PortManipulation är det vad jag kan komma på. Mindre än en till två instruktioners fördröjning mellan skrivningar till olika portar är nog svårt att undvika. Annars får du väl ha nåt externt latchat shiftregister.
Hej mankan!

Tack för ditt förslag.

Fast detta bekräftar vad jag redan har befarat dvs att portar i praktiken skrivs sekvensiellt.

Eftersom jag försöker skapa en sinus-generator mha UNO och R2R-stege så kan ju inte några övergångstillstånd finnas innan själva R2R-stegen (för då genereras spöksignaler) dvs alla bitar måste sättas samtidigt och därmed parallellt.

Jag har misstänkt problemet så jag har implementerat en HC375 (Octal D-F/F) som parallellt register och som bara uppdateras en gång per 8-bitars sekvensiell sättning av portar.

I praktiken får man då en 9 LSB längre total tid för genereringen vilket i fallet 60kHz a' 10steg blir en LSB-hastighet (om man får säga så) om 60k*10*9=5,4MHz vilket är alldeles för nära systemklockan för UNO (16MHz) som jag dessutom har uppfattat troligtvis är nedskalad (prescale) minst en faktor två vilket ger en faktisk systemklocka (E-klocka, "LSB") på 8MHz.

På det här ska systemet sen sampla ("samtidigt") där varje A/D-omvandling (successiva approximationer) tar 13 LSB samtidigt som 60kHz önskas ha 10 sampel dvs samplingen måste ske med 60kHz*10*13=7,8 MHz.

Slutsatsen måste bli att UNO inte klarar detta, den är helt enkelt för långsam.

Speciellt långsam blir den om man betänker all overhead som ska med, jag är dock osäker på vad detta egentligen betyder men klart är att alla klockcykler inte kan nyttjas, det måste finnas rum för ett visst antal administrativa klockcykler också.

MVH/Roger
PS
Nyquist-teoremet säger ju att man måste sampla med minst dubbla frekvensinnehållet så kanske man kan dra ner på samplingskravet och bara lägga ett relativt brant analogt filter på ingången. Problemet med sinus-genereringen kvarstår dock.
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av Spisblinkaren »

lillahuset skrev:Arduino är ett gift.
Är du full, eller? ;)

MVH/Roger
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av Spisblinkaren »

Zkronk skrev:Här står det hur man gör: https://www.arduino.cc/en/Reference/PortManipulation
Jag tackar för detta!

MVH/Roger
Mr Andersson
Inlägg: 1397
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av Mr Andersson »

Skilj på portar och pinnar. Du KAN skriva till alla pinnar på en port samtidigt. Du kan INTE skriva till flera portar samtidigt. Sen är det upp till dig att välja åtta utgångar som sitter på samma port.
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av Spisblinkaren »

sodjan skrev:Vad menar du i praktiken med "parallellt" och "samtidigt"?

Processorn i en Arduino UNO kan självklart bara göra en sak i taget,
men det kanske ändå är tillräckligt för just *dina* definitioner av
"parallellt" och "samtidigt"...
Hej sodjan!

När ett digitalt värde skapas av typ en räknare i en CPU så finns alla de parallella bitarna på räknarens utgång samtidigt, eller hur?

Varför är det då så svårt att bara parallell-latcha in dom bitarna i ett gäng portar?

Ser inte att sekvensiell skrivning (som är mer intuitiv ty Von Neumann-maskin oftast) som en nödvändighet i det fallet.

MVH/Roger
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av Spisblinkaren »

Mr Andersson skrev:Skilj på portar och pinnar. Du KAN skriva till alla pinnar på en port samtidigt. Du kan INTE skriva till flera portar samtidigt. Sen är det upp till dig att välja åtta utgångar som sitter på samma port.
Nu ska vi ta och fundera lite...

Intressant uttalande, känner lite till den där distinktionen ändå fast då i helt andra applikationer (CPLD).

Om jag nu få vara riktigt lat:

Om jag vill skriva till följande pinnar på min UNO, tillhör dom samma port?

IO9, IO8, IO7, IO6, IO5, IO4, IO1, IO0

MVH/Roger
PS
IO3 och IO2 har jag reserverat för "de" innehåller "interrupt-on-change" vilket känns bra ur tryckknapp-avseende.
Användarvisningsbild
Spisblinkaren
EF Sponsor
Inlägg: 12990
Blev medlem: 13 december 2012, 21:41:43

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av Spisblinkaren »

SeniorLemuren skrev: Om man bara skall svara på frågan så blir svaret rätt och slätt nej.

mankan föreslår en lösning om du vill ställa om fler än 8 bitar samtidigt.
Hej SeniorLemuren!

Nej, jag behöver inte ställa om fler än 8 bitar samtidigt, jag behöver ställa om exakt 8 bitar samtidigt.

Hoppas du inte tycker jag är en språkpolis nu :)

MVH/Roger
PS
Fast det skiter sig ändå, jag har för små marginaler både med sinus-genereringen och samplingen och jag har gett mig fan på att jag vill kunna generera och sampla 6Hz-60kHz med bra upplösning. Anledningen är att om man t.ex sveper en förstärkare inom det hörbara frekvensområdet så blir det oftast bara ett rakt streck map amplituden, det intressanta händer egentligen utanför det hörbara frekvensområdet. Om jag får drömma lite hade 1Hz till 1MHz varit än mer önskvärt.
Senast redigerad av Spisblinkaren 25 november 2016, 20:48:29, redigerad totalt 1 gång.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av lillahuset »

rogerk8 skrev:
lillahuset skrev:Arduino är ett gift.
Är du full, eller? ;)

MVH/Roger
Spik nykter.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45304
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Skrivning till flera portar samtidigt i Arduino UNO möjl

Inlägg av TomasL »

I en microprocessor som exempelvis AVR, PIC etc, dvs de typer som kan förekomma på en Arduino, samt alla andra typer av normala processorer så är en PORT en samling av (Databitar) dvs normalt fysiska IO-pinnar, kan vara 1 bit upp till 16 som PMP-porten på vissa PICar.
Detta för att förenkla hanteringen av processorns IO-pinnar.
Du kan INTE skriva till mer än en port i taget, däremot kan du skriva till enskilda pinnar eller till alla inom en port.
Om jag vill skriva till följande pinnar på min UNO, tillhör dom samma port?

IO9, IO8, IO7, IO6, IO5, IO4, IO1, IO0
Det får du studera i manualen, huruvida dessa tillhör en och samma port eller är utspridda på flera portar.

Orsaken är naturligtvis bredden på databussen, samt att man helt enkelt bestämt sig för att inte kunna skriva till mer än en port samtidigt.
Dessutom ligger ofta portarna utspridda i kislet på olika icke närliggande adresser.
Skriv svar