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   294 / 1210
(#) Balagemann2031 válasza icserny hozzászólására (») Aug 13, 2012 /
 
Köszönöm, ezt nem tudtam hogy üres definíciónak is van értelme Egyébként valamiért a megszakítással kezdi a program a futást Kérhetnék még egy kis segítséget abban hogy magát a megszakítás kiszolgáló ruint hogyan kell elhelyezni? Valamiért így nem jó...
  1. ;gyakorlati program
  2. #include <p18_all.inc>
  3.  
  4.  
  5. ;--- Változók elhelyzése
  6.          UDATA_ACS
  7. VAR1RES1
  8. VAR2RES1
  9. VAR3RES1
  10. AKKU_TEMPRES1
  11. STATUS_TEMPRES1
  12. BSR_TEMPRES1
  13.  
  14.  
  15. #DEFINEUSE_INTERRUPT1
  16.  
  17.  
  18.  
  19. ORG0X0008
  20. hi_isr
  21.  MOVWF     AKKU_TEMP                      
  22.     MOVFF     STATUS, STATUS_TEMP    
  23.     MOVFF     BSR, BSR_TEMP  
  24. ISR
  25. BCF   PIR1,TMR1IF  
  26. MOVLWB'11111111'
  27. XORWFLATB
  28. LOAD
  29. MOVFF     BSR_TEMP, BSR
  30.     MOVF     AKKU_TEMP, W
  31.     MOVFF     STATUS_TEMP,STATUS  
  32. RETFIE  
  33.  
  34. PGMCODE
  35. GOTOSTART
(#) icserny válasza Balagemann2031 hozzászólására (») Aug 13, 2012 / 1
 
A #define USE_INTERRUPT az #include előtt legyen, hiszen abban vizsgáljuk, hogy definiálva van-e! A szóközök se hiányozzanak!

A hi_isr a PGM CODE szekcióban legyen (ahol a főprogram is), ne írj elé ORG direktívát!

A GOTO START utasításnak sem látom értelmét, az már a #include direktívával becsatolt részben benne van.
(#) Balagemann2031 válasza icserny hozzászólására (») Aug 13, 2012 /
 
Kijavítottam amiket kellett, de a fordító hibát jelez, a hi_isr re ismétldő cimke hibát ír.. kimaradt még valami? Eddig itt tartok.
  1. ;gyakorlati program
  2. #defineUSE_INTERRUPT
  3. #include <p18_all.inc>
  4.  
  5. ;--- Változók elhelyzése
  6.          UDATA_ACS
  7. VAR1RES1
  8. VAR2RES1
  9. VAR3RES1
  10. AKKU_TEMPRES1
  11. STATUS_TEMPRES1
  12. BSR_TEMPRES1
  13.  
  14.  
  15.  
  16. PGMCODE
  17.  
  18.  
  19. hi_isr
  20. MOVWF     AKKU_TEMP                      
  21.     MOVFF     STATUS, STATUS_TEMP    
  22.     MOVFF     BSR, BSR_TEMP  
  23. ISR
  24. BCF   PIR1,TMR1IF  
  25. MOVLWB'11111111'
  26. XORWFLATB
  27. LOAD
  28. MOVFF    BSR_TEMP, BSR
  29.     MOVF     AKKU_TEMP, W
  30.     MOVFF     STATUS_TEMP,STATUS  
  31. RETFIE  
  32.  
  33.  
  34.    
  35. START
  36. MOVLWB'00000011'
  37. MOVWFTRISC
  38. CLRFLATC
(#) icserny válasza Balagemann2031 hozzászólására (») Aug 13, 2012 / 1
 
Idézet:
„a fordító hibát jelez, a hi_isr re ismétldő cimke hibát ír..”
Ideiglenes orvoslásul kommenteld ki az "extern hi_isr" sort a p18_all.inc állományban. Erre akkor lenne szükség, ha külön állományban (pontosabban külön fordítási egységben) lenne a hi_isr címke.
(#) trudnai válasza Balagemann2031 hozzászólására (») Aug 13, 2012 / 1
 
Az, hogy a #define es a USE_INTERRUPT kozott nincs szunet, valamint, hogy az utasitasaid tobbsege a sor legelejen kezdodnek az csak annak koszonheto, hogy TAB karaktert hasznaltal esazt nem jol jelenteti meg a HE?

Amugy a define utan nem kellene egy "1" -es?

Masik: Nem lehet, hogy a p18_all.inc hasznalja azt a hi_isr cimket?
(#) mrobi hozzászólása Aug 14, 2012 /
 
Sziasztok.
12F675-re próbálok szoftveres pwm-et készíteni. Sikerült is. Csak sajnos lassúnak tűnik. RGB LED-eket a akarok vezérelni. HP41C megoldását használom. Timer0 megszakítást használok. Ha a növekményt 1-re állítom akkor villog a led. Ezt azzal próbáltam orvosolni, hogy mielőtt kilépnék a megszakításból akkor a TMR0 regisztert átállítom 160-ra. Így nem villog. Ez mennyire szép megoldás? Van esetleg ennél egyszerűbb?
(#) Hp41C válasza mrobi hozzászólására (») Aug 14, 2012 /
 
Szia!

Teljesen jó a megoldásod. Más kontrollert választva, timer2 -t felhasználval könnyebb: 12F683, 12F1822, 12F1823, 12F1840.
Ez a PWM megvalósítási mód nem az én ötletem...
(#) mrobi válasza Hp41C hozzászólására (») Aug 14, 2012 /
 
Köszi. Tudom hogy másik kontrollerrel könnyebben meg lehet oldani, de sajnos csak ez van kéznél.
Akkor úgy mondom hogy azt használom amit Te javasoltál.

A másik kérdés. Keresgéltem neten pic-es rgb vezérlőket. A forráskódokban láttam eléggé sok helyen, hogy egy DT paranccsal táblázat szerűen voltak megadva a színek kitöltési tényezője. Keresgéltem leírást a DT parancsról de nem nagyon találtam. Tud ebben nekem segíteni valaki?
(#) kissi válasza mrobi hozzászólására (») Aug 14, 2012 /
 
Nézd meg az MPLAB editor/asm helpjében !

Steve

u.i. Ránéztem, az asm részben van !
(#) mrobi válasza kissi hozzászólására (») Aug 14, 2012 /
 
Köszi. Megtaláltam. Ezzel nagyon jókat el lehet majd játszani.
(#) icserny válasza trudnai hozzászólására (») Aug 14, 2012 /
 
Idézet:
„Nem lehet, hogy a p18_all.inc hasznalja azt a hi_isr cimket?”
Nem használja, hanem externalként deklarálja. Ez mnost gondot okozott, mert egy fordítási egységben szerepelt az external és a lokális definiíció.
(#) kissi válasza mrobi hozzászólására (») Aug 14, 2012 /
 
Szia!

Ha a szimulátorral ellenőrzöd, hogy mit csinál, akkor nem sokáig kell "játszani", lehet vele "melózni" is !

Steve
(#) Balagemann2031 válasza icserny hozzászólására (») Aug 14, 2012 /
 
Az extern hi és lo isr eket kikommenteltem, így lefordul, viszont valamiért fut rendesen a progi az mplab simben nem látom a zöld nyilacskát, mikor léptetném... Csatoltam a jelenlegi állást, szerintem valami apróság lehet amit nem veszek észre...
(#) Balagemann2031 válasza trudnai hozzászólására (») Aug 14, 2012 /
 
Szia, a HE rosszul kezeli a TAB-okat. a projektben ezekkel nincs gond, az definíció után azért nem írtam egyest, mert Icserny írta hogy üresen is lehet definiálni, és tényleg. A másik cimkét pedig pedig valóban a p18_all.inc állomány tartalmazta... Köszönöm a javaslatokat
(#) Balagemann2031 válasza Balagemann2031 hozzászólására (») Aug 14, 2012 /
 
Kiderült, hogy az utolsó verzió működik a valóságban csak szimulátorban hibát jelez ezt írja: CORE-E0001: Stack over flow error occurred from instruction at 0x001060 Köszönöm szépen az eddigi segítségeket!
(#) trudnai válasza Balagemann2031 hozzászólására (») Aug 15, 2012 /
 
A TAB problemat beirtam a fejlesztesi otletekbe, remelem javitjak majd.

Igen, ha nem #if -el, hanem #ifdef -el van lekerdezve akkor nem kell, hogy erteke legyen, csak, hogy definialva legyen.
(#) Danivagyok hozzászólása Aug 15, 2012 /
 
Sziasztok!
Lenne egy egyszerű kérdésem, amire sehol nem sikerült tutorialt vagy bármit találni a neten..
PicKit2-vel 16f690 internal EEPROM-ját hogyan tudom programozni? Ha jól sejtem elég lenne a hex fileban egy eeprom részbe beleírni, hogy mit is szeretnék, de sehol nem találtam erre egy konkrét példát :/
Előre is köszi
(#) Hp41C válasza Danivagyok hozzászólására (») Aug 15, 2012 /
 
Szia!

Indítsd el a PICKit2 programját, csatlakoztasd a 16F690 -et, olvasd ki. A program memória fölött a bal oldalon levő négyzetből vedd ki a pipát. Az adat EEProm területét kézzel is át lehet írni az ablakában. A módosítás után kiadott Write már csak az adat területet írja át.
(#) Danivagyok válasza Hp41C hozzászólására (») Aug 15, 2012 /
 
Szia!
Igen, ez így működik nagyon jól, csak igazából nekem pont az lenne a lényeg, hogy fájlból programozza
Mindenestre köszi
(#) Hp41C válasza Danivagyok hozzászólására (») Aug 15, 2012 /
 
A propeller óra topikba már feltöltöttem egyszer a 16F628(A) -hoz. A 16F690 -hez is jó lesz (processzor megadását át kell írni). MpLab asm programjával kell lefordítani.

Szoveg.asm
    
(#) n_yálastrubadúr hozzászólása Aug 16, 2012 /
 
Sziasztok!

Hogyan lehetséges egy frekvencia mérő építése, ami 40Mhz-ig is mér, aminek 4Mhz-es oszcillátora van? A TMR0 -t léptetik kívülről és abból számol a program? Pl a TMR0 külső forrását a saját órajele felett működtetthetem, és rendesen kikalkulálhatom a saját órajeléből?
(#) zenetom válasza n_yálastrubadúr hozzászólására (») Aug 16, 2012 /
 
Szia!
Pl. frekiosztók (számlálók) használatával.
(#) n_yálastrubadúr válasza zenetom hozzászólására (») Aug 16, 2012 /
 
Nekem egy 16f84- el épített Lcd-s van. Azért kérdezem, mert előtte nincsen semmilyen számláló csak egy nand schmitt tigger.
(#) p_istvan válasza n_yálastrubadúr hozzászólására (») Aug 16, 2012 /
 
Szervusz!
A TMR0 előosztója aszinkron módban mehet nagyobb frekvenciáról is mint a PIC órajele, csak maga a TMR0 nem (50 Mhz-ig általában elmennek)
(#) kissi válasza p_istvan hozzászólására (») Aug 16, 2012 /
 
Szia!

Én nem tudok róla, hogy az órajelhez lenne kötve a sebessége, sőt használtam is nagyobb frekvencián és működött... Szerintem csak egy számláló, amit lehet szinkronizálni az órajelhez és működik a rendszer órajelénél nagyobb frekvencián is ( az 50 MHz viszont emlékeim szerint jó, most nem néztem az adatlapot ).

Steve
(#) p_istvan válasza kissi hozzászólására (») Aug 16, 2012 /
 
Szervusz!
Azért vess egy pillantást arra az adatlapra: 16F84
A TMR0 és annak az előosztója nem ugyanaz mint az előbb utaltam is rá. A TMR0 mindenképp szinkronizálva van az órajelhez, az előosztó nélkül bemenő jel minimális periódusideje = Tcy+40ns.
Előosztó nélkül az utasításfrekvenciánál (órafrekvencia/4) nagyobb frekvencia esetén fog ugyan számolni a TMR0, de kiszámíthatatlan lesz az eredmény.
Te valószínüleg az előosztóval használtad... vagy a microchip következetesen hibás adatlapokat publikál, vagy azt sem tudja mit gyárt.
István

pic16F84.png
    
(#) n_yálastrubadúr válasza p_istvan hozzászólására (») Aug 16, 2012 /
 
Akkor ha jól értem, a pic belső órajelét figyelve mondjuk 5us -onként megnézem mennyit növekedett a tmr0? Ami az 5us alatt lehet akár pl 200 is?
(#) n_yálastrubadúr hozzászólása Aug 16, 2012 /
 
De az alább hozzászólásod viszont?? A szerint ha nem lassabb pl 4Mhz-es rendszer frekinél 1Mhz-nél akkor pontatlan és használhatatlan? Akkor ezt hogyan oldják meg?
(#) kissi válasza p_istvan hozzászólására (») Aug 16, 2012 /
 
Szia!

Igazad van !
16F877-el csináltam és ezek szerint a TMR1-et használhattam, mert ott elkerülhető ez a szinkronozás, ha jól láttam ( de működött ) ...

Steve
(#) p_istvan válasza n_yálastrubadúr hozzászólására (») Aug 16, 2012 /
 
Egyszerűbb esetben több méréshatár (automata) van és csak a nagyobb frekvenciáknál mérnek előosztóval, általában egyszerű kvarccal amúgy is csak 4-5 digit a pontosság.
Az előosztó állása közvetlenül ugyan nem olvasható ki, de szükség esetén megoldható pl.: Bővebben: Link ebben a kapcsolásban a 74hc132-vel történik bemenet kapuzása, a mérés végén a bemenetet letiltja a szoftver, ekkor az előosztó 0 - 255 (256-os előosztásnál) között bármilyen értéket felvehet, de nem tudjuk direkt kiolvasni ezért ekkora lenne a pontatlanság, a bemenő impulzusok száma pedig N*256 lesz, ha 1 másodpercig mérünk, akkor a frekvencia is ez lesz. Ennél a megoldásnál trükk az, hogy a mérés végén a letiltott bemenet helyett, maga a PIC billegteti az előosztó bemenetét amíg az nullára nem vált, léptetve egyet a TMR0-t (a TMR0 változása már figyelhető). ebből kalkulálható hol állt az előosztó, és pontosan megmondható hány bemenőimpulzusunk (X) volt a kapuidő alatt: N*256+X
Remélem érthető voltam.
Következő: »»   294 / 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