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

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
SeniorLemuren
Inlägg: 7811
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 »

Läs mer om detta här. Tänk på att Do D1 även är även är seriekommunikationsport RX TX . Vill du använda den så är det kanske bättre att satsa på en Arduino Mega 2560 som har dubbla serieportar, se pinoutdiagrammet längre ner på sidan.
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 »

rogerk8 skrev:Jag kommer istället använda IO8&9 för knapp-ingång respektive LED och IO0-7 för sinus-genereringen.

När det gäller knappen måste det vara möjligt att skriva egen interrupt-rutin för den, alternativt kan man alltid köra polling ;)
Alla IO märkta PCINT (Pin Change INTerrupt) kan trigga interrupts, så 8&9 ska fungera.

Skillnaden mellan INT (pin 2&3) och PCINT (alla andra pins) är att INT kan ställas att trigga på någon av stigande/fallande/hög/låg. PCINT triggar på stigande OCH fallande (du kan inte säga att den ska trigga på endast en av dem) och alla PCINT-pinnar på samma port delar på samma interrupt-rutin. Så ska du ha två interrupts kan du antingen lägga dem på olika portar eller så får koden hålla koll på vilken av dem som ändrades och åt vilket håll.
Användarvisningsbild
tecno
Inlägg: 27039
Blev medlem: 6 september 2004, 17:34:45
Skype: tecnobs
Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
Kontakt:

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

Inlägg av tecno »

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:
rogerk8 skrev:Jag kommer istället använda IO8&9 för knapp-ingång respektive LED och IO0-7 för sinus-genereringen.

När det gäller knappen måste det vara möjligt att skriva egen interrupt-rutin för den, alternativt kan man alltid köra polling ;)
Alla IO märkta PCINT (Pin Change INTerrupt) kan trigga interrupts, så 8&9 ska fungera.

Skillnaden mellan INT (pin 2&3) och PCINT (alla andra pins) är att INT kan ställas att trigga på någon av stigande/fallande/hög/låg. PCINT triggar på stigande OCH fallande (du kan inte säga att den ska trigga på endast en av dem) och alla PCINT-pinnar på samma port delar på samma interrupt-rutin. Så ska du ha två interrupts kan du antingen lägga dem på olika portar eller så får koden hålla koll på vilken av dem som ändrades och åt vilket håll.
Mycket intressant att veta, tack Mr Anderson!

PCINT=Pin Change INTerrupt, taget :)

Men det är också intressant att INT-pinnarna är speciella dock säger mig din beskrivning att så överdrivit nyttofullt speciella är dom inte, för mig spelar det liksom ingen roll på vilken flank det blir interrupt på bara det blir ett interrupt "on change".

MVH/Roger
PS
Jag ska bara ha en knapp, SINE_REC.
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 »

tecno skrev:http://www.tradera.com/item/171011/2698 ... r-arduino-

Kan detta vara en lösning?
Tack tecno men jag har faktiskt redan den ;)

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 »

SeniorLemuren skrev:Läs mer om detta här. Tänk på att Do D1 även är även är seriekommunikationsport RX TX . Vill du använda den så är det kanske bättre att satsa på en Arduino Mega 2560 som har dubbla serieportar, se pinoutdiagrammet längre ner på sidan.
Hej SeniorLemuren!

Jag behöver inte läsa mer om portmanipulation, allt är utrett inklusive syntaxen från TomasL.

Sammanfattningsvis skriver man alltså PORTD=0xFF i koden för att sätta alla pinnarna i just PortD till 1 och detta alltså samtidigt, likt en vanlig gammal hederlig 6809-databuss.

RX & TX är inte aktuella, jag har specificerat upp projektet så att det inte behövs mer kommunikation samtidigt som jag låtit bli att nyttja SPI-bussen för annat än det tilltänkta dvs logger-shielden (med RTC).

Jag har tafatta erfarenheter av UNO och jag överger inte den i första taget, mycket för jag helt enkelt tycker det är jobbigt att sätta mig in i nya liknade saker, speciellt om man seriöst inte behöver det. Man kan kalla det förändringsobenägen :)

MVH/Roger
PS
Men jag har kommit fram till att UNO helt enkelt inte klarar mina samplingskrav, den klarar nu generatorkravet men samplingskravet klarar den inte, varför jag lurar på att använda en flash-A/D och multiplexa PortD.
Senast redigerad av Spisblinkaren 26 november 2016, 18:51:17, redigerad totalt 1 gång.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45291
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 »

Sammanfattningsvis skriver man alltså PORD=0xFF i koden för att sätta alla pinnarna i just PortD till 1 och detta alltså samtidigt, likt en vanlig gammal hederlig 6809-databuss.
Nej det kanske man INTE gör, du får titta i manualen för ditt system för exakt syntax, och eftersom det är en Arduino, så har man säkert hittat på en mer krystad och komplex syntax för detta.
Användarvisningsbild
rvl
Inlägg: 5799
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

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

Inlägg av rvl »

Du ska givetvis också komma ihåg att sätta alla pinnar på porten som utgångar, innan du börjar genererera utsignalen.

Kod: Markera allt

DDRD = 0xFF
Behöver alltså göras bara en gång. Enligt schemat sitter det resistorer i serie på serieportsanvändningen av D0 och D1, så ingen rök borde uppstå fast RX råkar matas aktivt av inkommande seriportsignal, samtidigt som den är konfigurerad som utgång från AVRkretsen.
rogerk8 skrev:Men jag har kommit fram till att UNO helt enkelt inte klarar mina samplingskrav, den klarar nu generatorkravet men samplingskravet klarar den inte
Kanske inte helt sant, för vår vän Nyquist, har egentligen inget emot att man samplar, med en frekvens som är lägre än signalfrekvensen, när man vet vad signalfrekvensen är.
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 »

rvl skrev:Du ska givetvis också komma ihåg att sätta alla pinnar på porten som utgångar, innan du börjar genererera utsignalen.

Kod: Markera allt

DDRD = 0xFF
Behöver alltså göras bara en gång. Enligt schemat sitter det resistorer i serie på serieportsanvändningen av D0 och D1, så ingen rök borde uppstå fast RX råkar matas aktivt av inkommande seriportsignal, samtidigt som den är konfigurerad som utgång från AVRkretsen.
rogerk8 skrev:Men jag har kommit fram till att UNO helt enkelt inte klarar mina samplingskrav, den klarar nu generatorkravet men samplingskravet klarar den inte
Kanske inte helt sant, för vår vän Nyquist, har egentligen inget emot att man samplar, med en frekvens som är lägre än signalfrekvensen, när man vet vad signalfrekvensen är.
Vad skön du är rvl, jag tackar för din hjälp!

Okej, sätta dom som utgångar då skriver jag tydligen DDRD=0xFF, förklara gärna vad detta står för, Dynamic Data...?

Mycket trevligt tips är att det bara behöver göras en gång som en deklaration också.
Kanske inte helt sant, för vår vän Nyquist, har egentligen inget emot att man samplar, med en frekvens som är lägre än signalfrekvensen, när man vet vad signalfrekvensen är.
Det sista du skriver där är faktiskt väldigt intressant, iom att jag vet frekvensen så behöver jag inte ens filtrera för aliasing dvs jag kan lägga mig på 2f och sampla, då kommer jag ner i en samplingshastighet om minimum 120kHz när jag samplar min högsta frekvens (60kHz), dock kommer vi inte ifrån problemet att i praktiken är UNOn's ADC så långsam att den inte ens klarar 20kHz som samplingsfrekvens.

Detta har jag nyligen läst i ATmega328's datablad dvs att max ADC-frekvens är 200kHz där man sen också måste tänka på de 13 klockcykler som krävs för varje värde (som vi kan kalla Byte även om de i praktiken oftast är 10 bitar).

Jag läste också att man kan pressa 200kHz om man kan nöja sig med färre antal bitars upplösning men jag skulle vilja säga lite generellt att mer än 20kHz samplingsfrekvens klarar inte UNO.

Så jag kommer, och jag repeterar, satsa på en Flash-A/D och sen MUX:a in värdena på samma port som generatorn ger sina värden ut.

MVH/Roger
PS
Ska man vara strikt så kan inte A/D'n sampla med mer än 16MHz/128/13=9,6kHz där 16MHz är systemklockan, 128 är prescalern i default och 13 är antalet cykler som krävs per värde.

Jag citerar igen:
Kanske inte helt sant, för vår vän Nyquist, har egentligen inget emot att man samplar, med en frekvens som är lägre än signalfrekvensen, när man vet vad signalfrekvensen är.
Med betoning på lägre, vad menar du med det?
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 »

> DDRD=0xFF, förklara gärna vad detta står för, Dynamic Data...?

Data Direction Register... Vänta lite..... Jo, det framgår av databladet.
Se "18.4.9. Port D Data Direction Register" på sidan 123.

> Mycket trevligt tips är att det bara behöver göras en gång som en deklaration också.

Det är ingen deklaration. Det är exekverbar kod. Och om det räcker med en gång eller
inte beror på applikationen, d.v.s. om man behöver byta riktning på pinnar vid run-time.
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 »

Vad har du för datablad, jag hittar det inte i mitt.

Mitt är ett dedikerat Atmel-datablad för
ATmega48PA
ATmega88PA
ATmega168PA
ATmega328P

Det har Windows-namnet: uno_doc8161.pdf

MVH/Roger
PS
Tack för förklaringen med att DDRD står för Data Direction Register port D, gillar sånt :)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45291
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 »

Hur vore det om du faktiskt läste databladen mm för utrustningen du använder.
Saker och ting blir så mycket enklare då.
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 har du för datablad, jag hittar det inte i mitt.

http://www.atmel.com/Images/Atmel-42735 ... asheet.pdf

Du kan även gå via http://www.atmel.com/devices/atmega328p.aspx, där finns
länkar till både "summary" och "complete" (det ovan, och det är 5.2 MB) datablad.

"Doc8161" eller "uno_doc8161" hittar jag inte speciellt mycket kring.
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 »

Hej Tomas, din buse :)

Nej, jag läser inga datablad, jag ställer upp krav SEN läser jag datablad, att det ska vara så svårt att förstå.

För varför ska jag läsa datablad innan jag ens vet vilka krav jag har?

Jag tycker att det vore direkt konstigt om industrin gjorde så, dvs anpassar nya projekt till dom processorer dom tidigare använt och gillar.

Samtidigt är det ju perfekt om dom gamla processorerna klarar kraven men man kan ju inte börja med att mappa befintliga processorers kapacitet på ett projekt, eller?

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 »

Det är en parallell process. Med lite känsla för processorn som man tänker
använda så ser man ganska snabbt om kraven inte går att uppfylla och
kan slippa en hel del onödigt arbete.

> jag ställer upp krav SEN läser jag datablad

Njae... :-) Du ställer krav, frågar på forumet och SEN kollar du med databladet.
Skriv svar