Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1248 / 1318
(#) killbill válasza Attila86 hozzászólására (») Márc 15, 2017 /
 
Ha vsprintf megboritja a rendszert, akkor az osszes tobbi tarsai is csinalhat ilyet, es ettol kezdve se printf, se sprintf, se semmi?
(#) Attila86 válasza killbill hozzászólására (») Márc 15, 2017 /
 
A vsprintf egy bizonyos karakterhossz felett bolondul meg, az alatt használható. Nem tudom hogy a többi gyári függvénynek van-e ilyesmi hibája. Amivel még találkoztam az a string.h-nak a strstr() függvénye, az tuti hogy hibásan van megírva. Néhány hónapja ezt be is írtam ide a topikba, hogy neki az a baja hogy csk akkor hajlandó megtalálni a karakterláncban a karakterláncot, ha az utóbbi az előbbinek a legelején van. Tehát például a "Mikrovezérlő" sztringben a "Mikro" szót megtalálja, de mondjuk a "rovez"-et nem.
(#) killbill válasza Attila86 hozzászólására (») Márc 15, 2017 /
 
Hat, ez eleg szomoru.
(#) Droot válasza Attila86 hozzászólására (») Márc 15, 2017 /
 
Ezt Melyik XC alatt tapasztaltad?
Nekem XC32-vel megy szerencsére.
(#) Attila86 válasza Droot hozzászólására (») Márc 15, 2017 /
 
XC16-al.
(#) Droot válasza Attila86 hozzászólására (») Márc 15, 2017 /
 
Akkor jó tudni, hogy az XC32-ben megy.
(#) Droot hozzászólása Márc 18, 2017 /
 
Sziasztok!

Ismét elővettem a PIC32MZ2048EFH100-as projekt ADC részét. Kinyomtattam az adatlapot, újra átolvastam, bejelölgettem dolgokat...
A következő kóddal inicializálom, melyben elvileg nem ártana a while-os részek, de a kikommentezettből nem lép ki:
  1. // Init analog I/O
  2.             TRISEbits.TRISE7 = 1; // RE7 (AN15) => input
  3.             ANSELEbits.ANSE7 = 1; // RE7 (AN15) => analog input
  4.    
  5.    
  6.    
  7.                 // Copy calibration data (if not works: http://www.microchip.com/forums/m932637.aspx)
  8.             ADC0CFG = DEVADC0;
  9.             ADC1CFG = DEVADC1;
  10.             ADC2CFG = DEVADC2;
  11.             ADC3CFG = DEVADC3;
  12.             ADC4CFG = DEVADC4;
  13.             ADC7CFG = DEVADC7;
  14.  
  15.             // Clear control registers
  16.             ADCCON1 = 0;
  17.             ADCCON2 = 0;
  18.             ADCCON3 = 0;
  19.  
  20.             // Configure all channels as single-ended, unipolar inputs
  21.             ADCIMCON1 = 0;
  22.             ADCIMCON2 = 0;
  23.             ADCIMCON3 = 0;
  24.  
  25.             // Disable all global interrupts
  26.             ADCGIRQEN1 = 0;
  27.             ADCGIRQEN2 = 0;
  28.  
  29.             // Disable all early interrupts
  30.             ADCEIEN1 = 0;
  31.             ADCEIEN2 = 0;
  32.  
  33.             // Disable digital comparators
  34.             ADCCMPCON1 = 0;
  35.             ADCCMPCON2 = 0;
  36.             ADCCMPCON3 = 0;
  37.  
  38.             // Disable oversampling filters
  39.             ADCFLTR1 = 0;
  40.             ADCFLTR2 = 0;
  41.             ADCFLTR3 = 0;
  42.            
  43.             ADCCON1bits.SELRES = 0b11; // Select 12 bit resolution
  44.             ADCCON1bits.STRGSRC = 0b000001; // Select Global Software Edge Trigger
  45.             ADCCON2bits.ADCDIV = 0b0000001; // Shared ADC (ADC7) Clock Divider bits 2 * TQ = TAD7
  46.             ADCCON2bits.SAMC = 68; // ADC7 Sample Time (70 * Tad7) NEM BIZTI HOGY KELL
  47.             ADCCON3bits.ADCSEL = 0b00; // Select ADC Clock source (Tclk) as PBCLK3
  48.             ADCCON3bits.CONCLKDIV = 1; // ADC Control Clock <Tq> Divider (Divide by 20)
  49.             ADCCON3bits.VREFSEL = 0b000; // Select Vref as AVdd and AVss
  50.             ADCCON3bits.ADINSEL = 15; // Select AN15 as input
  51.            
  52.             ADCCON3bits.DIGEN7 = 1; // Enable ADC7 EZT LEHET AZ ON ELÉ VAGY UTÁN KELL TENNI
  53.  
  54.             ADCCON1bits.ON = 1; // Turn ON ADC module
  55.  
  56.             // Wait until the Vref stabilizes, NEM BIZTI HOGY KELL
  57.             while(!ADCCON2bits.BGVRRDY);
  58.             while(ADCCON2bits.REFFLT);
  59.  
  60.             // Wait until ADC7 ready
  61.             //while(!ADCANCONbits.WKRDY7);


A kiolvasásban ez a függvény segít:
  1. uint32_t adc_read()
  2. {
  3.             ADCCON3bits.GSWTRG = 1; // Start software trigger
  4.             while(((ADCDSTAT1 >> 15) | 1) == 0); // Wait until the measurement run
  5.             // VAGY EZ:while(ADCDSTAT1bits.ARDY15 == 0);
  6.             return ADCDATA15; // Return with measured data
  7. }


A kiolvasott érték mindig 0. Van ötletetek, hogy miért? Mit hagytam ki az inicializálásból?
(#) Hp41C válasza Droot hozzászólására (») Márc 18, 2017 /
 
Idézet:
„(((ADCDSTAT1 >> 15) | 1) == 0)”

A fenti kifejezés sohasem lesz 0.
(#) Droot válasza Hp41C hozzászólására (») Márc 18, 2017 /
 
A while(ADCDSTAT1bits.ARDY15 == 0);-t is próbáltam.
Jóra várakozok itt? Ez tartozik az AN15-höz, ugye?
(#) Attila86 hozzászólása Márc 23, 2017 /
 
Na erre varrjatok gombbot!
Van egy ilyen sorom:
  1. sprintf(str,"Dátum: %04u.%02u.%02u.",RTCC_ev(),RTCC_honap(),RTCC_nap());

A három függvény benne így néz ki:
  1. u16 RTCC_ev(void)
  2. {
  3.     while(Foglaltsag) Nop();
  4.     return RTCC.ev;
  5. }
  6. u8 RTCC_honap(void)
  7. {
  8.     while(Foglaltsag) Nop();
  9.     return RTCC.honap;
  10. }
  11. u8 RTCC_nap(void)
  12. {
  13.     while(Foglaltsag) Nop();
  14.     return RTCC.nap;
  15. }

Visszatérési értékük típusa u8 és u16, ezek "unsigned char" és "unsigned int" típusokat takarnak.
A probléma az, hogy a sztringben az év stimmel, de a hónap és a nap hülyeség lesz. Például: "2017.19203.19223." Valamiért a hónap és a nap értékéhez hozzáadódik 19200, ami fogalmam sincs hogyan történhet.
Még érdekesebb, hogy ha a három függvény visszatérési értékét a sprintf() előtt külön kimentem egy-egy változóba és azt adom át a sprintf()-nek, akkor viszont működik:
  1. Adatcsomag.GMT.ev=RTCC_ev();
  2. Adatcsomag.GMT.honap=RTCC_honap();
  3. Adatcsomag.GMT.nap=RTCC_nap();
  4. sprintf(str,"Dátum: %04u.%02u.%02u.",Adatcsomag.GMT.ev,Adatcsomag.GMT.honap,Adatcsomag.GMT.nap);

Tulajdonképpen így szuperül működik, csak bosszant a dolog hogy amúgy meg miért nem, hiszen jónak kellene lennie. (A fenti struktúra hivatkozott három elemének típusa ugyan az mint a függvények visszatérési értékének típusa.)
(#) killbill válasza Attila86 hozzászólására (») Márc 23, 2017 /
 
Lehet, hogy rosszul teszi le a stack-re az u8 ertekeket, amikor a sprintf-et hivod. Elvileg at kellene konvertalnia int-re, de lehet, hogy ezt elrontja. A 19200 az 0x4b00, tehat az a gond, hogy a felso byteban 0x4b-van es nem 0, amikor az RTCC_honap() erteket beteszi a stack-be. Ez fordito hiba elso ranezesre. Ha u16-nak deklaralod oket, akkor valoszinuleg jo lesz. Esetleg erdemes megnezni, hogy mit forditott belole, abbol latszik, hogy hol rontja el.
(#) pajti2 válasza Attila86 hozzászólására (») Márc 23, 2017 /
 
Idézet:
„sprintf(str,"Dátum: %04u.%02u.%02u.",RTCC_ev(),RTCC_honap(),RTCC_nap());”
sprintf(str,"Dátum: %04u.%02u.%02u.",RTCC_ev(),(u16)RTCC_honap(),(u16)RTCC_nap()); ?
A hozzászólás módosítva: Márc 23, 2017
(#) Attila86 válasza pajti2 hozzászólására (») Márc 23, 2017 /
 
Próbáltam kasztolni, de ugyan az a végeredmény.
(#) Tasznka válasza Attila86 hozzászólására (») Márc 23, 2017 /
 
Próbáld így :
  1. sprintf(str,"Dátum: %04u.%02u.%02u.",RTCC_ev(),(u8)RTCC_honap(),(u8)RTCC_nap());


A hiba,vagyis a sprintf végeredményén látszik,hogy ő a hó,nap-nál intet olvas be,de char a forrás,és így a mellette lévő címről is beolvas valamit.Legalábbis nekem úgy tűnik .
(#) pajti2 válasza Attila86 hozzászólására (») Márc 24, 2017 /
 
Ha explicit casting sem megy, az tuti fordító hiba.
(#) killbill válasza pajti2 hozzászólására (») Márc 24, 2017 /
 
Ez mindenkeppen fordito hiba. A C eleve minden char-t int-kent kell atadjon. Automatikusan benne van a cast. Es 16 bitet is ad at, csak a felso byte-ot nem torli.
(#) cross51 hozzászólása Márc 28, 2017 /
 
Sziasztok!

Egy 32mx170f256b-vel próbálok SPI DMA-t csinálni, de nem akar úgy működni ahogyan szeretném.
  1. CNPDA = 0x10;
  2.     RPA2R = 0b0100; //SDO2
  3.     SDI2R = 0b0010; //SDI2
  4.     SPI2CON = 0;
  5.     SPI2CONSET = 0x18120;
  6.     SPI2CONbits.STXISEL = 0b00;
  7.     IFS1 = 0;
  8.     SPI2BRG = 2;
  9.  
  10.     //DMA
  11.     DMACONSET = 0x8000;
  12.     DCH0CON = 0x03; //channel off priority 3
  13.  
  14.     DCH0ECON = _SPI2_TX_IRQ << 8 | _DCH0ECON_SIRQEN_MASK;
  15.  
  16.     DCH0SSA = KVA_TO_PA(&audiobuf[0]);
  17.     DCH0DSA = KVA_TO_PA(&SPI2BUF);
  18.     DCH0SSIZ = 32;
  19.     DCH0DSIZ = 1;
  20.     DCH0CSIZ = 1;
  21.     DCH0INT = 0;
  22.  
  23.  
  24.  
  25.  
  26.     DCH0CONSET = _DCH0CON_CHEN_MASK;
  27.     DCH0ECONSET = _DCH0ECON_CFORCE_MASK;
  28.  
  29.     while (!(DCH0INT & _DCH0INT_CHSDIF_MASK));


A kódnak így sok értelme nincs, csak a teszt miatt van benne a while a végén.
A problémák amiket észre vettem:
bárhogy állítom a STXISELT az IFS1 SPI2TXIF-et nem tudom törölni a DMA transzfer előtt.
Ha az SSIZ 16 byte méretű akkor szépen megy, de az ENHBUF be van kapcsolva ami pont 16 byte-os.
Ha 16 byte-nál nagyobb az SPI2EIF mindig 1 lesz.
Ebből gondolom azt, hogy valamiért a DMA "rosszul informálódik az SPI transzfer OK-ról" és küldi folyamatosan az adatot és gondolom az error if abból van, hogy a fifo teli van és úgy akarok bele írni.

Próbáltam az RX IRQ-ra is rakni, de ott is csak 16 byte-ig ment mi lehet a baj?
(#) Hp41C hozzászólása Ápr 5, 2017 /
 
Új PIC32 család a láthatáron: PIC32MK a szinte szokásos (lassan más elvárt) jó hosszú errataval és kavarodásokkal (az errata linken megnyitott pdf dokumentum címe a PIC32DA családot említi). Az adat EEProm memória leírása
Section 58. “Data EEPROM” (DS60001341) még nem is létezik....
(#) cross51 válasza Hp41C hozzászólására (») Ápr 5, 2017 /
 
Az errata tényleg hosszú, sajnálatosnak tartom, hogy még ennek az A1-es verziójában is probléma van az oszcillátorral, bár ahogy láttam ez kapott már trace-t is bár nem is tudom, hogy a microchipnek van e trace-es debuggere (talán a real ice..).

Sajnos nem tűnik olyan nagy előrelépésnek az M-től.
Meg kerül egy két újdonság a doksiba az pl.: az ajánlott bekötés kicsit részletesebb lett az tetszett mondjuk.
(#) pajti2 válasza Hp41C hozzászólására (») Ápr 5, 2017 /
 
Köszi a híreket!

Szóval az mz családhoz képest lefelezték a maximum sram-ot, a hs usb helyett újra csak fs usb van, és kihagyták az eredeti da tervből a beépített dram-ot, ami kb az egyetlen valódi újdonság lehetett volna. Az egyetlen újítás, hogy van dupla usb port egy tokon. Valami olyasmit érzek az mc teljesítményéről, mint a bank reklámok végén a "Köszönjük Emese!".
A hozzászólás módosítva: Ápr 5, 2017
(#) Wezuv válasza Hp41C hozzászólására (») Ápr 6, 2017 /
 
Nem értem ezt a vonalat. Inkább az MZ-t fejlesztenék tovább, DRAM és SD protokollos támodatással. Föl nem fogom, hogyan lehet ennyi hibát beletenni azután, hogy egy másik sorozatot már kikupáltak (MZ EFx). Még szerencse, hogy nem tud olyan dolgokat, amikre szükség is lenne, mert akkor most nagyon dühös lennék. Így, hogy lassú, fs usb, és sok hiba, szerintem ki se kéne hozniuk. Még az MM kis fogyasztását és kevés lábszámát, kis tokozását se hozza...
Szerinted elvi hiba van a "fólián", vagy a gyártás során sikerül félre valami?
A hozzászólás módosítva: Ápr 6, 2017
(#) rolandgw válasza Wezuv hozzászólására (») Ápr 6, 2017 /
 
Idézet:
„Nem értem ezt a vonalat.”

Sok gyártónál már régóta van motor control sorozat. Az NXP-nél például LPC15xx és Kinetis KV néven.
(#) Hp41C válasza pajti2 hozzászólására (») Ápr 6, 2017 /
 
Szerintem az MK nem a MZ__DA család helyett készül, hanem úgy mellette választékbővítésként.
Engem inkább az zavar, hogy két-három évvel az első MZ megjelenése után is ilyen hibákat tartalmaz az első errata. (Biztosak lehetünk, hogy lesz még több bejegyzés benne...)
(#) pajti2 válasza rolandgw hozzászólására (») Ápr 6, 2017 /
 
Akkor továbbra sem értjük Mi lenne az a "motor control" funkció? Ha szinkron motor vezérlésre célzol, az egy mezei állapotgép, amit bármilyen pic megcsinál.
(#) elactrofan hozzászólása Ápr 11, 2017 /
 
Sziasztok!

Nem tudom jó helyre írók-e. Tud valaki segíteni nekem? szükségem lenne egy 3V3-1V8 adapter
kapcsolási rajzra.
valaki tud linkelni egyet?
(#) cross51 válasza elactrofan hozzászólására (») Ápr 11, 2017 /
 
Nem egészen jó helyen, de gondolom PIC-hez kell.
Kapcsoló üzemű vagy lineáris?
(#) elactrofan válasza cross51 hozzászólására (») Ápr 11, 2017 /
 
25q64fw chip
tl866 programozo
(#) pajti2 válasza elactrofan hozzászólására (») Ápr 11, 2017 /
 
3v3 -> 1v8 zéró probléma. Tennivaló: bemégy bármelyik elektrotechnikai boltba, kérsz 1.8v-os stabilizátor ic-t (megkérdezik majd milyen tokozással, mekkora árammal szeretnéd, választasz a kínálatból, ami tetszik), utólag megnézed a típusjelét, és bármit adtak, az adatlapját felkotrod google-el. Lesz az adatlapban példa kapcsolási rajz is.
(#) elactrofan válasza pajti2 hozzászólására (») Ápr 11, 2017 /
 
Köszi,
(#) ha1drp válasza pajti2 hozzászólására (») Ápr 11, 2017 /
 
Ez a chip nem tolerálja az 1.8v feletti szinteket egyetlen kivezetésén sem. Nem lesz feltétlen elég csak a tápegység feszültségét csökkenteni. Nem ismerem a programozót, de az interneten mindenhol szintillesztő áramkört ajánlanak hozzá.
Következő: »»   1248 / 1318
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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