Skrivning till flera portar samtidigt i Arduino UNO möjligt?
-
- Inlägg: 7811
- Blev medlem: 26 maj 2009, 12:20:37
- Ort: Kristinehamn
Re: Skrivning till flera portar samtidigt i Arduino UNO möjl
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.
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Skrivning till flera portar samtidigt i Arduino UNO möjl
Alla IO märkta PCINT (Pin Change INTerrupt) kan trigga interrupts, så 8&9 ska fungera.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
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.
- 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
Mycket intressant att veta, tack Mr Anderson!Mr Andersson skrev:Alla IO märkta PCINT (Pin Change INTerrupt) kan trigga interrupts, så 8&9 ska fungera.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
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.
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.
- 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
Tack tecno men jag har faktiskt redan den
MVH/Roger
- 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
Hej SeniorLemuren!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.
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.
Re: Skrivning till flera portar samtidigt i Arduino UNO möjl
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.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.
Re: Skrivning till flera portar samtidigt i Arduino UNO möjl
Du ska givetvis också komma ihåg att sätta alla pinnar på porten som utgångar, innan du börjar genererera utsignalen.
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.
Kod: Markera allt
DDRD = 0xFF
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.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
- 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
Vad skön du är rvl, jag tackar för din hjälp!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.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.Kod: Markera allt
DDRD = 0xFF
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.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
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å.
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.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.
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:
Med betoning på lägre, vad menar du med det?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.
Re: Skrivning till flera portar samtidigt i Arduino UNO möjl
> 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.
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.
- 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
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
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
Re: Skrivning till flera portar samtidigt i Arduino UNO möjl
Hur vore det om du faktiskt läste databladen mm för utrustningen du använder.
Saker och ting blir så mycket enklare då.
Saker och ting blir så mycket enklare då.
Re: Skrivning till flera portar samtidigt i Arduino UNO möjl
> 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.
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.
- 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
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
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
Re: Skrivning till flera portar samtidigt i Arduino UNO möjl
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.
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.