Close

info@romanmatena.cz

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 30 příspěvků - 451. až 480. (celkem z 2,760)
  • Autor
    Příspěvky
  • odpověď na: Load cell 50kg, HX711 #11000
    Axamith
    Účastník

    Mám mezery ve vzdělání, nevím, co to jsou plynové váhy. Ale i tak, nechci se vyjadřovat ke kvalitě konkrétního senzoru, na to nejsem odborník ani náhodou.
    Tento typ senzoru se podepře na jednom konci a tlačí se na druhý, při deformaci se mění hodnota odporů v můstku tenzometru. Na tomto videu je to hezky vidět, jak má být upnutý (čas cca 4:15) https://www.youtube.com/watch?v=bylvdyOefXo

    odpověď na: Load cell 50kg, HX711 #10999
    lkvapil
    Účastník

    Ještě bych potřeboval tedy poradit. Chtěl bych měřit plynové váhy, které važí cca 20kg. Takže jsem vybral TENTO sensor. Měří 50kg. Pochopil jsem to dobře, že se „“tlačí““ doprostřed toho senzoru. Má šíří 30mm.
    Tak jestli byste mi ho doporučil, protože se mi nechce utrácet 40USD za jeden. 🙁

    Díky
    S pozdravem

    Kvapil

    odpověď na: Bluetooth komunikácia #10998
    Dreamer
    Účastník

    To nechápu a asi nejsem sám. Jako že když dáš v telefonu třeba povel k jízdě vpřed tak aplikace pošle pokaždé jiný kód? Jakou aplikaci v telefonu používáš? A chtělo by to alespoň část kódu který má povely vyhodnocovat sem dát.

    odpověď na: Komunikace Ard. Mega 2560 a PC přes COM #10994
    Jan Hraba
    Účastník

    Zdravím Zbyšku,
    ano, LED „L“ bliká v intervalu 1s/1s, ale bez mého přičinění. Stačí jen připojit napájení. Když programově změním časy, reakce je nulová a přitom mi IDE rovněž nehlásí chybu.

    Taky jsem zjistil určité HW rozdíly mezi MEGA2560 rev3 s chipem 16AU1510 a mým MEGA2560 s chipem 16AU1505. Proto jsem minule přikládal foto boardu.

    Upřednostnil bych přímou komunikaci, mám 778733993, zavolate mi prosím? Případně prosím pošlete SMS a já se ozvu.

    Děkuji. Honza

    odpověď na: aktualizování firmwaru přes uart #10991
    Vojtěch Vosáhlo
    Účastník

    Zezačítku jsem tohle co jsete psal moc nechaápal, už to ale čtu poněkolikáté a žačalo to dávat smysl

    Příště budu konkrétnější.

    Lze zavolat funkci která by byla nějakým způsobem uložena do paměti pro bootloader? a tím moha přepsat stávající hlavní program? (tuším, že to pravděpodonmě nebude jednduché takže odpověď bude NE)

    No, možná ano. Assembler má příkaz ve které můžete skočit na určitou adresu v paměti, myslím že jmp. Z bootloaderu skáčete na program právě touto funkcí takže nevidím důvod proč by to nešlo ALE když skočíte do bpotloaderu, není to stejné jako kdyby se procesor bootoval od začátku. Jde o to že vše co jste si nastavil v programu (konfigurace pinů, přerušení…) zůstane nastavené takže bootloader nemusí fungovat tak jak má. Já ale vlastně nevidím důvod proč do bootloaderu skákat z programu. Jaký je důvod? Mohl byste prostě připojit reset přes tranzistor k zemi a pak ten tranzistor spínat nějakým pinem procesoru, jednodušší a 100% funkční.

    Jak může vypadat aktualizační procesor? Ještě jsem nezkoušel dostat aeduino na procesor menší než atmega328, a když už bych ho tam dal, tak by bylo zbytečné ho nevyužívat i jinak než jen jako aktualizační. Lze použít pro arduino jako aktualizační procesor třeba nějaký levný jak attiny10 ? možná s extermním paměťovým čipem?

    No na attiny10 byste to určitě nedostal. Možná pokud by to bylo psané v GCC ale ani u toho si nejsem jistý. Kdyby jste si chtěl vše napsat v arduino IDE tak musíte hledat procesor který bude mít +-8KB flash (soudím podle velikosti programu arduinoISP která je asi 4KB). Já teď hodně využívám ATmegy8a, jsou za poměrně slušnou cenu tady v ČR no a z číny, dal jsem asi 5$ za 10ks. Pokud vím tak i 328P by měla být teď levnější, přesněji její redesign 328PB.

    Pochybuju že by se nějak vyplatilo kupovat avr s podporou extérní flash, to jsou vyhozené peníze, vyšlo by to dráže než třeba ta mega8a.

    když zvolím možnost z aktualizačního procesuru posílat data přes uart, následují nejspíš tyto kroky?:
    1. restart procesoru
    2. čekání 20ms
    3. poslání „řídícího slova“ kde najít jak má vypadat?
    4. nahrání bit nebo hex kódu, nebo jende stranky?
    5. poslani dalsiho slova s dalsi strankou nebo restart?

    Zde je odkaz na optiboot wiki kde je popsáno jak zhruba optiboot funguje. To by mělo zodpovědět otázky restartů a posílání dat. Na té stránce je pak odkaz na dokumentaci STK500 kterou optiboot používá, zde přikládám odkaz na PDF. Jsou tam všechny příkazy společně s jejich hexadecimálním číslem.

    A takové finále tady je stránka na které je vypsaný celý proces programování arduina opět s hex reprezentací příkazů. Tohle by vás snad mělo dovést do zdárného konce.

    Držím palce, Vojta

    odpověď na: Load cell 50kg, HX711 #10988
    Axamith
    Účastník

    Nejsem žádný odborník na tenzometry, jen jsem si s nimi chvíli hrál a laboroval, trochu hledal informace. Podle výše uvedeného linku jsem rozchodil měření se zobrazením na serial monitor, víc jsem si s tím nehrál, nebyl čas.
    Problematika tenzometrů je trochu složitější, než se zdá. Levné nesnesou dlouhodobější (trvalou) zátěž. Tedy když je na váze dlouhodobě závaží. Tohle tenzometr za 50,- neumí, je mechanicky slabý. Další problém je tzv. tečení, má to zase spojitost s mechanikou. Jde o deformaci zatížením. Aby toho nebylo málo, do toho ještě vstupuje teplota, při pokojové teplotě je to OK, s klesající dochází k chybě měření, řádově až o celá % (bez vlastní praxe, vyčteno).
    Většinu z toho lze řešit pořádným tenzometrem. Dříve se na větší hmotnosti používal pákový mechanizmus, např. 1:10. takže snímač 2 kg přes páku snímal 200 kg. To už ustupuje do pozadí, nyní jsou k dispozici snímače na desítky i stovky kg za rozumnou cenu. Ale určitě bych si pořídil snímač s větším mechanickým profilem, např. 30×30 mm, délku 120-150 mm. Samozřejmě s ohledem na požadované zatížení, na 0,5 kg není třeba takový macek, na 150 kg bych už takový pořídil. Cena kolem 1000,- a výše. Nemá smysl na tom výrazně šetřit, pokud to není jen na hraní a má to být skutečná váha.

    odpověď na: Load cell 50kg, HX711 #10986
    lkvapil
    Účastník
    odpověď na: Load cell 50kg, HX711 #10985
    lkvapil
    Účastník

    Nejprve jsem chtěl ty levné zprovoznit. Jenže se mi vůbec nedaří, a tak asi objednám, jak říkáš ty dražší. Nešly by 2 váhové senzory (každý o 20kg) zkombinovat, tak, že by mohly naměřit až 40 kg (s jedním breakout boardem) ? Nebo je to blbost :D. A poslední dotaz, jestli naměří 10kg a 100kg váhový senzor stejné hodnoty, nebo bude velký rozdíl hodnot ?

    odpověď na: Stabilizátor napětí #10975
    Luke_CZ
    Účastník

    Arduino(UNO) má 10-bit analogově-digitální převodník, který převádí napětí na vstupním pinu na digitální hodnotu viz. analogRead(), jelikož je to 10-bit, tak napětí na pinu ti převede na číslo 0-1023 (2 na desátou – 1).
    Příklad: Pro 5V Arduino je tedy 5V na vstupním pinu převedeno na číslo 1023.
    Tedy z toho plyne, že nejmenší jednotku jsi schopen změřit 5V/1024 = 0,004882813V = cca 5mV(analogicky platí pro 3.3V verzi arduina tam by to bylo při 3.3V cca 3mV).
    Pro přesný A/D převod potřebuješ mít referenční napětí, a tím napájet čidla.
    Například jaké napětí dává integrovaný stabilizátor a skeč upravit tak, aby reflektoval toto napětí coby referenční. Více zde analogReference().
    Před tím, než začneš cokoliv měřit na vstupním pinu je nutno si ověřit:
    1, napěťovou logiku arduina 5V, 3.3V
    2, nikdy se nesmí dostat na pin vyšší napětí, než je napěťová logika arduina, jinak ho spolehlivě odpálíš!
    3, pro měření vyšších napětí je nutné vyrobit napěťový dělič více zde
    Online kalkulačka
    4, v autě bych určitě ochránil piny před možným přepětím. Další inspirace na Google(arduino adc protection))

    Tož kdyby něco tak napiš 😉

    L:

    odpověď na: Stabilizátor napětí #10974
    hcdady
    Účastník

    Dobrý den, děkuji za echo se stabilizátorem. A jeden dotaz, jsem v elektrice sláb, ale ten referenční zdroj to je co? Zkoušel jsem to najít sám, jenže to je na mě dost složitý. Neexistuje taky nějaký plošňák na 24V abych se to nemusel učit. Že bych to koupil, a nebo kdyby to nebylo složitý i spájel. :-). Za radu díky.

    odpověď na: aktualizování firmwaru přes uart #10973
    michal123
    Účastník

    když zvolím možnost z aktualizačního procesuru posílat data přes uart, následují nejspíš tyto kroky?:
    restart procesoru
    čekání 20ms
    poslání „řídícího slova“ kde najít jak má vypadat?
    nahrání bit nebo hex kódu, nebo jende stranky?
    poslani dalsiho slova s dalsi strankou nebo restart?

    nepodařilo se mi najít přesný postup

    odpověď na: aktualizování firmwaru přes uart #10972
    michal123
    Účastník

    Dosud jsem používal pouze arduino, přemýšlím o atmel studiu (mám snad už nějaké základy assembleru a c++ tak by to snad mohlo jít), rád bych to vyřešil pro Arduino.

    Zde je hezký článek o tom jak bootloader funguje a i ukázka velice jednoduchého kódu: Bootloader AVR

    Ano, tenhle článek jsem četl už asi před týdnem, a rozhodně mi osvětlil některé časti. Výhdami jsem mylsel to jestli (případně proč) bootloader umi i něco více než arduino program. Chapu to tak ze kdyz bych psal v atmelstudiu tak bootloader bude umet stejne veci jako kod, ale nejsem si jist jeslti to tak opravdu je a jeslti když bych psal v arduinu budou na všechno příkazy.

    Poté si můžete projít i bootloader který je v arduinu zde: Arduino bootloader

    Děkuji, tohle jsem hledal, ale bohůžel se stalo to co je nejspíš pravděpodobné, že mi ten kód moc neříká (a studovat hotřeba týden když se mu chci vyhnout se mi moc nechce)

    Budu trošku tipovat …

    Zezačítku jsem tohle co jsete psal moc nechaápal, už to ale čtu poněkolikáté a žačalo to dávat smysl, takže tomu rozumím tak, že kód který je zapsaán v nejaké paměti nemůže tu stejnou paměť přepsat, ptotože by došlo k chybě. Lze zavolat funkci která by byla nějakým způsobem uložena do paměti pro bootloader? a tím moha přepsat stávající hlavní program? (tuším, že to pravděpodonmě nebude jednduché takže odpověď bude NE)

    Jak může vypadat aktualizační procesor? Ještě jsem nezkoušel dostat aeduino na procesor menší než atmega328, a když už bych ho tam dal, tak by bylo zbytečné ho nevyužívat i jinak než jen jako aktualizační.
    Lze použít pro arduino jako aktualizační procesor třeba nějaký levný jak attiny10 ? možná s extermním paměťovým čipem?
    Myslím, že když zvládnu naprogramovat jeden druhým, tak i druhý prvním. To snad nebude problém

    Ano, metoda přes UART nebo SPI se mi zdá snažší (snad i zabere méně paměti) a myslím, že ni moje znalosti stačit mohou (i když jsem se ještě nepodíval na ArduinoISP)
    Ještě se tedy pokouším zhodnotit kterou metodou se vydám, jeslti ISP nebo UART (který se mi zatím zdá méně náročný na počet pinů)

    Raději bych se tedy bootloaderu vyhnul, ale měl bych k němu ještě otázku. Je je nějaký funkční rozdíl mezi původním 2kb bootloaderem a menším optiboot bootloaderem?

    odpověď na: aktualizování firmwaru přes uart #10971
    michal123
    Účastník

    Děkuji, je to pro mě velkým přínosem, i když je tam spousta věcí co ještě neznám.

    odpověď na: Load cell 50kg, HX711 #10970
    Axamith
    Účastník

    V podstatě jsem nenašel nic jiného na tří vodičové zapojení, než máš ty https://i.stack.imgur.com/xYqBx.jpg
    Obecně se tenzometry používají se 4 vývody, ty se třemi jsou taková laciná náhražka. Doplňkové odpory (jejich kvalita) budou dost výrazně ovlivňovat výsledné měření.
    Tady je hotové řešení, která krom klasického 4 vývodového tenzemetru využívá i 3 vývody. https://learn.sparkfun.com/tutorials/load-cell-amplifier-hx711-breakout-hookup-guide
    Se 4 vývody mi to jelo na první dobrou.
    Na co to chceš používat. Ty hodně laciné tenzometry nejsou žádná sláva, zkus provést několik měření se stejným závažím a uvidíš rozdíly. A zkus to samé při různých teplotách. Budeš se hodně divit, pro rozumnou aplikaci, která má dávat slušné výsledky je potřeba trochu slušné snímače.

    odpověď na: Časovane spinaní pinu #10969
    posjirka
    Účastník

    nech to být, rád pomůžu. jestli chceš něják přispět dej sem pak svuj projekt ať se mohou inspirovat jiní. I jednoduchá věc může ulehčit život 🙂

    ps doporučuju smazat to tel. číslo. asi není důvod podezřívat někoho ze zneužití, ale at máš i ty klid 🙂

    odpověď na: Časovane spinaní pinu #10968
    hogen
    Účastník

    Jirko,moc ti děkuji,je to přesně to co jsem potřeboval.Rád bych ti poslal nějakou odměnu za tvůj čas.Jestli můžeš,pošli mi číslo účtu na xxxxxxxxx (vyřešeno).

    johnyhol
    Účastník

    Ahoj. Tak můžu (sice s odstupem času) potvrdit, že byl problém opravdu v knihovně. Po zakomentování toho řádku jak radíte to už funguje. Díky moc!

    Narazil jsem ale ještě na jeden problém, nebo spíš bych potřeboval poradit jak udělat zpožděné vypnutí nahřívání bojleru u dalšího zařízení s ESP8266 (tentokrát se jedná o SonOff). Kód pro zapnutí a vypnutí mám hotový (to funguje bez problémů), ale nyní bych ho potřeboval doplnit o to, aby po zapnutí přes Exosite běželo nahřívání řekněme 2h a pak, aby se nahřívání vypnulo a vše se vrátilo do původního stavu a bylo to připravené pro další zapnutí. Zkouším to tu už asi tři večery a pořád bez úspěchu. Vždy to skončí tak, že se to sice po nastavené době vypne (vypne relé a vrátí se stav přepínače na Exosite do polohy vypnuto), ale po dalším zapnutí se jenom na chvíli přepne přepínač na Exosite do polohy zapnuto a po pár vteřinách se opět přepne do polohy vypnuto.
    Tady je kód se zakomentovaným pokusem o zpoždění:

    
    #include <ESP8266WiFi.h>
    #include <Exosite.h>
    
    String cikData = "4b0024b7d0981b76ca9ac9ed61de0de2cf87b704";  // <-- FILL IN YOUR CIK HERE! (https://portals.exosite.com -> Add Device)
    
    const char* ssid = "Holarci";
    const char* pass = "H0larc1*2S";
    
    WiFiClient client;
    Exosite exosite(cikData, &client);
    
    String readString;
    String writeString;
    String returnString;
    String readParam ;
    String writeParam ;
    char buffer[7];
    
    int smycka4 = 0; // pomocna smycka - zapaleni
    int smycka4max = 50; // max.pomocne smycky
    
    byte TstavA;//ALIAS na exosite
    byte TvipA;//ALIAS na exosite
    byte ReleA=12;
    byte LED=13;
    
    void setup(void){
      Serial.begin(9600);
      Serial.println("");
      
      WiFi.begin(ssid, pass);
      
      while (WiFi.status() != WL_CONNECTED) {
        delay(100);
        Serial.print(".");
      }
      
      Serial.println("");
      Serial.print("Connected to ");
      Serial.println(ssid);
      Serial.print("IP address: ");
      Serial.println(WiFi.localIP());
      
      pinMode(ReleA,OUTPUT);
      digitalWrite (ReleA,HIGH); 
    
      pinMode(LED,OUTPUT);
      digitalWrite (LED,HIGH); 
      
    } 
     
    void loop() {
    
    //*****************************//
    // cteni stavu vypinace bojler //
    //*****************************//
    Serial.println("Ctu stav vypinace A");  
    readString = "TvipA";
      if(exosite.writeRead(writeString, readString, returnString)){
       Serial.println("OK");
      Serial.print("Stav vypinace A je: ");
    Serial.println(returnString);
      }
    else{
      Serial.println("Error");
      }
    if (returnString == "TvipA=1"){
    TvipA=1;
      }
    else{
    TvipA=0;
      }
    returnString ="";   
     delay(1000);
    
    //*************************//
    // logika zapinani bojleru //
    //*************************//
    if(TvipA==1){
    digitalWrite(ReleA, LOW);
    digitalWrite(LED, LOW);
     Serial.println("Nahrivani bojleru ZAPNUTO");
    TstavA=1;
    ////////////////////////
    // casovac vypnuti -> //
    ////////////////////////
    /*     for (smycka4 = 0;  smycka4 < smycka4max; smycka4 ++){
        delay(1000); 
      Serial.print("Stav: ");
      Serial.print(smycka4);
      Serial.print("s/");
      Serial.print(smycka4max);
      Serial.println("s ");
      }
    writeString = "TvipA=0";*/
    ////////////////////////
    // <- casovac vypnuti //
    ////////////////////////
      }
    else if (TvipA==0){
    digitalWrite(ReleA, HIGH);
    digitalWrite(LED, HIGH);
     Serial.println("Nahrivani bojleru VYPNUTO");
    TstavA=0;
      }
    //**************************//
    // odeslani stavu nahrivani //
    //**************************//
    readParam = "";        
    writeParam = "TstavA="; 
    writeParam += TstavA;    
    if(exosite.writeRead(writeParam, readParam, returnString)) {  
      Serial.println("Exosite OK");  
      if (returnString != "") { 
        Serial.println("Stav nahrivani odeslany");
       }
       }
    else {
     Serial.println("Exosite chyba stav neodeslany");
        }
    delay(1000);
    
    }  
      
    

    Díky za reakce.

    odpověď na: Komunikace Ard. Mega 2560 a PC přes COM #10956
    Zbyšek Voda
    Účastník

    V tom výpisu IDE žádnou chybu nehlásí. Podle čeho soudíte, že program nefunguje?

    Když nahrajete blikání LEDkou, tak bliká?

    odpověď na: aktualizování firmwaru přes uart #10955
    Zbyšek Voda
    Účastník

    Pěknou přednášku o Arduino bootloaderu a jeho modifikacích měl Petr Stehlík na posledním Install Festu – https://www.youtube.com/watch?v=6_1VQvVuFf8&feature=youtu.be&list=PLub6xBWO8gV_t_p-5-J_qU20fkkDtsLjB. Třeba byste se mohl nechat inspirovat 🙂

    odpověď na: Časovane spinaní pinu #10954
    posjirka
    Účastník

    máš pravdu. v poslední době používám simulator arduina místo HW řešení a nedocvaklo mě, že používá pro vstupy tlačítek přímo log.1/0, nikoliv spínače na zem.
    Patří tam do setup() při nastavení modu pinu použít „INPUT_PULLUP“ místo „INPUT“ u všech tlačítek.

    // casovac s 3 predvolbou casu
    // by JP. 2017
    // v02 - doplnení pull up interních odporu
    
    #define LED 13 // led dioda
    #define TLACITKO1 10 // tlacitko proti zemi
    #define TLACITKO2 11 // tlacitko proti zemi
    #define TLACITKO3 12 // tlacitko proti zemi
    
    void setup()
    {
    	pinMode(LED, OUTPUT);
    	pinMode(TLACITKO1, INPUT_PULLUP);// v02
    	pinMode(TLACITKO2, INPUT_PULLUP);// v02
    	pinMode(TLACITKO3, INPUT_PULLUP);// v02
    }
    
    void loop()
    {
    	if(digitalRead(TLACITKO1) == 0){
    		// po stistku tlacitka 1 volej funkci caosvace se zpozdenim 5s
    		casovac(TLACITKO1, 5000);
    	} 
    	if(digitalRead(TLACITKO2) == 0){
    		// po stistku talcitka 2 volej funkci caosvace se zpozdenim 10s
    		casovac(TLACITKO2, 10000);
    	} 
    	if(digitalRead(TLACITKO3) == 0){
    		// po stistku tlacitka 3 volej funkci caosvace se zpozdenim 15s
    		casovac(TLACITKO3, 15000);
    	} 	
    }
    
    void casovac(int TLACITKO, unsigned long ZPOZDENI)
    {
    	// rozsvit LED a zapis si cas startu 
    	unsigned long OLDTIME = millis();
    	digitalWrite(LED, HIGH);
    	// cekej dokud neni uvolnene tlacitko
    	while(digitalRead(TLACITKO) == 0)
    	{	
    		delay(100); // odstraneni zakmitu tlacitka
    	}
    	// cekej dokud nepretece nastaveny cas
    	while(millis() < (OLDTIME + ZPOZDENI))
    	{
    		// pokud stisknu nejake tlacitko ukonci casovac tim ze vynulujes nastavenou dobu zpozdeni
    		if(digitalRead(TLACITKO1) == 0 || digitalRead(TLACITKO2) == 0 || digitalRead(TLACITKO3) == 0)
    		{
    			ZPOZDENI = 0;
    		}
    	}
    	// zhasni LED
    	digitalWrite(LED, LOW);
    	delay(1000); // zabraneni nechtenemu startu noveho cesovani
    }

    snad tě to někam posunulo a budeš mít z čeho čerpat.

    odpověď na: Časovane spinaní pinu #10947
    hogen
    Účastník

    Jirko děkuji moc,pravě jsem to zkusil nakrmit,ale na vystupu ,to je loterie,myslim,že to je absencí pullUp v programu,mrknu na to,pokusím se to dopsát,pokud to nedám tak to dám hardwarově.(jen doufám ,že neplácám hlouposti).Dnes už to nedám,byl jsem na maltě a nějak mně to zmohlo :-).Dobrou

    odpověď na: Časovane spinaní pinu #10946
    posjirka
    Účastník

    je to trochu primitivní řešení, ale aspoň se na něm můžeš něco naučit. Popisy jsou snad jasné a je tam odstraněno hned několik zvláštoností ze základů programování (zákmity tlačítek, nechtěné nastarotvání nového časování atd. spíš jde o věci, které by tě možná v začátku nenapadly, ale pak by ti způsobovali problémy …snad jsem pomohl

    odpověď na: Časovane spinaní pinu #10945
    posjirka
    Účastník

    měl jsem trochu honku, ale viděl bych to takto:

    // casovac s 3 predvolbou casu
    // by JP. 2017
    // v01
    
    #define LED 13 // led dioda
    #define TLACITKO1 10 // tlacitko proti zemi
    #define TLACITKO2 11 // tlacitko proti zemi
    #define TLACITKO3 12 // tlacitko proti zemi
    
    void setup()
    {
    	pinMode(LED, OUTPUT);
    	pinMode(TLACITKO1, INPUT);
    	pinMode(TLACITKO2, INPUT);
    	pinMode(TLACITKO3, INPUT);
    }
    
    void loop()
    {
    	if(digitalRead(TLACITKO1) == 0){
    		// po stistku tlacitka 1 volej funkci caosvace se zpozdenim 5s
    		casovac(TLACITKO1, 5000);
    	} 
    	if(digitalRead(TLACITKO2) == 0){
    		// po stistku talcitka 2 volej funkci caosvace se zpozdenim 10s
    		casovac(TLACITKO2, 10000);
    	} 
    	if(digitalRead(TLACITKO3) == 0){
    		// po stistku tlacitka 3 volej funkci caosvace se zpozdenim 15s
    		casovac(TLACITKO3, 15000);
    	} 	
    }
    
    void casovac(int TLACITKO, unsigned long ZPOZDENI)
    {
    	// rozsvit LED a zapis si cas startu 
    	unsigned long OLDTIME = millis();
    	digitalWrite(LED, HIGH);
    	// cekej dokud neni uvolnene tlacitko
    	while(digitalRead(TLACITKO) == 0)
    	{	
    		delay(100); // odstraneni zakmitu tlacitka
    	}
    	// cekej dokud nepretece nastaveny cas
    	while(millis() < (OLDTIME + ZPOZDENI))
    	{
    		// pokud stisknu nejake tlacitko ukonci casovac tim ze vynulujes nastavenou dobu zpozdeni
    		if(digitalRead(TLACITKO1) == 0 || digitalRead(TLACITKO2) == 0 || digitalRead(TLACITKO3) == 0)
    		{
    			ZPOZDENI = 0;
    		}
    	}
    	// zhasni LED
    	digitalWrite(LED, LOW);
    	delay(1000); // zabraneni nechtenemu startu noveho cesovani
    }
    odpověď na: aktualizování firmwaru přes uart #10944
    Vojtěch Vosáhlo
    Účastník

    aktuálně používám atmega328p

    Používáte ji jako Arduino nebo jako čip samotný, programovaný třeba přes Atmel Studio?

    U psaní bootloaderu totiž moc arduina neuvidíte, ten se píše v GCC nebo Assembleru. Výhody oproti programu? On je vlastně sám program, ale je na přesně definovaném místě v paměti (úplně na konci) a procesor ho spouští jako první. Je to takový BIOS, on se stará o to aby se váš program rozjel tak jak má, je to takový startér.
    Zde je hezký článek o tom jak bootloader funguje a i ukázka velice jednoduchého kódu: Bootloader AVR

    Poté si můžete projít i bootloader který je v arduinu zde: Arduino bootloader

    proč to nejde tak, že za běku se vyvolá například přerušení, vyprázdní se ram, do ní nenahraje požadovaný kód a pak nenaprogramuje do příslušné paměti?

    Budu trošku tipovat ale řekl bych že hlavně kvůli tomu že váš program běží v nějaké smyčce, jakmile byste vyprázdnil ram a začal zapisovat cokoliv do paměti, smyčka by se roztrhla a program by stopnul takže byste nezapsal nic. Když máte v paměti bootloader i program, běží si oba v jiné smyčce, paměť je rozdělena. Bootloader přesně ví kde je aby nezasáhl do své smyčky a když se rozjede, může bez problému zapisovat data do zbylé části paměti. Bootloader může také vykonávat funkce pro zápis bytů na specifické místo v paměti.

    3)ano i o této možnosti jsem přemýšlel ale uní zase nevím jak umožnit přeprogramovávání dvou procesorů za běhu (pak samozřejmě restart) nebo úpravy bootloaderu

    Proč přeprogramování dvou procáků? Mám jeden, třeba „aktualizační“ a druhý, „hlavní.“
    Hlavní procesor může běžet a dělat si co chce, jakýkoliv kód který mu dáte. Aktualizační procesor může zatím sedět a čekat, třeba počítat a každou hodinu kontrolovat internet zda tam není nový soubor. Pokud by se GPSR modulu měl dostávat i hlavní procesor, musel by být hlavní procesor ten co provádí váš program ale i počítá, pak by si sám zavolal ten aktualizační, ten by převzal modul a zjistil jestli je možný update. Pokud by update byl, aktualizační procesor by se zachoval jako programátor. Stahoval by byte po bytu z vašeho hex a zapisoval by ho do paměti toho druhého zatímco by ho držel v resetu.. Reset je samozřejmě proveden přivedením pinu RST na zem. Aktualizační procesor se nemusí sám nikdy aktualizovat.

    Tahle metoda má jednu velkou výhodu, nemusíte na ní znát C. Vše co jsem popsal by neměl být problém naprogramovat v Arduino IDE, je to prakticky jen komunikace po SPI, UART a přepínání pinů. Mohl byste začít třeba s příkladem v arduino IDE a to ArduinoISP, prakticky plní to co vy potřebujete, čte UART a vš přehraje do paměti čipu připojeného přes SPI, stačilo by to upravit tak aby četl z internetu.

    Pak by se možná dalo vymyslet i něco s existujícím arduino bootloaderem, možná mu posílat příkazy přes serial. Vzhledem k tomu že je to optiboot, měli by se dát i ty příkazy někde najít. Ale o tom vám bohužel moc neřeknu :/

    odpověď na: aktualizování firmwaru přes uart #10941
    michal123
    Účastník

    aktuálně používám atmega328p

    1)takovýto modul nemám, ale jestli to dobře chápu tak se to blíží možnosti 3)

    2)jakou výhodu má bootloader oproti programu za běhu nebo například přerušení?

    jak se píše vlastní bootloader?

    proč to nejde tak, že za běku se vyvolá například přerušení, vyprázdní se ram, do ní nenahraje požadovaný kód a pak nenaprogramuje do příslušné paměti?

    3)ano i o této možnosti jsem přemýšlel ale uní zase nevím jak umožnit přeprogramovávání dvou procesorů za běhu (pak samozřejmě restart) nebo úpravy bootloaderu

    mohl by jste mě prosím odkázat na nějaký pochopitelný kód?
    Děkuji, tyto odpovědi se mi moc líbí, jen nevím jak je realizovat (ani jednu)

    odpověď na: aktualizování firmwaru přes uart #10939
    Vojtěch Vosáhlo
    Účastník

    Dobrý den,
    napadá mě hned několik řešení tak se na ně pojďme podívat. Budu mluvit o procesoru který používáte jako AVR, použitá metoda programování by pak musela být nejspíš přes SPI.

    1) Je závislé na modulu který budete používat k připojení k internetu. Pokud by měl modul samotný možnost uploadovat do něj program (můžete měnit co běží v modulu), třeba nějaké ESP, mohl byste si napsat prográmek kde modul samotný nahraje program do AVR. Několik takových programů pro ESP již existuje.

    2) AVR by flashnulo samo sebe. Na tohle se používá bootloader, to je prográmek v paměti který je před samotným kódem a je spuštěn vždy při zapnutí čipu. Muselo by se tedy nejspíše naprogramovat to že AVR si řekne GPRS modulu o soubor, „stáhne“ si ho a pak do sebe nahraje. Tady je ale pár možných komplikací, nejsem nějaký bootloader expert a nevím jestli by se do samotného bootloaderu dala zapsat celá procedura, tzn. stahování jednotlivých bytů ze souboru a jejich vypalování do paměti. Možná by tedy bylo potřeba aby AVR nejdříve stáhlo soubor (asi někam extérně kvůli velikosti, SD nebo externí flash) a resetovalo se. Bootloader by pak jen přečetl externí paměť a nahrál vše do AVR.

    3) Mít nějaký čip, třeba další AVR, které bude dělat programátor pro váš hlavní čip. Prakticky byste mohl mít čip který funguje jako USBasp akorát přes internet. Tahle metoda by byla použitelná asi jen pokud by nefungovala 2, tedy provedení všeho v bootloaderu.

    Pokud existojou lepší metody tak jsem si jistý že mě někdo opraví a vylepší co jsem napsal.

    odpověď na: Časovane spinaní pinu #10937
    BlindP
    Účastník

    Napsal jsem jednu třídu, sice určenou pro časování čerpadel, ale pořád je to jen zpožděné vypnutí – pak by to mohlo být

    
    Pump p(vystupni_pin);
    
    if(!digitalRead(pin_tlacitka)) {
       p.Start(20);
    }
    zbyva = p.State();
    
    atd..

    BP

    odpověď na: Komunikace Ard. Mega 2560 a PC přes COM #10935
    Jan Hraba
    Účastník

    Přikládám foto boardu:

    Attachments:
    odpověď na: Komunikace Ard. Mega 2560 a PC přes COM #10933
    Jan Hraba
    Účastník

    Dobrý den,
    díky za reakci. K jednotlivým bodům:

    1. Netuším, jak zjistit přesný název a verzi aplikace, ale pouštím ji zadáním: https://create.arduino.cc/editor/, přičemž pracuji v cloudu.

    2. desku jsem koupil na dx.com, na desce je uvedeno Made in China, pokud pustím lokální IDE ver. 1.6.10 a zadám GetBoard Info, editor vypíše:
    BN: Unknown board
    VID: 1A86
    PID: 7523
    SN: Upload any sketch to obtain it

    3. webový editor napsaný program přeloží bez chybového hlášní, ale asi jej do arduina nepošle, přičemž vypíše:
    „arduino-builder/arduino-builder -compile -core-api-version 10611 -build-path /tmp/457964434 -hardware arduino-builder/hardware -hardware arduino-builder/packages/cores -tools arduino-builder/tools -tools arduino-builder/packages/tools -built-in-libraries arduino-builder/latest -libraries /tmp/353782079/pinned -libraries /tmp/353782079/custom -fqbn arduino:avr:mega:cpu=atmega2560 -build-cache /tmp -verbose=false /tmp/353782079/Rolety_ver_002
    Sketch uses 2866 bytes (1%) of program storage space. Maximum is 253952 bytes.
    Global variables use 173 bytes (2%) of dynamic memory, leaving 8019 bytes for local variables. Maximum is 8192 bytes.“

    Nějak mi docházejí nápady 🙁

    odpověď na: Adresace I2C #10932
    Luke_CZ
    Účastník

    Musíš juknout do zdrojáků, předpokládám, že na začátku skeče vkládáš hlavičkový C soubor pro knihovnu:
    #include <TM1640.h>
    Tož se jukni do něj(TM1640.h), jak je funkce definována, pokud není (jakože není), tak je v něm (TM1640.h) vkládán další hlavičkový soubor#include "TM16XX.h".
    Koukni do TM16XX.h a hleďme:

    /** Set the display to the values (left to right) */
    virtual void setDisplay(const byte values[], unsigned int length = 8);

    Prostě, ne každý autor píše detailní manuál ke knihovně a raději dává popis funkcí rovnou do zdrojáku.

    L.

Aktuálně je na stránce zobrazeno 30 příspěvků - 451. až 480. (celkem z 2,760)