Styra en Arduino med en annan?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Styra en Arduino med en annan?

Inlägg av snigelen »

@Joan: Du har många kul/coola projekt hela tiden. Hoppas du får det att funka.

@Krille: Då är vi på samma våglängd :).

Men jag blev lite nyfiken på vad egentligen IRremote pysslar med. Avbrott var 50:e us är ganska saftig belastning. Så jag kollade hur mycket tid den lade på avbrottsrutinen (oscilloscop + cykel-räkning). Arduino duemillanove @16MHz.

Utan att någon IR-signal kommer in så ägnar den c:a 17 us i avbrottsutinen eller på väg in eller ut från den. Eftersom detta sker med 50 us mellanrum så spenderar alltså MCU'n c:a 33% av tiden i avbrottsutinen (även när INGEN IR-signal sänds). Det är MYCKET. Dessutom tillkommer ju tiden för andra avbott, t.ex för TIMER0 som används för millis(), och annat, beroende på vad man använder för resurser.

Men de som skrivit IRremote har en vettig kommentar:

Kod: Markera allt

	// digitalRead() is very slow. Optimisation is possible, but makes the code unportable
Vilket är sant. Dessutom används digitalWrite() för att flippa en lysdiod när något händer. Även om dessa i och för sig tar en massa tid att exekvera, så är det det faktum att avbrottsrutinen anropar dessa externa funktioner en anledning till att kompilatorn måste göra push/pop på massor av register, vilket inte behöver vara alls så många om man inte använder externa funktions-anrop.

Så om man byter digitalRead() mot t.ex (PINB & (1<<3)) != 0 (beroende på vilken pinne man har IR-signalen på) och skippar digitalWrite så kommer man ner i c:a 7.2 us vilket motsvarar 14% CPU-belastning (@16MHz). Klar förbättring, men även detta är MYCKET.

Så skulle man vilja ha det ännu effektivare så skulle man t.ex kunna använda externt interrupt, pin change interrupt eller helst ICP (input capture). Då anropas avbrottsrutinen ENDAST då något händer med IR-signalen. Då är man nere på bråkdelar av promille av CPU-belastning (i medeltal över tid), även om man så trycker på fjärrkontrollen 100-tals gånger om dagen. Men det kräver att man använder en specifik pinne till IR-signalen, eller en av få i fallet Arduino Mega (där de dessutom inte har kopplat 3 av 5 ICP-pinnar till hylslisterna (!!!)).

Så. Vissa saker går att göra (MYCKET) bättre, men väldigt svårt att göra i Arduino-biblioteksform som funkar på alla Arduino-plattformar.

Men missförstå mig rätt, jag tycker Arduino är ett otroligt enkelt och bra sätt att komma in i mikro-kontroller-världen och med enkla medel få någonting gjort. Det faktum att många delar av Arduino-rutinerna är ganska ineffektiva spelar för det mesta ingen roll, även om det finns undantag, som i detta fall t.ex.
Användarvisningsbild
Krille Krokodil
Inlägg: 4062
Blev medlem: 9 december 2005, 22:33:11
Ort: Helsingborg

Re: Styra en Arduino med en annan?

Inlägg av Krille Krokodil »

När jag handlade Kjell & Co Arduino-klon för 150:- och en Neopixel så sa jag till expediten "När jag sedan
handlar detta industriell så tippar jag på att det kommer att kosta 100 gånger mer.". Och vad var summan
sedan på offerten jag fick på liknande i industriell version? Ink. moms. var det *trumvirvel* nära exakt 100
gånger mer. :D

Jag har en Kjell & Co på vägen hem från arbetet, att kunna komma på en idé, gå inom där på vägen hem och
handla prylarna för några 100-lappar och sedan sätta den i drift nästa dag överväger de flesta begränsningar.
Jag är ganska fri att handla på företagskortet för på 100- eller 1000-lappar, när man börjar närma sig
10'000 kr så är processerna inte alls så smidiga oavsett om det råkar vara en månraket man funnit för de
pengarna, det brukar dra ut på tiden när man vill ha större men fortfarande relativt små summor till experiment.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Styra en Arduino med en annan?

Inlägg av GeekJoan »

OK, nått sånt här tänker jag mig att det får bli.
D8->D11 får styra de olika lägena. Borde räcka med två pinnar egentligen eller tre om det ska vara fem "program".
Två power supplys, en för varje skylt.

Måste väl vara ok att 5V är ihop på de två arduinos som sitter på samma power?
Skulle det vara motstånd på några 100Ω på datalinorna?
atomic.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Styra en Arduino med en annan?

Inlägg av snigelen »

> OK, nått sånt här tänker jag mig att det får bli.
> D8->D11 får styra de olika lägena. Borde räcka med två pinnar egentligen eller tre om det ska vara fem "program".

Ok, då var det inte bara "nu" du ville säga, men det borde väl funka med några IO-pinnar för enkel kommunikation.

> Två power supplys, en för varje skylt.

> Måste väl vara ok att 5V är ihop på de två arduinos som sitter på samma power?

Ja det går bra.

> Skulle det vara motstånd på några 100Ω på datalinorna?

Inte nödvändigtvis, det är mest en försäkring om man råkar koppla/programmera fel så det blir utgång till utgång. Men det var då D8-D11 jag tänkte på, inte de till neo-pixlarna.

Alternativt kan man ju använda t.ex. seriekommunikation (om du inte använder det till något annat) med TX på IR-enheten till RX på de andra om man alltid skall skicka samma information till båda slingorna och inte förväntar sig något svar.
Användarvisningsbild
Hobbyisten
Inlägg: 2531
Blev medlem: 3 december 2017, 22:55:25

Re: Styra en Arduino med en annan?

Inlägg av Hobbyisten »

> Inte nödvändigtvis, det är mest en försäkring om man råkar koppla/programmera fel så det blir utgång till utgång. Men det var då D8-D11 jag tänkte på, inte de till neo-pixlarna.

All elektronik bygger ju på att man gör rätt, det är ju samma signalnivåer mellan Arduinos som sagt. Vad händer om man kopplar rätt och har ett 100 Ω motstånd emellan ? Tar det inte ner signalen rätt rejält ?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Styra en Arduino med en annan?

Inlägg av snigelen »

> All elektronik bygger ju på att man gör rätt, det är ju samma signalnivåer mellan Arduinos som sagt.

Jo, tillräckligt rätt för att uppnå önskad funktion. Men prova själv att att koppla och programmera något icke-trivialt. Blev det rätt kopplat och rätt programmerat på första försöket? Nej, jag tänkte väl det.

> Vad händer om man kopplar rätt och har ett 100 Ω motstånd emellan ? Tar det inte ner signalen rätt rejält ?

Nä, det handlar på sin höjd om mikrovolt i signalsänkning, om man faktiskt kopplar utgång mot ingång.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Styra en Arduino med en annan?

Inlägg av GeekJoan »

Funkade bra!
swing2.jpg
swing.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Styra en Arduino med en annan?

Inlägg av snigelen »

:tumupp:
(väntar på filmen :))
Användarvisningsbild
4kTRB
Inlägg: 18283
Blev medlem: 16 augusti 2009, 19:04:48

Re: Styra en Arduino med en annan?

Inlägg av 4kTRB »

Om man ska ha lite mer avancerade prylar så har jag förstått att
SPI är en användbar väg att välja.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Styra en Arduino med en annan?

Inlägg av GeekJoan »

Mycket möjligt, men det är som vanligt. Det ska bara... Sen en vecka senare så ska vi börja ändra och då kanske inte första lösningen var bästa lösningen längre.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Styra en Arduino med en annan?

Inlägg av snigelen »

Jag tycker nog att detta är ännu ett lyckat Arduino-projekt.
Själv gillar jag att ha koll på varje klockcykel, och att nyttja så mycket hårdvara som möjligt. Men oftast spelar det ingen som helst roll om saker tar 10 eller 1000 klockcykler, bara man får saken gjord. SPI, USART, I2C eller whatever. De är jättebra. Men är man bara intresserad av att få skaker ock ting gjorda, så funkar (uppenbarligen) ett gammaldags parallell-interface minst lika bra. KISS.
Användarvisningsbild
HUGGBÄVERN
Tidigare soundbrigade
Inlägg: 32627
Blev medlem: 23 augusti 2006, 22:44:11
Ort: Lilla Paris
Kontakt:

Re: Styra en Arduino med en annan?

Inlägg av HUGGBÄVERN »

Lite sent kanske, men det här dök upp i posten idag: Transferring Data From One Arduino to Another
Skriv svar