[elektro] nekem kínai

elight elight at gmail.hu
Mon Jul 11 10:43:58 CEST 2016


Szia Tibi

Én használtam többféle FTDI modult...

USB <--> I2C, SPI és UART

Magukat az IC-ket nem annyira
mert még az FT232R-t is elég macerás
beforrasztani.
   ( Már pártízsszer azért azal is sikerrel jártam;)

Ez modulban még nem annyira horribilis és  pl az I2C-hez létezik:

https://shop.clickandbuild.com/cnb/shop/ftdichip?op=catalogue-products-null&prodCategoryID=313&title=FT-X+Breakout+Modules

De van olyan kábelem is , amelyiknek a dugójába van beépítve
és a túlsó végén tüskecsatlakozók vannak
Ezeket a paneledra dugva rögtön kísérletezhetsz...
Szerintem ezért nem feltétlen szükséges
  az  egzotikus IC-k lelkivilágát megfejteni.

Még PC-s forrásprogramok is fellehetők néhol
VC, vagy C++ kezeléséhez..
Lefordít, Rádug, MUKOD!
Azután lehet variózni.

Üdv István




2016-07-11 09:47 keltezéssel, nemeth.tibor798 at t-online.hu írta:
>  Hali!
>
> Ok. Akkor majd sorok között de előbb a motiváció:
>
> Valójában nem akarok PC-vel I2C-t kezelni mint végtermék. Mostanában
> viszont megjelent egy rakás I2C periféria, leginkább arduino
> alkalmazásokhoz és ezek csábítóan alacsony áron elérhetők e-bay-en.
> Ugyanakkor csapnivaló a dokumentációjuk.
> Végeredményben én is PIC-es ketyerébe akarom alakalmazni ezeket, de
> ugye a PIC-nek se billentyűje se képernyője és még a fejlesztés
> előtt jó lenne tiszában lenni a részletekkel. Ehhez tűnt csábító
> lehetőségnek a CH341-es USB-I2C átalakító, ami szintén e-bay és
> szintén rosszul dokumentált. STS21-et (az jól dokumentált ) már tudtam
> vele kezelni, akkor szereztem a már meglévő ismereteimet CH341-ről, de
> az sem volt zökkenőmentes.
>
> Már PIC16C57-nél (huszon éve) használtam 24LC01 eepromot ami I2C-s. Ez
> a PIC nem tud I2C, nekem kellett megírni mint bit-műveletek halmazát, de
> ez nem volt probléma, tehát attól nem félek, hogy a végeredmény
> elérése jelentős gondot okoz majd, de az újdonságokat PC-s
> környezetben szerettem volna felderíteni.
> Többi a sorok közt.
>
> Idézet (Bánhidi István <banhidi.istvan at gmail.com>):
>
>> Szia Tibi,
>>
>> Soraid között próbálok válaszolni.
>>
>> És ezt találtam még neked:
>>
>> http://www.codeforge.com/article/67495
>>
>> Itt sokminden van az I2C-ről de én konkrétan a CH341.DLL r-ől keresek
>> infőt.
>> üdv.
>>
>> Steve
>>
>> 2016.07.10. 22:09 keltezéssel, Nemeth Tibor írta:
>>> Hali!
>>>
>>> 2016.07.07. 16:22 keltezéssel, Bánhidi István írta:
>>>> Szia Tibi,
>>>>
>>>> Én nem követtem ezt a szálat, így csak beleugatok a közepébe.
>>>>
>>>> A linuxos driver forrása sem segít?
>>>>
>>>>
> https://github.com/torvalds/linux/blob/master/drivers/usb/serial/ch341.c
>>>>
>>>> Steve
>>>
>>> Köszönöm a jó szándékot, de amit keresek nem találtam benne.
> Közben
>>> újra túrtam a netet, nem sok sikerrel. Eredetileg innen indulta:
>>> http://www.wch.cn/downfile/24
>>> Egyetlen új és kissé használható találat volt, talán mert a
> németeknél
>>> is probléma volt.
>>> Azért megpróbálom még egyszer feltenni, most már egészen konkrét
>>> kérdésemet.
>>> Levelem végén van az eddigi legérthetőbb találat, de ez csak
> vázlatos
>>> ismertetése a CH341 I2C rutinjainak. Engem az első, a CH341StreamI2C
>>> érdekel. Bár ez a nyelv nem erősségem, de amit leírtak azt értem
> csak
>>> kevés.
>>> Amit már tudok, mert ki is próbáltam vagy egyértelmű ebből a
> kevésből is:
>>> 1 paraméter (iDevice)a lehetséges 16 darab csatlakoztatott CH341-et
>>> azonosítja, ha csak 1 van akkor ez nulla.
>>> 2 paraméter (iWriteLength)az I2C buszon CH341 által küldött byte-ok
> száma
>>> 3 paraméter a (iWriteBuffer) kiküldendő tartalom címe
>>> 4 paraméter (iReadLength)az ellenkező irányú, olvasandó byte-ok
> száma
>>> 5 paramétert (oReadBuffer) a memóriacím ahova az olvasott byte-ok
>>> kerülnek.
>>
>> Ez az eljárás, függvény, akármi csak egy wrapper szerű valami.
>> Neked csak annyi a dolgod, hogy összerakod egy bufferbe a küldendő
>> bájtokat, majd a beteszed paraméterként és kész.
>>> Kérdés:
>>> Mi az I2C cím ?  Erre már tudom a választ, a 3 paraméter 1.
> byte-ja.
>>
>> Igen, ehhez ismerni kell az I2C protokollt, hogy milyen
>> bit/bájtsorrendet követel meg a proto és mit kér/ért a konkrét
> eszköz.
>> Bocs ha lámának nézlek, nem ez a szándékom, de ez meg van ugye?
>> http://shrek.unideb.hu/~herakles/hallgato/anyagok/I2C.pdf
>>
>>> Mi értelme így ha 2. paraméter (iWriteLength) nulla?
>>
>> Állj! Ez a függvény csak leveszi a válladról azt a terhet, hogy
> neked
>> kelljen szórakozni a start, stop, ack, rw bitekkel.
>> Te összerakod a küldendő bájtsorozatot egy bufferben, azaz konkrétan
>> tudod, hogy hány bájtot fogsz kiküldeni, ide (iWriteLength) ezt az
>> értéket kell átadni!
>> Ezért nem értem a kérdésed, hogy miért lenne nulla küldés
> esetén?!
>>
>> Arról szól a kérdésem, hogy a levél végén a német nyelvű
> leírásban,
>> felajánlja ezt a lehetőséget, már amennyire én értem ezt a nyelvet,
> de
>> ideidézem:
>> // Nur Lesen: iWriteLength = 0;
>> // Nur Schreiben: iReadLength = 0;
>>> Mi van, ha a periféria nem akar annyi byte-ot küldeni, mint
>>> (iReadLength), honnan tudom, hányat olvasott. Ez a hossz érték
> szerinti
>>> paraméter, tehát nem tudja átírni, visszaadni.
>>
>> Ha nem akar, akkor nem küld, de ebben az esetben, mivel a buszon
> felhúzó
>> van, ezért csupa 1-est fogsz olvasni.
>> Tehát te vársz 2 bájtot, de az eszköz csak 1-et küld, akkor
> szerintem
>> veszel kettőt, a második bájt csupa 1 lesz, azaz 0xFF=255. Még sosem
>> használtam i2c eszközt, de nálam is tervben van, mert össze kellene
>> ütnöm még ebben az évben két nyomásmérő szenzor
> általszolgáltatott
>> jelfeldogozót, ezek i2c szenzorok. Már a fiókban lapulnak, de egyéb
>> elfoglaltságaim miatt, még nem jutottam hozzájuk, és én pic-kel
> fogom
>> kezelni őket.
>>
>>> Mi történik valójában I2C buszon? Start,Stop,Ack
>>
>> Ez egy alap kérdés és az i2c busz lelkivilágára gondolsz vagy a
> konkrét
>> esetedben mit csinál a ch341 api-ja az i2c vonalakkal?! Utóbbi.
>> Pl:
>> CH341StreamI2C(0,3,aa,4,bb)
>> Ekkor feltételezésem szerint az első (0 indexű) Ch341 I2C buszán,
>>
>> aa első bájtjával, mint I2C címmel , rw=write mellett végrehajt egy
>> START-ot majd aa-ból még további két byte-ot kiküld,
>> Vajon ad-e STOP-ot ezután? Mi van ha nem volt Ack?
>> Majd aa első byte-jával mint I2C címmel, rw=Read  végrehajt egy
> START-ot
>> majd 4 byte-ot olvasni próbál, clockol,
>> és beteszi bb-be. Gondolom itt jön egy STOP.
>>
>> Az a helyzet, hogy gyakran arduino projektekből próbálom visszafejteni
>> I2C cuccok kezelését és ott pl StartTransmission , majd write majd
>> EndTransmission (vagy vm. hasonlő) szerkezetben, több programlépésben
>> hajt végre egy átvitelt és ha ezt akarom lemodellezni, pontosabban
>> kellen ismertnem CH341.DLL viselkedését.
>>
>>> Üdv
>>>                   Németh Tibor
>>>
>>> // ***********
>>> // *** I2C ***
>>> // ***********
>>> //
>>> // CH341A ist immer MASTER
>>> //
>>> // CH341StreamI2C(): Universelles Lesen und/oder Schreiben über I2C
>>> // Nur Lesen: iWriteLength = 0;
>>> // Nur Schreiben: iReadLength = 0;
>>> Function CH341StreamI2C(iIndex:cardinal; iWriteLength:cardinal;
>>> iWriteBuffer:pvoid; iReadLength:cardinal; oReadBuffer:pvoid
>>> ):boolean;stdcall; external 'CH341DLL.DLL';
>>>
>>> // Lesen und Schreiben von IC mit interner Speicheradresse
>>> // iDevice: 0..127 = I2C-Geräteadresse (device address)
>>> // iAddr: Speicheradresse; Dies ist NICHT die I2C-Geräteadresse!
>>> Function CH341ReadI2C(iIndex:cardinal; iDevice: byte; iAddr: byte;
>>> oByte: pbyte ):boolean; Stdcall; external 'CH341DLL.DLL';
>>> Function CH341WriteI2C(iIndex:cardinal; iDevice :byte; iAddr: byte;
>>> iByte: byte ):boolean; Stdcall; external 'CH341DLL.DLL';
>>> // I2C-EEPROM lesen und schreiben
>>> type EEPROM_TYPE
>>>
> =(ID_24C01,ID_24C02,ID_24C04,ID_24C08,ID_24C16,ID_24C32,ID_24C64,ID_24C128,ID_24C256,ID_24C512,ID_24C1024,ID_24C2048,ID_24C4096); 
>
>>> Function CH341ReadEEPROM(iIndex:cardinal; iEepromID:EEPROM_TYPE;
>>> iAddr:cardinal; iLength:cardinal; oBuffer:Pbytearray ):boolean;stdcall;
>>> external 'CH341DLL.DLL';
>>> Function CH341WriteEEPROM(iIndex:cardinal; iEepromID:EEPROM_TYPE;
>>> iAddr:cardinal; iLength:cardinal; iBuffer:pbytearray ):boolean;stdcall;
>>> external 'CH341DLL.DLL';
>>>
>>> -----------------------------------------
>>>         elektro[-flame|-etc]
>>
>> ----------------------------------------- elektro[-flame|-etc]
> -----------------------------------------
>          elektro[-flame|-etc]



More information about the Elektro mailing list