Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Igen, már én is azt akartam kérdezni, hogy nem 255 ott az adat? A kezelésben nem látok több hibát.
szerk: Ez azt jelenti, hogy megy? A hozzászólás módosítva: Márc 5, 2016
Kiolvasás előtt eleget vársz? (melyik módban indítot? más időket látok)
Ami fehér ACK (from Slave to Master), azt idle-vel kell fogadni...
A hozzászólás módosítva: Márc 5, 2016
Most ezt javítottam. Az init után várok kb. 800ms-ot is.
Lehet, hogy erre aludni kéne egyet!
![]()
Tuti, hogy a kommunikációval szúrok el valamit, találtam egy német fórumot ahol valakinek ugyan ez volt a gond, csak nem pontosan értem hogy oldották meg.
Itt Karlheinz mondja meg a tutit. Szerk: Na úgy látom ő elhagyta az ack-t és a nack-t is. A hozzászólás módosítva: Márc 5, 2016
Nekem úgy tűnik, nem oldódott meg ott sem. Tedd fel a mostani kódot, hátha van még benne hiba! Ha az adatlap nem hibás, akkor nem szabadna ilyeneket csinálnia. Én RTCC-t és EEPROM-ot kezelek ezekkel a rutinokkal...
szerk: A baudod nézd még meg... A hozzászólás módosítva: Márc 5, 2016
Nézelődtem. Az alábbi kódban sem látom, hogy a cím kivitele után ACK-t is tolna.
Ez 16bites PIC-re íródott érdekes kommentekkel. ![]()
Neked is XPT2046 touch IC van a TFT-n? Sikerült beüzemelned?
Idézet: „Az alábbi kódban sem látom, hogy a cím kivitele után ACK-t is tolna.” A master adja ki a slave címét. A címre a slave "tolja" az ACK -t, a master legfeljebb csak ellenőrizni tudja az ACKSTAT bit értékével.
A baud elvileg rendben van, 400kHz és másik IC kommunikál rajta.
Itt az i2c-t kezelő rutinok:
Ez a chip inicializálása:
Ez a kiolvasó függvény:
Már kb. 1000-szer átnéztem...
Már dolgoztam az XPT2046-al, de nekem annyira nem jött be. Nem találkoztam olyan jó minőségű rezisztiv touch-okkal.
Most kapacitívvel foglalkozok, ezen a kijelzőn is az van, gyakorlatilag olyan mint egy üveglap. FT5206 IC van rajta. Nagyon jó kis IC, 5 ujjat tud egyszerre érzékelni és gesztusokat is le lehet kérdezni, hogy történt-e például zoom in zoom out, move left stb... Bár nekem csak zoom in és zoom out-ot küldött, a move left, right, up és down valamiért sosem jött, annyira nem is teszteltem ezt a részét. Megmondja hány ujjal érinted meg, így tudod hány koordinátát kell lekérni. Ez van még I2C-n rákötve ugyanerre a buszra. A kettő biztosan nem akad össze, mert le is állítottam ideiglenesen a külső megszakítást ami elindítja a koordináták lekérését.
Igazad van, a rezisztívek inkább gomb méretű kezelő felületekre jók, de azért nem vészesek. Közben sikerült beindítanom, volt egy olyan hiba az adat fogadásának ellenőrzésénél, ami miatt nem működhetett, ennek ellenére az MX-en megy most is!
![]() Én is átnéztem, sajnos nem értem miért nem megy. Elvileg jól csinálsz mindent. De minden bizonnyal valami nem stimmel, ha eszembe jutna valami, jelzem.
Köszi, hogy átnézted. Ma nem tudok vele foglalkozni, de holnap nézegetem.
Szerintem a kapacitív sokkal frankóbb, ha van rá lehetőséged azt próbáld ki.
Majd most jól eltolok egy olyat, amit a nyomdafesték ugyan biztosan nem fog szeretni, de attól még igaz. Az egész embedded világban akkora az árverseny, hogy már mindegyik mammut veszteségesen üzemel. Szóval több pénze annak maradhatott, amelyik kevesebbet ugrált feleslegesen.
Esetleg ha valakinek van ötlete, kérem jelezze. Tehát a probléma az, hogy a data_l mindig 255.
A programrészekből én nem látom helyes-e a reset időzítése (DVI láb), és a Power On parancsot sem. A folyamatábrán van egy szaggatott vonal ami a Power Down módban kiadott mérési parancsra utalhat, de nem találtam erre utalást, hogy ilyenkor mi történik.
A DVI megfelelő, mert egy gyári próbapanelon van, amire ez is be van kötve.
Kipróbáltam a Power On paranccsal is, illetve a procedúrával, amit az adatlapban írnak de sajna semmi, a hiba ugyan az. Más példaprogramokat nézegettem, úgy indul az IC, hogy be van kapcsolva és más példaprogramokban csak elküldik hogy milyen módban mennyen és mérnek. Ma kipróbálom egy másik I2C eszközön. De másik eszköz meg ugyan ezen a buszon kommunikál. De azért kipróbálom a Raspberry PI-men, ott van előre megírt példakód, amivel mennie kell. Lehet, hogy a szenzor rossz, más már nagyon nem maradt.
Biztosan a programommal van gond, mert a raspberry-vel korrekten működött.
Azt írtad, van szkópod. Esetleg tárolós, kétsugaras?
Van, sajna nem tárolós, kétsugaras. Így sokra nem megyek vele.
![]() Már rendeltem egy ilyen logikai analizátort, azt mondják frankó. SPI-hez is milyen jó lett volna...
PICKit2 vel is jól lehet boldogulni.
Most olvasom a 2013-as I2C adatlapban, hogy 2,4kOhm-ot ajánlanak felhúzónak...
Korábban már használtam óriási (több tízezer bájtos) tömböket a programmemóriában és akkor működött is szépen. Most ismét szükség lenne erre. Egy c fájlba beleírtam a tömbböt így:
A tömb persze sokkal nagyobb ennél, csak nem másoltam be ide az egészet. Nos erre ezt a hibaüzenetet adja a fordító: Idézet: „Link Error: PSV section '.const' exceeds 32K bytes (actual size = 75066). Link Error: Could not allocate program memory” Emlékszem hogy anno a fordító beállításainál (xc16-gcc/Memory model) be kellett pipálnom az "Allow arrays larger than 32K" beállítást. Ezt meg is tettem, a fenti hibaüzenetet már így adja ki. Aztán előkotortam azt a régebbi projektemet amiben ilyen nagy tömböket használtam, megnéztem hogy ott hogyan csináltam, hát így:
Erre kidobott a fordító egy csomó piros hibaüzenetet és azt mondta hogy használjak nagy kód modellt. Ezt beállítottam (xc16-gcc/Memory model/Code model->Large), így már csak ez a baja: Idézet: „build/default/production/Menurendszer.o(.text+0x40): In function `.LSM23': : Link Error: Cannot use relocation type WORD on a symbol (_hangfile_ossian) that is located in an executable section.” Ezt nem sikerült megfejtenem. ![]()
Van egy másik probléma is; építettem egy kis áramkört egy DIP tokos dsPIC33EP512MC502-vel, melynél a panelon ki volt vezetve egy tüskesorra az ICSP és ezen keresztül programoztam fel PICkit3-mal. Teljesen jól működött és azóta a kis panelt odaadtam a gazdájának. Most viszont két ugyan ilyen típusú PIC-be kellene beletöltenem ugyan azt a programot, immáron az áramkör nélkül. Fogtam hát egy IC foglalatot meg egy tüskesort és összekötözgettem a megfelelő lábakat:
ICSP 1 (MCLR) -> PIC 1-es lába, ICSP 2 (VDD) -> PIC 13-as és 28-as lábai, ICSP 3 (GND) -> PIC 8, 19 és 27-es lábai, ICSP 4 (PGD) -> PIC 4-es lába, ICSP 5 (PGC) -> PIC 5-ös lába. Kisípoltam mindent és átnéztem háromszor hogy biztos minden jó helyre köt, nincs-e fordítva a PIC a foglalatban vagy fordítva rádugva a tüskesor a PICkit3-ra. Minden rendben van. A programban konfigbiteknél a PGD3 van kijelölve (#pragma config ICS = PGD3). A projekt beállításainál a PICkit3/Power/Power target circuit from PICkit3 be van pipálva, alatta pedig 3,25V van beállítva. A PICkit3-am működik, mert másik projektre átváltva, másik típusú PIC-et felismer és programoz. Ezt viszont sajnos nem akarja felismerni sehogy sem, ezt dobja fel: Target Device ID (0x0) does not match expected Device ID (0x17850000). Próbáltam az MPLAB IPE-vel is, hátha esetleg az felismeri a PIC-et, de nem. A PIC maga nem romolhatott nálam el mert nem csináltam vele semmit csak kivettem a dobozából és beledugtam a foglalatba. Ráadásul két ilyen (dsPIC33EP512MC502) mikrovezérlőm van így ki tudtam próbálni másikkal de azt sem programozza sajnos. ![]() Van ötletetek hogy miért nem?
Tegyél próbára egy tápszűrő kondenzátort valahová a kontroller lábaihoz minél közelebb
Basszus... A VCAP lábra a kondi!!! Odatettem egy 4,7u-t és azonnal működik minden!
![]()
Ha bele tud férni workaround a programodba, csinálj halom sok kicsi tömböt, és egy burok macro-t az adatok lekérdezésére.
|
Bejelentkezés
Hirdetés |