Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1023 / 1320
(#) Ideiglenes válasza zzz hozzászólására (») Szept 10, 2011 /
 
Az EEPROM egy másik érdekes tulajdonsága, hogy ha csak néhány cellában frissülnek rendszeresen az adatok, akkor azok a cellák, amik régebben kaptak írást, folyamatosan közelítenek az alapállapothoz, azaz szép lassan elfelejtik az adatokat. Emiatt tehát szükséges időnként végigfutni a teljes EEPROM területen és újraírni a régi adatokat, frissíteni azokat ( is ). Az adatlapok erről is adnak tájékoztatást.
(#) kissi válasza Ideiglenes hozzászólására (») Szept 10, 2011 /
 
Ezeknek nem 40 év az adatmegőrzési idejük? Mintha valami ilyen "emberfeletti" időt olvastam volna az adatlapokon ?

Steve

EEPROM.jpg
    
(#) potyo válasza kissi hozzászólására (») Szept 10, 2011 /
 
De igen, ha nyugton hagyod. De ha a szomszédos cellákat rendszeresen írkálod, akkor időnként frissíteni kell azokat is, amiket nem írsz.
(#) watt válasza potyo hozzászólására (») Szept 10, 2011 /
 
Ez nekem is új! Milyen időközönként kell?
(#) potyo válasza watt hozzászólására (») Szept 10, 2011 /
 
Úgytűnik az adatlapokból, hogy nem minden picnél van erre szükség. Pl. 18F452 adatlap 6.8 fejezete szól erről. Ott az van megadva, hogy minimum egymillió, tipikusan tízmillió eeprom írás után van szükség ilyen frissítésre.
(#) icserny hozzászólása Szept 10, 2011 /
 
Árulja el valaki, hogy 64 bites Windows 7 alatt hogyan kell az MPLAB-ot installálni? Hiába adtam meg telepítési útvonalnak a Program files mappát, mindenáron a Program Files(x86)-ba települt. Végeredményben igaza van, de velem jól kitolt. Ha most az összes meglevő projektemet át kell szerkeszteni emiatt, az is bosszantó, de ha úgy teszem közzé (pl. a PICCOLO projektben), az méginkább az lesz - másoknak.

Van erre valami intelligens megoldás?
(#) icserny válasza icserny hozzászólására (») Szept 10, 2011 / 1
 
Megvan a megoldás!

  1. mklink /D "C:\Program Files\Microchip" "C:\Program Files (x86)\Microchip"


Bővebben: Link
(#) watt válasza potyo hozzászólására (») Szept 10, 2011 /
 
Hiszen az elvi ciklusa is 1millió, akkor már minek frissíteni a mellette lévőt? Majd megnézegetem ezt, mert most éppen egy olyan projectem van, ahol 20 cellát végtelenített szalagként írok percenként, pont azért, hogy 20millió perc legyen a kapacitás. Ha a mellettük lévő elfárad az gond, mert kalibrációs értékek vannak letárolva épp. Jó, hogy írtál erről, mert ez nem jutott volna eszembe!
(#) potyo válasza watt hozzászólására (») Szept 10, 2011 /
 
Nem bájtonként, hanem összesen 1000000 eeprom írás után kell egy ilyen frissítés. Tehát ha van pl. 256 bájt eepromod, amiből 200-at rendszeresen írsz, akkor amikor már mindegyik bájtot 1000000/200=5000-szer már írtál, akkor kell egy ilyen frissítés a maradék 56 bájtra - már persze csak akkor, ha használod is valamire azokat.
(#) kissi válasza potyo hozzászólására (») Szept 11, 2011 /
 
Ezt hol lehet olvasni, mert én ilyennel még nem találkoztam ?

Steve
(#) kissi válasza kissi hozzászólására (») Szept 11, 2011 /
 
Közben megtaláltam az adatlapban és régebben is olvastam, csak az nem esett le, hogy ez nem egy-egy cellára vonatkozik, hanem összességében!
Köszi a figyelemfelhívást !

Steve
(#) Attila86 hozzászólása Szept 11, 2011 /
 
Szeretnék két táblának lefoglalni bájtokat a memóriában, egy 160 bájtosat és egy 100 bájtosat. Emellett még vagy 60-70 bájtnyi egyéb regiszter is kellene. Ezek egy részét az UDATA_ACS direktíva után írtam, aztán egy részüket az UDATA után. De nem engedi lefordítani mert túl sok a regiszter. Mit lehet ilyenkor tenni? Az adatlapja szerint a PIC18F25K80-nak (erről van szó) 3648 bájtnyi adatmemóriája van. Én ettől még nagyon messze vagyok! Hogy a bánatba lehet akkor akár mind a 3648 bájtot használni?
(#) Ideiglenes válasza Attila86 hozzászólására (») Szept 11, 2011 /
 
Én ugyan nem sokat programoztam a 18F sorozatot, de azt már tudom, hogy a 16F-ben sokat szidott bankolást nem sikerült felszámolni a 18F sorozatban sem, bár már nem olyan erősen jelentkezik. Nagyobb egybefüggő memóriaterületet érdemes indirekt címzéssel használni az FSR és INDF regisztereken keresztül. Ezekkel akár 256 bájtnál nagyobb egybefüggő blokkot is kezelhetsz. Az acces ram megoldással valahol 160 bájt körül van a határ, de ez megintcsak változó az egyes eszközök esetén. Bankolásos címzéssel egy bankban 256 bájtot tudsz használni.
A fordítói direktívákban nem tudok segíteni. Az a terület még ködös számomra.
(#) trudnai válasza Attila86 hozzászólására (») Szept 11, 2011 /
 
Linker scriptedben kellene egy teruletet lefoglalni a nagy tablaknak es abba pakolgatni ezeket. ACS-be kulonben sem tennek ilyeneket, felesleges.
(#) Attila86 válasza trudnai hozzászólására (») Szept 11, 2011 /
 
Hogyan? Olvasgattam neten meg a Kónya-könyvben de sehol nem írják le azt amire én vagyok kíváncsi.
Így néz ki most:
  1. TablSize EQU .160
  2. LastIndex EQU TablSize-1
  3.     UDATA_ACS
  4.         TEMP                                    res     8
  5.         egyesek                                 res     1
  6.         tizesek                                 res     1
  7.         százasok                               res     1
  8.         ezresek                                 res     1
  9.         digit5                                  res     1
  10.         digit6                                  res     1
  11.         digit7                                  res     1
  12.         digit8                                  res     1
  13.  
  14.         W_TEMP                                  res 1
  15.         W_TEMP_lcd                              res 1
  16.         STATUS_TEMP                             res 1
  17.         SZAM1_felso                             res 1
  18.         SZAM1_also                              res 1
  19.  
  20.         MÉRT_hőfok                            res     2
  21.         BEÁLLÍTOTT_hőfok             res     2
  22.         Különbségi_hőfok            res     2
  23.         KÉSZENLÉTI_hőfok             res     2
  24.         SZÁZALÉK_fűtés                      res     1
  25.         WATT_fűtés                            res     1
  26.         MAX_WATT                                res     1
  27.  
  28.         Nullafok_állandó              res     2
  29.         Százfokfok_állandó           res     2       ;100 foknyi változás esetén mért feszültség-értékkülönbség
  30.  
  31.         átalakítandó_karakter        res     1
  32.         nagyszám_számláló           res     1
  33.  
  34.         ENKÓDER_STÁTUSZ                       res     1
  35.         Z_számláló                           res     1
  36.  
  37.         PWM_állandó                           res     2       ;(10000-szeres!)
  38.  
  39.         kijelzés_idő_számláló      res     1
  40.  
  41.         LCD_fényerőszámláló                res     2
  42.  
  43.         AN_0_offset                             res     2
  44.         AN_1_offset                             res     2
  45.  
  46.         vonalkijelzés1                 res     2
  47.         vonalkijelzés2                 res     1
  48.  
  49.         delay1                                  res 1
  50.         delay2                                  res 1
  51.         delay3                                  res 1
  52.         megszak_időzítés1            res     1
  53.         reg1                                    res 1
  54.         ÜZEMMÓD                                       res 1
  55.         ÜZEMMÓD2                              res 1
  56.         minta_számláló                       res 1
  57.         elvetett_minta_számláló      res 1
  58.         összeg                                 res     3
  59.         osztó                                  res     2
  60.         maradék                                        res 2
  61.         osztandó_eredmény             res 4
  62.         regiszter1                              res     4       ;a matematikai rutinok során használt segéd regiszter
  63.         szorzó1                                        res     2
  64.         szorzó2                                        res     2
  65.         szorzat_eredmény               res 4
  66.  
  67.         Kalibrációs_alsó_hőmérséklet      res     1
  68.         Kalibrációs_alsó_feszültség                res     1
  69.         Kalibrációs_felső_hőmérséklet     res     1
  70.         Kalibrációs_felső_feszültség       res     1
  71.  
  72.  
  73.         UDATA
  74.         minta_tábla                            res TablSize            ;minták tárolására használt 160 bájt
  75.         fűtés_tábla                          res 40          ;teljesítmény-grafikonhoz használt 50 bájt
  76.  
  77.         kWh_számláló                         res     4
  78.         Készenlét_idő                                res     3
  79.         Kikapcs_idő                                    res     3
  80.         Készenlét_idő_számláló            res     3
  81.         Kikapcs_idő_számláló                res     3
  82.         PIN_kód_ezresek                                res     1
  83.         PIN_kód_százasok                      res     1
  84.         PIN_kód_tizesek                                res     1
  85.         PIN_kód_egyesek                                res     1
  86.         Tényleges_PIN_kód_ezresek             res     1
  87.         Tényleges_PIN_kód_százasok           res     1
  88.         Tényleges_PIN_kód_tizesek             res     1
  89.         Tényleges_PIN_kód_egyesek             res     1
  90.  
  91. #define utolsó_elem    minta_tábla+LastIndex
  92.  
  93. ;*************** EEPROM ******************
  94. org  0xF00000
  95. ch_tb12 de b'00001101',h'01', h'40', h'00', h'64', d'1', d'2', d'3', d'4'       ;EEPROM feltöltése

Ezt le tudja fordítani de ha a fűtés_tábla-nál átírom hogy ne 40 hanem 50 bájt legyen (annyit szeretnék de lehet hogy inkább 100-at) akkor már nyavalyog hogy túl sok.
(#) El_Pinyo válasza Attila86 hozzászólására (») Szept 11, 2011 / 1
 
Azt nem próbáltad, hogy az UDATA direktívához konkrétan megadod a RAM kezdőcímet? Két külön bankba helyezve a két táblát szerintem megoldaná a problémát.
Pl.:
  1. group1 UDATA 0x100
  2. minta_tabla res TablSize
  3.  
  4. group2 UDATA 0x200
  5. futes_tabla res 60
(#) Attila86 válasza El_Pinyo hozzászólására (») Szept 11, 2011 /
 
Ahha... végre! Erre voltam kíváncsi, köszönöm!
A "group1" és a "group2" ugye azért kell hogy bankváltáskor erre hivatkozhassak?

Még egy dolog:
Hogyan tudom értékekkel feltölteni a fűtés_tábla 50 (inkább 100) bájtját?
(#) El_Pinyo válasza Attila86 hozzászólására (») Szept 11, 2011 /
 
Idézet:
„A "group1" és a "group2" ugye azért kell hogy bankváltáskor erre hivatkozhassak?”

Azért kell leginkább, mert nem engedi meg az assembler, hogy több ugyanolyan nevű UDATA szekció legyen egy forrásfájlban, így el kell nevezni őket. Ha tömbként akarod kezelni a lefoglalt változókat, akkor az indirekt memória címzést javaslom. Ha "egyedülálló" változókként, akkor el kell nevezned a változókat és a RES direktívával foglalni nekik területet. Gondolom, neked tömbként kellene kezelni.
Tömbök esetén kiválóan használható az indirekt címzés. Ekkor a kiinduláskor van egy báziscímed, amit valamelyik FSR regiszterbe kell tölteni, ez a tömb 0. eleme (korábbi példánál maradva mondjuk a 0x100). Az indirekt címzést támogató utasításokkal lehet lépegetni a tömbben. Ilyenek a POSTINC, PREINC, POSTDEC, PLUSW típusú indirekt műveletek. A használatukat az adatlap tárgyalja. Nézd át ezeket az adatlapban, ha konkrét kérdésed merülne fel, akkor majd írj és megpróbálok/próbálunk segíteni.
(#) Attila86 válasza El_Pinyo hozzászólására (») Szept 11, 2011 /
 
Az FSR mutatókat már sokszor használtam, ez nem probléma. Már meg is oldottam a dolgot, köszönöm a segítséget!
(#) Soós Antal válasza trudnai hozzászólására (») Szept 12, 2011 /
 
Köszi akkor pontos veszem leveszem!

Most akkor ezt így irom!

#define x_allapot LATDbits.LATD0
#define x_kimenet TRISDbits.TRISD0 = 0
#define x_ki x_allapot=0
#define x_be x_allapot=1

Így csak egy helyen szerepel a LATDbits.LATD0 egyszerűbb módosítnai!

Ez így jó??
(#) Poostmaster hozzászólása Szept 12, 2011 /
 
Valaki nem tud nekem segíteni a #1060345 hsz ügyében?
(#) trudnai válasza Poostmaster hozzászólására (») Szept 13, 2011 /
 
(Maskor legyszi a valasz gombra kattints es akkor a valaszoloknak nem kell keresgelniuk a hozzaszolasod -- magyaran nem kell leirnod kezzel melyik szamu hozzaszolasodra varnal valaszt, hanem azt megkeresed es ott a valasz gombra kattintasz...)

Most en sem emlekszem pontosan, de a CBLOCK-bol vagy az EQU-val definialt valtozokbol nem tudja vissza szedni, hogy mi a valtozo es mi nem. Ugyanis ezek nem valtozok. Az EQU egy szamot rendel egy nevhez (ez a szam pedig a memoria cim lesz, de lehet ezt masra is hasznalni), a CBLOCK pedig konstans blokk (Constant BLOCK), amivel egy kezdo ertektol kiindulva lehet inkrementalisan ertekeket rendelni nevekhez -- megintcsak a memoria cimek lesznek ezek, de ezt a fordito nem tudhatja, mert CBLOCK-ot is lehet masra hasznalni csak ugy, mint az EQU-t...

Magam reszerol meg mindig a linkres scriptes (relokativ) programozasi modot javasolnam, ahol igazi valtozo definialasok vannak a RES kulcsszo segitsegevel, es ott mar mukodnie kell a watch ablaknak.
(#) Hp41C válasza Poostmaster hozzászólására (») Szept 13, 2011 /
 
Működik a Watch ablak a cblock .. endc között definiált és az EQU -val megadott szimbólumokra is abszolut fordítási modelben az MpLab Sim debuggerrel. A változó nevét kell a "Symbol Name" mezőbe írni / másolni.

Watch.JPG
    
(#) Poostmaster válasza Hp41C hozzászólására (») Szept 13, 2011 /
 
Köszönöm, időközben megtaláltam.
A lényeg, az abszolut fordítási mód.
Most viszont egy érdekes gondom akadt.
4x4-es billentyűzet kezelőt próbálok írni saját fejemből.
A programot mellékelem, mert elég hosszú.
Az érdekes az, hogy az első és a harmadik oszlopban található gombokra tökéletesen teszi a dolgát, kigyújtja a hozzájuk rendelt LED-et. A második oszlop gombjaira nem reagál (legalábbis nem látok semmit belőle). A negyedik oszlopnál pedig teljesen véletlenszerű a LED-ek bekapcsolása.
(#) trudnai válasza Poostmaster hozzászólására (») Szept 13, 2011 /
 
A globalis felhuzo ellenallas minek van bekapcsolva? A PORTB a sor vezerlo, nem? Ezekre a vonalakra ki kellene kapcsolni kulonben input modban ott neked fel fogja huzni a vonalakat amitol esetleg a billentyu nem jol mukodik... Szimulatoron mar jol mukodik a programod amugy?
(#) Hp41C válasza Poostmaster hozzászólására (») Szept 13, 2011 /
 
Szia!

A SCAN rutinban állítgatod a TRISB regisztert, de a PORTB nincs beállítva...

Az PORTB felhúzásokat a WPUB regiszterrel lehet vezérelni. A SUBLW utasítás előtt nem kell törölni a Z, C, DC bitet...
(#) Poostmaster válasza trudnai hozzászólására (») Szept 13, 2011 /
 
A PORTB a teljes billentyűzetet kezeli.
Úgy gondoltam, a globális felhúzó egyszerre kapcsolja az egészet, nem kell kínlódnom egyenként.
A működés szempontjából éppen az kell nekem, hogy minden bemenet, csak az épp vizsgált oszlop nem.
Lehet, hogy rosszul gondoltam, de úgy véltem, hogy a láb bemenetre kapcsolásával a felhúzó ellenállás automatikusan visszakapcsolódik, és 1-be rántja a bitet. Ezért nem állítgatom a portot.

A szimulátoros működtetés elég nehézkes, mert nem igazán vagyok képben a stimulusokkal. Annyit csináltam, hogy a lépésenkénti futtatáskor manuálisan váltom a lábakat, ahogyan lennie kéne. Így jól működik, csak éppen nem biztos, hogy úgy állnak be a lábat, ahogy én állítom kézzel.
Ha ebben tudnátok segíteni.
Azt az excelest már néztem, de nekem ide nem nagyon jó.
(#) Poostmaster válasza Poostmaster hozzászólására (») Szept 13, 2011 /
 
Még annyit tennék hozzá, hogy a PORTB egyes bitjeit állítom. Próbáltam egyébként a teljes portot állítani, de a szimulátorban semmilyen hatása nem volt.
(#) Hp41C válasza Poostmaster hozzászólására (») Szept 13, 2011 /
 
Szia!
Idézet:
„Azt az excelest már néztem, de nekem ide nem nagyon jó.”


Egyszerűen átvéve tényleg nem jó, hiszen 16F639 típusra van beállítva és egészen már lábakkal működik. Egy kicsit átírva már működik is...
(#) Poostmaster válasza Hp41C hozzászólására (») Szept 14, 2011 /
 
Köszönöm, de egy kis magyarázatra szorul a működése.
Tulajdonképpen mit csinál ez a kis billentyű?
Átadja a szimulátornak a lenyomott gomb értékét?
Mikor teszi? Ha lépésenként hajtom végre akkor mikor kell megnyomnom? Vagy a futtatást válasszam, és akkor figyeljem a változókat?
Következő: »»   1023 / 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