Warning: Illegal string offset 'name' in [path]/includes/functions.php on line 6439
I2c uno
+
1 2 3 ...

thread: I2c uno

  1. #1
    Junior Member
    Nov 2015
    23

    I2c uno

    Sveiki!
    Radās jautājums par datu sūtīšanu no viena uno uz otru izmantojot SCL un SDA vadus. Apskatīju piemērus, sapratu un iemācījos nosūtīt datus no mastera uz slave, var nosūtīt arī no slave uz master. Jautājums ir vai var nosūtīt datus abos virzienos vienlaicīgi? tas ir, Masters uz sleiviem aizsūta datus piemēram x un y vērtības,un tait pat laikā slave ierīce sūta z vērtību uz masteri, vai cik sapratu pareizāk būtu teikt masters nolasa z vērtību no slave ierīces.
    Te ir simulācija kur saslēgti 2 uno, un datu sūtīšana notiek vienā virzienā.
    https://circuits.io/circuits/4891134...nnamed-circuit
    būtu labi ha kads varētu pateikt kas jāpieliekkodam, lai masters nolasa arī datus no slave ierīcēm.
    Masters
    :
    #include <Wire.h>
    int x;
    int y;
    void setup() {  
      Wire.begin(); 
    }
    void loop() {
       x=5;
      y=10;
      Wire.beginTransmission(1); 
      Wire.write("Dati");        
      Wire.write(x);
      Wire.write(y);
      Wire.endTransmission();
      delay(100);   
    }
    slave
    :
    #include <Wire.h>
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    int x;
    int y;
    void setup() {
      lcd.begin(16, 2);
      Wire.begin(1);               
      Wire.onReceive(receiveEvent);
    }
    void loop() {
      x = Wire.read();
      y = Wire.read();
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(x); 
       lcd.setCursor(0, 1);
      lcd.print(y); 
      delay(100);
    }
    void receiveEvent(int howMany) {
      while (2 < Wire.available() ) {
        char c = Wire.read(); 
      }
    }
    Tik lūdzu nesāciet ar to lai mācos c++, eju pie gugles utt.
    Neesmu ne elektronoķis ne programmētājs, šis projekts ir tīri individuali prekš sevis, jo nevaru atrast, vai atļauties sev piemērotu gatavu risinājumu.

  2. #2
    Senior Member
    Nov 2009
    Jēkabpils
    2,046

    Tai pat laikā nesanāks, I2C nav full duplex, ja pareizi atceros.

  3. #3
    Junior Member
    Nov 2015
    23

    Paldies!
    Tāpēc domāju kāpēc varu nosūtīt atsevišķi gan vienā gan otrā virzienā, bet vienā programma iekļaut sūtīšanu abos virzienos neizdodas.

  4. #4
    Moderator
    Jan 2009
    Rīga
    4,413

    Vienalikus varēsi sūtīt pa Serial vai SoftwareSerial

  5. #5
    Senior Member
    Nov 2009
    Jēkabpils
    2,046

    Pa SPI arī var abos virzienos.
    Vienā programmā ari ar l2C gan var sūtit abos virzienos, vienlaicīgi nevar. Kodu gan neuzrakstīšu, ar I2C tā īsti nedraudzējos.

  6. #6
    Junior Member
    Nov 2015
    23

    tad pie mana koda un slāguma ir iespējams piekabinat klāt attiecīgās rindiņas, lai dati tiktu nosūtīti arī pretēja virzienā? Pretējā virzienā man jāsūta 1 mainīgais.

  7. #7
    Senior Member
    Nov 2009
    Jēkabpils
    2,046

    Tieši tā. Patiešām nepateikšu, bet kaut kā tā - māsters nosūta savus datus, tad nosūta komandu sleivam, lai sūta savējos, un sagatavojas saņemt. Attiecīgi sleivs saņem no māstera datus, sagatavo (vai jau ir sagatavojis) savus un, kad saņem komandu, sūta prom. Varbūt kāds pieredzējušāks varēs Tev palīdzēt. Es I2C neesmu apguvis.

    p.s. Tev ir obligāta prasība izmantot I2C?

  8. #8
    Moderator
    Jan 2009
    Rīga
    4,413

    Ar tiem pašiem paraugiem, ko iesācējs jau iemata, var uztaisīt divvirzienu sakarus. Master sūta datus uz slave un pēc tam master saņem datus no slave.

  9. #9
    Junior Member
    Nov 2015
    23

    Nav obligāta prasība I2C. Šo izvēlējos dēļ ta ka sakumā likās vienkārš,jo neesmu nekāds specs, mans arods ir galīgi nesaistīts ar elektroniku.
    Un cenas ziņā, jo I2C prasa 3 vadu savienojumu, leti vadiņi un štepseļi, bij doma izmantot standarta stereo vadiņus. Teorētiski varu iztikt arī tikai ar vienu arduino, bet tad man vajag vismaz 9 dzīslu vadus, štepseļus un visu pārējo.
    Projekts paredzēts akvārija gaismai. kur ir 6 dimmejami gaismas kanali, pretējā virzienā jasūta temperatūra.
    doma ir tāda, viens uno ka kontrolieris,kam klāt ekrans kurs rāda visu vajadzīgo infu un podziņas. uz tā griežas arī visa programma kas kontrolē saullektu, dienasgaismu un saulrietu. tālāk tas datus nodod citiem arduino, kas tos izmanti ar pwm kanāliem dimmejot gaismas. Pasi gaismekļi būs 2, tāpēc sanāk ka būs 2 slave arduino. un katrā gaismeklī gribu ielikt temperatūras sensoru, kas pie noteiktas temperatūras ieslēdz ventelatoru lai gaismeklis nepārkarst. No slave uz master dati jāsūta lai temperatūru varētu izvadīt uz ekrana, ja tas neizdosies,iztiksu bez tā ka redzu temperatūru ekranā. Ar šitiem paraugiem jau mēģināju, bet kaut kas man nesanāk, kad mēgināju katru atsevišķi, vis strādā, dati tiek nosūtīti, kā salieku abus kopā vainu nestrāda nekas, vai sūtas nikai no master uz slave.

  10. #10
    Moderator
    Jan 2009
    Rīga
    4,413

    Katram slave jābūt savai adrese. Izmantot adreses 0-8 nav vēlams. Piemērā redzu ka slave adrese ir 1. Uzliec vienam slave 10, otram 11.

+