Vojtěch Vosáhlo
Vytvořené odpovědi
-
AutorPříspěvky
-
Vojtěch VosáhloÚčastník
Pokud 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