Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1264 / 1318
(#) Attila86 válasza Hp41C hozzászólására (») Aug 8, 2017 /
 
Ez lesz. De szerintem nem úszom meg hogy 32 bitesre váltsak, vettem is már egy PIC32MK1024GPD064-et.
(#) Attila86 válasza pajti2 hozzászólására (») Aug 8, 2017 /
 
a 32mx1-2 családokban nincs 5 UART, illetve DIP tok nálam szóba sem jöhet! Ezen a panelon kellene lecserélnem a 64 lábú TQFP-s PIC-et, itt szóba nem jöhet a DIP tok.
A hozzászólás módosítva: Aug 8, 2017

9.jpg
    
(#) Attila86 válasza nedudgi hozzászólására (») Aug 8, 2017 /
 
Nem igazán... Akkor azt is külön programozni kellene és messze nem lenne olyan kényelmes a fejlesztés mint így:

str.png
    
(#) Hp41C válasza Attila86 hozzászólására (») Aug 8, 2017 /
 
Készíts egy string táblát a debug üzenetek szövegeivel és hozzá egy rutint, ami az indexével megadott szöveget írja ki az üzenetbe.
Előny:
- ugyan az a szöveg nem foglal többször helyet magának (pa-electronika.hu),
- a paraméter átadáskor a szöveg nem másolódik a stack -re.
Hátrány:
- egy kicsit bonyolultabb lesz a debug_kuldes() eljárás.
(#) pajti2 válasza Attila86 hozzászólására (») Aug 8, 2017 /
 
A 32mk családdal egyenlőre óvatosan, nagyon új darabok még. Egyéb iránt, én nem néztem meg az adatlapjaikat. Lábról lábra kivezetés-kompatibilis a dspic-el?
(#) Attila86 válasza Hp41C hozzászólására (») Aug 8, 2017 /
 
Én meg arra gondoltam hogy létrehozok egy külön C fájlt amelyben karakterláncokat hozok létre a programmemóriában. A karakterlánc-konstansokat (nem is tudom helyes-e ez a megnevezés) melyek jelenleg a függvények bemeneti paraméterei közt aposztrófok közt szerepelnek, kicserélem az újonnan létrehozott C fájlban lévő megfelelő const char tömb címére.
Azaz, a C fájlban:
  1. const char String1[]="FIFO ürítési ciklusba léptünk!";
  2. const char String2[]="FIFO méret= %u";
  3. const char String3[]="FIFO rekord= %u";
  4. const char String4[]="Küldés a szerverre mobilneten... (Loggolás oka: %u)";
  5. ...

Az eredeti fájlban pedig:
  1. Debug_kuldes(String1);
  2. Debug_kuldes(String2,fifomeret);
  3. Debug_kuldes(String3,fiforekord);
  4. Debug_kuldes(String4,Adatcsomag2.LogOka);
  5. ...
(#) Attila86 válasza pajti2 hozzászólására (») Aug 8, 2017 /
 
Igen aggódom is egy kicsit... Természetesen nem lábkompatibilis, nem tudom egy az egyben kicserélni őket. Át kell terveznem a panelt hozzá, de ez más okokból amúgy is esedékes.
Az errata-ját néztem, vannak benne durva dolgok (sleep nem működik és nincs is rá megoldás!), de azért remélem hogy jó lesz. UART-okat, I2C-ket, SPI-t és két OC-t használok PWM-re, ezekkel talán nem lesz gond.
(#) tomi52 válasza pajti2 hozzászólására (») Aug 8, 2017 /
 
Miért az i2c? Két válasz is van, bár nem egyforma súlyúak.
1. Szeretnék szépen sorban menni, már megvan a karakteres LCD kezelés, most az I2C-vel játszadozom, majd jöhet az SPI, grafikus kijelző, érintő panel....
2. Van olyan tervezett projektem, amihez csak I2C-s megoldás van, egy IC-s FM rádió, Arduino Nanoval már megy. Ez utóbbinál használtam egy óra IC-t, hömérséklet szenzort, EEPROM-ot tartalmazó kis gyári modult, ennek EEPROM-jával szerencsétlenkedek most.
+1. Érdekesnek találom a Microchip ERAM-ját, és ez egyelőre ha jól tudom, csak I2C interface-szel elérhető.

Egyelőre megoldom a dolgot az egy byte írás/olvasás ciklusba rakásával, aztán majd talán valamikor később visszatérek a dologhoz, hátha később találok működő megoldást.
(#) cross51 válasza Attila86 hozzászólására (») Aug 8, 2017 /
 
Én inkább PIC32MX470F512H választanám van benne PPS, USB 4 UART ha jól láttam láb kompatibilis (ha nem kell usb a 370-es kell). Az errata kicsit hosszú, de túlélhető.
Vagy a másik lehetőség ha mész az MZ felé abból az EFx sorozat egész tűrhető.
Én eddig egy 32MZ2048EFG100-at használtam minden működött benne. A kvarc-ot leszámítva mert ezekhez, ha nem internal clock-ot (FRC) használod akkor EC-ben megy csak vagy 8,12,24 MHz kvarcal egy adott revízió fölött viszont itt ugrik lábkompatibilitás, viszont ebbe annyi string-et írsz amennyit akarsz .
(#) nedudgi válasza Attila86 hozzászólására (») Aug 8, 2017 /
 
  1. #define pa_elektronika EEPROM_txt(1)
  2. #define fifo_meret EEPROM_txt(2)
  3. ...
  4. EEPROM_txt // string függvény deklarációja
  5. ...
  6. Debug_kuldes(pa_elektronika)
  7. Debug_kuldes(fifo_meret||%u)
  8. ...

A szintaktikát ne kérjétek számon rajtam, mert nem tudok C-ben programozni, de azért remélhetőleg érthető, mit javasolok.)
A hozzászólás módosítva: Aug 8, 2017
(#) tomi52 válasza tomi52 hozzászólására (») Aug 8, 2017 /
 
Javítás: ERAM = EERAM
(#) Attila86 válasza cross51 hozzászólására (») Aug 8, 2017 /
 
Nekem mindenképpen 5db UART kell, a PIC32MX470F512H-ban pedig csak 4db van ezért nem jó számomra. A PIC32MX5...-ös sorozattól felfelé van ennyi (6db) UART. Ezekben viszont sajnos nincs PPS.

Amit vettem PIC32MK1024GPD064-nél is van gond az elsődleges oszcillátorral az errata szerint, de azt írja van rá megoldás: az OSC2 lábbal sorba kell kötni egy ellenállást.
A hozzászólás módosítva: Aug 8, 2017
(#) pajti2 válasza Attila86 hozzászólására (») Aug 9, 2017 /
 
Uartból ha nem kell túl gyors, azt szoftveresen is meg lehet csinálni.
(#) tomi52 hozzászólása Aug 9, 2017 /
 
Bogarászom az XC32 doksiját. A következő két információt egymás után találtam:
ISO Standard: "The definitions for __DATE__ and __TIME__ when respectively, the date and time of translation are not available (C90 6.8.8, C99 6.10.8)."
Implementation: The date and time of translation are always available.

De sehol nem sikerült ráakadnom, valójában hogy lehet elérni a fordítás dátumát és idejét. Próbáltam keresni az MPLAB-X users guide-ban is. Tud valaki segíteni?
(#) Hp41C válasza tomi52 hozzászólására (») Aug 9, 2017 / 1
 
MpLab megoldás:
Egy programmal kell írni egy include állományt, amiben az időt és a dátumot hordozó szimbólumokat a gép idejéből definiáljuk. Ezt a programot beállítani pre build command -nak, az include állomány hivatkozását beletenni a kérdéses forrásokba. Eztán lehet használni a szimbólumokat.
(#) tomi52 válasza Hp41C hozzászólására (») Aug 9, 2017 /
 
Kössz!
Értem a menetet, de ehhez még sokat kell bogarásznom, hogy meg is tudjam csinálni. Eddig ilyennel nem foglalkoztam.
(#) killbill válasza tomi52 hozzászólására (») Aug 9, 2017 /
 
Es kiprobaltad, hogy egyebkent a __TIME__ es __DATE__ mukodik-e? Mert linux-on nativ gcc-n ez mukodik. Azt csinalja a fordito, mintha ez lenne a forrasodban:
  1. #define __TIME__ "19:23:12"
  2. #define __DATE__ "Aug 9 2017"
Termeszetesen az aktualis forditasi datummal, idovel. Szoval, ha egy printf-be beirod:
  1. printf("Forditas datuma es ideje:" __DATE__  __TIME__  "\n");
akkor ki is irja.
(#) tomi52 válasza killbill hozzászólására (») Aug 9, 2017 /
 
A DS1307-hez igyekszem megírni a kezelést, mintának az Arduinohoz lévő class-t vettem. A __DATE__ és __TIME__ fordítási hibát okoz ('__DATA__' was not declared in this scope), azért is keresgéltem a doksiban.

A előzőleg kapott megoldás használhatónak tűnik, az include file elkészítése egy scripttel nem tűnik bonyolultnak, csak aztán nem tudom, hová, és hogyan kell befűzni a scriptet, hogy a fordítás elején lefusson.
(#) AZoli válasza tomi52 hozzászólására (») Aug 9, 2017 /
 
DATA vagy DATE?
(#) tomi52 válasza AZoli hozzászólására (») Aug 9, 2017 /
 
__DATE__ és __TIME__ a sztenderd C-ben a fordítási időt adja. Az XC-kben nincs ilyen a doksi szerint. Az Arduino példa programban ha nem megy az RTC, akkor ezt alapján beállítja.
(#) AZoli válasza tomi52 hozzászólására (») Aug 10, 2017 /
 
Arra próbáltam rávilágítani, hogy DATE helyett DATA -t írtál, szerintem ezért hisztizik a fordító, nem? Nálam lefordul a __TIME__ és a __DATE__ XC16 1.26- ban, bár hogy mi lesz az eredmény, azt nem próbáltam ki.
(#) tomi52 válasza AZoli hozzászólására (») Aug 10, 2017 /
 
Jogos az észrevétel, az egyik hozzászólásomban valóban elírtam. De a fordító a helyesen írtra sikítozott. Arduinóban működő forrást próbáltam fordítani, sok más hiba mellett kidobta a __DATE__-t is, meg a __TIME__-ot is. Utána kezdtem keresgélni a doksiban, és találtam a fentebb írt két infót erre vonatkozóan.
(#) nedudgi válasza tomi52 hozzászólására (») Aug 10, 2017 /
 
Hátha segít: A "C:\Program Files (x86)\Microchip\xc32\v1.44\bin\bin" könyvtárban található "pic32mx-gcc-4.8.3.exe" fájl tartalmazza a __DATE__ és __TIME__ karakterláncokat.
(#) pajti2 hozzászólása Aug 10, 2017 /
 
Vannak a mindenféle 1 tokos wifi kapcsolatok, mint például az esp8266 és társai. Amiket én találtam mind 2.4 ghz-es sávban dolgoznak csak. Van 5 ghz-es kütyü is?
(#) tomi52 válasza nedudgi hozzászólására (») Aug 10, 2017 /
 
Direktben nem segített, tekintve, hogy lassan 8 éve - mióta nyögdíjas vagyok - nem bosszantom magam window$-al. De mégis segített, mert futtattam egy keresést, és kiderült, jó néhány file-ban szerepelnek. Ezért aztán nekifutottam még egyszer.

Mea culpa, hibáztam. Az eredeti próbában (Arduinos DS1307 library) valóban kidobta a fordító, hogy ezek nincsenek deklarálva. De számtalan más hiba is volt, nem voltam elég figyelmes.
A lényeg: ismeri a fordító!
(#) tomi52 hozzászólása Aug 10, 2017 /
 
A másik gubancom - több byte folyamatos olvasása/írása EEPROM-ba - szintén megoldódott. Kénytelen voltam vele foglalkozni, mert a következő terv a DS1307 RTC kezelése a doksit böngészve szintén igényli több byte folyamatos írását/olvasását, és még nem tudom, ott is lesz-e hasonló gond.

A megoldás - hátha másnak is segít - egy neten talált példaprogram alapján jött. Az EEPROM-ba történt írás után volt egy kis várakozás (10 msec), a comment alapján, hogy az EEPROM "megnyugodjon". Kipróbáltam a folyamatosan olvasott byte-ok olvasása között is, és bevált. A folyamatos írásnál is beraktam, mert az e nélkül hol ment, hol nem, határeset lehet, a várakozással működik mindig. A várakozási idő hosszával majd még kísérletezem.
(#) pipi válasza tomi52 hozzászólására (») Aug 11, 2017 /
 
Hali!
szerintem az eeprom dokujában le van írva mennyi időt kell várni, mennyi idő alatt hajtja végre az írást...
vagy használj FRAM-ot, abba döntheted az adatot, nem kell várni, "korlátlanszor" írható
(#) tomi52 válasza pipi hozzászólására (») Aug 11, 2017 /
 
Jó tipp! Erre látod nem is gondoltam, majd nekiugrok a doksinak.
De a tapasztalat azt mutatta, nem csak az írás után kell várni, hanem több byte folyamatos olvasásakor az egyes byte-ok olvasása közt is. Nagyon "nyugtalan" eszköz lehet ez az EEPROM, hogy folyton "nyugtatni" kell!

Ezt az FRAM-ot nem ismerem. Nem az EERAM-ról van szó? Ha igen, már van itthon, készülök annak a kipróbálására is.
(#) killbill válasza tomi52 hozzászólására (») Aug 11, 2017 /
 
Milyen EEPROM-rol van itt szo? Mert en meg eletemben nem lattam olyat, amire olvasaskor varni kellett volna, pedig talalkoztam eleg sokkal. Az I2C-s EEPROM-ok irasanal sem kell varni a byte-ok kozott, csak azutan, hogy a STOP kiment. Ugyanis az EEPROM csak akkor kezdi irni az addig megkapott adatokat.
(#) tomi52 válasza killbill hozzászólására (») Aug 11, 2017 /
 
Ez egy kész "gyári" modul, van rajta egy DS1307 RTC, egy Atmel 24C32 4k-s EEPROM, és helye egy DS18B20-nak, amit én tettem is rá. Én nem itt vettem, de így néz ki.

Én most vacakolok először EEPROM-mal, könnyen lehet, hogy nem tökéletes a programom. Jó pár mintát kerestem a neten, de alapvetően a Microchip oldaláról letöltött - egy byte kiírása, majd visszaolvasása - mintával indultam el. Nem működött helyből. Nem volt benne várakozás az írás után, és a visszaolvasáshoz nem címzett, csak olvasott egy byte-ot. Vagyis az írt utánit olvasta, és hasonlította ahhoz, mit írt ki. Több byte folyamatos olvasására nem volt benne minta, azt a netről keresett minták alapján kínlódtam össze.
Tehát nem biztos, hogy "tökéletes" a programom, de legalább működik. Az nem lehet, hogy az Atmel gyártotta nem egészen úgy működik, mint a Microchip gyártotta EEPROM?
Következő: »»   1264 / 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