Sida 4 av 5

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

Postat: 26 november 2016, 17:26:32
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.

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

Postat: 26 november 2016, 17:31:54
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.

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

Postat: 26 november 2016, 17:34:26
av tecno

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

Postat: 26 november 2016, 18:05:23
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.

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

Postat: 26 november 2016, 18:09:24
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

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

Postat: 26 november 2016, 18:23:28
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.

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

Postat: 26 november 2016, 18:33:57
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.

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

Postat: 26 november 2016, 19:31:46
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.

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

Postat: 26 november 2016, 21:41:26
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?

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

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

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

Postat: 26 november 2016, 22:08:29
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 :)

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

Postat: 26 november 2016, 22:10:54
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å.

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

Postat: 26 november 2016, 22:16:34
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.

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

Postat: 26 november 2016, 22:20:20
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

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

Postat: 26 november 2016, 22:28:53
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.