Vojtěch Vosáhlo
Vytvořené odpovědi
-
AutorPříspěvky
-
Vojtěch VosáhloÚčastník
To je super. Kdybych měl tipovat tak ten čip na kterém jste to zkoušel je možná odpálený, kvůli připokení vcc na pin ktystalu, respektive elektronika na zajištění clocku je odpálená. Asi prošel proud přes první pin Xtal1 přes interní resistor na Xtal2 a na zem, to to mohlo zničit. Jinak držím palce při dalších projektech.
Vojtěch VosáhloÚčastníkKdyž jsem viděl ten kondík v tutoriálech byl na resetu arduina, né megy…
Vojtěch VosáhloÚčastníkVypadl internet takže dnes už vám asi moc nepomůžu, vypadl nám internet, ale ješté jsem stihl najít zajímavý tutoriál používající jiný firmware. http://3g1l.com/blog-burn-bootloader-blank-atmega328atmega328p-arduino-uno
Vojtěch VosáhloÚčastník🙂 teď se sem hrnu abych napsal přesně to stejné, vidím to 10x ale když to nepřepočítám tak si toho stejně nevšimnu. Teď už by to mělo fungovat, doufejme…
Vojtěch VosáhloÚčastníkTeoreticky by to mělo jít přes ser. linku jak je popsáno na několika návodech na internetu ale nikdy jsem to neskoušel. Musím říct že mi to vše vrtá hlavou, měl jsem ůplně stejný problém a řešení se našlo až po pár měsících kdy jsem si koupil USBasp a začal programovat v C 😀 můžete zkusit nějaký návod z internetu a já budu taky testovat. Mimochodem můj „progress“ -> Teď jsem zkoušel s aruinem najít Megu328p, bez krystalu a čehokoliv jiného, ale již programovanou, s přenastavenými fuse na 8mhz internall. Vše fungovalo v pořádku ale když jsem to zkoušel s megou88pa tak nic…
Zkusím ještě další věci a uvidíme…Vojtěch VosáhloÚčastníkZkusím se do toho podívat hlouběji a něco zkusit. Ještě 2 věci:
1. Je arduino oficiální nebo „klon“
2 Je procesor opravdu Atmega328P-PU a né jen 328?Vojtěch VosáhloÚčastníkZkuste to stejné akorát bez krystalu, kondíku a rezistoru…
Vojtěch VosáhloÚčastníkCo píše arduino IDE při kompilaci?
Myslím arduino ide (1.6.11)
Vojtěch VosáhloÚčastníkVím že ten příspěvek už je hodně starý ale možná to pomůže 😉
České charaktery si musíte dopsat sám ->
{
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
6,V tomto poli je 7 bytů a v každém 8 bitů, každý bit reprezentuje jednu led na display a vy si musíte své charaktery „nakreslit“ do těchto bitů. Ty poté zobrazíte na display.
Pro rotování bych zkusil vypustit tuto funkci a odkazy na ní, očividně má co dělat s rotováním charakterů.
// Rotate the buffer void rotateBufferLong(){ for (int a=0;a<7;a++){ // Loop 7 times for a 5×7 font unsigned long x = bufferLong [a*2]; // Get low buffer entry byte b = bitRead(x,31); // Copy high order bit that gets lost in rotation x = x<<1; // Rotate left one bit bufferLong [a*2] = x; // Store new low buffer x = bufferLong [a*2+1]; // Get high buffer entry x = x<<1; // Rotate left one bit bitWrite(x,0,b); // Store saved bit bufferLong [a*2+1] = x; // Store new high buffer }
Doufám že ještě pomůžu…
Vojtěch VosáhloÚčastníkZkusíme jednu věc, stáhněte si tento program http://blog.zakkemble.co.uk/avrdudess-a-gui-for-avrdude/ a nainstalujte. Vše nechte zapojené tak jak je a v arduinu nechte Arduino as ISP program.
Až to bude stažené a nainstalované, vyberte jako programmer Atmel AVR ISP, jako port, port na kterém arduino běží, a do baud rate dejte 19200. Po nastavení toho všeho, pokud jste si jistý že je vše zapojené, klikněte v pravo v záložce MCU na Detect.
Dole v konzoli by vám to mělo něco vypsat, tuto zprávu sem potom vložte.
Držím palceEDIT: Co píše arduino IDE při kompilaci?
Vojtěch VosáhloÚčastníkAno, závitové tyče 😉
Myslím že když se omyjí tak vodu kazit nebudou a bude to fungovat dobře. Ten odkaz co jsem dával je pro takový účel až moc, aspoň bych řekl.
Držím palce.Vojtěch VosáhloÚčastníkAle abych řekl pravdu, nejlepší mi přijde sehnat si dně šroubovice jako elektrody a měřit jejich odpor. Je to extrémě jednoduché a mělo by to splňovat všechny požadavky.
Vojtěch VosáhloÚčastníkJak jsem napsá v „editu“, tamten návod vypadá dobře. Bude ta voda na pití? Abych řeklpravdu tak nevím jestli je tahle technika ok na pitnou vodu ale asi ano… Zabudoval bych to přímo do hrdla, tam to bude asi nejlepší jen to chce pracovat s materiály které nejsou zdraví škodlivé…
Vojtěch VosáhloÚčastníkZáleží hodně na tom jak vysoko vám voda stoupá a jaké rozlišení potřebujete. Ale na obě témata (ultrasonický senzor i kapacitní měření) existuje mnoho dobrých návodů a ani u jednoho by neměl být problém na realizaci s arduinem. Na jaký rpzsah výšky hladiny cílíte?
Edit: Příklad hezké konstrukce kapacitníh senzoru s arduinem: http://www.instructables.com/id/Capacitive-Fluid-Level-Sensor/?ALLSTEPS
Vojtěch VosáhloÚčastníkVzhledem k tomu že 100m není zrovna malá vzdálenost, takbych použil laser. Samozřejmě pokud nebudete měřit vzdálenost živých objektů. Ale takovéto přístroje jsou většinou hodně drahé viz. http://www.robotshop.com/en/sf30-c-laser-rangefinder-100m.html za 700$. Záleží hlavně na tom co chcete měřit… Taková informace by se hodila.
Vojtěch VosáhloÚčastníkPokud máte připojený externí krystal 16mhz, stačí vybrat desku arduino uno. Kdyby jste měl čip bez externího krystalu, vyberete Arduino on breadboard 8mhz. Mohlo se stát taky to že se vám zavaděč už vypálil, prakticky nevědomky, a nastavilu se nějak fuse a kvůli tomu se k čipu nemůžete dostat, ale to bych prakticky vyloučil. Nebýy čipy od dodavatele nějak nastavené? Předvypálené nebo nastavené na nějakou frekvenci? Když jsem tohle naposledy dělal měl jsem taky hodně problémů a myslím že tenkrát pomohl kondenzátor (4,7uF) ale netuším jestli mezi GND a VCC nebo reset pinem a buď zemí nebo VCC (všechny kombinace na arduinu a na JEHO pinech, né na těch simulovaných pro spi). Budu čekat na tu dokumentaci, určitě to někam posunem…
Vojtěch VosáhloÚčastníkTahle chyba skáče většinou když je opravdu nějaký problém se zapojením (aspoň z mé zkušenosti). 1 krok určitě znovu zkontrolovat všechna připojení jako popsáno.
Důležité je nezapomenout spojit země procesoru a arduina. Poté by měly být zapojeny VCC a AVCC na napájení a OBĚ GND na zem. Pokud máte multimetr, prospělo by každé spojení přezkoušet. Taky je možné, stává se mi to občas při programování přes usbasp, že je clock moc vysoký, zkuste ho v programu nadefinovat třeba na 500Hz. Předpokládám že máte nastavený v Nástroje -> programátor Arduino as ISP.
A nakonec mohl by to být problém i toho že tam máte krystal, můžete ho zkusit dát pryč a uvidíte. Pokud nic nepomůže tak zkuste poslat třeba pár fotek aby bylo dobře vidět zapojení na obou stranách.Jen tak naokraj, byl čip už používán? A kde jste ho kupoval?
Vojtěch VosáhloÚčastníkCo používáte za programátor na nahrání bootloaderu?
Pak můžem něco vymyslet 😉Vojtěch VosáhloÚčastníkAhoj,
pokud vím tak by to mělo být přes arduino možné ale musíš mít esp v programing modu. To se dělá tak že dáš reset a GPIO0 na zem a poté odpojíš reset a po chvíli GPIO0 (nejsem si 100% jistý že můžeš piny jen odpojit, bylo by lepší dát je přes pullup na 3.3V) to by mělo fungovat. Pokud si na tom dobře s AJ tak jsem našel článek, http://whatimade.today/esp8266-easiest-way-to-program-so-far/ , který to výborně popisuje, je tam i obvod který můžeš dát dohromady abys to měl jednodušší.
Hodně štěstí.Vojtěch VosáhloÚčastníkTo se povedlo. 😀
Vojtěch VosáhloÚčastníkTo je supr, kdyžtak ještě hoď ňáký fotky výsledků, rád bych se podíval 😀
Vojtěch VosáhloÚčastníkNapsal jsem to špatně… Zkusil bych dát 5v na pin označený D12 na té „základové“ desce, pokud se nic nestane tak zkusit pin D11 ten tam neni označený ale domyslíš ho, pokud to nebude fungovat tak kouknout do datasheetu mosfetu a podívat se kde má Gate, na ten pin pak poslat 3.3v a uvidíš.
Vojtěch VosáhloÚčastníkA když pošleš 5v z napájení desky na pin D12 nebo D11?
Mimochodem nemohl by si poslat ještě jednu fotku z blízkosti na ten mosfet a přepínač napětí, jako ze spoda kde jsou vidět spoje..Vojtěch VosáhloÚčastníkJeště jen tak navíc, zkoušel jsem se podívat do komunikace software s arduinem a když dám zapnout laser vyleze na mě zpráva která obsahuje údaj o intenzitě laseru 0-255 a také nějaký P údaj, konkrétně P0. Teoreticky by tedy sw nemusel poslouchat a mohl by pouštět signál na pin 0 ale to jen tipuju. Kdyby nevyšlo přehození pinu v sw zkus nahrát do arduina ten jednoduchý program který dá pin D12 a radši asi i D11 na jedničku, pak arduino osaď na desku a zapni, laser by měl naskočit 🙂 Jinak prakticky stačí i bez arduina dostat D12 nebo D11 na 5v …
Vojtěch VosáhloÚčastníkPodle těch fotek mě napadá pár věcí které by mohli být problémem.
1) Tohle jen tak tipuju podle obrázku ale pokud jsem správně počítal tak na desce je „slot“ pro arduino který má 16 děr, arduino má ale jen 15 pinů (můžeš mít arduino špatně posunuté, zkus ho posunout tak aby byly stejně země… to asi máš :D). Další věc je že na hlavní desce je vyznačený pin D12 jako 3 z prava, pokud bvy si ale srovnal země měl by být na desce označený pin D12 vlastně D11 na arduinu… je možné že se to jen z obrázku zdá ale myslím že jsou tam kapku přehozené piny. Řešení pro tohle by bylo nastavit pin D11 pro laser a né D12.
2) Druhá věc je že jsem si u mosfetu všiml přepínače napětí. Bylo by možná dobré zkusit najít zda máš 5v nebo 12v diodu pro vypalování… Pokud nevíš a nebo víš a máš to nastavené správně, zkusil bych měřit napětí na těhle pinech, možná nám to něco řekne…
3) Třetí a taky docela možná varianta je že máš divné arduino nebo něco s ním. To co je na obrázcích totiž rozhodně není originální Arduino Nano (alspoň pokud vím). Vypadá spíš jako nějaký čínský klon, proto je možné že není třeba správné mapování pinů. Mohl by si zkusit vyndat arduino, nahrát do něj jednoduchý program na sepnutí pinu D12 a zkusil přeměřit zda je všechno správně.Tohle jsou věci co mě napadly ale je možné že je v tom ještě něco, zkus nějakou z těch věcí (nejpravděpodobnější je asi ta 1.) a pak napiš výsledky 😀 Držím palce.
Vojtěch VosáhloÚčastníkPo tom co jsem projel to co si poslal je nám to vlastně k ničemu, oni k tomu dali jen .hex soubor který už je zkompilovaný a nedá se přeložit zpět do „srozumitelného“ jazyka. První věc co bych zkusil je kliknout na „Laser Control,“ (to už si asi zkoušel) pokud se laser nesepne zkusíme ještě něco zítra až pošleš fotku. Kdyžtak budeš měřit 😉
Vojtěch VosáhloÚčastníkJen tak mimochodem proč uloz.to píše: Nalezen virus: Win32:Malware-gen 😀
Vojtěch VosáhloÚčastníkAhoj,
nejlepší by bylo poslat jak originální program arduina tak obrázek desky. Pak se s tím dá něco dělat 😉Vojtěch VosáhloÚčastníkAhoj,
Podle fóra na které jsem koukal by Vin měl zvládnout 1 ampér ale doporučuje se to nedělat kvůli přehřívání regulátoru. Nicméně pin Vin slouží jako vstup Voltage in takže nebude fungovat jako výstup 😀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. 😀
-
AutorPříspěvky