Sida 2 av 5

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

Postat: 25 november 2016, 20:57:53
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).

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

Postat: 25 november 2016, 21:00:10
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. :)

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

Postat: 25 november 2016, 21:01:37
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.

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

Postat: 25 november 2016, 21:07:44
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.

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

Postat: 25 november 2016, 21:11:18
av lillahuset
En 6809 kan knappast klassas som primitiv jämfört med en PIC.

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

Postat: 25 november 2016, 21:18:29
av TomasL
Eh, jo.

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

Postat: 25 november 2016, 21:22:45
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

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

Postat: 25 november 2016, 21:24:09
av lillahuset
OK, det beror på var på PIC-skalan man lägger sig och vad man vet om 6809.

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

Postat: 25 november 2016, 21:24:48
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.

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

Postat: 25 november 2016, 21:27:07
av lillahuset
Ojdå, nu blev det känsligt.

Edit: Och det är naturligtvis OK att fortsätta cykla på en trehjuling livet ut.

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

Postat: 25 november 2016, 21:38:05
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

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

Postat: 25 november 2016, 21:49:38
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.

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

Postat: 25 november 2016, 21:56:46
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.

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

Postat: 25 november 2016, 22:00:52
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

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

Postat: 25 november 2016, 22:09:50
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.