www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Arduino SPI

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
KlemenD
Član
Član



Pridružen-a: Sre 18 Maj 2011 15:08
Prispevkov: 188
Aktiv.: 1.10
Kraj: Maribor

PrispevekObjavljeno: Čet Jul 10, 2014 3:54 am    Naslov sporočila:  Arduino SPI Odgovori s citatom

Pozdravljeni,

na plošči Arduino Uno se igram z različnimi možnostmi merjenja temperature. Poskusil sem že z termistorji in RTD-ji, pa so se izkazali premalo natančni za mojo uporabo. Sedaj bom probal še z thermocouple sondo. Vzel bom čip MAX31855, ki meritve sonde pretvori v SPI, ker pa z SPI-jem prej še nikoli nisem delal imam par vprašanj.

Ali lahko SPI povežem direktno na Atmega328 čip, če tega vzamem ven iz UNO plošče ?

Za mojo aplikacijo potrebujem dva merilna senzorja. Če prav razumem delovanje SPI-ja, moram za uporabo dveh MAX31855 na istem arduinu vse povezat enako, le SS pina gresta vsak po svoje. Ali to drži ?

No in pa še zadnje. V moji aplikaciji potrebujem tudi dva arduina. prvi bo zbiral podatke o temperaturi in ostalih pogojih ter jih prikazoval na enkranu, potem pa more te podatke poslat drugemu Atmega328 čipu za nadaljnjo obdelavo. Ali to gre ?

Torej, rad bi imel en Atmega328, ki bo iz dveh MAX31855 čipov preko SPI-ja odčitaval temperaturo, sam se bo pa obnašal kot SPI slave za drugi Atmega328 čip, ki bo vsake tolko (nekaj krat na sekundo) od njega preko SPI-ja zahteval te podake.

Sedaj sprašujem toliko, da vem ali naj grem v naročilo čipov in sond... SPI se bom učil potem, med samim programiranjem Smile

Hvala,
Klemen
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
damjango
Član
Član



Pridružen-a: Pon 03 Sep 2012 7:56
Prispevkov: 756
Aktiv.: 4.85
Kraj: Murska Sobota

PrispevekObjavljeno: Čet Jul 10, 2014 11:55 am    Naslov sporočila:  Re: Arduino SPI Odgovori s citatom

KlemenD je napisal/a:


Ali lahko SPI povežem direktno na Atmega328 čip, če tega vzamem ven iz UNO plošče ?

Za mojo aplikacijo potrebujem dva merilna senzorja. Če prav razumem delovanje SPI-ja, moram za uporabo dveh MAX31855 na istem arduinu vse povezat enako, le SS pina gresta vsak po svoje. Ali to drži ?

Klemen


Ja to drži.

Pri pinih SS lahko daš tudi pullap upore, ni pa nujno. Na ta način imaš že znano stanje signala SS že pred vklpom.

KlemenD je napisal/a:


No in pa še zadnje. V moji aplikaciji potrebujem tudi dva arduina. prvi bo zbiral podatke o temperaturi in ostalih pogojih ter jih prikazoval na enkranu, potem pa more te podatke poslat drugemu Atmega328 čipu za nadaljnjo obdelavo. Ali to gre ?

Torej, rad bi imel en Atmega328, ki bo iz dveh MAX31855 čipov preko SPI-ja odčitaval temperaturo, sam se bo pa obnašal kot SPI slave za drugi Atmega328 čip, ki bo vsake tolko (nekaj krat na sekundo) od njega preko SPI-ja zahteval te podake.

Klemen


Za povezavo dveh mikrokrmilnikov lahko uporabiš UART povezavo. V tvojem primeru bi pa lahko bil problem, če hočeš tudi preko UARTA pošiljati podatke na PC. ATmega328 ima samo en UART.

Lahko pa uporabiš tudi povezavo dveh mikrokrmilnikov preko I2C povezave.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Obelix
Član
Član



Pridružen-a: Pon 19 Maj 2008 13:59
Prispevkov: 1881
Aktiv.: 9.04
Kraj: Maribor

PrispevekObjavljeno: Čet Jul 10, 2014 12:04 pm    Naslov sporočila:   Odgovori s citatom

Zakaj pa sploh potrebuješ dva Arduina ?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
KlemenD
Član
Član



Pridružen-a: Sre 18 Maj 2011 15:08
Prispevkov: 188
Aktiv.: 1.10
Kraj: Maribor

PrispevekObjavljeno: Čet Jul 10, 2014 3:27 pm    Naslov sporočila:   Odgovori s citatom

damjango hvala za odgovor
Bom danes zvecer podrobneje pogledal UART in njegovo delovanje

Obelix glede na te podatke moram s triakom krmilit en el. grelec in en motor. Za krmiljenje s triakom podrebujem "zero-cross" senzor oz. neko vezje, ki aruinu pove kdaj omrezna omrezna napetost precka 0V. To naredi tako, da vskaic ko je omrezna napetost na 0V na pin 2 poslje nek pulz, nakar sprozim interrupt funkcijo. Tukaj pa pride do dveh problemov:

1) Arduino mora bit sposoben odreagitati takoj ko dobi singal na pin2 (100 krat na sekundo) in nima casa preko SPI-ja sprasevat senzorjev po njihovem stanju.

2)Potrebujem manjsi interaktiven vmesnik na LCD-ju. Arduno pa preprosto zamrzne, ce more kaj prikazovat na LCD, med tem ko mu 100x na sekundo prozis interrupt funkcijo (preverjeno)

Tako, da je najlazja resitev preprosto vzet en Atmega cip, ki skrbi za meritve in prikaz na LCD-ju, vsake toliko pa drugemu Atmega cipu, ki krmili triak javi, kako naj se ta obnasa (glede na meritve in vnos uporabnika)

Hvala,
Klemen
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Čet Jul 10, 2014 3:55 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
KlemenD
Član
Član



Pridružen-a: Sre 18 Maj 2011 15:08
Prispevkov: 188
Aktiv.: 1.10
Kraj: Maribor

PrispevekObjavljeno: Pon Jul 14, 2014 11:14 am    Naslov sporočila:   Odgovori s citatom

Kroko je napisal/a:
Ne zamrzne Arduino temveč tvoj program.


Pozdravlejn,
se opravičujem za pozen odgovor, vzel sem si čas, da sem stvari prišel do dna.
Arduno namreč zamrzne takrat, ko poleg interrupta izvajaš serial.print ali kaj podobnega.

Iste probleme poročajo tudi drugi uporabniki Arduina:
LINK1
LINK2
LINK3
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.00

PrispevekObjavljeno: Pon Jul 14, 2014 12:53 pm    Naslov sporočila:   Odgovori s citatom

SPI je tako enostaven komunikacijski protokol, da ga ne more nič zmotiti. Še najmanj prekinitev.
No, možno je, da Arduino prevajalnik stvari po nepotrebnem zakomplicira, zato pač napišeš svojo funkcijo.

Seveda naštudiraj sintakso glede shiftanja desno skozi Carry bit, ker jaz tako daleč še nisem prišel.

Pošiljaš po 8 bitov naenkrat:
Koda:

void komunikacija1() { // lahko imaš več funkcij komunikacija_

 mosi_miso = nekaj1; // napolniš spremenljivko mosi_miso s podatkom za pošiljanje
 transmit8(); // oddaj in sprejmi v isto spremenljivko
 nekajj1 = mosi_miso; // v mosi_miso spremenljivki je tisto, kar je prišlo nazaj

 mosi_miso = nekaj2; // napolniš spremenljivko mosi_miso s podatkom za pošiljanje
 transmit8(); // oddaj in sprejmi v isto spremenljivko
 nekajj2 = mosi_miso; // v mosi_miso spremenljivki je tisto, kar je prišlo nazaj

 mosi_miso = nekaj3; // napolniš spremenljivko mosi_miso s podatkom za pošiljanje
 transmit8(); // oddaj in sprejmi v isto spremenljivko
 nekajj3 = mosi_miso; // v mosi_miso spremenljivki je tisto, kar je prišlo nazaj
// ...
}


void transmit8(){

 for (k=0; k<8; k++)  {
-- premakneš mosi_miso za en bit v desno;
  if (Carry bit == 1) {
    digitalWrite(mosi_pin , HIGH);
  } // if
  else {
    digitalWrite(mosi_pin , LOW);
  } //else

  delayMicroseconds(1);
    digitalWrite(mosi_clock , HIGH);
  delayMicroseconds(1);
    digitalWrite(mosi_clock , LOW);
    digitalWrite(mosi_pin , LOW);
  delayMicroseconds(1);

 if(digitalRead(miso_pin) == 1) {
  mosi_miso = mosi_miso || 128 ; // postaviš bit 7 na 1
  } //if
 else {
  mosi_miso = mosi_miso && 127; // postaviš bit 7 na 0
  } //else
  } // for 
  } // transmit8()

Samo shiftanje desno skozi Carry naštudiraj.
_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
KlemenD
Član
Član



Pridružen-a: Sre 18 Maj 2011 15:08
Prispevkov: 188
Aktiv.: 1.10
Kraj: Maribor

PrispevekObjavljeno: Sre Jul 16, 2014 12:54 am    Naslov sporočila:   Odgovori s citatom

Okej sedaj pa sem res malo zmeden... Arduino sploh ni priklopljen na nič razen na usb. Programiran je tako, da vsako sekundo izpiše ''HELLO''. Če kakšne pol metra vstran samo priklopim motor v vtičnico (ne vedno, zato morem to parkart ponovit) arduno enako zamrzne. Mislim, da se to zgodi takrat ko v vtičnici na prključek nastene manjša iskra... Takrat lahko ekstremno tihi ''pok'' slišim tudi iz zvočnokov. EM motnje ?

Vem da ima arduino velike probleme z EM polji, saj sem ga enkrat uporabljal za krmiljenje flyback transformatorja, kjer je ta stalno zamrznil če si ga imel preblizu. Ampak po tem takem bi pričakoval, da bi zamrznil tudi, če bi ga držal zraven motorja ko bi le ta deloval. Pa se ne zgodi nič ! Če zamrzne, zamrzne takrat ko motorček vklopim v vtičnico...
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Peter123
Član
Član



Pridružen-a: Tor 13 Jan 2009 15:34
Prispevkov: 1442
Aktiv.: 7.21
Kraj: Lj.

PrispevekObjavljeno: Sre Jul 16, 2014 7:14 am    Naslov sporočila:   Odgovori s citatom

Imaš več možnih "prenosov" motenj, dve najbolj pogosti sta:
-prenos po žici, na primer po 230V napajanju, s tem da je včasih dovolj da imata skupno samo nulo. Ponavadi se zadeva da rešit z menjavo napajalnika za arduinota.

-po "zraku" se zadeve rešujejo z "pametno" nameščenimi blokirnimi kondenzatorji, ali kovinskim ohišjem.

Za preverit je tudi ali imaš gnd napajanja povezan z ozemljitvijo?

Potem so tukaj še razni slabo izvedeni shieldi, ali pa žične komunikacije za zankami itd,... razlogov in rešitev je mnogo.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dejko1
Član
Član



Pridružen-a: Ned 16 Mar 2008 0:21
Prispevkov: 271
Aktiv.: 1.29
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jul 16, 2014 8:42 am    Naslov sporočila:   Odgovori s citatom

Pri vklopu motorja ti ali štartni tok ali pa polnjenje kondenzatorja povzročita kar precej večje tokove kot je nazivni tok motorja, od tu EM motnja. To da moraš večkrat poskusit da zamrzne je pa zato ker je odvisno od trenutne napetosti v vtičnici pri vklopu (če vklopiš pri U=0 motnje praktično ni). Nekaj podobnega se zgodi tudi ko zadevo izklopiš, samo da takrat pride do skoka napetosti zaradi induktivnosti motorja (ta je pa odvisna od trenutnega toka skozi motor).

Pri nas smo imeli pri eni črpalki probleme da je izklop tuljav preko relejev povzročal motnje na vhodu za rotacijski enkoder. Zanimivo je bilo pa da so motnje prišle od solenoidov, ki rabijo nekaj w, medtem ko kw trofazni motor ki ga je zadeva tudi krmilila ni povzročal nobenih težav. Zadevo smo sicer potem rešili s snubberji.

Lahko tudi preveriš kaj se ti obesi - USB ali arduino. Če se ti obesi USB potem je zadevo potrebno vklopit in izklopit da spet deluje. Če je arduino potem pa reset tipka in bo spet deloval...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Sre Jul 16, 2014 10:26 am    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
KlemenD
Član
Član



Pridružen-a: Sre 18 Maj 2011 15:08
Prispevkov: 188
Aktiv.: 1.10
Kraj: Maribor

PrispevekObjavljeno: Sre Jul 16, 2014 12:47 pm    Naslov sporočila:   Odgovori s citatom

Kroko je napisal/a:

Ne zmrzne arduino, zmrzne tvoj program ker nepravilno uporabljaš interupte.


Pozdravljen !
Sedaj sem ponesreči ugotovil (napisano pri mojem prejšnjem sporočilu), da v bistvu inerrupti nimajo nobene veze z obešanjem arduina. Če je res tako kot je napisal dejko1
dejko1 je napisal/a:

Lahko tudi preveriš kaj se ti obesi - USB ali arduino. Če se ti obesi USB potem je zadevo potrebno vklopit in izklopit da spet deluje. Če je arduino potem pa reset tipka in bo spet deloval...

Potem se mi obesi USB.
Recimo lep primer le tega je bilo to krmiljenje flyback transformatorja. Na arduino sem preko USB-ja pošiljal MIDI podatke za pesem, ki jo je potem preko močnostnega dela predvajal na iskri flyback transformatorja (od močnostnega dela je bil računalnik z aruinom optično izoliran !). Stvar je delovala, vsake toliko, pa je sredi predvajanja glasbe arduno preprosto ostal na enem tonu, na računalniku pa je izgledalo, kot da MIDI podatke še vedno dobiva. Takrat ni pomagal reset gumb, ampak sem ga moral odklopit iz USB-ja ter ponovno vlopit. Tudi sedaj je tako (Morem pa omenit, da vse druge USB naprave delujejo normalno, ko zablokira USB na arduino .. edino včasih še opazim, da odpove tipkovnica (izjemno redko, se je pa že zgodilo) ali pa se preprosto na tipkovnici prižgejo vse lučke, ampak še vedno dela(bolj pogosto).

Torej je tukaj najbolj občutljiv PC. Zakaj do tega pride ne vem, je pa res, da sem v relativno starem bloku. Ko smo prenavljali stanovanje, je bilo zagotovljeno, da ničenje deluje. Je pa res, da vsake toliko, ko nekdo v vtičnico priklopi kakšno induktivno breme, meni v zvočnikih poka (ali pa se prižgejo lučke na tipkovnici). To se dogaja tudi takrat, ko se jaz igram s kakšno močnostno elektroniko in morem kašne napetostne sunke pribijat na maso(ki je sigurno povezana na zemljo). Kako lahko preverim, ali v našem omrežnem napajanju vse deluje kot je treba ? (na voljo imam multimeter in osciloskop)
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
dejko1
Član
Član



Pridružen-a: Ned 16 Mar 2008 0:21
Prispevkov: 271
Aktiv.: 1.29
Kraj: Ljubljana

PrispevekObjavljeno: Čet Jul 17, 2014 2:08 pm    Naslov sporočila:   Odgovori s citatom

Daljši in tanjši kot so kabli (220V), več motenj bo na koncu...

Wink saj to ni nič posebnega. Npr. ko na mizi vklopiš i-Con2 lotalnik se na bližnjih žicah pojavi motnja reda velikosti nekaj voltov - povsem zadosti da ti zmede komunikacijo na 5V ali resetira kakšen čip s parazitnim napajanjem.

USB je na 3.3V, tako da ga že okoli 1.5V zmoti, je pa potem čisto odvisno od firmware-a USB->RS232 konverterja ter driverja in softwarea na PC ali se celotna zadeva ob napaki obesi ali se samo ponastavi in dela lepo naprej.

Glede na to da se arduino-like čipi uporabljajo tudi v nekaterih ročnih orodjih slovenske izdelave in to direktno zraven motorja ter brez dodatnega oklopa se zadevo sigurno da narediti Wink

Glede interruptov pa preveri da arduino knjižnica v ozdaju ne uporablja kakšnih interruptov, ki bi se tepli s tvojimi (v interruptih se je tudi potrebno zadrževati čim manj časa)... Funkcije za pošiljanje preko serijskega porta ponavadi čakajo da se znaki pošljejo in šele nato nadaljujejo z izvajanjem programa. Podobno je s funkcijami za krmiljenje displaya.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.00

PrispevekObjavljeno: Sre Avg 06, 2014 6:23 pm    Naslov sporočila:   Odgovori s citatom

KlemenD je napisal/a:
Za mojo aplikacijo potrebujem dva merilna senzorja. Če prav razumem delovanje SPI-ja, moram za uporabo dveh MAX31855 na istem arduinu vse povezat enako, le SS pina gresta vsak po svoje. Ali to drži ?
Čisto mimogrede ... sem pravkar opazil d'oh!

Ta nesrečna MAX "jajca" potrebujejo galvansko ločene sonde.

Ali pa za vsako cono svoj napajalnik in potem celotno komunikacijo izvedeno preko optosklopnikov (trije na enoto).
Silno nerodna zadeva pri večjem številu grelnih con.

Dodano: Če se naroči izdelavo novih sond (npr. pri Elplast Prelovšek, LJ), je razlika v ceni zanemarljiva. Bom pač stare zaloge drugje uporabil.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 497 dni


Powered by phpBB © 2001, 2005 phpBB Group