Keresés

Részletes keresés

halaloszto Creative Commons License 2016.01.05 0 0 1571

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!

 

 

Előzmény: DkGrinder (1570)
DkGrinder Creative Commons License 2016.01.05 0 0 1570

"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 ....

 

 

 

 

Előzmény: halaloszto (1567)
John Zero Creative Commons License 2016.01.05 0 0 1569

Hosszabb forráskód beillesztéséhez inkább javaslom a http://pastebin.com/ oldalt és linkelést, mert sajnos így nagyon nehezen tudom követni a fórumot.

 

halaloszto Creative Commons License 2016.01.05 0 0 1568

http://www.loxone.com/enen/service/documentation/loxone-config/communication/communication-with-rs232485.html

 

The use of an end-of-frame symbol is optional.

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.

 

Vajk

Előzmény: DkGrinder (1566)
halaloszto Creative Commons License 2016.01.05 0 0 1567

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.

 

Vajk

Előzmény: DkGrinder (1564)
DkGrinder Creative Commons License 2016.01.05 0 0 1566

55,AA keret eleje

08,26 ? Parancs          08 bájtok száma onnan,  26 parancs

22 kontroller száma

03 első kimenet

05 kimenetek száma

19 kimenet értékek (adat)

71,77 ? Ellenörzőösszeg?     71 ellenörzőszöveg 77 Vége

 

Igy néz ki most a busz forgalma:

Előzmény: titusz99 (1565)
titusz99 Creative Commons License 2016.01.05 0 0 1565

"55,AA,08,26,22,03,05,19,71,77"

Szöveges vagy bináris az adatforgalom?

Szöveges esetén "," is része a keretnek?

Két keret között van-e egyéb karakter?

Pl.: szöveges keret esetén <CR> van minden keret után.

 

Szöveges forgalom esetén String-be vagy char tömbbe szokták a keretet beolvasni.

55,AA keret eleje

08,26 ? Parancs?

22 kontroller száma

03 első kimenet

05 kimenetek száma

19 kimenet értékek (adat)

71,77 ? Ellenörzőösszeg?

 

 

Előzmény: DkGrinder (1564)
DkGrinder Creative Commons License 2016.01.05 0 0 1564

Nincs protokoll.

Különböző rs485-ős relémodulok vannak azok különböző hexa kódokra reagálnak, de mind más

 

pl.  ez is egy nyolc csatornás relémodul

 xFFx01x01      //Relé 1 BE

 xFFx01x00      //Relé 1 KI

 

és ez is

 

x0Ax55xAAx08x26x10x00x01x01x40x77r

x0Ax55xAAx08x26x10x00x01x00x3Fx77r

 

MA0, MA1, BC,  x26 első  kimenetkimenetek száma, adat,…, CS, MAE

 

CN = x00 – xFF    . CN = 0, minden vezérlő.

az első kapcsolni kívánt kimenet száma:                                   / = x00  – x3F

kimenetek száma amin kapcsolást akarunk végrehajtani :     /  = x01  –  x20

 

adat :

egy, kettő,három vagy négy byte:

 

bitek jelentése: 0 KI, 1 BE

 

Ha kimenetek száma 1-8 akkor   1 byte

Ha kimenetek száma 9-16 akkor 2 byte

Ha kimenetek száma 17-24 akkor 3 byte

Ha kimenetek száma 25-32 akkor 4 byte

 

PÉLDA 1: Kimenet beállítása:

 

3-BE, 4-KI, 5-KI, 6-BE, 7-BE

a kontroller száma CN = x22

3-7 -> 5 kimenet

55,AA,08,26,22,03,05,19,71,77

Adat: x19(hex)=0b00011001(bin)

 

Kimenet-   X X X  7  6   5  4   3

állapot       X X X BE BE KI KI BE          19

Adat (bin): X X X 1    1   0  0  1

 

 

 

Tulajdonképpen én is egy ilyen modult szeretnék megalkotni, mert nem találtam olyan modult ami megfelel az elvárásaimnak.

Előzmény: halaloszto (1561)
titusz99 Creative Commons License 2016.01.05 0 0 1563

A serial-t most nem arra használod, hogy monitorozod a működést PC-n?

Ahogy halaloszto is jelezte olvasd a kereteket.

És ha az megy rendesen, dolgozd fel.

Előzmény: DkGrinder (1562)
DkGrinder Creative Commons License 2016.01.05 0 0 1562

Mega 2560

Nem mehet gyorsabban, mert van olyan eszköz rajta ami csak 9600-t tud.

Előzmény: titusz99 (1560)
halaloszto Creative Commons License 2016.01.05 0 0 1561

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

 

Vajk

Előzmény: DkGrinder (1559)
titusz99 Creative Commons License 2016.01.05 0 0 1560

Szerintem RS485-ön csomagok mennek, azt kell beolvasni bufferbe.

Majd ha teljes a csomag feldolgozni.

 

Milyen arduino (, hogy 3x-es pinek, MEGA?)?

A Serial mehet nagyobb sebességen is.

Előzmény: DkGrinder (1559)
DkGrinder Creative Commons License 2016.01.05 0 0 1559

Megint megakadtam :-(

Most egy RS-485-ös relépanelt készíte(k)/(enék) :-D, ami egy Loxone miniszervertől fogadja a parancsokat.

Ez a rész működik is.

Azt hittem bizonyos időnként lefagy az arduino de, nem ez volt a probléma.

Ha a Loxone egy másik eszköznek küld pancsot, azután az arduinó többé már nem fogadja az adatsort.

 


#include <SoftwareSerial.h>                                        // Serial könyvtár
#define SSerialRX 10                                                    // Rx PIN (adás)
#define SSerialTX 11                                                    // Tx PIN (vétel)
#define SSerialTxControl 3                                            // Irányvezérlés PIN
#define RS485Transmit HIGH                                       // Adás magas
#define RS485Receive LOW                                          // Vétel alacsony
#define LEDPin 13                                                        // kontroll LED PIN
SoftwareSerial RS485Serial(SSerialRX, SSerialTX);         //
int byteRead;                                                                // Beolvasott adat

int rele1 = 31;                                                              // Relé 1 PIN
int rele2 = 32;                                                              // Relé 2 PIN
int rele3 = 33;                                                              // Relé 3 PIN
int rele4 = 34;                                                              // Relé 4 PIN
int rele5 = 35;                                                              // Relé 5 PIN
int rele6 = 36;                                                              // Relé 6 PIN
int rele7 = 37;                                                              // Relé 7 PIN
int rele8 = 38;                                                              // Relé 8 PIN

void setup()
{
pinMode(rele1 , OUTPUT);                                              // Relé 1
pinMode(rele2 , OUTPUT);                                              // Relé 2
pinMode(rele3 , OUTPUT);                                              // Relé 3
pinMode(rele4 , OUTPUT);                                              // Relé 4
pinMode(rele5 , OUTPUT);                                              // Relé 5
pinMode(rele6 , OUTPUT);                                              // Relé 6
pinMode(rele7 , OUTPUT);                                              // Relé 7
pinMode(rele8 , OUTPUT);                                              // Relé 8
digitalWrite(rele1, LOW);                                               // Relé 1 OFF
digitalWrite(rele2, LOW);                                               // Relé 2 OFF
digitalWrite(rele3, LOW);                                               // Relé 3 OFF
digitalWrite(rele4, LOW);                                               // Relé 4 OFF
digitalWrite(rele5, LOW);                                               // Relé 5 OFF
digitalWrite(rele6, LOW);                                               // Relé 6 OFF
digitalWrite(rele7, LOW);                                               // Relé 7 OFF
digitalWrite(rele8, LOW);                                               // Relé 8 OFF

Serial.begin(9600);                                                       // Soros port sebessége
pinMode(LEDPin, OUTPUT);                                           // Kontroll LED PIN beállítás
pinMode(SSerialTxControl, OUTPUT);                             // Irányvezérlés PIN beállítás
digitalWrite(SSerialTxControl, RS485Receive);               // Irányvezérlés olvasás állapot
RS485Serial.begin(9600);                                            // Szoftveres RS 485 sebessége
}

void loop()
{

if (RS485Serial.available())                                             //
{

delay(100);
byteRead = RS485Serial.parseInt();                              // Beérkezett Byte olbasás

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
}
}

szatti Creative Commons License 2016.01.05 0 0 1558

Csak Nano és Mega van kéznél.

 

Másodikra biztos nekem is csak annyi lenne, de így fél óra alatt még az Atmel Studióban sem igazodom el. 

Rengeteg ablak, percekig töltöget ....

Előzmény: Vargham (1557)
Vargham Creative Commons License 2016.01.05 0 0 1557

Ha van egy Leonardo vagy Micro kéznél, akkor kb fél óra, és kész.

Előzmény: szatti (1556)
szatti Creative Commons License 2016.01.05 0 0 1556

Köszi a gyors választ!

 

Elkezdtem nézegetni, de ez nekem túl bonyolult így elsőre.

Azt hiszem egyszerűbb lesz venni egy programozót.

Előzmény: Vargham (1555)
Vargham Creative Commons License 2016.01.05 0 0 1555

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ő.

Előzmény: szatti (1553)
szatti Creative Commons License 2016.01.05 0 0 1554

É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.

Előzmény: halaloszto (1552)
szatti Creative Commons License 2016.01.05 0 0 1553

Letöltöttem a Lufa mappát.

Ezer dolog van benne.

Megtaláltam az Avrisp MK2 mappát, de rengeteg file van benne.

Segítenél, hogy hogyan tovább a Megával?

 

Előzmény: Vargham (1545)
halaloszto Creative Commons License 2016.01.04 0 0 1552

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.

 

Vajk

Előzmény: szatti (1550)
szatti Creative Commons License 2016.01.04 0 0 1551

Ezt javasolta a kollégám:

 

http://shop.tavir.hu/product_info.php/programozo-muszer-tavir-mkii-programozo-p-44?osCsid=h3ubujchq58t0radp3r4ut5s14

 

Az Ebay-en is ennyibe kerül ami ezt tudja. 

 

Amikor lesz rá keret, beruházok egyre és akkor kiderül.

 

Vagy ha addig kiderül, hogy Megával hogy lehet programozni.

Előzmény: Törölt nick (1539)
szatti Creative Commons License 2016.01.04 0 0 1550

Akkor nem értem.

Ha alpban engedélyezett, akkor miért nem tudta resetelni a Nanot a régi bootloaderrel?

 

Igen, több eladott készülékembe is tervezem a Nanot beépíteni, ezért lesz szükségem a lezárásra.

Előzmény: titusz99 (1549)
titusz99 Creative Commons License 2016.01.04 0 0 1549

Tudomásom szerint alapban engedélyezett a WDT, tehát tiltani tudod de minek?

A WDT kezelése a bootloader-ből hiányzik, nem a fuse bitekből.

Ha végterméket akarsz előállítani akkor szükség lehet olvasásvédelemre különben nem.

 

Előzmény: szatti (1548)
szatti Creative Commons License 2016.01.04 0 0 1548

Az egyik fuse bit kapcsolja ki-be a Watchdogot  vagy rosszul tudom?

Egy másikkal pedig le tudom zárni olvasás ellen a chipet ( ez is egy célom).

Előzmény: titusz99 (1547)
titusz99 Creative Commons License 2016.01.04 0 0 1547

Áruljátok már el, hogy miért kell állítani a Fuse bit-eket?

És, hogy ettől miért javul meg a WDT kezelése?

Programozót szinte bármelyik arduino-ból lehet csinálni.

szatti Creative Commons License 2016.01.04 0 0 1546

Ilyen Megám van, de nem találom hozzá a leírást hogy lesz belőle programozó.

Előzmény: Vargham (1545)
Vargham Creative Commons License 2016.01.03 0 0 1545

Az eredeti Mega USB illesztője is jó. Atmega16u2

Előzmény: szatti (1542)
Prof Creative Commons License 2016.01.03 0 0 1544

Valóban félreérthető volt. A linkek kiválóak! Köszönöm mindkettőt.

 

 

Előzmény: Törölt nick (1536)
Prof Creative Commons License 2016.01.03 0 0 1543

Van egy Leonardom...

Előzmény: szatti (1542)
szatti Creative Commons License 2016.01.03 0 0 1542

Sajnos csak Nano és Mega van kéznél.

Előzmény: Vargham (1540)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!