Close

JardaL

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 30 příspěvků - 391. až 420. (celkem z 2,779)
  • Autor
    Příspěvky
  • odpověď na: aktualizování firmwaru přes uart #11156
    Vojtěch Vosáhlo
    Účastník

    Tak jak to stojí a leží jen získá podpis procesoru. To je číslo jedinečné pro rodinu procesorů a né každý zvlášť. 1E950F je podpis procesorů řady Atmega328P, každý z procesorů by tedy odpověděl stejným číslem. Každopádně musí být vždy stejné (u určité řady) takže se s ním dá i kontrolovat jestli je komunikace v pořádku.

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

    Na co je getParams() ? co to říká? jen to testuje, že procesor reaguje? Je to zjískané číslo jedinečné (dá se na to spolehnout?)?

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

    Děkuji, už je mi to snad jasné, zkusím napsat kód (ale bude mi to chvíli trvat)

    odpověď na: Kontroler pro ovládání akvária #11153
    darira
    Účastník

    Děkuji za odpověď. Asi začnu postupně. Nejdříve se zbavím nepájivého pole, které mám na odzkoušení a nahradím tišťákem. Pak přidám tu podmínku pro ověření dat. Pokud by ani to nefungovalo tak bych žádal o nová data jak píšeš. Nešlo mě do hlavy, že to tak blbne – arduino a PC komunikuje v pořádku. Asi za to může to nepájivé pole s převodníkem úrovní, rychlost je 9600. Z RX2/TX2 Arduino Mega na piny D1/D2 u NodeMCU (SoftwareSerial.h) lze použít i duplexní komunikaci?

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

    jak zjistím velikost stránky?
    Předpokládám, že tahle velikost strany je velikost celého programu který se z nějakého důvodu nenahrává po stranách (kterých má být 256) ale celý najendou.
    Kde přesně jí vezmu když mám hex soubor vytvořený arduinem? Mohlo by to být třeba tak, že vyzmu hex subor, odstraním z něj dvojtečky (na začátku každého řádku mám dvojtečku), odstraním zalomení řádků a spočítám počet znaků?

    Není. Velikost stránky kterou používá arduino je u všech základních modelů (tedy UNO, nano atd.) 128B

    Vše můžete vzít z vygenerovaného .hex souboru.
    Je ve formátu Intel HEX takže data jsou strukturována takto:
    [:][Počet bytů][Adresa][Typ zápisu][Data][Nějaký checksum]

    Vezmu li tedy 1. linku mého hex souboru blink, vypadá takto:
    :100000000C9434000C943E000C943E000C943E0082

    Po úpravě tak aby se to dobře četlo může vypadat takto:
    :#10 #00#00 #00 #0C,#94,#34,#00,#0C,#94,#3E,#00,#0C,#94,#3E,#00,#0C,#94,#3E,#00 #82

    Z toho vyčteme že:
    [#10] – Počet bytů v tomto řádku je 16. (0x10 -> DEC = 16)
    [#00#00] – Hex soubor začíná na adrese #0000 takže i počáteční adresa bude #00
    [#00] – Typ záznamu, #00 znamená datový záznam. Jediné co arduino používá je #00 – datový záznam a #01 – konec souboru. Je pro nás taky nevýznamný.
    [#0C…#00] – Samotná data, tedy 16B
    [#82] – checksum dat, pro nás nevýznamný

    Počáteční adresa bývá vždy #0000.

    Do arduina se ale nezapisuje jen 16B, programátor musí zapsat celou stránku, tzn. 128B.
    Proto si vezme počáteční adresu z hex souboru (#0000) a načte si 128B dat. Pak na programovaný procesor vyflusne data ve formátu:
    #55 #0000 #20 – tedy STK_LOAD_ADDRESS, 0x0000, SYNC_CRC_EOP – Tohle připraví programování.

    Poté už přijde samotný zápis dat.
    #64 #00#80 #46 [128B dat] #20 – tedy STK_PROGRAM_PAGE, 0x0080 (velikost stránky), ‘F'(flash paměť), 128B dat,SYNC_CRC_EOP

    I když váš program nemá přesný počet bytů na stránku, musí se zapsat stránka celá, zbylé místo se tedy doplňuje #FF.

    Tady je opět odkaz na pastebin s porovnáním HEX souboru který vygeneruje arduino IDE a toho co posílá procesoru.

    Ano poslat data v hex tvaru by vyřešilo tenhle problém ale byl by zbytečně velký tok dat při aplikaci, takže bych se zkusil vydat první cestou programator.write(“P”);
    mohu tedy data uložit do proměné (nejspíš pole charů) a potom je posílat s tím že funkce write pošle bajt po bajtu (tedy for cyklem)?

    Úplně nevím co tím myslíte. Datový tok by měl být vždy stejný vzhledem k tomu že vždy posíláte X bytů reprezentovaných HEX číslem nebo charakterem.

    Rozhodně neukládat do pole vše ale jen jednu stránku. Vždy byste si řekl modulu o data z internetu, nahrál je do pole a pak je posílal. Na posílání bych asi použil smyčku for jak říkáte, bude to nejlepší.

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

    jak zjistím velikost stránky?
    Předpokládám, že tahle velikost strany je velikost celého programu který se z nějakého důvodu nenahrává po stranách (kterých má být 256) ale celý najendou.
    Kde přesně jí vezmu když mám hex soubor vytvořený arduinem? Mohlo by to být třeba tak, že vyzmu hex subor, odstraním z něj dvojtečky (na začátku každého řádku mám dvojtečku), odstraním zalomení řádků a spočítám počet znaků?

    Kde vezmu počáteční adresu? je to vždy 0x3E00?

    Ano poslat data v hex tvaru by vyřešilo tenhle problém ale byl by zbytečně velký tok dat při aplikaci, takže bych se zkusil vydat první cestou programator.write(“P”);
    mohu tedy data uložit do proměné (nejspíš pole charů) a potom je posílat s tím že funkce write pošle bajt po bajtu (tedy for cyklem)?

    Ruční prepisování bytů nemá smysl http://www.branah.com/ascii-converter by mohl případně dělat co chceme ale raději bych dal přednost ušetření datové komunikace snad for cyklem s polem charů.

    Děkuji, zítra odpoledne se sem snad zase dostanu.

    K zapisování jednotlivýchy bytů by

    odpověď na: Kontroler pro ovládání akvária #11150
    posjirka
    Účastník

    no ve výsledku tím autor myslel že si pošleš s kodem i jeslti počet log.1 je sudý „sum=0“ nebo lichý „sum=1“- Pak si spočítáš počet log.1 v tebou přijatých datech a porovnáš. pokud nesouhlasí sudá/lichá máš špatná data a nereaguj na ně. Je tu otázka zda máš duplexní komunikaci, nebo jen posloucháš/přijímáš. V tu chvíli totiž moc neovlivníš výsledek a max. můžeš čekat na lepší konstelaci hvězd. To je pak důležité někde indikovat…. no a pokud máš duplexní nebo aspoň halfduplex tak si prostě požádáš o nová data a to tak dlouho než to to sedne. jak asi tušíš může se stát že i tak nedostaneš 100% výsledek, ale pravděpodobnost stoupá ….

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

    ale co dál, ještě mi nejde do hlavy jak je to s “pocatecniAdresaX” a “velikostStrankyX”

    Tyhle proměnné slouží k nastavení velikosti stránky a počáteční adresy od které se bude zapisovat. Rozdělil jsem je do dvou bytů (2x8bit) protože bootloader očekává 16bit proměnné ale programator.write() umí odeslat jen jeden byte. Je tedy jednodušší nadefinovat proměnné jako 2 byty a pak je tak i odeslat. Pokud bych tedy měl velikost stránky 0x0080, nastavil bych velikostStrankyA na 0x00 a velikostStrankyB na 0x80.

    mohu nahravana data zapsat takto?
    programator.write(“100000000C945…0001FF”);

    Máte prakticky 3 možnosti jak zapisovat. Jako jednotlivé byty – programator.write(0x50);

    Jako string ve kterém je vlastně každé písmenko byte – programator.write(„P“); Toto by vlastně poslalo 0x50.

    Jako pole bytů – programator.write(buf, len);
    buf je pole bytů které chcete vypsat
    len je velikost tohoto pole

    byte buf[2] = {0x50, 0x60};
    programator.write(buf, sizeof(buf));

    Tohle by vypsalo 0x50 a 0x60.

    Takže tak jak jste psal se to vlastně vypsat úplně nedá, místo těch HEX čísel by tam museli být znaky reprezentující ta čísla.

    Mohl by jste mi případně poslat celý funkční program pro nahrání blink?

    Asi zase zítra ale rovnou říkám že budu trochu podvádět 🙂 Budu tam posílat program v GCC a né C++. Blink které je v arduinu má asi 1KB a to je hodně bytů které bych musel přepsat ručně do pole. Proto to bude v GCC kde má blink 176B, to je výrazně méně.

    Abych odpověděl, dostal jsem se k osciloskopu keysight DSOX1102G, jen škoda že když jsem se s ním chtěl podávat na data v uartu tak napsal, že bych si ten doplněk musel koupit, což mě štve (má na to knoflík a stejně se to musí zvlášť platit)

    Taky jsem na ně koukal, za tu cenu se to skoro nedá nekoupit, no, nekoupil jsem ho. Takovéhle dokupování je opravdu nanic.

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

    Vyzkoušel jsem nový kód a už je to lepší. procesor už odpovídá. nedá se říct že by se synchronizoval hned ale to si treba jeste vyladím.

    pozitivní odpoved v sériáku:
    Podpis procesoru: 1E950F
    Synchronizovan s cipem
    Parametry ziskany

    ale co dál, ještě mi nejde do hlavy jak je to s „pocatecniAdresaX“ a „velikostStrankyX“ a mohu nahravana data zapsat takto?
    programator.write(„100000000C945…0001FF“);
    samozrejmě bych to pak nahradil za nějakou nahrávací smyčku.

    Mohl by jste mi případně poslat celý funkční program pro nahrání blink?

    Abych odpověděl, dostal jsem se k osciloskopu keysight DSOX1102G, jen škoda že když jsem se s ním chtěl podávat na data v uartu tak napsal, že bych si ten doplněk musel koupit, což mě štve (má na to knoflík a stejně se to musí zvlášť platit)

    odpověď na: Kontroler pro ovládání akvária #11146
    darira
    Účastník

    Neporadil by prosím někdo, jak kontrolovat správné zaslání analogové hodnoty z Arduina do ESP (NodeMCU) přes sériovou linku? Posílat data z NodeMCU na Cayenne mě jde v pořádku. Když ale posílám hodnoty z Arduina do NodeMCU, velmi často se např údaj o teplotě 24,0 „rozpadne“ a Cayenne vypíše hodnotu jako 2 a pak 2,4 nebo jinou kombinaci naměřených čísel. Zřejmě jde o ztrátu nějakého bytu. Část kódu používám z http://www.arduino8.cz/lekce-35-arduino-komunikace-pres-rs485-az-na-vzdalenost-1200m/. Autor článku ke konci uvádí „dopsat tuto kontrolu pomoci funkce XOR a přidat jí do protokolu“. Pokud by se nějak podařilo zajistit odesílání „správných“ dat byl by tento projekt rozšířen o připojení k web přístupu na cayenne.mydevices.com s možností app pro android. Návod postupně dopíšu. Pomůže někdo?

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

    No jak jste psal tak ráno je opravdu moudřejší večera 😀 Kód jsem projel, trochu pospravoval ty hovadiny co jsem napsal a vyšpehoval časy resetů a odesílání příkazů z IDE. Tady tedy přikládám druhou verzi. Musel jsem přidat více čekání, podle komunikace co jsem viděl potřebuje arduino asi 20ms čekat než se do něj odešlou příkazy, takže bylo nutné přidat před každý set příkazů delay(100);

    Snad vám tohle bude fungovat, u mě to teď běží skoro 100%.

    Mimochodem zvědavost mi nedá, co máte za osciloskop?

    odpověď na: Digispark USB ATtiny85 Mini Arduino #11143
    vidlak
    Účastník

    Sosni driver a někam ho rozbal. Digispark píchni do USB alespoň na těch 5 vteřin aby se alespoň jednou inicializoval a pak jej vyndej. Ve Windows otevři správce zařízení (např. pomocí Spustit kl. zkr. Win + R a zadej „mmc devmgmt.msc“). Ve správci zařízení v hl. menu zvol Zobrazit -> Zobrazit skrytá zařízení. V sekci Ostatní zařízení bude Neznámé zařízení s šedivou ikonou. Vyber jej a přes pravé tlač. zobraz kontextové menu a zvol Aktualizovat software ovladače. V dialogu dej Vyhledat ovladač v počítači a zadej složku, kam si rozbalil driver. Dokonči instalaci.

    Pokud máš JSON v Arduino IDE a provedl jsi instalaci v manažéru desek, tak postupuj jak zmínil tribal.cz. Vyber vývojovou desku Nástroje -> Vývojová deska -> Digispark (Default – 16.5 mhz), a zvol nahrát. Kód se zkompiluje a konzole zažádá o zapojení digisparku. Digispark zasuň do USB (do 60 sekund). GLHF

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

    Děkuji, já zkoušel nastavit smyčku s pohyblivou mezerou a pak vypisovat neuspechy se zastaveni když by byl úspěch ale nšjak se to nepovedlo, nic nezabralo, treba to bude tím že už je pozdě. Konečně už mám osciloskop i když s ním pěkně zápasím aby ukazoval co má.

    už mám bjednaní samotné atmegy takže je plánuji pro další testování (až ohle bude fungovat) dát na desku a tím snad eliminovat tyhle různé chyby.

    Pěkný večer

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

    Tak to můžu popřát jen hodně štěstí. Já testuju na UNU a NANU a vše šlape jak hodinky. Ještě mě napadla jedna věc, když jsem vymýšlel jaká pauza má po resetu nastat, zapojil jsem reset toho programovaného arduina na D13 programátoru. Programátor měl pak nastaveno že hned po spuštění odešle příkazy. Programované arduino bylo tedy resetováno prakticky tou ledkou na pinu 13 a tím jak bliká při běhu bootloaderu. Vše taky fungovalo bez problému a na testování to postačilo, v takových chvílích by bylo hezké mít po ruce osciloskop… Možná by se s tím dalo něco vymyslet. Já se taky zítra pustím do testování 😉

    Hezký večer.

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

    řádek 49 bude souviset s tím, že nastavujeme úroveň stejnosmšrného signále ale apsoň u mě je před nožičkou resetu sériově kondenzátor takže se tím jen (maximálně) prodlouží interval, tud´ž by bylo možné že naše sířka restartovacího pulzu není dostatečně široká pro dokonalý restart.

    obě arduina mám na stejném napájení (z usb opravdu 0,5A), a k tomu paraelně zdroj 5V (abych mohl usb odpojit)

    pořád to můj problém neřeší, tak doufám, že ráno moudřejší večera. (i když se sem pravdšpodobně dostanu až odpoledne)

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

    Jak tak na to koukám tak možná dobře že jsem tu chybu neopravil. Nechte delay na 100, baud nechte jako long ale řádek 49 zakomentujte. Teď mi nedochází proč ale mě kód funguje jen bez něj…

    EDIT: Taky mějte obě arduina napájená z výkonných zdrojů. Mě např. nefunguje napájet jedno arduino z druhého, musí mít obě zvlášť 5V zdroj. Nevím proč, regulátor by měl dodávat víc než dost proudu…

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

    na to jsem přišel už na začátku a ani mě to nenapadlo, ale to mám upravení již dloho, taky jste napsal při resetu (nepodstatné), že pinMode ( 7 , HIGH ) ; na řádku 49

    ale to problém pořád neřeší. napadá mě uz snad jen čpatní doba čekíní ale i to jsem zkoušel

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

    Asi se pudu pifnout 🙂 je to moje hloupá chyba. Na začátku je baud definován jako int, nahraďte int typem long a mělo by to fungovat. Pro UNO by to tedy mělo vypadat takoto
    long baud = 115200;

    Krystal je v pořádku.

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

    zapojení jsem kontroloval už mockrát, dokonce měřil jestli není někde špatný kontakt, ale signál de kam jít má.

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

    Using Port : COM2
    Using Programmer : arduino
    Overriding Baud Rate : 115200
    AVR Part : ATmega328P
    Chip Erase delay : 9000 us
    PAGEL : PD7
    BS2 : PC2
    RESET disposition : dedicated
    RETRY pulse : SCK
    serial program mode : yes
    parallel program mode : yes
    Timeout : 200
    StabDelay : 100
    CmdexeDelay : 25
    SyncLoops : 32
    ByteDelay : 0
    PollIndex : 3
    PollValue : 0x53
    Memory Detail :

    Block Poll Page Polled
    Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
    ———– —- —– —– —- —— —— —- —— —– —– ———
    eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
    flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
    lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
    hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
    efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
    lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
    calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
    signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

    Programmer Type : Arduino
    Description : Arduino
    Hardware Version: 3
    Firmware Version: 4.4
    Vtarget : 0.3 V
    Varef : 0.3 V
    Oscillator : 28.800 kHz
    SCK period : 3.3 us

    ale je divné třea ty rachlost krystalu (je to chyba?)

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

    Také můžete přihodit fotky zapojení ale předpokládám že tam problém nebude.

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

    Tak pojďme nejdřív zjistit rychlost UARTu. Jděte do arduino IDE, projděte toudo cestou File->Preferences a zaškrtněte obě možnosti u Show verbose output during…

    Pokud máte česky tak Soubor->Vlastnosti Zobrazit více informací výstupu během: [Y] Kompilace | [Y] Programování

    Teď nahrajte jakýkoliv kód do toho arduina co bude programované (to co bude updatované). Nahrajte normálně přes kabel třeba program Blink, je to jedno. V konzoli by vám mělo vyjíždět výrazně víc informací. Po nahrátí projeďte konzoli a zkuste najít takovýto blok textu:

    avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2014 Joerg Wunsch
    
             System wide configuration file is "C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.2.0_x64__mdqgnx93n4wtt\hardware\tools\avr/etc/avrdude.conf"
    
             Using Port                    : COM4
             Using Programmer              : arduino
             Overriding Baud Rate          : 57600
             AVR Part                      : ATmega328P
             Chip Erase delay              : 9000 us
             PAGEL                         : PD7
             BS2                           : PC2
             RESET disposition             : dedicated
             RETRY pulse                   : SCK
             serial program mode           : yes
             parallel program mode         : yes
             Timeout                       : 200
             StabDelay                     : 100
             CmdexeDelay                   : 25
             SyncLoops                     : 32
             ByteDelay                     : 0
             PollIndex                     : 3
             PollValue                     : 0x53
             Memory Detail                 :

    Tenhle řádek, Overriding Baud Rate : 57600 nás zajímá nejvíc. Jaká je tam rychlost? Klidně sem hoďte celý výstup konzole ale až od toho

    avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2014 Joerg Wunsch

    , může se to hodit.

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

    prevodník FT231 a procesor ATMEGA328P-AU

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

    Jaké arduina používáte a které dělá co? Mají jako sériové převodníky použity ch340 nebo mega16u2?

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

    Zkoušel jsem snad všechno a spojení se nepodařilo. Kód se zasekne při čekání na odpověď na řádku 55.
    Reset proběhl úspěšně, kody pro zadost o synchronizaci arduino poslalo taky ale odpověď žádná. Zkoušel jsem i jiré rychlosti, prohodit tx/rx jeslti nemám špatně ale už význě nevím co zkusit.

    Nějaká rada?

    odpověď na: pripojenie senzorov #11125
    posjirka
    Účastník

    a one wire sběrnice ?

    odpověď na: pripojenie senzorov #11124
    Fx
    Účastník

    Wi-Fi neprichadza vobec do uvahy (hruba zelezobetonova konstrukcia). Uvidim, ci nepostaci I2C (teda, ak sa to vobec bude realizovat). Ale vdaka za radu.

    odpověď na: Expander pro serva #11123
    posjirka
    Účastník

    našel jsem použití TLC5940 jako expanderu pro 16 serv:
    https://circuits.io/circuits/211975-arduino-servo-expander
    neprověřoval jsem to, ale můžeš to zkusit …

    odpověď na: pripojenie senzorov #11122
    posjirka
    Účastník

    já bych použil wifi modul esp8266 u každého čidla (ten tech 10 m zvládne), nebo použít třeba arduino mini jako převodníky různých čidelna např.i2C nebo RS485.

    odpověď na: Expander pro serva #11121
    posjirka
    Účastník

    nejsem si jistý, že to tak jednoduše půjde. Servo potřebuje pro svou funkci signál o frekvenci cca 50hz a log. 1 o délce 1-2ms (1=0st, 2=180st)
    Při přepínání bys musel zajistit detekci všech signálů zároveň a pak je postupně spouštět.
    Mimochodem pokud si spočítáte 20ms (50hz) na max.2ms/servo tak dostanete max 10serv.
    Toto se týkalo klasických analogových serv. digitální mají trochu jinou logiku, ale i cenu …

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