Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
EEPROMAnything ezt csinálná ha változó int32 ez 4byte helyet foglal irás/olvasákor de soros porton keresztül kezelem int32 változoval csak 2byte jön át!
Kijelző (manuáis mutatós). Jön adat, ki is írom: ID 73 és 0. Nem ismerem a rendszert, csak tipp, hogy oda vissza kommunikálnak az eszközök a hálózaton, emiatt gondoltam, hogy küld magáról valamit. Csak a példa file-t használom, nem módosítottam rajta:
jeges: ne haragudj, ezt most nem értem.
Tehát a CAN buszon semmi más nincs rajta, csak az Arduino a CAN shielddel és a fordulatszámmérő?
Igy azt látod, hogy t időközönként jön egy 73 ID-jű CAN data frame, ami 1 byte hosszú, és az az egy bájt mindig 0. Mennyi a t? "csak tipp, hogy oda vissza kommunikálnak az eszközök a hálózaton" Ez egyáltalán nem biztos. Egy kijelző akár csendben is lehet. Ha jön számára értelmes adat, akkor megjeleníti, és kész. "Mivel nem tudom az ID-t, így gondoltam előbb meghallgatom, hogy mit küld." Sajnos ezzel nem jutsz közelebb. Nem tudhatod, hogy a kijelző milyen ID-jű üzenetet vár, és az hány bájból áll, és azok mit jelentenek. A CAN buszon az eszközöknek nincsen ID-jük, se feladójuk, se címzettjük. Kizárólag az üzenetnek van ID-je. Az üzenet még lehet data vagy remote frame. A data frame pedig tartalmazhat 0-8 db közötti mennyiségű adat bájtot. A CAN busz megértéséhez nekem ezek a dokumentumok segítettek:Wikipedia BOSCH CAN specifikáció TI CAN leírás "A csatolt képen látható üzenetet küldi." Ez bármit jelenthet. Például az eszköz státusza. Dokumentáció vagy teljes oda-vissza log nélkül nem lehet megmondani a jelentését. "A kérdésem az lenne, hogy hogyan szólítsam meg és hogyan küldjek neki adatot?" Dokumentáció nélkül az az egyetlen esélyed, ha egy működő rendszerbe rakod bele a kijelzőt, és monitorozod a CAN forgalmat. (Ehhez az Arduino lassú lesz. Akkor is, ha a delay-t kiveszed.) Aztán elkezdesz üzenetküldéssel próbálkozni, hogy a feljegyzettek közül mely üzenet(ek) hatására mozdul meg a mutató. "Akárhogyan próbáltam sehogy sem reagál." Mit próbáltál? "Eleve furcsa, hogy miért csak 1 byte-nyi adatot küld, mikor a fordulatszámnak 2 byte hosszúságúnak kellene lennie." Honnan tudod, hogy mit jelent ez az üzenet? Miért lenne ez fordulatszám adat? Hiszen nem a motorvezérlő küldi... Honnan tudod, hogy nem 1 byte a fordulatszám? "ID azonositoval nyitod egyben a portot is eszközné crc 16 nem jön vissza id azonositás bukik a komunikációd!" Ez egy nem túl értelmes mondat. Megpróbáltam magyarra fordítani, de a tartalma sem értelmesebb. CAN busz esetén nincsen se port nyitás, se más ilyesmi. Az ACK-t és egyebeket, ami a busz működtetéséhez kell, elintézi az alacsonyabb réteg. A mellékelt program semmi mást nem csinál, csak kiírja a buszon lévő üzeneteket. Ehhez (szigorúan CAN busz szemszögből) semmit nem kell a buszra írni. Simán lehet csak hallgatózni is. Az más kérdés, ha vannak olyan eszközök a buszon, amik csak bizonyos üzenetekre hajlandóak megszólalni. De itt még nincs ilyenről szó, a kolléga semmit nem küld a buszra.
Hát akkor nézd meg soros port nélkül hogy jól működik-e. Ha igen, akkor a soros portos kódban van valami hiba.
Ok!
Nézve a protokolt nagyon hasonlo a rs485 hez....
Soros port nélkül ok az elsö mintapélda jol müxik!
Soros port felöl van valami más konverzios hibba de az mi lehet ami hadveresen long? A hozzászólás módosítva: Máj 14, 2017
Köszönöm szépen a részletes és kimerítő választ. Ezek alapján az autó canbuszán kellene hallgatóznom, hogy lássam, milyen byte sorozatban jön a fordulatszám. Az a baj, hogy ilyen autó nem áll rendelkezésemre. Olvasgatok akkor tovább és igyekszem keríteni egy autót, amiben tudok hallgatózni.
Szia. Én igy használom.
Honnan, milyen formában érkeznek adatok a soros portra?
Pc uart terminal rol beirom az értékét "int32_t frequency ;" ami eepromba beirodna ezt probálom össze barkácsolni!
Akkor az alábbi teljesen mást csinál, mint szeretnéd.
(A 9:47-kor írt hozzászólásod második programjából másolva)
Egyetlen byte-ot olvas be a soros portról, és azt teszi bele a 32bites frequency2-be. A soros porton ráadásul nem a frekvencia értéke érkezik, hanem az általad begépelt karakterek ASCII kódjai egyesével egymás után, a végén sortörés és/vagy kocsi vissza kóddal. Alatta viszont ott van ez a sor, valamiért kommentbe téve:
A Serial.parseInt()-tel el kellene csinálnod a soros portról beolvasást, az egy lépésben megcsinálja.
int32_t érték csak 2byte irodik be eeprom észre Serial.parseInt..Serial.read is mind kettöt megoldásal probáltam!
Az elsö példában int32_t eeprom 4 byte foglal és ugy vissza jön a int32_t értéke ez mind sorosport nélküli elsö példába jól is müködik!
Mit szurok el ?
Kapcsolási rajzra gondoltam. A mostani táp 24V AC egyenirányítva pufferelve megy a 12V kockára, utána 1000u+100n-L-1000u+100n. Ez az agyonszűrt 12V megy az ardu 5V stabilizátorára. Ezzel is vannak ugrások, meg fagyások a progban.
Kösz, ezt csináltam eddig, csak gondoltam annyira adná magát az a lehetőség, hogy a forráskódban piros legyen a sor ahol éppen tart a futásban a program.
Szia, ez a Serial.parseInt() software.serial esetben is működik? 3 byte jön rs485 vonalon, amit egyben szeretnék látni,
Így csak mindig 0-t ír ki a soros monitor. A hozzászólás módosítva: Máj 14, 2017
Még nem használtam, de itt nincs említve, szerintem magadnak kell megírni.
Külön trafó a uC és a nagy áramú eszközöknek.
Akkor ISP-n keresztüli debuggert használjál.
Soros port beirom pl 44444 de fizikailag üres továbra is az eeprom!
Lehet hogy nem jó EEPROM_writeAnything syntax erre? vissza elenözöm ezzel....
Sziasztok!
Nem vágom ennyire az eeprom írást, azonban a minap írtam egy programot vb.net-ben, ami soros porton kommunikál az aruino nanoval. A serial print, és println esetén nem csak a szöveg megy át, hanem MINDEN kocsi vissza, soremelés stb. karakter. Szöveget olvasni Arduino felől a (Setup előtt String Olvasott_szam; int32 szam; . . . Olvasott_szam=Serial.readString(); Ez beolvassa rögtön szövegben a számot is. Utána szerintem a szam=Olvasott_szam.toint(); -el lökd át rendes számmá, majd azt próbáld meg a eepromba írni azzal az anything-el, vagy másképp. Másik: A beépített EEPROM kezdőcíme lehet 0? Ok, mindenhol ezt olvastam én is, de korábban mintha azt olvastam volna, hogy nem minden esetben, mert le van foglalva másnak. Ez nem 100%.
Van 1 fontos lépés, amit még nem említettetek!
A mindenkori soros terminálban, be kell állítani, hogy Enterre mit küldjön a sor végén. Pl.: Arduino Soros monitoron, alul van a lenyíló, amiben kiválasztod az: Újsor parancsot. (Már ha magyar nyelven használod? Angolul: New line) A hozzászólás módosítva: Máj 15, 2017
Szia!
Erre gondoltam én is, ezért kellene kipróbálni ezt a szam=Olvasott_szam.toint(); -es megoldást, mert ha azt visszaküldi serial-al, akkor annak megint meg kell egyeznie a küldött értékkel. Ha ez a toint(); nem tudja lekezelni a kapott szövegben a kocsi vissza stb karaktereket, akkor vagy beállítja ahogy mondtad, vagy a konverzió előtt megoldja saját maga a levágásokat. Le lehet csettinteni a CR és LF karaktereket a végéről, ha ez lesz a gond. Próbáld meg a memória közepére írni az adatot, hátha a 0-ás cím már nem megy. Fizikailag lehet tönkrement. A hozzászólás módosítva: Máj 15, 2017
Amennyiben ezek az extra vezérlőkarakterek okozzák a problémát akkor:
Bővebben: Link egyszeűen: Olvasott_szam=Serial.readString(); Olvasott_szam=Olvasott_szam.trim(); szam=Olvasott_szam.toint(); majd ezután a szam-ot az eepromba. Kezdetnek elég lenne ha 1 től 255-g próbálná ki, megfelelő címmel.
Én nem szeretem az Arduino buta terminálját!
Inkább használom az ingyenes: Bővebben: YAT Itt az <LF> kell beállítani.
A gond az, hogy az adat long típus, de értéket adsz neki a serial.read-el, ami sztring típus.
Utána hiába alakítod át, nem lesz jó. Ha nem szeretnél segédváltozót, akkor: adat= Serial.parseInt(Serial.readString()); És reménykedjünk, hogy a vezérlőkarakterekkel elbánik. A másik praseint ekkor már nem kell a kódodba.
Mit szursz el?
adat=Serial.read(); Beolvasol 1 int-et, ami esetedben az első 4-esnek az ASC2 kodja. És ezt akarob 4 Byte-ként felhasználni?
Teszteld:
Be írod: 4444enter Válasz: 4444 I received: 52 hex:34 char:4 I received: 52 hex:34 char:4 I received: 52 hex:34 char:4 I received: 52 hex:34 char:4 I received: 10 hex:A char: 123456 I received: 49 hex:31 char:1 I received: 50 hex:32 char:2 I received: 51 hex:33 char:3 I received: 52 hex:34 char:4 I received: 53 hex:35 char:5 I received: 54 hex:36 char:6 I received: 10 hex:A char: A hozzászólás módosítva: Máj 15, 2017
Nem épp igy gondoltam használni öket. Töltsd fel ezt és tanulmányozd. Reset után beolvassa az EEPROM ba tárolt long adatot(4 byte) majd kiküldi serial ra, serialba beirsz egy unsigned long adatot majd enter leütése után elmenti az EEPROM ba, reset után kiolvassa
|
Bejelentkezés
Hirdetés |