Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1216 / 1320
(#) usane válasza Wezuv hozzászólására (») Márc 4, 2016 /
 
Mitől térnének? Kilövik az egyik legnagyobb ellenfelüket. Legyártották a hardvert, programot meg írjon rá aki fejleszt rajta.
A baj csak az, hogy a dokumentáció is egyre hiányosabb és kuszább.
(#) Wezuv válasza usane hozzászólására (») Márc 4, 2016 /
 
Gondoltam attól, hogy a sok visszajelzés alapján rájönnek, hogy amit új utat választottak bemutatásként az eszközeik mellé a felhasználóknak, vásárlóknak, csoki. Ők meg ebből élnek...
Abban igazad lehet, hogy monopol helyzetbe kerültek, ami nem jó és pont az ellen hat, amit indokként írtam.
(#) pajti2 válasza Wezuv hozzászólására (») Márc 4, 2016 /
 
Őőő az "ARM" az nem Atmel. Két külön cég. Az Arm a risc procik magjait gyártja viszonteladóknak, pld Allwinner.
(#) rolandgw válasza pajti2 hozzászólására (») Márc 4, 2016 /
 
Nem gyártó,szellemi terméket árul. Ezt lehet licenszelni pl. Atmel.
Bővebben: Link
(#) Droot hozzászólása Márc 4, 2016 /
 
PIC32MZ I2C buszon szeretnék a csatolmányban látható formátumban adatot fogadni. Nem igazán akar menni.
Az alábbi függvénnyel szeretném:
  1. uint16_t bh1750()
  2. {
  3.     uint16_t data;
  4.     uint8_t data_h, data_l;
  5.     i2c_wait_idle();
  6.     i2c_start();
  7.     i2c_master_write(0b01000111);
  8.     i2c_nack();
  9.     i2c_wait_idle();
  10.     i2c_master_read(&data_h);
  11.     while(I2C2STATbits.ACKSTAT == 1);
  12.     I2C2CONbits.ACKDT = 1; I2C2CONbits.ACKEN = 1; while(I2C2CONbits.PEN);
  13.     i2c_master_read(&data_l);
  14.     I2C2CONbits.ACKDT = 0; I2C2CONbits.ACKEN = 0; while(I2C2CONbits.PEN);
  15.     i2c_wait_idle();
  16.     i2c_stop();
  17.     data = data_h;
  18.     data <<=8;
  19.     data |= data_l;
  20.     return data;
  21. }


Az I2C függvények ezek:
  1. void i2c_wait_idle()
  2. {
  3.     //Wait until I2C Bus is Inactive
  4.     while(I2C2CONbits.SEN || I2C2CONbits.PEN || I2C2CONbits.RSEN || I2C2CONbits.RCEN || I2C2CONbits.ACKEN || I2C2STATbits.TRSTAT) continue;
  5. }
  6.  
  7. void i2c_start()
  8. {
  9.     I2C2CONbits.SEN = 1;
  10.         while(I2C2CONbits.SEN == 1);
  11. }
  12.  
  13. void i2c_master_write(uint8_t data)
  14. {
  15.     I2C2TRN = data;
  16.     //while(I2C2STATbits.TBF == 1);   //wait until send out data
  17.     while (I2C2STATbits.ACKSTAT == 1);  //wait until ACK recievered
  18. }
  19.  
  20. void i2c_master_read(uint8_t *data)
  21. {
  22.     I2C2CONbits.RCEN = 1;           // enable master for 1 byte reception
  23.         while(I2C2CONbits.RCEN) continue;      // wait until byte received
  24.     I2C2STATbits.I2COV = 0; //Túlcsordulás jelz? bit törölve
  25.     *data = I2C2RCV;
  26. }
  27.  
  28. void i2c_nack()
  29. {
  30.     I2C2CONbits.ACKDT=1;
  31.         I2C2CONbits.ACKEN=1;
  32.         while(I2C2CONbits.ACKEN) continue;              //  kész?
  33. }
  34.  
  35. void i2c_stop()
  36. {
  37.     I2C2CONbits.PEN=1;
  38.         while(I2C2CONbits.PEN) continue;                //  kész?
  39. }
  40.  
  41. void i2c_restart()
  42. {
  43.     I2C2CONbits.RSEN=1;
  44.         while(I2C2CONbits.RSEN) continue;               // Restart kész?
  45. }

Nem nagyon akar sajna menni. A gond az ACK és NACK fogadással van. Ezt hogyan kell megoldani?
(#) GPeti1977 válasza Wezuv hozzászólására (») Márc 4, 2016 /
 
Viszont olvastam a cikkben hogy a Microchip-nek nagyobb bevétele volt mint az Atmelnek, csak azt nem tudom miből.
Ahol dolgozom ott olyan termékeket gyártottunk amiben NEC mivel megvette az is a Renesas ilyen kontrollereket használtunk.
Kár hogy Európában nincs hozzá fejlesztőkörnyezet mert biztos jók lehetnek ha a japán vagy kínai tervezők mindent meg tudnak vele csinálni.
PIC-et sorozat gyártott termékben még nem nagyon láttam...
(#) zenetom válasza GPeti1977 hozzászólására (») Márc 4, 2016 /
 
Idézet:
„PIC-et sorozat gyártott termékben még nem nagyon láttam...”

Én már láttam porszívóban, konyhai gépben, fúrógépben, játékban, daruban (jó, mondjuk aszem csak a táp résznél volt), és még elég sok helyen használják.
Szerintem simán megállná a helyét komoly területeken is, csak az is baj, hogy 2015-öt írunk, és még mindig nincs hozzá normális, kiforott magas szintű nyelv (fordító), vagy legalábbis nem terjedt el.
A hozzászólás módosítva: Márc 4, 2016
(#) potyo válasza GPeti1977 hozzászólására (») Márc 4, 2016 /
 
Mi gyártunk BLDC motorokat, amikben PIC a központi vezérlő. Ipari környezetbe szánva, -40 +125 fok közötti hőmérsékletre. Van olyan motor, amiben valami 8 bites, meg van, amiben valami 16 bites van, fejből nem emlékszem a pontos típusokra.
(#) potyo válasza zenetom hozzászólására (») Márc 4, 2016 /
 
Mit értesz a kiforrott magas szintű nyelv alatt?
(#) zenetom válasza potyo hozzászólására (») Márc 4, 2016 /
 
Na jó, "kicsit" túlzásba estem, szóval kicsit ezt most visszavonom, viszont nem akarok belemenni, mert megint összehordok csomó butaságot.
De egyébként a C18 miatt akadtam ki, illetve annak megszüntetése miatt. Mert szerintem nagyon jó kis fordító lenne, ha nem álltak volna le vele.
(#) Wezuv válasza Droot hozzászólására (») Márc 4, 2016 /
 
A 8. sor az kell oda?
A 12. pedig NACK-nak felel meg.
A 14. nem is tudom, de talán egyikne se...
Ez az ACK:
  1. I2C1CONbits.ACKDT=0;
  2.         I2C1CONbits.ACKEN=1;

Ez A NACK:
  1. I2C1CONbits.ACKDT=1;
  2.         I2C1CONbits.ACKEN=1;
A hozzászólás módosítva: Márc 4, 2016
(#) Droot válasza Wezuv hozzászólására (») Márc 4, 2016 /
 
Ezzel a két paranccsal várakozik rá?
Egyébként ez egy fényérzékelő lesz, majd a háttérvilágítást szabályozza.
(#) Wezuv válasza Droot hozzászólására (») Márc 4, 2016 /
 
Nem, ezt neked kell kiadnod.
Ezzel ellenőrzöd, hogy kiment-e.
  1. while(I2C1CONbits.ACKEN);

Érdemes bele tenni timeoutot, de szerintem amit küldtem kódot, abban megvan minden rutin, nem?
(#) Droot válasza Wezuv hozzászólására (») Márc 4, 2016 /
 
Tényleg benne van!
Úgy tűnik jó lett!
(#) Wezuv válasza Droot hozzászólására (») Márc 4, 2016 /
 
Nagy nehezen nekem is beindult a PMP. Nem győztem lassítani a kivitelt, de így is gyors, mint a villám. 0,11sec tized alatt tol ki egy teljes képernyőnyi színt, pontonként ciklusból, 800x480 16bit. Ez már tényleg felhasználó barát.
(#) Droot válasza Wezuv hozzászólására (») Márc 4, 2016 /
 
Na igen, az már tényleg tök jó!
Így hogy a PLL-em beindult nekem is lassítani kellett, de szerencsére nem sokat! Bár én csak 640x480-as képet nyomattam ki. Ha jól emlékszem az volt 153ms. Úgyhogy ennyivel lassabb az RA8875.
(#) Droot válasza Wezuv hozzászólására (») Márc 4, 2016 /
 
Valami mégsem kerek!
Tehát így olvasom ki:
  1. uint16_t bh1750()
  2. {
  3.     uint16_t data;
  4.     uint8_t data_h, data_l;
  5.     i2c_wait_idle();
  6.     i2c_start();
  7.     i2c_master_write(BH1750_ADDR | I2C_READ);
  8.     i2c_ack();
  9.     i2c_wait_idle();
  10.     i2c_master_read(&data_h);
  11.     i2c_ack();
  12.     i2c_wait_idle();
  13.     i2c_master_read(&data_l);
  14.     i2c_nack();
  15.     i2c_wait_idle();
  16.     i2c_stop();
  17.     data = data_h; //0
  18.     data <<=8;
  19.     data = data_l;
  20.     data = data/1.2;
  21.     return data;
  22. }

A data_L mindig 255 lesz. De miért?
(#) Wezuv válasza Droot hozzászólására (») Márc 4, 2016 /
 
De lehet, hogy neked több utasítás volt a flash programterületről való másolás. Nem hiszem, hogy túl nagy eltérés lenne gyakrolatban a két vezérlő között.
A PMP időzítései nem befolyásolták a sebességet, igaz nem mélyedtem bele, mit is állítanak ezek, lehet, hogy csak címzés és CS jelek kezelését állíták, vagy olyan rövid időket enged max, amik nem játszanak a TFT vezérlő lassúsága miatt.
Holnap átteszem az egészet EBI-re, ha sikerül...
(#) Wezuv válasza Droot hozzászólására (») Márc 4, 2016 /
 
A 8. sorban nem te adod ki az ACK-t, ott fogadnod kell. Ami fehér, az válasz!
A másik, hogy ha az i2c_ack()-ban figyeled, hogy kiment-e a jel, akkor utána nem kell idle-t nézni.
(#) Droot válasza Wezuv hozzászólására (») Márc 4, 2016 /
 
Nekem sem befolyásolták egyébként. Annyi volt a hiba, hogy kirajzoltattam egy képet (egy tömbből, amit beprogramoztam a forráskódból) és a 640x480-as képen volt kb. 10-15db pixel ami mindig zöld színű volt. Ahogy csökkentettem kicsit a sebességet ez helyrejött. De egyébként itt az asztalon vezetékekkel van összekötve minden, még az is lehet, hogy ez volt a baj.
(#) Droot válasza Wezuv hozzászólására (») Márc 5, 2016 /
 
Köszönöm!
Az ACK-t hogyan fogadom?
(#) Wezuv válasza Droot hozzászólására (») Márc 5, 2016 /
 
Nekem is volt régebben 20cm szalagkábellel toldva foldva, ugyanúgy ment! Igen a határt ki lehet kísérletezgetni...
(#) Wezuv válasza Droot hozzászólására (») Márc 5, 2016 /
 
Az idle-vel simán.
(#) Droot válasza Wezuv hozzászólására (») Márc 5, 2016 /
 
A 8. sor kicseréltem i2c_wait_idle();-re és továbbra is 255-öt ad vissza.
Szerk.: A data_h-t megfelelő értékkel adja vissza és a data_l-el van a gond. Az világos, hogy az ACK-t fogadni kellett. De valami mást is elrontottam még?
A hozzászólás módosítva: Márc 5, 2016
(#) Wezuv válasza Droot hozzászólására (») Márc 5, 2016 /
 
A 9. ben is idle maradt?
Bizosan nem kevered össze az ACK-t a NACK-val?
A hozzászólás módosítva: Márc 5, 2016
(#) Droot válasza Wezuv hozzászólására (») Márc 5, 2016 /
 
Igen, de csak az idle:
  1. uint16_t bh1750()
  2. {
  3.     uint16_t data;
  4.     uint8_t data_h, data_l;
  5.     i2c_wait_idle();
  6.     i2c_start();
  7.     i2c_master_write(BH1750_ADDR | I2C_READ);
  8.     i2c_wait_idle();
  9.     i2c_master_read(&data_h);
  10.     i2c_ack();
  11.     i2c_master_read(&data_l);
  12.     i2c_nack();
  13.     i2c_wait_idle();
  14.     i2c_stop();
  15.     //data = data_h; //0
  16.     //data <<=8;
  17.     data = data_l;
  18.     //data = data/1.2;
  19.     return data;
  20. }
(#) Wezuv válasza Droot hozzászólására (») Márc 5, 2016 /
 
nack után nem kell idle. (bár nem biztos, hogy ez segít, de nem kell.)
(#) Droot válasza Wezuv hozzászólására (») Márc 5, 2016 /
 
Nem segített sajna. :/
(#) Wezuv válasza Droot hozzászólására (») Márc 5, 2016 /
 
Na és amit kérdeztem, ack nack nincs összekeverve a rutinban?
(#) Droot válasza Wezuv hozzászólására (») Márc 5, 2016 /
 
Azt leellenőriztem, rendben van.
Azon gondolkozom, hogy lehet hogy a BH1570-es IC beállításában van valami gond.
Az elején a Continuously H-Resolution Mode-ot választottam ki ("Start measurement at 1lx resolution.Measurement Time is typically 120ms. "), most ezt olvasgatom, esetleg nem-e mindig ő küld ki 255-öt.

Szerk.: Úgy látom rendben van és 1 lux-tól kéne mérnie, tehát ha eltakarom 1 lux.
A hozzászólás módosítva: Márc 5, 2016
Következő: »»   1216 / 1320
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem