Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
 
Témaindító: G-Lex, idő: Jan 9, 2006
Lapozás: OK   1299 / 1299
(#) cross51 válasza usane hozzászólására (») Okt 18, 2018 /
 
Én Eddig MX-et akkor használtam amikor elkezdtem 32 bitezni mert abból volt DIP-es aztán azóta csak MZ-ket használok azon kívül hogy nem megy rá kvarc más nem nagyon akasztott ki benne.
Jó az ADC-t ha pontos mérésre akarjuk használni lehet felejtős, bár mostani projektben PT100-is kifejezetten pontosan mér és feszültséget is sima 1%-os osztóval is pontosan mérek vele, bár nincs rá igény.

Az MZ nem feltétlen a nagy periféria készlete miatt szoktam használni hanem egy kicsit a kényelem miatt, sokáig míg assembly-ztem és assembly-c átmenetbe voltam nagy optimalizálás őrült voltam, de elmúlt

Amit a harmony-ból használtam Timer, SYS_TMR service-ek, ADC_HS, UART, I2C, USB, RESET, SYS_DMA (nagyjából ezek)

És elkezdeni nem volt egyszerű bár a c++ segített rajta, mert ahogyan érzékeltem a library elég erősen objektum orientáltságra hajtottak (persze valós hiba kezelés nélkül).

Van egy két hely ahol ki jön hogy más más ember csinálta a libary-t szerint az I2C és UART API része jobban eltér mint ahogyan kellene.

Viszont ami nagy előny volt az egészben hogy semmivel nem kellet nagyon szenvedjek
(persze eltekintve míg fel nem fogtam, hogy hogyan épülnek fel a library-k)
és az összes library non-blocking-ra konfigolható tehát könnyen fűzhető hozzájuk más (és RTOS-hoz is jó).

Azt vettem észre, hogy egész jól használhatóak c++-al együtt is (bár a harmony még nem erre van kitalálva - kicsit szenvedős ezen a téren)

Lezárásként az eddig itt hallottakból egy fél-egy éves használat után pozitív csalódást hozott.
Valamint amit egyre fontosabbnak tartok az elnevezési konzekvencia - itt kifejezetten jól sikerült
(#) usane válasza cross51 hozzászólására (») Okt 19, 2018 /
 
Az MZ-ket nem nagyon néztem, mert nem kellett az a sebesség, na meg kell a periféria, bár főleg kommunikációs. Most is olyanon töröm a fejem amihez minimum 1 IIC, 2 SPI és 2 UART kell, (teszthez 3 UART). Illetve a v1 már kész van, de dolgozom a v2-n. Meg úgy gondoltam az MX-ek jobban kiforrtak már, de úgy nézem amit egyszer kiadnak az úgy marad. A minap böngésztem ehhez a projekthet az MX-eket és nem nagyon találtam olyat amiben megvolt az összes szükéges periféria és ne lett volna hibás valamelyik. Némelyik megkerülhető, de vannak nagyon durvák is.
(#) pajti2 válasza usane hozzászólására (») Okt 19, 2018 /
 
Az MX-eket azért nem fejlesztik tovább, mert ha el tudják adni a havi díjas (!) MZ fordítót, az sokkal többet hoz a konyhára. Még nem eldöntött játék, tényleg nyerik-e azt a meccset, vagy csak átkergetik a teljes közösségüket másik gyártóhoz. Egyenlőre úgy tűnik, nem a tapasztaltabbik irányban haladnak a lejtőn.
(#) marcellus96 hozzászólása Nov 1, 2018 /
 
Sziasztok!
20 ms-onként szeretnék 1->500 us-ig változtatható kitöltési tényezőjű jelet előállítani.
Ehhez beállítottam a TMR1 megszakítást 20 ms-ra a TMR2-őt pedig 1 us-ra. TMR1-ből indítom TMR2 megszakítást 20 ms-onként. A rendszer órajelem 32 MHz. Ilyen módon a kimeneten mért jelet nem sikerült 4,5 us alá vinnem. (Ekkor a megszakításban csak egy kimenet állítás van, meg az interrupt flag törlése.) Így megpróbáltam egy olyan variációt is, hogy a 20 ms-os megszakításba tettem egy szoftveres késleltetést (tudom, hogy nem szép dolog), így 270 ns-ig képes voltam lecsökkenteni a kimeneti jel magas szintjének idejét. (A felhasznált PIC 16F18857 típusú)
Ezt a feladatot továbbra is időzítőkkel szeretném megoldani, van valami ötletetek esetleg?
A válaszokat előre is köszönöm!
A hozzászólás módosítva: Nov 1, 2018
(#) icserny válasza marcellus96 hozzászólására (») Nov 2, 2018 /
 
1 us megszakítás helyett nem lehetne valami haladottabb módon előállítani az impulzust, pl. az adatlap 29.5.5 SOFTWARE START ONE-SHOT MODE alfejezete szerint?
(#) marcellus96 válasza icserny hozzászólására (») Nov 2, 2018 /
 
Ez annyit csinál, hogy minden túlcsordulás után törli az engedélyező bitjét nem? Tehát mindig engedélyeznem kell a 20 ms-os megszakításban. Egy láb magas szintbe állítását viszont így is a TMR2 megszakításban kellene elvégeznem nem?
(#) icserny válasza marcellus96 hozzászólására (») Nov 2, 2018 / 1
 
"Tehát mindig engedélyeznem kell a 20 ms-os megszakításban."
Nekem úgy tűnt, hogy igen.

Idézet:
„Egy láb magas szintbe állítását viszont így is a TMR2 megszakításban kellene elvégeznem nem?”
Pont azt szeretném elérni, hogy erre ne legyen szükség.
De ennek részleteit az adatlapból kell kisilabizálni. Futólag olvasva ott volt olyasmi, hogy PWM-mel kell kombinálni, hogy kiadja az impulzust. De nem merültem el a részletekben, mert nem használok ilyen mikrovezérlőt (és a jövőben sem szeretnék).
(#) marcellus96 válasza icserny hozzászólására (») Nov 2, 2018 /
 
Rendben köszönöm! Most egyébként az NCO-t és a TMR2-t hoztam össze CLC modul segítségével (S-R tárolóként használva). Egész jó úton haladok így is, de próbálkozok még a one-shot móddal is.
(#) tothtechnika2 hozzászólása Csü, 21:10 /
 
Sziasztok!

Adott a PIC32MM0256GPM028 32bites pic. Sajnos a fordító nem engedi beincludolni a plib.h-t mert hiányol valami megszakítást.

Szeretnék pár bájt adatot letárolni a flash-be, hogy kikapcsoláskor ne veszítse el, hogy következő bekapcsolásnál visszatölthessem. A dee_emulation_pic32-t hívtam segítségül, de ez is a plib.h-t akarja beölteni. Megnéztem milyen függvényeket használ, NVMUnlock,NVMWriteRow,NVMWriteWord,NVMErasePage,NVMProgram. Ezeket megkerestem neten, beletettem. A program lefordul, de nem működik. Nem tárolja el az adatokat, és kiolvasni sem tudja.

  1. void nvm_save(uint16_t x) {
  2.     char buf[10];
  3.     int e;
  4.     DEEdata = x;
  5.     if(e=DataEEWrite(DEEdata,DEEaddr)) {
  6.         sprintf(buf, "e%d", e);
  7.         disp_write_str2(1,40,  buf, 1, font8x8);
  8.        }
  9. }
  10.  
  11. int nvm_read(void){
  12.     char buf[10];
  13.     int e;
  14.     int value;
  15.     if(e=DataEERead(&value, DEEaddr))  {
  16.          sprintf(buf, "r%d", e);
  17.          disp_write_str2(32,40,  buf, 1, font8x8);
  18.        }
  19.     return value;
  20. }


Ezeket az egyszerű függvényeket írtam. Sajnos írásnál is 6-os hibakóddal tér vissza.
A DataEEWrite függvény leírásában a hatos hibakód : Value 6 for page corrupt status.
Erről a sorról van szó:
  1. if(((e=DataEERead(&dataRead,addr)) != 0) && (dataEEFlags.val >1))
  2.     {
  3.         return (6); //error condition
  4.     }


Itt is az e-> 6, tehát a DataEERead is 6-os hibakóddal tér vissza. Itt ez Value 6 for page corrupt status.-t mond. Van valakinek valami tippje mi lehet ez?

Elküldöm mellékletbe a saját dee_emulation fájlomat. Nagyon hálás lennék, ha valaki tudna segíteni, más nagyon sok órám ráment erre az egészre.
A hozzászólás módosítva: Csü, 23:45
Moderált hozzászólás
(#) Wezuv válasza tothtechnika2 hozzászólására (») 8:56 /
 
A DataEEInit -et lefuttatod a függvények futtatása előtt?
(#) tothtechnika2 válasza Wezuv hozzászólására (») 9:24 /
 
Nem, az kimaradt De most pótoltam, és a hiba pontosan ugyanaz sajnos.
(#) tothtechnika2 válasza tothtechnika2 hozzászólására (») 9:58 /
 
Az init 7-es hibakóddal tér vissza: Value 7 for write error.
(#) cross51 válasza tothtechnika2 hozzászólására (») 10:45 /
 
Gyors átfutásból azt látom, hogy a NVMWriteWord-ot nem lesz jó ehhez a PIC-hez.
Idézet:
„The memory
can be programmed by rows or by two 32-bit words,
called double-words.”


Az NVMDATA0/1 nem egy 32 bites upper lower half hanem 64 bites regiszterpár.

Ez biztos, hogy az egészet fel fogja borítani, de csak így használható ezen a PIC-en.
  1. unsigned int NVMWriteDoubleWord (void* address, unsigned int upperWord, unsigned int lowerWord){
  2.     unsigned int res;
  3.     // Load data into NVMDATA register
  4.     NVMDATA0 = lowerWord; // lower word
  5.     NVMDATA1 = upperWord; // upper word
  6.     // Load address to program into NVMADDR register
  7.     NVMADDR = (volatile unsigned int) address;
  8.     // Unlock and Write Word
  9.     res = NVMUnlock (0x4010);
  10.     // Return Result
  11.     return res;
  12. }
(#) tothtechnika2 válasza cross51 hozzászólására (») 13:05 /
 
Megoldottad a problémámat! Nagyon köszönöm!
Következő: »»   1299 / 1299
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu