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

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

Inlägg av Spisblinkaren »

TomasL skrev: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.
Intressant, tack för informationen!
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.
Också mycket intressant!

Med andra ord så är skrivning till pinnar parallellt och med en enda cykel möjligt MEN pinnarna måste tillhöra samma port likt en dataport på en primitiv processor såsom en 6809, jag tror faktiskt jag tom förstår detta :)

MVH/Roger
PS
Tyvärr har jag kommit på att UNO är för långsam totalt sett, fast parallell skrivning till en och samma port gör projektet teoretiskt möjligt (behöver i så fall mest dra ner samplingskravet).
Användarvisningsbild
MadModder
Co Admin
Inlägg: 30015
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

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

Inlägg av MadModder »

Ja, om man t.ex har en 8-bitars processor som bara pratar 8 bitar utåt kan man inte göra annat än manipulera just 8 bitar åt gången utan yttre hjälp t.ex i form av klockade latchar. (Vilket iofs lär ge ett mätbart lagg)

Men går man ner på maskinkodsnivå så känns det tämligen direkt då det går på bara ett fåtal processorcykler.

1 Ladda ett register med ett bitmönster.
2 Spara registrets värde i en minnesadress.
3 Ladda ett register med ett bitmönster.
4 Spara registrets värde i nästa minnesadress.
osv.
Kör man på låt säga 20MHz så är då fördröjningen 100ns mellan de olika portarna. Det bör räcka till det mesta.

Det går ju att inkludera en snutt assembler som en funktion i C. Om man kan knåpa ihop en egen übersnabb portmanipulator på det viset har jag dock ingen aning om. :)
Användarvisningsbild
Icecap
Inlägg: 26148
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

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

Inlägg av Icecap »

För att klara samplingskraven behövs det en uC som är snabbare OCH har en snabb A/D-omvandlare.

Och jag håller med: Arduino är ett gift.
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 »

På de flesta större PIC18 och PIC32 kan du konfigurera en sk PMP-port vilken är 16 bitar bred, den konfigureras ofta med RD/WR strober på två andra pinnar och används ofta för att hantera externa minnen, displayer och andra pryttlar som använder 16 bitars data/adresser, ibland kan detta kombineras ihop med andra portar som då kombineras till adressportar, Med i bland upp till 32 bitars bredd.
I dessa fall så skriver man ofta full portbredd med en enda assemblerinstruktion.
Men som sagt detta gäller bara de lite mer avancerade processorerna.
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 »

En 6809 kan knappast klassas som primitiv jämfört med en PIC.
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 »

Eh, jo.
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:En 6809 kan knappast klassas som primitiv jämfört med en PIC.
Vad skön du är, 6809 är min inspiration!

MVH/Roger
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 »

OK, det beror på var på PIC-skalan man lägger sig och vad man vet om 6809.
rolex42
Inlägg: 519
Blev medlem: 11 augusti 2009, 17:12:49
Ort: Uppsala

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

Inlägg av rolex42 »

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

MVH/Roger
Spik nykter.
Det är som att säga att en tre-hjuling är ett gift. Barn kan väl få lära sig cykla hur de vill utan att det är ett gift.
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 »

Ojdå, nu blev det känsligt.

Edit: Och det är naturligtvis OK att fortsätta cykla på en trehjuling livet ut.
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 »

MadModder skrev:Ja, om man t.ex har en 8-bitars processor som bara pratar 8 bitar utåt kan man inte göra annat än manipulera just 8 bitar åt gången utan yttre hjälp t.ex i form av klockade latchar. (Vilket iofs lär ge ett mätbart lagg)

Men går man ner på maskinkodsnivå så känns det tämligen direkt då det går på bara ett fåtal processorcykler.

1 Ladda ett register med ett bitmönster.
2 Spara registrets värde i en minnesadress.
3 Ladda ett register med ett bitmönster.
4 Spara registrets värde i nästa minnesadress.
osv.
Kör man på låt säga 20MHz så är då fördröjningen 100ns mellan de olika portarna. Det bör räcka till det mesta.

Det går ju att inkludera en snutt assembler som en funktion i C. Om man kan knåpa ihop en egen übersnabb portmanipulator på det viset har jag dock ingen aning om. :)
Hej MadModder!

Det här är mycket intressant, plötsligt förstår jag vad en port är för nåt :D

Det har kanske framkommit att jag avskyr högnivåprogrammering men jag har nog aldrig fått sagt att jag älskar assembler.

Jag kan inte påstå att jag kan assembler så mycket bättre än högnivåprogrammering (C närmast) men jag har alltid gillat assembler och tyckt att det är för få gånger man faktiskt kan nyttja det, finns typ bara kompilatorer för C (fast visst, man kan maskinkoda assembler om man orkar det :) )

Jag vill hävda att man kan skapa mycket (med betoning på mycket) mer kodeffektiva program mha assembler än vad man kan med t.ex C där allt egentligen handlar om hur bra kompilatorerna är skrivna samtidigt som många programmerare nyttjar färdiga funktioner från nätet och tror att det blir optimalt (för minne finns det ju liksom gott om...)

Nej, assembler regerar fast tyvärr blir det ju lite jobbigt när adressbredden uppgår till typ 32 bitar och varje rad i den gamla hederliga radeditorn tvingas hantera 8 hexadecimala tecken...

MVH/Roger
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 »

Självklart kan du skriva program i assembler och få dem översatta till maskinkod.

För ca åtta år sedan grubblade jag rätt länge på en ARM assembler rutin som var synnerligen tidskritisk. Jag var rätt nöjd med mig själv när jag lyckades göra jobbet på 14 instruktioner (~200ns). Och det fungerade. Efter ett tag testade jag att låta gcc kompilera koden och fick ett resultat på 12 instruktioner. Som också fungerade. Sedan dess brukar jag låta kompilatorn göra sitt och kollar ibland (mer och mer sällan) resultatet.

Edit: Ingen trodde att det skulle fungera vare sig i assembler eller C.
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 »

Jag vill hävda att man kan skapa mycket (med betoning på mycket) mer kodeffektiva program mha assembler än vad man kan med t.ex C
Nej, kompilatorn är i de flesta fallen (101 fall av 100) betydligt effektivare på att generera kod än du själv någonsin kan bli.
Vi använder enbart assembler för att skapa wrappers för interruptvektorer, vilket inte går att göra i C.
Allt annat görs fasiken så mycket effektivare i C än i assembler.

Men det går ju att knåpa ihop C-kod så kompilatorn blir fullständigt hysterisk också, om man vill.
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 »

rolex42 skrev: Det är som att säga att en tre-hjuling är ett gift. Barn kan väl få lära sig cykla hur de vill utan att det är ett gift.
Det här är faktiskt en mycket bra liknelse, klockren skulle jag vilja säga.

Iom Arduino så har processorn kommit in i var mans hem och den öppnar upp möjligheter som tidigare faktiskt bara fanns för eliten.

Jag tycker Arduino både är tämligen lätt att förstå och komma igång med men också lite av en revolution vad beträffar de något mindre tekniskt bevandrade människors plötsliga möjlighet till att nyttja många av de möjligheter mikroprocessorer innebär.

Arduino är lite som Robin Hood-effekten.

MVH/Roger
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 »

Nja, det där köper jag helt enkelt inte.
Finns många betydligt bättre och roligare system, för samma peng, Dock inte lika kända kanske.
Skriv svar