Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   578 / 1210
(#) don_peter válasza matheattila hozzászólására (») Okt 12, 2014 /
 
A mostani projektem egyik kezdő eleme lenne, hogy megállapítja mekkora memória van belepattintva a hardverbe.
A megalapított memóriától függően állítaná be a főprogramot amely majd a fő funkciókat fogja levezérelni.

Birs Alma: így már értem mire gondolsz, csak elég sok munka van vele.
Sok erőforrást igényel, hogy minden egyes byte-nál : olvasunk, mentünk, írunk, újraolvasunk, vizsgálunk/feltétel, majd vissza írjuk az elmentett adatot.
Aszt hittem van ennél gyorsabb és hatékonyabb megoldása.
Köszi az infót, ha más nem akkor ez lesz a nyerő...
(#) nedudgi válasza don_peter hozzászólására (») Okt 12, 2014 / 1
 
A későbbiek folyamán cserélgetni akarod azokat a csipeket?
Megoldás lehet, hogy első használatba vételkor "formattálod", az elején pár bájtot fix tartalommal, és a memória méretével megtöltesz.
Az ugye egyértelmű, hogy egy család tagjainak kezelése kompatibilis. A legnagyobb méret legmagasabb címét beolvasod, mented, majd beleírsz valamit, ellenőrzöd. Ha sikerült, akkor győztél. Visszaírhatod (ha kell) az eredeti tartalmat, és le van tudva a feladat. Ha nem, a következő méret(általában fele) következik, egészen addig, amíg elérsz a legkisebb méretig. Ha az sem jó, akkor hibás, vagy nincs memória bedugva.
(#) don_peter válasza nedudgi hozzászólására (») Okt 12, 2014 /
 
Húú de király vagy..
Nah ez a jó megoldás.
Isten vagy...

És igen, cserélgetem a memóriát.
Meg fogom osztani ezt a projektem is veletek, ha végre teljesen kész lesz.
Már majdnem kész van, csak pár alkatrészt kell vegyek és kész is.
Természetesen egy családból lesznek és leprogramozom az összes végcímet és azokkal fog azonosítani.
Köszi mindenkinek...
(#) brato válasza don_peter hozzászólására (») Okt 12, 2014 /
 
Esetleg ezekben a memóriákban nincs azonosító lekérhetőség mint a 27Cxx típusokban?
(#) don_peter válasza brato hozzászólására (») Okt 12, 2014 /
 
Ez is nagyon jó ötlet, de nem tudom, hogy van e a 25LCxxx családban ilyen.
Ha lenne akkor az megoldaná a dolgot.
Adatlapján nem látok ilyet.
(#) Hp41C válasza don_peter hozzászólására (») Okt 12, 2014 /
 
Egy apró bökkenő azért még akad:
- Legyen egy típus 2x kapacitásssal (azaz log2(x) + 1 cím bitet kezel) és egy másik x kapacitással (azaz log2(x) cím bitet kezel). A legnagyobb cím (x-1). Ha a nagyobbat teszteled a legfelső memória rekesszel, az írható és olvasható, azaz rendben. Ha a kisebbet teszteled, ez a cím írható és az utoljára beírt adat vissza is olvasható, a programod a nagynak fogja hinni. A memória az (x-1) cím legfelső bitjét nem kezeli, így a saját kapacitácának megfelelő címet fogja átírni ill. a tartalmát visszaadni.
Nem egyszerűbb egy típusazonosítóval rendelkező memóriát (családot) használni? SPI memóriáknál szabványos módon kiolvasható: (0x90 vagy 0xAB parancskód). Egyébként is meg kell még tudni az egy "menetben" írható byte -os számát is. Nem tudom mekkora kapacitásra gondoltál. pl: SST25VF512 ... SST25VF080
(#) Birs Alma válasza Hp41C hozzászólására (») Okt 12, 2014 /
 
Á, dehogy vitatkozom én bárkivel is, Veled pedig főleg nem.

Ilyen ez a fordító, ez van, ha tetszik, ha nem. Sok vitatkozni való ezen nincs. Max azt írhatom, hogy kár, hogy így van. Oszt annyi.

ASM kódot egyébként írtam úgy, hogy az eljárások függvények egy külön implementált stack-en várták a paramétereiket, és ott is adták vissza a visszatérési értéket. A függvények, eljárások pedig szintén ezen a stack-en hozták létre a lokális változóikat. Ha a stack kezelést sikerül megírni, az stabilan működik, akkor ez a megoldás nagyon leegyszerűsíti a paraméterátadást, a memória gazdálkodást. De ezt nem én találtam. Úgy tanították, hogy ez így kell csinálni.

De nem csak a paraméterátadás, lokális változók kezelése amikor a fordítónak stack-et érdemes használnia mindenek felett. Szívesen megnéznék pl. egy olyan kódot, amelyik zárójelezett matematikai kifejezéseket dolgoz fel (pl. csak átírja lengyel formára) stack nélkül. Belehülyülsz, ha megpróbálod Míg stack-el, majdhogynem triviális.

Persze, minthogy egy általad is javasolt chip, ahol a nem ilyen sekély, pl. a 188F4520 v.s. 16F877 mindössze 100-200 forinttal kerül többe...valóban nem sok érelme van, hogy az ember a fejét törje.

Semmi kedvem C fordítót írni, de a téma után érdeklődőknek sok szeretettel ajánlom az általam igen nagyra becsült Csörnyei tanár úr ide vágó munkáit: Bevezetés a fordítóprogramok elméletébe, I. II.; Formális nyelvek és fordítóprogramok; Fordítási algoritmusok stb. De persze az ezekben leírtak mind alapvetően Neumann elvre szólnak, az is igaz!
(#) Birs Alma válasza matheattila hozzászólására (») Okt 12, 2014 / 1
 
Hát az a korlát azért nem egy, vagy kettő, lehet az eepromot éppen elégszer írni ahhoz, hogy ez a kód lefusson. De ha nagyon kell itta megoldás erre is:

Elgondolod az elméleti maximálsi memóriaméretet. Mondjuk azt mondod, hogy 64K-nál biztosan nem nagyobb a memória. Azután a legnagyobb címtől (itt 65535) haladsz lefelé! Az első eset, a mikor vissza tudod olvasni a beírt kódot, az a címezhető terület legutolsó rekesze lesz. Így csak ezt az egye rekeszt módosítottad. Mivel a programod meg jó eséllyel alulról tölti a a memóriát, éppen ezt a rekeszt használja legritkábban.
(#) don_peter válasza Hp41C hozzászólására (») Okt 12, 2014 /
 
Arra gondoltam, hogy a program elején elkezdem visszafelé ellenőrizni minden már létező vagy is elérhető memória utolsó címét, hogy oda tudok e írni illetve tudok e onnan olvasni.
Úgy néztem, 25LCxxx családnál 1,2,4,8,16,32,64,128,256,512,1024kbit-es memóriák léteznek.
Csak duplázza kell a memória címet léptetnem vagy felezve...
Elvileg ez működhet, szóval ki fogom próbálni...
Ha van jobb ötlet akkor várom.

brato bejegyzése alapján ha létezik ilyen aszosító lekérdezés az még jó lehet... , de nem találtam ilyet az adatlapban. (25LCxxx adatlapját nézegettem)
(#) Hp41C válasza don_peter hozzászólására (») Okt 12, 2014 /
 
A parancs paramétereként eltérő számú címbitet kezelnek:
25LC010 és 25LC020 - 8 bit cím, 25LC040 - 8 bit cím (de a parancskódban van az A8), 25LC080, 25LC160, 25LC320, 25LC160, 25LC256, 25LC512 - 16 bit cím, 25LC1024 24 bit cím.
(#) Pali79 hozzászólása Okt 12, 2014 /
 
Miért van az, hogy MPlab-nál elindítom a fordítást és csak ezt írja ki a Build ablakban:

Release build of project `D:\PIC\CCP1_877A.mcp' started.
Language tool versions: MPASMWIN.exe v5.30.01, mplink.exe v4.30.01
Sun Oct 12 21:24:46 2014
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "D:\PIC\CCP1_877A.mcs".
Clean: Done.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F877A "CCP_1.2.asm" /l"CCP_1.2.lst" /e"CCP_1.2.err" /o"CCP_1.2.o"

és itt megáll a történet, nem csinál semmit.
A hozzászólás módosítva: Okt 12, 2014
(#) don_peter válasza Hp41C hozzászólására (») Okt 12, 2014 /
 
Igen erre gondoltam is, de azt hittem elkerülhető lesz a léptetés miatt.
Gondolok itt arra, hogy amikor léptetek duplázódik mindig a léptető cím ezzel midig előre tolva a címzés hosszúságát.
Tehát előröl haladva az 1,2,4 kbite-es memóriáknál 8bites címmel kérdeznék be, a 16,32,64,128,512-eseknél 16bites címmel, és a az 1024-esnél pedig a 24bites címzéssel.
Erre ugyan kell majd egy újabb kis feltétel, de ha az elejéről indulok akkor megoldható lenne.
Vagy marad az eredeti koncesszió, hogy nem lesz a hardvert ennyire rugalmas és csak 1 memóriát fog ismerni vagy a választott egynek a memória címzésével egyenlő memóriákat beleteszem fixen és akkor azok közül lehet majd választani.
Agyalok még rajta. Köszi a segítséget..
(#) Birs Alma válasza Birs Alma hozzászólására (») Okt 13, 2014 /
 

Fú, az előző bejegyzésem tele van helyesírási hibával! Bocsánatot kérek! Figyelmetlen voltam. Mentségül szolgáljon, hogy asszony nyaggatott, induljunk már vásárolni. Bocs még egyszer!!
(#) vicsys válasza Birs Alma hozzászólására (») Okt 13, 2014 /
 
Ne hülyéskedj! Nekem fel sem tűnt!
(#) brato válasza don_peter hozzászólására (») Okt 13, 2014 /
 
Csak egy adatlapot néztem meg, de volt ahol írták, hogy olvasáskor az utolsó bájt után átfordul 0x000 bájtra , ezt talán ki lehetne használni ha minden típusban így van.
(#) matheattila válasza don_peter hozzászólására (») Okt 13, 2014 / 1
 
Vess egy pillantást erre a fórumra is
Ide jön a link felirata!
A hozzászólás módosítva: Okt 13, 2014
(#) Kovabe hozzászólása Okt 13, 2014 /
 
Sziasztok
Egy 18F14K50-el küzdök de valamiért az RA0 és azRA1-es lábon alapból feszültséget mérek, ez normális? Vagy csak a porogramot szurtam el valahol?
Flowcode-ban írogatok.
Vagy itt szurok el valamit?
Idézet:
„//C kód:
osccon = 0x70;”
A hozzászólás módosítva: Okt 13, 2014

18F14K50.c
    
(#) icserny válasza Kovabe hozzászólására (») Okt 13, 2014 /
 
Az RA0 és RA1 kivezetések az USB port adatvonalai (D+ és D-). Ezeket csak korlátozottan lehet más célra használni (az USB illesztő letiltása után digitális bemenetek lehetnek, de 3,6V a maximális megengedett feszültség).
(#) don_peter válasza matheattila hozzászólására (») Okt 13, 2014 /
 
nedudgi és Birs Alma is ezt javasolta..
Köszi azért..
(#) Kovabe válasza icserny hozzászólására (») Okt 14, 2014 /
 
Igen ezzel tisztába vagyok csak a kikapcsolás nem stimmel számomra hogy milyen C kód kell hozzá. Már a leírásban is megtalátam de C ismeret hiányában nem tudom mi a parancs.
(#) Hp41C válasza Kovabe hozzászólására (») Okt 14, 2014 /
 
UCONbits.USBEN = 0;
UCFGbits.UPUEN = 0;
(#) Hp41C válasza Pali79 hozzászólására (») Okt 14, 2014 /
 
T0ltsd fel a csonagot.
(#) Pali79 válasza Hp41C hozzászólására (») Okt 14, 2014 /
 
Azt hiszem megvan minden része.
(#) Hp41C válasza Pali79 hozzászólására (») Okt 14, 2014 /
 
Miért nem csinálsz neki egy projectet? MpLab 8.90 alatt fordul.

CCP1.ZIP
    
(#) 06smici hozzászólása Okt 14, 2014 /
 
Sziasztok.

Némi segítséget szeretnék kérni. PIC-kel kell olyat csináljak, hogy a PWM jelnek egyik gomb növeli a frekvenciáját, másik pedig a kitöltési tényezőt. Adatlap szerint valamennyire sikerült összehoznom a pwm-et, de nem igazán sikerült megértenem pontosan regiszterek funkcióit. Azt jól sikerült megértenem hogy a PR2-esel tudom a frekvenciát állítani és a CCPR1L-el a kitöltési tényezőt?

Eddig ennyit írtam. (Ami a tolt címke után van az jó eséllyel átkrül a timer majd megszakításába, amint rájövök melyik tartotik a pwm-hez)
  1. list p=18f452
  2. #include "p18f452.inc"
  3.  
  4. frek    equ 0x60
  5. duty    equ 0x61
  6.  
  7. Rst_vect
  8.         org 0x00
  9.         goto Start
  10.  
  11.  
  12. Start
  13.         org 0x80
  14.  
  15. ;******************** init ************************
  16.         bcf TRISC,1             ; kimenet beállítása
  17.         bsf TRISB,0             ; bemenetek beállítása
  18.         bsf TRISA,4
  19.  
  20.         movlw 0x01
  21.         movwf frek
  22.         movwf duty
  23.  
  24.         clrf CCP1CON
  25.         bsf CCP1CON,CCP3M       ;PWM mód beállítása
  26.         bsf CCP1CON,CCP2M
  27.        
  28.         movf CCPR1L,duty        ;kitöltési tényező 0%
  29.  
  30.         movf PR2,frek           ;periódusidő
  31.  
  32.         clrf T2CON
  33.         clrf TMR2
  34.         bsf T2CON,TMR2ON
  35.        
  36.  
  37. ;******************** main *************************
  38. Main
  39.         btfss PORTA,4           ;frekvencia állítása
  40.         incf frek
  41.         btfsc STATUS,Z
  42.         goto next
  43.         movlw 0x01
  44.         movwf frek
  45. next   
  46.         btfss PORTB,0           ;kitöltési tényező állítása
  47.         incf duty
  48.         btfsc STATUS,Z
  49.         goto tolt
  50.         movlw 0x01
  51.         movwf duty
  52. tolt
  53.         movf CCPR1L,duty
  54.         movf PR2,frek  
  55.         goto Main
  56.  
  57.  
  58. stop
  59.         goto stop
  60.  
  61. end
(#) Pali79 válasza Hp41C hozzászólására (») Okt 14, 2014 /
 
Létrehoztam a projektet, de úgy sem csinált semmit. Letöltöttem az MPlab V8.92-öt, ezzel most megy. Köszi!
(#) Pali79 válasza 06smici hozzászólására (») Okt 14, 2014 /
 
Sajnos nincs időm most jobban belenézni az adatlapba és a programba sem, de jól érted a PR2 és a CCPR1L részét. Annyit tennék hozzá, hogy a freki függ a pic frekijétől, tehát az alkalmazott kvarctól. Illetve nem látom a config részt a program elején.
(#) usane hozzászólása Okt 14, 2014 /
 
Van a MC-nek i2c-s 8 bites meghajtója? 7-segmenses LED-et akarok meghajtani vele. Én csak NXp meg TI csipet találtam, de azokat sem tudom hol lehet beszerezni.
Vagy egyéb gyártó is megfelel ha van.
A hozzászólás módosítva: Okt 14, 2014
(#) vilmosd válasza usane hozzászólására (») Okt 14, 2014 /
 
(#) Kovabe válasza Hp41C hozzászólására (») Okt 14, 2014 /
 
Köszönöm de sajnos a flow nem tudja értelmezni.
Következő: »»   578 / 1210
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