A te kereted ez a három byte összesen? Mi biztosítja hogy az FF 01 01 nem fordul elő egy másik modul keretének a belsejében sosem? Mert ha előfordul, akkor az annak szóló keretre a Te reléd meg fog szólalni!
"ezt úgy szokták csinálni, hogy a mondat eleje meg vége valami egyszerűen detektálható dolog, így akinek nem szól és aki nem is érti, az is meg tudja állapítani hogy hol az eleje meg a vége. "
Igazából a fentiekre keresem a megoldást, valami pl. progi...
Az én modulomhoz saját "parancsokat" akarok kitalálni. már ez fejben kb. meg is van.
Amíg először el akarok jutni, hogy legalább a lent említett kis egyszerű modult "leutánozzam"
pL.
xFFx01x01 //Relé 1 BE
xFFx01x00 //Relé 1 KI
Rengeteg C és egyéb programnyelven programoztam már az elmúlt évtizedekben, de az arduinóval még csak most barátkozok, nem vagyok nagyon képbe a lehetőségekkel, pontos szintaktikákkal ....
The symbol must be a hexadecimal character (i.e., 0x0A).
When the RS-232/RS-485 extension detects the end-of-frame symbol, it recognizes that the received frame is complete and forwards the frame to the Miniserver.
If no end-of frame symbol is specified, a 32 bit period timeout is used to signal end-of-frame. This means that if nothing is received for a period of 32 bits, then the RS-232/RS-485 extension assumes a complete frame has been received and forwards the frame to the Miniserver.
csinálj egy sketchet, ami csak kiírja a busz forgalmát folyamatosan. abból hamar rá fogsz jönni hogy miről lehet a keretet felismerni. ha van eleje, vége, netán crc is benne, akkor hamar le lehet kódolni hogy a cuccod mindig egész keretet vegyen, eldöntse neki szól-e, és ha igen, akkor csináljon valamit.
ez maga a protokoll. a protokoll egy nyelv. leírja hogy milyen mondatok érvényesek. a programodnak tudnia kell mikor van mondathatár, különben kiesik a szinkronból és sosem fog értelmes mondatot hallani.
ezt úgy szokták csinálni, hogy a mondat eleje meg vége valami egyszerűen detektálható dolog, így akinek nem szól és aki nem is érti, az is meg tudja állapítani hogy hol az eleje meg a vége.
a Te saját modulod kódját te találtad ki? valahogy be kellene illeszteni a rendszerbe, és a Te modulodnak is kellene minimálisan kezelnie a rendszert.
mindig egy intet veszel le a sorosportról. gondolom 32 bites. ha valaki másnak küld a szerver ugyanazon a buszon, és az nem osztható 4 byte-al, akkor neked elcsúszik a határ, és soha többet nem olvasol értelmeset. ismert a protokoll ami a buszon megy? kicsit jobban értelmezni kellene, hogy ne rontsd el. vagy néha újraszinkronizálni. valami keretezés csak van
if(byteRead==9111) { Serial.println("KI"); digitalWrite(rele1, LOW); // Relé 1 OFF digitalWrite(LEDPin, HIGH); // kontroll LED BE }
if(byteRead==9110) { Serial.println("BE"); digitalWrite(rele1, HIGH); // Relé 1 OFF digitalWrite(LEDPin, HIGH); // kontroll LED BE } if(byteRead==9121) { Serial.println("KI"); digitalWrite(rele2, LOW); // Relé 1 OFF digitalWrite(LEDPin, HIGH); // }
if(byteRead==9120) { Serial.println("BE"); digitalWrite(rele2, HIGH); // Relé 1 OFF digitalWrite(LEDPin, HIGH); // kontroll LED BE } delay(10); digitalWrite(LEDPin, LOW); //kontroll LED KI } }
Nem kell külön letölteni. Atmel Studio 7, Tools menü Extensions and Updates, és már telepíted is. Kapsz hozzá varázslót, ahol beállíthatod az MCU típusát (16u2). A pontos konfigurációnak nézz utána! A lefordított programot a 16u2 saját ISP csatlakozóján tudod feltölteni (vagy DFU módban USB-n keresztül). Ugyanezeket a lábakat használja programozóként is, a reset kivételével. Találnod kell egy olyan szabad GPIO-t, amire könnyen rá tudsz forrasztani egy vezetéket. Ezt használja majd a cél MCU resetelésére. Ezt a lábat meg kell adnod fordítás előtt a config-ban.
Figyelmeztetések:
1. Forrasztanod kell. Néha egészen kicsi helyekre.
2. Szükséged lesz a, programozóra b, DFU módra ahhoz, hogy fel tudd tölteni a programot.
3. Az Arduino Mega fő MCU-ra (2560) nem fogsz tudni programot feltölteni sorosan, amíg a 16u2-n ez a firmware van.
Szóval nem biztos, hogy megéri a macerát. :-)
Én kb. egy éve feltettem néhány Leonardo-ra, azóta használjuk őket programozóként. Akkor utánanéztem, hogy mit hol kell beállítani, de ennél többre nem emlékszem. Keresgélj te is a neten, minden info elérhető.
Értem, tehát akkor a WDT megoldása a megfelelő helyen átírni a Bootloadert, vagy keresni egy olyat amiben jól van beállítva ( Nanohoz adott, Megához nincs benne az Optibootban).
Az olvasás elleni védelemhez viszont szükség lesz egy MK2-re.
kicsit konyhanyelven: a chipben van a program ami fut, vannak a chip alap konfigurációs fuse bitjei. ezek a maradandóak. aztán vannak a boot közben konfigurálódó paraméterek. ezeket power on után mindig be kell állítani. induláskor először a bootloader fut le, ő állítja be őket, utánna jön a te programod. ha olyan bootloader van benne, ami kikapcsolja a watchdogot, akkor nem lesz watchdogod. mint a pcden ha biosban kikapcsolod az alaplapi sata vezérlőt, akkor az olyan mintha nem is lenne.