Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

ATtiny ei taha suhelda anduritega

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    #31
    Vs: ATtiny ei taha suhelda anduritega

    Ei ei, m6te oli piirata ADC sisendi pinge VCC/2 peale.
    V2ntv6ll on selleks k6ver, et mahuks mootorisse 2ra.

    Comment


      #32
      Vs: ATtiny ei taha suhelda anduritega

      See pingega mängimine ei aidanud. Ka mitte andurite toitmine 3,3 pesast.

      Viskasin selle üleannetu potega teise projekti ootama.

      Üritasin nuppudega väärtust muuta. Nupud on kaldejoontereast alates kirjeldatud.
      Hakkas sigudik lihtsalt jooksma iga sekundi tagant. Kuskil olen vea teinud. Katsetasin nii analoogsisendiga kui digisisendiga, sama ikka.

      Kood:
      /*
      Adafruit Arduino - Lesson 12. Light and Temperature
      */
      
      #include <LiquidCrystal.h>
      int INtempPin = A0;
      int BACKtempPin = A1;
      float SETtempC = 25.0;
      int ButtonA = A2;
      int ButtonB = 6;
      
      //                BS  E  D4 D5  D6 D7
      LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
      void setup() 
      {
        lcd.begin(16, 2);
       
        //set the LED pins as outputs
        for (int pinNumber = 3; pinNumber < 5; pinNumber++) {
          pinMode(pinNumber, OUTPUT);
          digitalWrite(pinNumber, LOW);
          pinMode(2,INPUT_PULLUP); 
          digitalRead(pinNumber);
          digitalWrite(pinNumber, LOW);
          
        } 
      }
      void loop()
      {
        // Display Temperature in C
        int INtempReading = analogRead(INtempPin);
        float INtempVolts = INtempReading * 5.0 / 1024.0;
        float INtempC = (INtempVolts - 0.5) * 100.0 + 50;
       
        //         ----------------
        lcd.print("I");
        lcd.setCursor(1, 0);
        lcd.print(INtempC);
        lcd.setCursor(3, 0);
        lcd.print((char)223);
        
         // Display BACK Temperature in C
        int BACKtempReading = analogRead(BACKtempPin);
        float BACKtempVolts = BACKtempReading * 5.0 / 1024.0;
        float BACKtempC = (BACKtempVolts - 0.5) * 100.0 + 50;
       
        lcd.setCursor(4, 0);
        lcd.print("B");
        lcd.setCursor(5, 0);
        lcd.print(BACKtempC);
        lcd.setCursor(7, 0);
        lcd.print((char)223);
        
          // Display  SET Temperature in C
        //int SETtempReading = analogRead(SETtempPin);
        //float SETtempVolts = SETtempReading * 5.0 / 1024.0;
        //float SETtempC = (SETtempVolts) * 12 +5;
        
      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      //button increase
      //pressed = button(high);
      if(ButtonA = HIGH)
      { 
        SETtempC++; 
      }
      else if(ButtonB = HIGH) 
      {
        SETtempC--;
      }
      
        lcd.setCursor(8, 0);
        lcd.print("S");
        lcd.setCursor(9, 0);
        lcd.print(SETtempC);
        lcd.setCursor(13, 0);
        lcd.print((char)223);
        lcd.setCursor(14, 0);
       if (SETtempC +1 < BACKtempC) {
       lcd.print("CO");
       }
       else if (SETtempC > 1+ BACKtempC){
        lcd.print("WO");
       }
       else if ((SETtempC - BACKtempC) <1 > -1){
        lcd.print("OK");
       
        
         }
       //lcd.print("II");
       
        
        lcd.setCursor(0, 1);
        lcd.print("ERTEC");
        lcd.setCursor(7, 1);
        lcd.print(200*4.19*(INtempC-BACKtempC)/3600);
        lcd.setCursor(13, 1);
        lcd.print("KW ");
        
        delay(500);
       //could down
       if (SETtempC +1 < BACKtempC) {
          digitalWrite(3, HIGH);
          delay(1000);
          digitalWrite(3, LOW);
          delay(1000);
         
        } 
        //warm up
        else if (SETtempC -1 > BACKtempC) {  
          digitalWrite(4, HIGH);
          delay(1000);
          digitalWrite(4, LOW);
          delay(1000);
        } 
      }

      Comment


        #33
        Vs: ATtiny ei taha suhelda anduritega

        Neid Tiny-sid on üsna mitut sorti.


        Milline see mittesuhtleja on?

        Comment


          #34
          Vs: ATtiny ei taha suhelda anduritega

          Vaevalt nüüd see ATtiny 45 süüdi on. Ikka klaviatuuri ja tooli vaheline materjal. Juba on laual ka 84 aga sellele pole suure otsimise järel ikka driverit leidnud.

          Lisaks võitlen ++ ja -- nuppudega. Ühele poole sain suure vaevaga juba liikuma aga, aga, aga. Käisin vales koolis.

          Comment


            #35
            Vs: ATtiny ei taha suhelda anduritega

            Sain nupud tööle. Läks ca 10h pusimist ja korras. Loll on paha olla. Õnneks jätkus püsivust ja pea ei plahvatanudki. Ma ei üritagi siinkohal seda loogikat selgitada, kui kellelgi peaks vaja minema ju siis talle saan selgitada.

            SET
            24.90
            SET
            24.80
            SET
            24.70
            SET
            24.60
            SET
            24.50
            SET
            24.60
            SET
            24.70
            SET
            24.80
            SET
            24.90
            SET
            25.00

            Comment


              #36
              Vs: ATtiny ei taha suhelda anduritega

              Kas keegi omab kogemust temp digianduriga. DS18B20 . Neid saaks panna 127 tk ühe juhtme otsa. Kui esialgu saaks 2 gi. Anduriga suhtlemiseks on vaja fail laadida. Laadisin ja miskipärast õiendab, et ei leia. Istub samas kataloogia, kus sketš. Lisaks ei leia ATtiny84 driverit, ehk on mõni link soovitada.
              viimati muutis kasutaja hotsnow; 25 m 2016, 23:01.

              Comment


                #37
                Vs: ATtiny ei taha suhelda anduritega

                Digianduri DS18B20 ühendamine https://www.google.ee/search?q=ds18b...b3YN1bNYl4M%3A

                kuna algselt puuduvad failid mida järgnevalt välja kutsutakse siis tuleb need laadida librarisse.
                #include <OneWire.h> http://www.pjrc.com/teensy/arduino_l...es/OneWire.zip
                #include <DallasTemperature.h> see dallas on kah kuskil saadaval, hetkel ei leia.

                Selle progega saab anduri unikaalse 16 kohalise aadressi.
                Kood:
                #include <OneWire.h>
                // DS18S20 Temperature chip i/o
                OneWire ds(10);  // on pin 10
                void setup(void) {
                  // initialize inputs/outputs
                  // start serial port
                  Serial.begin(9600);
                }
                void loop(void) {
                  byte i;
                  byte present = 0;
                  byte data[12];
                  byte addr[8];
                  ds.reset_search();
                  if ( !ds.search(addr)) {
                      Serial.print("No more addresses.\n");
                      ds.reset_search();
                      return;
                  }
                  Serial.print("R=");
                  for( i = 0; i < 8; i++) {
                    Serial.print(addr[i], HEX);
                    Serial.print(" ");
                  }
                  if ( OneWire::crc8( addr, 7) != addr[7]) {
                      Serial.print("CRC is not valid!\n");
                      return;
                  }
                  if ( addr[0] == 0x10) {
                      Serial.print("Device is a DS18S20 family device.\n");
                  }
                  else if ( addr[0] == 0x28) {
                      Serial.print("Device is a DS18B20 family device.\n");
                  }
                  else {
                      Serial.print("Device family is not recognized: 0x");
                      Serial.println(addr[0],HEX);
                      return;
                  }
                  ds.reset();
                  ds.select(addr);
                  ds.write(0x44,1);         // start conversion, with parasite power on at the end
                  delay(5000);     // maybe 750ms is enough, maybe not
                  // we might do a ds.depower() here, but the reset will take care of it.
                  present = ds.reset();
                  ds.select(addr);    
                  ds.write(0xBE);         // Read Scratchpad
                  Serial.print("P=");
                  Serial.print(present,HEX);
                  Serial.print(" ");
                  for ( i = 0; i < 9; i++) {           // we need 9 bytes
                    data[i] = ds.read();
                    Serial.print(data[i], HEX);
                    Serial.print(" ");
                  }
                  Serial.print(" CRC=");
                  Serial.print( OneWire::crc8( data, 8), HEX);
                  Serial.println();
                }
                Ja hiljem oma proges saab anduri poole pöörduda seda aadressi kasutades sellisel kujul läbi 0x ja komade

                DeviceAddress thermometer = { 0x28, 0xFF, 0x80, 0x5C, 0x35, 0x16, 0x3, 0x6 }; //28 FF 80 5C 35 16 3 6

                Comment

                Working...
                X