DHT11 e MKS/RAMPS, collegamento e funzionalità March 06, 2018 05:24PM |
Registered: 8 years ago Posts: 35 |
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 07, 2018 06:57AM |
Registered: 8 years ago Posts: 35 |
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 07, 2018 06:38PM |
Registered: 11 years ago Posts: 6,409 |
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 08, 2018 04:04AM |
Registered: 8 years ago Posts: 35 |
Quote
MagoKimbra
O io uno sono, il DHT11 l'ho provato sul due, sul mega non ho avuto modo, devo vedere la libreria come si comporta e come lo usa. Se riesco fine settimana gli do un occhio..
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 08, 2018 07:03AM |
Registered: 11 years ago Posts: 6,409 |
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 09, 2018 04:42AM |
Registered: 8 years ago Posts: 35 |
Quote
MagoKimbra
No no certo che ho usato MK4duo... Il fatto che la libreria usa gli interrupt e per il mega è un po un casino.. Ora vedo se riesco ad aggiustare la cosa...
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 09, 2018 08:00AM |
Registered: 8 years ago Posts: 35 |
static inline void pinMode(const pin_t pin, const uint8_t mode) { switch (mode) { case INPUT: ::pinMode(pin, INPUT); break; case OUTPUT: ::pinMode(pin, OUTPUT); break; case OUTPUT_LOW: ::pinMode(pin, OUTPUT); ::digitalWrite(pin, LOW); break; case OUTPUT_HIGH: ::pinMode(pin, OUTPUT); ::digitalWrite(pin, HIGH); break; default: break; } }
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 09, 2018 09:07AM |
Registered: 11 years ago Posts: 6,409 |
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 09, 2018 09:31AM |
Registered: 8 years ago Posts: 35 |
Quote
MagoKimbra
[www.arduino.cc]
Bisognerebbe cominciare con questi:
Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21
Appena posso provo..
Edit: non avevo letto che hai provato con il pin 3. va bene... Non è livellato perché su quel pin poi transita al comunicazione quindi c'è il treno di bit con cui comunica al processore i valori di temperatura e umidità.
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 09, 2018 10:30AM |
Registered: 11 years ago Posts: 6,409 |
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 09, 2018 10:32AM |
Registered: 8 years ago Posts: 35 |
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 09, 2018 01:01PM |
Registered: 11 years ago Posts: 6,409 |
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 12, 2018 06:35AM |
Registered: 8 years ago Posts: 35 |
Quote
MagoKimbra
Si sicuro!!
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 12, 2018 08:53AM |
Registered: 11 years ago Posts: 6,409 |
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 12, 2018 09:04AM |
Registered: 11 years ago Posts: 6,409 |
boolean DHT::read(bool force) { // Check if sensor was read less than two seconds ago and return early // to use last reading. uint32_t currenttime = millis(); if (!force && ((currenttime - _lastreadtime) < 2000)) { return _lastresult; // return last correct measurement } _lastreadtime = currenttime; // Reset 40 bits of received data to zero. data[0] = data[1] = data[2] = data[3] = data[4] = 0; // Send start signal. See DHT datasheet for full signal diagram: // [www.adafruit.com] // Go into high impedence state to let pull-up raise data line level and // start the reading process. digitalWrite(_pin, HIGH); delay(250); // First set data line low for 20 milliseconds. pinMode(_pin, OUTPUT); digitalWrite(_pin, LOW); delay(20); uint32_t cycles[80]; { // Turn off interrupts temporarily because the next sections are timing critical // and we don't want any interruptions. InterruptLock lock; // End the start signal by setting data line high for 40 microseconds. digitalWrite(_pin, HIGH); delayMicroseconds(40); // Now start reading the data line to get the value from the DHT sensor. pinMode(_pin, INPUT_PULLUP); delayMicroseconds(10); // Delay a bit to let sensor pull data line low. // First expect a low signal for ~80 microseconds followed by a high signal // for ~80 microseconds again. if (expectPulse(LOW) == 0) { DEBUG_PRINTLN(F("Timeout waiting for start signal low pulse.")); _lastresult = false; return _lastresult; } if (expectPulse(HIGH) == 0) { DEBUG_PRINTLN(F("Timeout waiting for start signal high pulse.")); _lastresult = false; return _lastresult; } // Now read the 40 bits sent by the sensor. Each bit is sent as a 50 // microsecond low pulse followed by a variable length high pulse. If the // high pulse is ~28 microseconds then it's a 0 and if it's ~70 microseconds // then it's a 1. We measure the cycle count of the initial 50us low pulse // and use that to compare to the cycle count of the high pulse to determine // if the bit is a 0 (high state cycle count < low state cycle count), or a // 1 (high state cycle count > low state cycle count). Note that for speed all // the pulses are read into a array and then examined in a later step. for (int i=0; i<80; i+=2) { cycles = expectPulse(LOW); cycles[i+1] = expectPulse(HIGH); } } // Timing critical code is now complete. // Inspect pulses and determine which ones are 0 (high state cycle count < low // state cycle count), or 1 (high state cycle count > low state cycle count). for (int i=0; i<40; ++i) { uint32_t lowCycles = cycles[2*i]; uint32_t highCycles = cycles[2*i+1]; if ((lowCycles == 0) || (highCycles == 0)) { DEBUG_PRINTLN(F("Timeout waiting for pulse.")); _lastresult = false; return _lastresult; } data[i/8] <<= 1; // Now compare the low and high cycle times to see if the bit is a 0 or 1. if (highCycles > lowCycles) { // High cycles are greater than 50us low cycle count, must be a 1. data[i/8] |= 1; } // Else high cycles are less than (or equal to, a weird case) the 50us low // cycle count so this must be a zero. Nothing needs to be changed in the // stored data. } DEBUG_PRINTLN(F("Received:")); DEBUG_PRINT(data[0], HEX); DEBUG_PRINT(F(", ")); DEBUG_PRINT(data[1], HEX); DEBUG_PRINT(F(", ")); DEBUG_PRINT(data[2], HEX); DEBUG_PRINT(F(", ")); DEBUG_PRINT(data[3], HEX); DEBUG_PRINT(F(", ")); DEBUG_PRINT(data[4], HEX); DEBUG_PRINT(F(" =? ")); DEBUG_PRINTLN((data[0] + data[1] + data[2] + data[3]) & 0xFF, HEX); // Check we read 40 bits and that the checksum matches. if (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) { _lastresult = true; return _lastresult; } else { DEBUG_PRINTLN(F("Checksum failure!")); _lastresult = false; return _lastresult; } }
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 12, 2018 09:28AM |
Registered: 8 years ago Posts: 35 |
Quote
MagoKimbra
No sto provando.. Allora la sonda per come è fatta manda dati a un certo punto dopo la richiesta. Il programmino senza interrupt certo che funziona sta li aspetta la risposta e quando la riceve ti segnala il dato, ma questo non è possibile sulla stampante, perché significherebbe, anche se per alcuni millisecondi il firmware si ferma in attesa di risposta per non perdere i dati, capisci bene che questo non è possibile. Unna cosa se con arduino ti fai un piccolo termometro d'ambiente e va bene, ma nella stampante dove deve gestire temperature, gli stepper il parsing dei dati, la lettura usb gestire il display, fermarsi ad aspettare una risposta non va per niente bene... Quindi sul due si fa con gli interrupt, quando è pronto e manda i dati il cambio di stato del pin interrompe il processore , che va subito a leggere e dopo aver letto ritorna a fare quello che stava facendo..
Non so se mi sono spiegato... Senza interrupt, bisogna creare un timer, visto che il tempo della risposta è quello dato dal datasheet, quindi mandare il segnale di richiesta di lettura, far partire il timer pre programmato con il tempo dato, tornare a fare quello che si stava facendo, e quando il timer finisce il conteggio richiama la routine ISR per leggere i dati...E Visto che i timer sono già belli che usati, volevo evitare questo, quindi sto studiando come fare... Altrimenti bisogna usare pin con gli interrupt, in teoria dovrebbe già funzionare, ma tu mi dici di no..
Attenzione pin 2 e 3 digitali non analogici..
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 13, 2018 05:11AM |
Registered: 8 years ago Posts: 35 |
Re: DHT11 e MKS/RAMPS, collegamento e funzionalità March 13, 2018 11:30AM |
Registered: 8 years ago Posts: 35 |