nicolasoto
Vytvořené odpovědi
-
AutorPříspěvky
-
Aleš
ÚčastníkJá mám takovou zkušenost, s DS18B20 a phantomovým napájením. Obvod snese velmi zdeformované pulzy a pořád to chodí. Jen jedno nesnese a to zápornou polaritu. Ta ale vzniká odrazem na delším kabelu. Pomáhá následující úprava: do série s výstupním pinem MCU dát rezistor cca 50 ohmů, aby nebyla tak strmá sestupná hrana a na oba konce (u MCU i teploměru) dát schotkyho diodu, která svede záporné napětí.
CJ190133
ÚčastníkAhoj, už som ich objednal niekoľko s CH340G a doteraz až na jednu výnimku žiaden problém. Ten problémový kus sa správal tak, že po nahraní kódu vypisoval CRC error. Je to naozaj zlý kus CH340.
Čo sa týka driverov – pozri si najskôr vo Windows v sériových portoch pod akým portom sa ti CH340 prezentuje, to je pri každom kuse iné a potom si nastav v IDE taký istý port. Windows 8 nepotrebuje žiadne ovládače, zariadenie nie je vidieť pod USB zariadeniami, ale iba na sériovom porte.
Do budúcna si daj pozor, CH340G je iba prevodník USB to serial, nie je to natívne USB zariadenie (nevie simulovať klávesnicu apod.) Ak chceš hardwérový ekvivalent originálu, tak na Aliexpresse je to napr. Funduino. Alebo aj noname, ale musíš opticky skontrolovať čip.Zbyšek Voda
ÚčastníkDobrý den,
to by mohl být i problém načasování. V tomto fóru: https://forum.arduino.cc/index.php?topic=20574.0 řeší podobný problém, který vyřešila právě změna časování v knihovně OneWire.cpp (je to příspěvek označený #5).mac112
ÚčastníkNedostanu žádný odkaz na stáhnutí knížky na můj email info@macha.info
Vojtěch Vosáhlo
ÚčastníkTak jo. Chvíli jsem na tom pracoval a už to funguje. Tvůj problém byl nejspíše v tom že DS posílá data tak rychle že se procesor přehltí a zasekne se. Tady je kód který jsem použil na testování. Doplň si do něj vše co používáš na daná místa a pak ho zkus spustit.
//#include <DS3232RTC.h> //http://github.com/JChristensen/DS3232RTC //#include <Streaming.h> //http://arduiniana.org/libraries/streaming/ //#include <Time.h> //https://playground.arduino.cc/Code/Time #include <Wire.h> //https://arduino.cc/en/Reference/Wire #include <avr/sleep.h> #define SQW_PIN 2 boolean sleep = false; void setup(void) { Serial.begin(115200); //setSyncProvider() causes the Time library to synchronize with the //external RTC by calling RTC.get() every five minutes by default. /* setSyncProvider(RTC.get); Serial << "RTC Sync"; if (timeStatus() != timeSet){ Serial << " FAIL!"; } Serial << endl; printDateTime( RTC.get() ); Serial << " --> Current RTC time." << endl; //Disable the default square wave of the SQW pin. RTC.squareWave(SQWAVE_NONE); //Attach an interrupt on the falling of the SQW pin. //digitalWrite(SQW_PIN, HIGH); //redundant with the following line*/ pinMode(SQW_PIN, INPUT_PULLUP); //Set an alarm at every 20th second of every minute. /* RTC.setAlarm(ALM1_MATCH_SECONDS, 20, 0, 0, 1); //daydate parameter should be between 1 and 7 RTC.alarm(ALARM_1); //ensure RTC interrupt flag is cleared RTC.alarmInterrupt(ALARM_1, true);*/ } //volatile boolean alarmIsrWasCalled = false; myslim, ze to nepotrebujeme void alarmIsr() { sleep_disable(); sleep = false; Serial.println("Probudil jsem se!"); detachInterrupt(0); } void sleepNow() { sleep_enable(); sleep = true; set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here attachInterrupt(0, alarmIsr, CHANGE); sleep_mode(); if(sleep) sleep_disable(); Serial.println("Muj kod..."); delay(1000); ///!!!!!!!!!!!!!!!DULEZITE!!!!!!!!!!!! } int i = 1; //abych zjistil, kolikrat probehl loop void loop(void) { // alarmIsrWasCalled = false; myslim, ze to nepotrebujeme delay(100); Serial.println(i); printDateTime(); delay(100); i++; sleepNow(); } void printDateTime(/*time_t t*/) { /*Serial << ((day(t)<10) ? "0" : "") << _DEC(day(t)) << ' '; Serial << monthShortStr(month(t)) << " " << _DEC(year(t)) << ' '; Serial << ((hour(t)<10) ? "0" : "") << _DEC(hour(t)) << ':'; Serial << ((minute(t)<10) ? "0" : "") << _DEC(minute(t)) << ':'; Serial << ((second(t)<10) ? "0" : "") << _DEC(second(t));*/ Serial.println("Vypis cas."); }
Mělo by to fungovat tak že když se na interupt pinu něco změní – DS pošle data
tak se dostaneš do smyčka alarmIsr() —> zpět do sleepNow() na pozici „Můj kód…“ —> loop() —> výpis času printDateTime() a zpět na sleepNow()Takhle to jde pořád dokola. Zkus to a napiš jak to funguje. 😀
novakkry
ÚčastníkTady je můj kód, kterej jsem poslepoval z nějakejch kódů. Je to zatím asi nejdál, co jsem se dostal. 😀
Problém je, že proběhne loop, potom se to uspí, probudí, uspí, ale už neprobudí. :/ Možná ten kód je blbost, já nevím…#include <DS3232RTC.h> //http://github.com/JChristensen/DS3232RTC #include <Streaming.h> //http://arduiniana.org/libraries/streaming/ #include <Time.h> //https://playground.arduino.cc/Code/Time #include <Wire.h> //https://arduino.cc/en/Reference/Wire #include <avr/sleep.h> #define SQW_PIN 2 void setup(void) { Serial.begin(115200); //setSyncProvider() causes the Time library to synchronize with the //external RTC by calling RTC.get() every five minutes by default. setSyncProvider(RTC.get); Serial << "RTC Sync"; if (timeStatus() != timeSet){ Serial << " FAIL!"; } Serial << endl; printDateTime( RTC.get() ); Serial << " --> Current RTC time." << endl; //Disable the default square wave of the SQW pin. RTC.squareWave(SQWAVE_NONE); //Attach an interrupt on the falling of the SQW pin. //digitalWrite(SQW_PIN, HIGH); //redundant with the following line pinMode(SQW_PIN, INPUT_PULLUP); //Set an alarm at every 20th second of every minute. RTC.setAlarm(ALM1_MATCH_SECONDS, 20, 0, 0, 1); //daydate parameter should be between 1 and 7 RTC.alarm(ALARM_1); //ensure RTC interrupt flag is cleared RTC.alarmInterrupt(ALARM_1, true); } //volatile boolean alarmIsrWasCalled = false; myslim, ze to nepotrebujeme void alarmIsr() { Serial.println("alarmIsr"); //abych zjistil, jestli tahle funce byla zavolana // alarmIsrWasCalled = true; myslim, ze to nepotrebujeme } void sleepNow() { set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here sleep_enable(); // enables the sleep bit in the mcucr register // use interrupt 0 (pin 2) and run function attachInterrupt(0,alarmIsr, CHANGE);// here the device is actually put to sleep!! sleep_mode(); Serial.println("SleepNow"); //abych zjistil, jestli tahle funce byla zavolana // THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP // sleep_disable(); // first thing after waking from sleep: disable sleep... // detachInterrupt(0); // disables interrupt 0 on pin 2 so the wakeUpNow code will not be executed during normal running time. } int i = 1; //abych zjistil, kolikrat probehl loop void loop(void) { // alarmIsrWasCalled = false; myslim, ze to nepotrebujeme delay(100); Serial.println(i); delay(100); i++; sleepNow(); } void printDateTime(time_t t) { Serial << ((day(t)<10) ? "0" : "") << _DEC(day(t)) << ' '; Serial << monthShortStr(month(t)) << " " << _DEC(year(t)) << ' '; Serial << ((hour(t)<10) ? "0" : "") << _DEC(hour(t)) << ':'; Serial << ((minute(t)<10) ? "0" : "") << _DEC(minute(t)) << ':'; Serial << ((second(t)<10) ? "0" : "") << _DEC(second(t)); }
novakkry
ÚčastníkTo by bylo žůžo. Díkes! 😀
Vojtěch Vosáhlo
ÚčastníkTo jsou takový malý věci, který člověk neví, zaberou mi celej den a potom člověk zjistí, že má přehodit jenom dva drátky…
Já jsem s tím měl jako začátečník taky problémy.
Hele dnes už nemám čas ale zítra to dořešíme, zkusím ti to pomoct sprovoznit. 😀
novakkry
ÚčastníkJinak díky moc za objasnění TX a RX. To jsou takový malý věci, který člověk neví, zaberou mi celej den a potom člověk zjistí, že má přehodit jenom dva drátky… 😀
novakkry
ÚčastníkNo já bych nepoužíval arduino na samotné buzení. Postavil bych si bareduino (bez všech regulátorů, ledek a těchto zbytečností) a budil bych ho přes ten rtc ds3231 modul. Ten má na sobě atmel 24c32n a běží na vlastní baterce, takže arduino může spát a mít spotřebu v micro amperech.
Na internetu jsou k tomu tuny návodů, ale já jsem prostě takový kopyto, že to neumím zprovoznit… 🙁Vojtěch Vosáhlo
ÚčastníkAhoj,
upřímně bych nepoužíval arduino samotné k tomu aby se budilo. Nevím kolik mA ti arduino bere ale alespoň 1mA i při spánku to bude. Já bych zainvestoval nějakých 30Kč 😀 a koupil si Attiny13A. Tenhle procesor používám hrozně dlouho a na buzení ostatních zařízení je dokonalý. Má spotřebu 190uA při práci a 24uA při spánku což by ti např. s 2000 mAh baterijí vydrželo asi 3000dní (i když počítám se sepnutím arduina, měřením…)
Být tebou bych udělal tohle:- Nastav si v DS3231 alarm. Ten dovolí aby ti DS každý den (nebo jakýkoliv interval co nastavíš) poslal data o čase.
- Napsat program který s využitím interuptů zbudí attiny13 když DS pošle data.
- Attiny zapne na určitý čas arduino.
- Arduino si přeměří všechny data, pokud je potřeba přečte si čas z DS a odešle vše na web.
- Poté Attiny znovu vypne arduino a uspí se. To se opakuje pořád dokola.
Takhle bych to udělal já ale chápu že to je docela komplikované. Zvaž všechny pro a proti a kdyby ti to nevyhovovalo tak napiš a vymyslíme něco jiného.
Hodně štěstí.
Mimochodem RX na TX a TX na RX je standardní zapojení sériové linky. Funguje to tak že 1. zařízení něco odešle ze svého TX (transmit) pinu a tyhle data musí 2. zařízení přijmout svým RX (receive) pinem.
Doufám že to pomůže. 😀Attachments:
novakkry
ÚčastníkVojto, díky moc za odpověď, nakonec jsem to dal dohromady. :)) Po nastavení na „serial“ a přepojejní na piny 0 a 1 to funguje. Resp. se musí zapojit TX na RX a RX na TX – nevím proč. Promiň, že odepisuju po tak dlouhý době, byl jsem pryč.
Potřebuju překonat ještě jeden problém, možná trochu větší… Chci, aby arduino tu informaci posílalo jednou za den. Bude poměrně na opuštěném místě, tak potřebuji, aby vydrželo aspoň rok na baterku. Jelikož mi stačí, aby bylo v činnosti max minutu denně, tak by to snad neměl být problém.
Koupil jsem RTC modul ds3231 a mým cílem je, aby arduino spalo, DS3231 ho v určitý čas probudil, arduino by udělalo měření a poslalo by data na server a zase uslo. Takhle furt dokola. Už se to snažím dva dny zprovoznit a výsledek naprosto žádnej.Na této stránce (zhruba v první třetině) pod nadpisem „waking from sleep with signal“ je docela pěkný kód, který bych možná chtěl použít, ale není v něm zaimplementováno DS3231.
http://gammon.com.au/powerTady JChristensen, který napsal knihovnu DS3231.h postoval kód, který má nastaven alarm a interrupt na určitý čas. Zprovoznil jsem ho, ale nemá v sobě „sleep“ funkci a za boha jí tam neumím dodat.
https://github.com/JChristensen/DS3232RTC/issues/5Už se o to snažím dva dny a výsledek pořád žádnej, jsem z toho už fakt zoufalej… :/
Jde mi opravdu jenom o to, aby arduino spalo a v určitej čas ho ds3231 probudilo a arduino udělalo nějakou úlohu a zase uslo. Podle všeho, co jsem se dočetl na netu, by to mělo bejt fakt jednoduchý, ale prostě já nejsem schopnej to zprovoznit.Kdyby mi někdo pomohl, byl bych opravdu neskutečně vděčnej.
Díky moc
Kryštof
mbrazdil
ÚčastníkAno, je to objednané z aliexpressu a deska opravdu obsahuje převodník CH340G. Zkusil jsem doinstalovat ovladače, ale nic se nezměnilo, navíc mi po připojení k USB neustále připojuje a odpojuje. Není možné, že by ten převodník byl špatný nebo špatně nakonfigurovaný (pokud je to vůbec možné)?
Luke_CZ
ÚčastníkKaždý znalý věci nakupuje na Aliexpress.
Zbyšek Voda
ÚčastníkDobrý den,
odkud jste ovladače instaloval?
Pokud jste instaloval ty, které jsou součástí Arduino IDE, tak Vám to pravděpodobně fungovat nebude. Bude potřeba nainstalovat přímo ty pro vaši desku.Luke_CZ
ÚčastníkS největší pravděpodobností jsi nainstaloval ovladače pro FTDI převodník USB<->RS232, z Aliexpressu je tam na 99.9% převodník CH34x, ten je podstatně levnější, než původní FTDI. Ovladače jsou zde.
Milos K
ÚčastníkTak jsem přišel na problém.Je to v harvare arduinu. Nedostatečně tlačí napětí na výstupních pinech. Pokud ho vyměním za jiné které mám na jiném zařízení tak je vše v pořádku.A toto které chodí špatně se závada projevuje i na funkčním zařízení..Leda by šlo na výstupních portech ještě nastavit napětí.Pak by vše bylo v pořádku jak jsem psal o příspěvek výše.
Milos K
ÚčastníkAhoj ano tady je odkaz. Komunikoval jsem i s autorem který mi obratem poslal data na verzi s LCD 16×2 protože tady je verze ny LCD 20×4.. http://k2jji.org/2014/09/18/arduino-base-cw-decoder/
V tomto programu LCD je modře podsvícený ale píše černě. Pak jsem zkusil zkušební soft LCD kde sem nastavil lcd.begin(0, 0); a LCD začalo zobrazovat pěkně bíle. Tak že LCD je v pořádku..Jenom že teď bádám kde tady v tomto programe se nastavuje tento jas protože je tam lcd.begin(colums, rows); a to jak změním sice se to bíle rozsvítí ale některé znaky se ztratí. Dnes ještě napíši autorovi a popíšu mu situaci.Aleš
ÚčastníkJá jsem verzi 1.6.6 nainstaloval jenom proto, abych vyzkoušel kreslení grafů, které tato nová verze obsahuje. Ale už mě to štve natolik, že jsem se vrátil k verzi 1.6.5, a na grafy používám dál Processing.
Aleš
ÚčastníkTak to je zajímavé. Máte někde odkaz na ten program, který zobrazuje černě? Změnil jste knihovnu, nebo program? Docela by mě to zajímalo. Když totiž vypnete u tohoto displeje podsvícení, tak je téměř nečitelný, na rozdíl od černého displeje.
Milos K
ÚčastníkTak jsem na to přišel. LCD je v pořádku. Vyměnil jsem v Arduinu program za jiný ketrý používám jinde.Přeletoval piny a LCD zobrazuje bíle tak jak má. Tak že v programu který je psán pro černé LCD musí být někde položka bud o intenzitě segmentu a nebo negativitě. Ale to fakt nevím kde a jak.
Milos K
ÚčastníkTaky jsem o tom přez noc přemýšlel že se tohle mohlo stát.. Pujde do reklamace. Dík moc za pomoc.
Aleš
ÚčastníkTak mi to nedalo, a displej jsem vytáhl z krabice a zapojil.
Písmena jsou bílá, modré podsvícení. Když točím trimrem, tak buď zmizí, nebo jsou místo písmen bílé obdélníky. Černou tam nedostanu ať dělám co dělám.
Já bych řekl, že ten váš displej je zralý na reklamaci. Že při výrobě udělali chybu, a místo bílého tam osadili klasický černý. Jenom podsvícení je modré.Attachments:
Milos K
ÚčastníkJe to podsvícený a bílým segmentem http://arduino-shop.cz/arduino-vystupni-periferie/836-arduino-display-modry-16×2-znaku.html Adruinu nano zapojený v D9 – D12. Potenciometr na kontrast zapojen a točením jen do černa segmentu a nebo nic. Znaky jinak zobrazuje ale taky černě. Je pravda že program byl psaný pro LCD http://k2jji.org/2014/09/18/arduino-base-cw-decoder/
Aleš
ÚčastníkTo je nějaké divné. Co je to za displej?
Zkuste lcd.setInverse(1);Zbyšek Voda
ÚčastníkTyto problémy se vyskytují snad jen ve verzi 1.6.6. Verze 1.6.5 jede OK.
Zbyšek Voda
ÚčastníkDobrý den.
Rozdíl je takový, že při použití
#define A
Se všechny výskyty A nahradí JIŽ PŘI PŘEKLADU (respektive těsně před ním) v počítači, takže deska Arduino neví, že existovala nějaká konstanta definovaná pomocí #define A.
Preprocesor překladače dostane text programu a když narazí na výskyt A, nahradí jej, ale ještě jako textovou informaci. Až poté je program přeložen do strojového kódu.Narozdíl
const int B
znamená, že v paměti procesoru Arduina skutečně existuje proměnná B, jenom je označena jako konstantní, tedy neměnitelná.Alis Vitae
ÚčastníkOspravedlňujem sa ale tento text je preložený na Google Translator, pretože slovenský mi práve veľmi dobre nejde. Rozdiel je v tom, že #define nevyužíva pamäť Arduino dosky.
______________________________________________________________________________
Pre možný rozdiel vo význame v preklade, uvádzam tento text i v origináli (Czech).Omlouvám se ale tento text je přeložen na Google Translate, protože slovenština mi zrovna moc dobře nejde. Rozdíl je v tom, že #define nevyužívá paměť arduino desky.
Alis Vitae
Zbyšek Voda
ÚčastníkDobrý den,
zatím je vložení na externí server a následné nalinkování obrázku standardní postup.vnouzirozbijsklo
Účastníkzměna void loop. ted to vypada slibně…opět
{
pinMode(svetlo1,OUTPUT);
displayTime(); // display the real-time clock data on the Serial Monitor,
delay(1000); // every secondbyte s, m, h, dvt, dvm, mesic, r;
readDS3231time(&s, &m, &h, &dvt, &dvm, &mesic, &r);if (h >= 9 && h < 21) den = 1; // nastaveni intervalu sviceni
else den = 0;
for (byte brightness = 0; den == 1 && sviti == 0 && brightness < 255; brightness ++) {
analogWrite(svetlo1, brightness);
if(brightness == 255) sviti = 1;
delay(3500);
}for (byte brightness = 255; den == 0 && sviti == 1 && brightness > 0; brightness –) {
analogWrite(svetlo1, brightness);
if(brightness == 0) sviti = 0;
delay(3500);}}
-
AutorPříspěvky