Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1214 / 1320
(#) Droot hozzászólása Feb 29, 2016 /
 
A SST26VF032 flash-t lehet QI-vel használni, ugye?
(#) Wezuv válasza Droot hozzászólására (») Feb 29, 2016 /
 
Igen, ez egy SQI flash, éppen most rendeltem egyet, holnapra itt lesz elvileg a EFH-val együtt. Áthidaló megoldásnak szánom SD helyett, gondolom neked is ilyesmi forog a fejedben!? Hab a tortán, hogy az EBI-hez leírtak érvényesek az SQI perifériára is (a hozzá tartozó virtuális és fizikai címekkel természetesen)! Debuggoláskor meg lehet nézni a külső memória tartalmát is EBI és SQI esetében és úgy kezelhető, mintha belső lenne, ami azért nem gyenge szolgáltatás.
A hozzászólás módosítva: Feb 29, 2016
(#) kissi válasza Wezuv hozzászólására (») Feb 29, 2016 /
 
Hú, mivel nem foglalkoztam még ezekkel, nem mondom, hogy teljesen képben vagyok, de a harmadik olvasásra már valamit értettem belőle !
Köszi, hogy megosztottad, ha odaérek, hogy használnom kell, biztos könnyebben megértem !
(#) Droot válasza Wezuv hozzászólására (») Feb 29, 2016 /
 
Na az szép! Úgy emlékeztem, higy 16mb-os flash ict rendeltem, de csak 4, úgyhogy elővettem most az sd kártyát, de szerintem a flasht is ki fogom próbálni.
Az lenne a cél, hogy az sd-ről képet megjelenítsek, meg fájlt írjak és olvassak. Csak tanulás céljából. A flash-be is ha akarom beletuszkolok 5-6 képet. De most inkább az sd-vel foglalkozom, a PMP-vel is mennyit szívtam, most nem hiányzik az SQI.
(#) Droot hozzászólása Feb 29, 2016 /
 
Nagyon bosszant, hogy az CX32-nek nem tetszik ez:
  1. for(uint8_t i = 0; i < 10; ++i)

Csak így:
  1. uint8_t i;
  2. for(i = 0; i < 10; ++i)

Valamit lehet kezdeni vele?
(#) Droot válasza Droot hozzászólására (») Feb 29, 2016 /
 
Olvasgattam és SPI-n SD kártyával kb 800kb/s-hoztak ki. Az kép megjelenítéshez nem egy eszeveszett sebesség.
A flash-el, SQI-val kb milyen sebességre számítasz?
(#) zenetom válasza Droot hozzászólására (») Feb 29, 2016 /
 
Többen vagytok?
(#) Wezuv válasza Droot hozzászólására (») Feb 29, 2016 /
 
50*4/8=25MB/sec. Ha a fele igaz, már jó.
A C-s kérdésedre nem tudom a választ, nekem az a fura, ha helyben deklarálod a változót...


Viszont én meg kínlódom az EBI-vel. Elvileg mindent beállítok, még sem működik. Most nem tudom eldönteni, hogy az ECH verzió a hiba, vagy én rontok el valamit...
A hozzászólás módosítva: Feb 29, 2016
(#) Droot válasza Wezuv hozzászólására (») Feb 29, 2016 /
 
Igen, az már teljesen okés.

A for-ban ahol helyben deklarálom a ( és a ; közötti részt egyszer hajtja végre. Így mindegy hol deklarálod, csak nekem így egyszerűbb, így van megszokva.

Az efh még nem jött meg? Szerintem ne kínlódj vele, ott a PMP, elküldöm a kódot ha kell.
(#) benjami válasza Droot hozzászólására (») Feb 29, 2016 /
 
Tudomásom szerint a sima C-ben csak a függvények elején lehet a változókat deklarálni, a C++ -ban meg bárhol:
Különbségek a C és a C++ között
(#) potyo válasza benjami hozzászólására (») Feb 29, 2016 /
 
Talán a C99 szabványtól kezdve lehet a C-ben is bárhol változót deklarálni, de az XC32 az C89/90-es szabványt támogat.
(#) Droot hozzászólása Feb 29, 2016 /
 
A Harmony-t a legvégső esetben szeretném csak használni.
A UpdateCoreTimer(CORE_TICK_PERIOD); függvény kiváltására van valamilyen lehetőség?
Nem találtam meg a header-ek között a harmony könyvtárban.
(#) Droot válasza Droot hozzászólására (») Feb 29, 2016 /
 
Megoldottam.
(#) Wezuv válasza potyo hozzászólására (») Márc 1, 2016 /
 
Szia! A régi MPLAB-ban a PIC kiválasztásakor jelezték, hogy melyik debuger/égető áramkör milyen készültséggel kezeli az adott PIC-et. Az MPLAB X-ben van ilyen tájékoztatás?
(#) Droot válasza Wezuv hozzászólására (») Márc 1, 2016 /
 
Csak arrol tajekoztat, hogy megnehezitjuk a fejlesztok eletet, de cserebe sok extrat adunk, viszont mellette van egy pipa de be van szurkulve.
(#) Droot hozzászólása Márc 1, 2016 /
 
Sziasztok!

Ismételt PIC32MZ2048EFH100 szivatás történik ezúttal az SPI-vel.
Szkóppal vizsgálva SS jel van (a modul kezeli), DOUT jel van, SCK van. SD kártyával kötöttem össze és DIN jel nem volt, tehát semmilyen válaszra nem válaszolt.
Most az SDI és SDO lábakat összekötöttem a PIC-en és tesztelni akarom, hogy amit kiküldök, az visszajön-e:
  1. tft_text_write("teszt start");
  2.    
  3.     TRISFbits.TRISF13 = 1;      //RF13 input
  4.     CNPUFbits.CNPUF13 = 1;      //RF13 pull-up resistor
  5.     ANSELFbits.ANSF13 = 0;      //RF13 is digital input
  6.     ANSELFbits.ANSF12 = 0;      //SS as digital PIN
  7.    
  8.    
  9.     //SPI1 initialize
  10.     SS1Rbits.SS1R = 0b1001;     //RPF12 Slave Select
  11.     SDI1Rbits.SDI1R = 0b1011;   //RPD14 SDI1
  12.     RPB10Rbits.RPB10R = 0b0101; //RPB10 SDO1
  13.    
  14.     //SCK, SDO, SS output
  15.     TRISFbits.TRISF12 = 0;      //RF12 (SS) output
  16.     TRISBbits.TRISB10 = 0;
  17.     //SDI input
  18.     TRISDbits.TRISD14 = 1;
  19.    
  20.     SPI1CON = 0;
  21.     SPI1CON2 = 0;
  22.    
  23.     //SPI1CONbits.MSSEN = 1;
  24.     //SPI1CONbits.SSEN = 1;
  25.     //SPI1CONbits.MSTEN = 1;
  26.     SPI1BRG = 250;              //BRG = 200 -> 248kHz
  27.     SPI1CON = 0x8220;
  28.     SPI1CONbits.CKP = 1;
  29.     SPI1CONbits.SMP = 1;
  30.         SPI1CONbits.ON = 1;
  31.    
  32.     tft_text_write(": ");
  33.    
  34.    
  35.     /* SD teszt start*/
  36.     SPI1BUF = 0x32;
  37.     while (SPI1STATbits.SPITBF);
  38.     while(!SPI2STATbits.SPIRBF);
  39.     uint8_t da = SPI1BUF;
  40.    
  41.     if(da == 0x32)
  42.         tft_text_write("szuper");
  43.     else
  44.         tft_text_write("franc");
  45.        
  46.    
  47.     while(1);


Nem történik semmi. A while (SPI1STATbits.SPITBF); még lefut, ezt szkópon is látom de a while(!SPI2STATbits.SPIRBF); megakad. Ha ezt kiszedem akkor sem kapom vissza amit kiküldtem.
(#) Tasznka válasza Droot hozzászólására (») Márc 2, 2016 /
 
Szia!
A 27. sorban már elindítod az spi-t,így nem vagyok benne bizti,hogy a 28-29. sort figyelembe veszi -e.Próbáld 0x0220 -al,az On a 30.sorban majd úgy is elindítja.
2.es móddal próbálod használni az SD-kártyát? Én mod0-ával használtam,azzal ment,amikor még foglalkoztam vele. CKE = 1,CKP = 0.
Ja és ha nincs őrkutyád bekapcsolva,akkor csinálj valami kiléptetést,mert így ha gubanc van,akkor be fog ragadni a progid a while-ba.
(#) Droot válasza Tasznka hozzászólására (») Márc 2, 2016 /
 
Most annyit változtattam, hogy a 27-es sort kijavítottam: SPI1CON = 0x00008120;
Illetve a 28-30-at kitöröltem.
Továbbra is az SPI1BUF-ból 0xff-et olvasok ki...
Mit jelent a 2-es mód és 0-s mód?
Esetleg ahogy Te használtad azok az SPI függvények még megvannak?

Jelenleg pontosan így néz ki a kódom:
  1. tft_text_write("teszt start");
  2.    
  3.     TRISFbits.TRISF13 = 1;      //RF13 input
  4.     CNPUFbits.CNPUF13 = 1;      //RF13 pull-up resistor
  5.     ANSELFbits.ANSF13 = 0;      //RF13 is digital input
  6.     //ANSELFbits.ANSF12 = 0;      //SS as digital PIN
  7.    
  8.    
  9.     //SPI1 initialize
  10.     CFGCONbits.IOLOCK = 0;
  11.     SYSKEY = 0x00000000;
  12.     SYSKEY = 0xAA996655;
  13.     SYSKEY = 0x556699AA;
  14.    
  15.     SS1Rbits.SS1R = 0b1001;     //RPF12 Slave Select
  16.     SDI1Rbits.SDI1R = 0b0001;//RPG8, SDI1 //0b1011;   //RPD14 SDI1
  17.     RPB10Rbits.RPB10R = 0b0101; //RPB10 SDO1
  18.     SYSKEY = 0x33333333;
  19.     CFGCONbits.IOLOCK = 1;
  20.    
  21.    
  22.     //SCK, SDO, SS output
  23.     TRISFbits.TRISF12 = 0;      //RF12 (SS) output
  24.     TRISBbits.TRISB10 = 0;      //RPB10 SDO1
  25.     TRISDbits.TRISD1 = 0;       //SCK
  26.     //SDI input
  27.     TRISGbits.TRISG8 = 1;//TRISDbits.TRISD14 = 1;
  28.     //digitalize outputs
  29.     ANSELGbits.ANSG8 = 0;
  30.     ANSELFbits.ANSF12 = 0;
  31.     ANSELBbits.ANSB10 = 0;
  32.    
  33.     ANSELG = 0;
  34.     ANSELB = 0;
  35.     ANSELD = 0;
  36.     ANSELF = 0;
  37.    
  38.     LATFbits.LATF12 = 1;
  39.  
  40.     while(ms<400);
  41.     SPI1CON = 0;
  42.     SPI1CON2 = 0;
  43.    
  44.     //SPI1CONbits.MSSEN = 1;
  45.     //SPI1CONbits.SSEN = 1;
  46.     //SPI1CONbits.MSTEN = 1;
  47.     SPI1BUF = 0; //clears SPI1 buffer
  48.     SPI1BRG = 250;              //BRG = 200 -> 248kHz
  49.     SPI1CON = 0x00008120;
  50.    
  51.     tft_text_write(": ");
  52.    
  53.    
  54.     /* SD teszt start*/
  55.    
  56.     while(ms<500);
  57.     LATFbits.LATF12 = 0;
  58.     // wait until SPI transmission complete
  59.     SPI1BUF = 0x32;
  60.     while(!SPI1STATbits.SPIRBF);
  61.     SPI1BUF = 0x32;
  62.     while(!SPI1STATbits.SPIRBF);
  63.    
  64.     uint8_t fdf[20];
  65.     sprintf(fdf,"Hex: 0x%x, 0x%x, 0x%x, 0x%x, 0x%x", SPI1BUF, SPI1BUF,writeSPI(0x32),writeSPI(0x32),writeSPI(0xff));
  66.     tft_text_write(fdf);
  67.  
  68.  
  69. unsigned char writeSPI( unsigned char b)
  70. {
  71.     SPI1BUF = b;                                        // write to buffer for TX
  72.     while( !SPI1STATbits.SPIRBF);       // wait for transfer to complete
  73.     uint8_t d= SPI1BUF;
  74.     SPI1STATbits.SPIROV = 0;
  75.     return d;                                   // read the received value
  76. }// writeSPI
(#) Tasznka válasza Droot hozzászólására (») Márc 2, 2016 /
 
  1. void spi3_init_SD(void){
  2. IEC5bits.SPI3IE = 0;
  3. SPI3STATbits.SPIEN = 0;
  4.  
  5. SPI3STATbits.SPISIDL = 0; //idle módban is megy = 0 , leáll = 1
  6. SPI3CON1bits.DISSCK = 0;//SCK láb legyen használatban=0 ,ne legyen használatban=1
  7. SPI3CON1bits.DISSDO = 0;//SDO láb legyen használatban=0 ,ne legyen használatban=1
  8. SPI3CON1bits.MODE16 = 0;//16 bites kommunikáció=1,  8 bites kommunikáció=0
  9. SPI3CON1bits.SMP = 1;   //A bejövő adatot az adatkimeneti idő végén mintavételezzük = 1;
  10.                                                 //A bejövő adatot az adatkimeneti idő közepén mintavételezzük = 0;      
  11. SPI3CON1bits.CKE = 1;   //Az átvitel az órajel aktív állapotból inaktívba váltásakor történik = 1
  12.                                                 //Az átvitel az órajel inaktív állapotból aktívba váltásakor történik = 0
  13. SPI3CON1bits.CKP = 0;   //Inaktív állapotban az órajel magas, aktív állapotban alacsony szintű = 1
  14.                                                 //Inaktív állapotban az órajel alacsony, aktív állapotban magas szintű = 0
  15. SPI3CON1bits.SSEN = 0//Slave Select bemenet engedélyezése = 1 , ne használja = 0
  16. SPI3CON1bits.MSTEN = 1; //Master (mester) üzemmód = 1, Slave (szolga) üzemmód = 0;
  17. SPI3CON1bits.SPRE = 0//másodlagos osztó 7=1:1, 6=2:1, 5=3:1, 4=4:1, 3=5:1, 2=6:1, 1=7:1, 0=8:1
  18. SPI3CON1bits.PPRE = 1//elsődleges osztó 3=1:1, 2=4:1, 1=16:1, 0=64:1
  19. SPI3CON2bits.SPIBEN = 0;
  20. SPI3BUF = 0x0000;
  21.              
  22. IFS5bits.SPI3IF = 0;
  23. IEC5bits.SPI3IE = 0;
  24. SPI3STATbits.SPIEN = 1;//az SPI modul engedélyezése
  25. }


Bár ez 24-es picre van,de én így használom,így 1ből látom,hogy mi van beállítva.

SPI mod-ok:
0: CKP=0 CKE=1
1: CKP=0 CKE=0
2: CKP=1 CKE=1
3: CKP=1 CKE=0
(#) Droot válasza Tasznka hozzászólására (») Márc 2, 2016 /
 
Köszönöm!

Ez alapján még javítottam az SMP-t 1-re, de így is ugyan ez a gond. Már teljesen tanácstalan vagyok, újabb 2 nap szívatás után.
(#) Tasznka válasza Droot hozzászólására (») Márc 2, 2016 /
 
A modok csak akkor számítanak,ha az spi-s már működik,addig el kellene jutnod,hogy tudj fogadni is.Le kellene szimulálnod,és akkor kiderül,hogy miért is akad el a fogadásnál.
(#) Droot válasza Tasznka hozzászólására (») Márc 2, 2016 /
 
Hogyan tudom leszimulálni?
(#) Tasznka válasza Droot hozzászólására (») Márc 2, 2016 /
 
Mplab -ban debugernél beállítod,az mplab simet,és futtatod a progit,bár nem minden procit lehet így debug-olni...Lehet találni a neten hozzá leírást.vagy beszerzed a Kónya könyvet,abban le vannak írva az alapok.
(#) Droot válasza Tasznka hozzászólására (») Márc 2, 2016 /
 
Még nem használtam soha sem ezt. Holnap kipróbálom. Azt meg tudod esetleg mondani, hogy nagyvonalakban a szimulálást hogy csináljam? Mit nézzek, keressek?
(#) Tasznka válasza Droot hozzászólására (») Márc 2, 2016 /
 
Sajna 32-eshez csak az Mplab X jó,és azt nem használom,csak a régit.Ha el tudod indítani a szimulátort,akkor a watch-ablakban tudod nézni ,hogy a változóid,regiszterek,bufferek milyen értéken vannak,amikor éppen megállítod a szimulációt.A stimulusban tudsz(Mplab X-nél lehet hogy máshogy hívják)külső eseményeket létrehozni.
(#) Wezuv válasza Droot hozzászólására (») Márc 2, 2016 /
 
Szia! A project ablakban a bal felső beállító ikon(talán két szerelőkulcs) megnyomásával bejutsz a beállításokhoz. Ha jól rémlik a general alatt vannak a debugger lehetőségek, ott a simulationt kell választani. Ezután lefordítod a programot a kis zöld lejátszó jelet tartalmazó gombbal. De előtte tegyél egy megszakítást az PSI dolgok első sorára, hogy onnan lépésenként tudd végrehajtani a prgoramot. Fel lehet nyitni egy watch ablakot, amibe bele tudod pakolni azokat a változókat és regiszereket, amiket látni szeretnél. Sajnos nem garantált, hogy az MPLAB X jól kezeli az MZ EF sorozatot, de valamit azért talán látni fogsz a regiszterekben.
A hozzászólás módosítva: Márc 2, 2016
(#) Droot válasza Wezuv hozzászólására (») Márc 2, 2016 /
 
Sikerült elindítani. Pl egy 300ms-os várakozás a Timer-el nagyon sokáig tart, meg sem vártam, 5 perc alatt nem csinálta meg.
Most megpróbálok egy másik SPI periféiriát felkonfigolni és más lábakra is fogom tenni.
(#) Wezuv válasza Droot hozzászólására (») Márc 2, 2016 /
 
Hát igen, kellett az embereknek a Java!
(#) Droot válasza Wezuv hozzászólására (») Márc 2, 2016 /
 
Na csak sikerült feléleszteni. Nem jól volt beállítva, hogy az SDI melyik lábra kerüljön. Mivel az a láb ahol valójában volt fizikailag, alapbeállítással kimenetként inicializálódott, ezért a PIC-ben lévő FET rövidrezárta az SD kártya kimenetét.

Teszteltem egy márkátlan és egy SanDisk SD kártyával, FAT16 és FAT32 fájlrendszerrel, 4, 8 és 16MB-os adatok írásával. A sebességek a csatolt táblázatban vannak.

Érdekes, hogy hiába vettem fel az SPI órajelet 16,66MHz-ről 25MHz-re (elvileg ez az SPI módban a maximum sebesség), nem lett jóval gyorsabb a kommunikáció. 800kb/s-ra már azt mondanám, hogy OK.

Van esetleg ötlet, hogy miért nem tud gyorsabb lenni?
(#) Wezuv válasza Droot hozzászólására (») Márc 2, 2016 /
 
Szkóppal nézted a CLK-t, valóban 25MHz?
Milyen kódot használsz a FAT-okhoz?
A hozzászólás módosítva: Márc 2, 2016
Következő: »»   1214 / 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