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   1121 / 1203
(#) menyus válasza kissi hozzászólására (») Ápr 27, 2020 / 1
 
Értem, köszönöm. Valóban, a megszakítás jöhet random bármikor, és a lényeges regiszterek értékeit le kell menteni, majd lekezelni a magszakítási eseményt és ennek végeztével visszaállítani az eredeti állapotot, hiszen a retfie után oda tér vissza a program ahonnét a megszakításkérelem érkezett. Kezdem érteni.. Köszi.
(#) icserny válasza Szemmy hozzászólására (») Ápr 28, 2020 /
 
A goto $+1, vagy goto $+2 helyett használj címkéket, hogy a program tényleg oda ugorjon, ahová szeretnéd, és nem máshová!
(#) ktamas66 válasza Szemmy hozzászólására (») Ápr 28, 2020 /
 
A +2 helyett +4 kell, a +1 helyett +2.
(#) Hp41C válasza Szemmy hozzászólására (») Ápr 28, 2020 /
 
Csak azt nem értem, miért nem használjátok az MpLab beépített szimulátorát (avagy a nyomkövetést a PICkit2 -val vagy PICkit3 -mal)...
  1. Delay
  2.                         ;4993 cycles
  3.         movlw   0xE6
  4.         movwf   d1
  5.         movlw   0x04
  6.         movwf   d2
  7. Delay_0
  8.         decfsz  d1, f
  9.         GOTO    $+2
  10.         decfsz  d2, f
  11.         GOTO    Delay_0
  12.  
  13.                         ;3 cycles
  14.         GOTO    $+2
  15.         nop

Ha megnéznéd a Delay rutinodat a szimulátorral, láthatnád, hogy 36 utasítás ciklus alatt lefut. Miért ilyen gyosr, ha a kommentben 4993 ciklus szerepel?

Az első goto $+2 utasítás gyanús. Hova is ugrik? A következő utasításra. Hmmm... Akkor a ciklus négyszer fut le: 4 * (1 + 2 + 1 + 2) + 4 + 2 + 1 =33. Erre a helyre nem egy goto Delay_0 utasítás kellene?

2. teszt:
Delay_0 utasítással a Delay_0 eljárás már 3014 utasítás ciklus alatt fut le.

3. teszt:
  1. Delay
  2.                         ;4993 cycles
  3.         movlw   0x22
  4.         movwf   d1
  5.         movlw   0xFB
  6.         movwf   d2
  7. Delay_0
  8.         infsnz  d1, f
  9.         incfsz  d2, f
  10.         bra             Delay_0
  11.  
  12.                         ;3 cycles
  13.         bra             $+2
  14.         nop
  15.  
  16.                         ;4 cycles (including call)
  17.         return

Ez a rutin a call és a return -t nem számítva 4990 utasítás ciklus alatt fut le.
(#) menyus hozzászólása Ápr 28, 2020 /
 
Sziasztok, kérdezném az MPLAB (8.4 tehát nem az új X verziós) beállítható valahogy úgy hogy az asm kódban a programsorok sorszámát megjelenítse? Valahogy úgy, ahogy itt a fórum motor beszámozza a sorokat.
(#) spgabor hozzászólása Ápr 28, 2020 /
 
Sziasztok!

Több sebből vérző programomban szeretnék segítséget kérni. Pár éve volt egy PIC-es hobbiprojektem, de teljesen elfelejtettem, így most sok szürke folt van, van amibe bele is keveredtem.
A problémáim a lenti kóddal a következők:
-Watchdog-ot a configban letiltom, mégis időnként újraindítja a PIC-et, mintha aktív lenne
-Belső oszcillátort szeretnék használni, de ez már teljesen sötét folt és nem bírok rájönni a beállítás logikájára. Egy kis segítséget szeretnék kérni.
-Az utolsó problémám a ki és bemenetek. Kapcsolási rajzon látható módon GP2 kimenet lenne, GP1, GP4 és GP5 viszont bemenetek.
-Lehet a rajzomban is van hiba, ami miatt nem jó a működés

A felhasználás a következő lenne. 20 másodperc késleltetéssel az GP1 gomb megnyomására a GP2 láb kimenet aktívra váltva kapcsolná a fogyasztót, ami a rajzon most egy motor a kapcsolási rajzon.

Nagyon megköszönném, ha tudnátok segíteni, vagy az elkövetett hibákat kifejtenétek, mert elégé bel vagyok keveredve, pedig nem kellene túl bonyolultnak lennie.

A kódom a következő:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pic12f683.h>
  4. #include <htc.h>
  5.  
  6. __CONFIG(FOSC_INTOSCIO, WDTE_OFF, PWRTE_OFF, MCLRE_ON, CP_OFF, CPD_OFF, BOREN_OFF, IESO_OFF, FCMEN_OFF);
  7.  
  8. int csengettek = 0;
  9. int csengetes_ido = 20;
  10. int szamlalo = 0;
  11.  
  12. #define GOMB_IDO_NOVEL GP4
  13. #define GOMB_IDO_CSOKKENT GP5
  14. #define CSENGETES GP1
  15. #define KIMENET GP2
  16.  
  17. static void interrupt isr(void){
  18.     szamlalo++;
  19.     csengettek = 0;
  20.     if(szamlalo == csengetes_ido){
  21.         csengettek = 0;
  22.         szamlalo = 0;
  23.         KIMENET = 0;
  24.     }
  25. }
  26.  
  27. int main() {
  28.     TRISIO=0b00110010; //GP1, GP4, GP5 inputok
  29.     GPIO=0x00; // nullazza a labakat
  30.     OSCCON = 0b01100000;  // 4MHz
  31.     CCP1CON = 0x0F;
  32.     TMR2IF = 0; //Timer2 letiltva
  33.     KIMENET = 0;
  34.     while(1){
  35.         if(!GOMB_IDO_NOVEL){
  36.             while(!GOMB_IDO_NOVEL){
  37.                 csengetes_ido++;
  38.             }
  39.         }
  40.  
  41.         if(!GOMB_IDO_CSOKKENT){
  42.             while(!GOMB_IDO_CSOKKENT){
  43.                 csengetes_ido--;
  44.             }
  45.         }
  46.  
  47.         if(!CSENGETES){
  48.             while(!CSENGETES){
  49.                 if(csengettek == 0){
  50.                     //csengetes kezdete
  51.                     csengettek = 1;
  52.                     KIMENET = 1;
  53.                     TMR2IF = 1;
  54.                 }
  55.             }
  56.         }
  57.     }
  58.     return (EXIT_SUCCESS);
  59. }


Köszi és üdv:
spgabor
(#) usane válasza spgabor hozzászólására (») Ápr 28, 2020 / 1
 
A beállítás ránézésre jónak néz ki. A configban a belső oscillátor beállítva, az OSCON pedig 4MHz-re állítva. A wdt valóban kikapcsolva, MCLR felhúzva, de az ujrainduást okozhatja stack overfllow vagy fogyasztó rúgása a tápra főleg induktív fogyasztóknál, (csengő induktív, hacsak nem dallamcsengő). C4 vagy C5 a PIC lábánál van , feltételezem. Ha a táp a hiba, dobhatsz nagyobb puffert, meg visszáram diódát a csengőre, valamint pl. a MCLR-t is kikapcsolhatod. A program részét még nem néztem.
A hozzászólás módosítva: Ápr 28, 2020
(#) spgabor válasza usane hozzászólására (») Ápr 28, 2020 /
 
Szia, köszönöm a gyors átnézést. A C5 lesz a kész panelen a tápláb mellett közvetlenül. A fogyasztó az éles üzemben egy régi szétszerelt mp3 lejátszó lesz memóriakártyával, ami talán nem vesz fel nagy áramot induláskor, de nem mértem pontosan az áramfelvételét.
(#) Hp41C válasza menyus hozzászólására (») Ápr 28, 2020 / 1
 
Ha jól emlékszem nem lehet sorszámot megjeleníteni a sor elején.
A statusz sor közepén kiírja az aktuális sor számát Ln:xxx
Használhatsz külső szerkesztó programot is.
Miért ezt a verziót használod? A 8.92 az utolsó MpLab8. Az utolsó jól használható a 8.88 volt. A 8.92 egy kis csalással visszahozható erre a szintre...
A hozzászólás módosítva: Ápr 28, 2020
(#) fsub válasza menyus hozzászólására (») Ápr 28, 2020 / 1
 
A 8.92 változat alatt (feltételezem, hogy a 8.4-nél is ugyanígy kell) a kódszerkesztő ablakban jobb egérgomb nyomás -> Properties -> File type fül -> Line numbers-t bejelölni.
(#) usane válasza spgabor hozzászólására (») Ápr 28, 2020 /
 
További gyors ránézésre, hol az interrupt beállítása? A rutin megvan de az INTCON nincs beállítva.
A hozzászólás módosítva: Ápr 28, 2020
(#) fsub válasza Hp41C hozzászólására (») Ápr 28, 2020 /
 
Idézet:
„Az utolsó jól használható a 8.88 volt. A 8.92 egy kis csalással visszahozható erre a szintre...”


Nem nagyon használom már az MPLAB IDE 8-at, de leírnád ezt hogyan kell? Hátha még valamikor szükségem lenne rá.
(#) usane válasza spgabor hozzászólására (») Ápr 28, 2020 /
 
Bemeneteken analógot kikapcsolni. (ANSEL = 0);
Ok a timer2 IF-et látom, tehát a megszakítást kapcsolod, de hol van beállítva a timer2 period regisztere? Sehol.
A timer interrupt nem csak annyiból áll, hogy ki-be kapcsoljuk az engedélyező bitet. Mint írtam kelll a periód regiszter, ezenkívül órajel függvényében prescaler, postscaler beállítása.
Van még rajta munka. Adatlap sokat segít.
A hozzászólás módosítva: Ápr 28, 2020
(#) menyus válasza Hp41C hozzászólására (») Ápr 28, 2020 /
 
Koszi az infot. Mar tevezem a valtast a 8.92verziora, mar javasoltak masok is. De az valamiert nem myitja meg a regebbi project fajlokat. Ezert hsznalok 8.4 et.
(#) menyus válasza fsub hozzászólására (») Ápr 28, 2020 /
 
Koszi, amint hazaerek kiprobalom!
(#) Hp41C válasza fsub hozzászólására (») Ápr 28, 2020 /
 
Amikor az MpLabX -et először kiadták elég gyatra volt szegény... Ellensúlyozni könnyebb volt úgy, hogy az MpLab 8 frissítésekor kihagyogattak valamit. Pl. a régivel lehetett egyszerre beállítva szimulátor debuggernek és PICkit2 programozónak .A legfrissebbnél állandóan leszedi a másikat. Szimulátort használtál, de kipróbálnád a PIC -en, így programozónak kijelölöd a PICkit2 -t - máris oda a debugger.
Ami még megdöbbentőbb, hogy megváltoztatták a nyomon követésnél a Watch ablakba felvehető regiszterek listáját: Kihagyták belőle a WREG -et és a Stack pointert azokon a típusokon, amelyeknél nem érhetők el regisztrerként.... Jó ötlet volt....

Ha egy ilyen típushoz tartozó .dev állományt megnyitsz, rákeresel a "HasNMMR=1" kifelyezésre, beszúrod az itt látható sorokat, egyből fel lehet venni a WREG -et és a STKPTR -et a Watch ablakba.
  1. HasNMMR=1
  2. nmmr (key=WREG addr=0x0 size=1 access='rw rw rw rw rw rw rw rw')
  3.     reset (por='00000000' mclr='00000000')
  4. nmmr (key=STKPTR addr=0x1 size=1 flags=h access='rw rw rw rw rw rw rw')
  5.     reset (por='00000000' mclr='00000000')
  6. NMMRObjSize=3


Sajnos minden egyes típusra el kell végezni. Ha esetleg megvan egy régebbi verzió érdemes kimásolni belőle...
A hozzászólás módosítva: Ápr 28, 2020
(#) menyus válasza fsub hozzászólására (») Ápr 28, 2020 /
 
Köszönöm a tippet, 8.40 alatt is így működik!

line_num.jpg
    
(#) menyus válasza Hp41C hozzászólására (») Ápr 28, 2020 /
 
Akkor nem egyszerűbb rögtön a 8.88 at felrakni? Vagy a 8.92 tud valami olyan pluszt ami miatt érdemes azt választani? Bár az én szintemen lehet ki se használnám azt amivel többet tud. A 16 os szériánál nem merészkedek mélyebb vizekre, arra meg jó szerintem még a 8.4 is ha el akarok rontani valamit.
(#) menyus hozzászólása Ápr 28, 2020 /
 
Sziasztok!

Kérdésem lenne hogy a fordításkor az output ablakban "Message 306" üzenetet kapok, de a kód lefordul és fut is rendesen! Ez a 306 csak egy figyelmeztető üzenet hogy a kódban memória lap váltás történt (az üzenetekre kattintva mindig egy lapváltásra mutat), vagy ez valami hibaüzenet? Bár ha hiba lenne akkor lnem fordulna le a kód. Az "errorlevel-306" al kiiktathatnám szerintem, csak nem tudom ennek milyen hátrányai lennének. Annyi csak hogy nem látom? Annyira nem zavar, csak furcsa hogy lefut egy csomó ilyen üzenet mert sok lapváltás oda-vissza van a programban.
(#) fsub válasza Hp41C hozzászólására (») Ápr 28, 2020 /
 
Micsoda kis kópék ezek a Microchipes fiúk!
Köszönöm a magyarázatot és gyógymód ismertetését a problémára. Ezek szerint, akkor az első hibát nem lehet orvosolni a 8.92 változatban.
(#) spgabor válasza usane hozzászólására (») Ápr 28, 2020 /
 
Szia,
köszönöm, hogy megnézted. Néztem az adatlapot, de kicsit belekeveredtem, mert nem teljesen volt világos, hogy mi mire épül. Most már fáradt vagyok nagyon, de holnap megézem újra amiket írtál és megpróbálom javítani.
(#) fsub válasza menyus hozzászólására (») Ápr 29, 2020 /
 
Ez csak egy emlékeztető üzenet, ami a laphatárok átlépésének ellenőrzésére hívja fel a figyelmedet. Itt az angol nyelvű leírása a kérdéses üzenetnek:

Idézet:
„306 Crossing page boundary -- ensure page bits are set.
Generated code is crossing a page boundary. This is a reminder message to tell you that code is being directed to a label that is on a page other than page 0. It is not an error or warning, but a reminder to check your page bits. Use the pagesel directive (pagesel - Generate Page Selecting Code (PIC10/12/16 MCUs)) before this point and remember to use another pagesel if returning to page 0.

The assembler can't tell what path your code will take, so this message is generated for any label in a page other than 0.You can use the errorlevel command to turn this and other messages on and off, but be careful as you may not spot a paging problem with this message turned off. For more about errorlevel, see errorlevel - Set Message Level.

A similar message is 302 for banking.
(#) fsub válasza menyus hozzászólására (») Ápr 29, 2020 /
 
Az MPLAB IDE release notes-ja szerint, csak új eszközök támogatásával bővült a 8.92-es változat az előző verziószámúhoz képest. Hiba javítás, vagy egyéb fejlesztés nem történt benne.
Olvasva HP41C fentebbi hozzászólását, alighanem érdemesebb a 8.88 változatra váltanod, ha le akarod cserélni a jelenleg általad használt verziószámút.
(#) kissi válasza menyus hozzászólására (») Ápr 29, 2020 /
 
Én a 8.14-t, 8.88-at, 8.92-t is használom, mindegyik megnyitja a 8.14-essel készített projekteket is gond nélkül !
(#) menyus válasza kissi hozzászólására (») Ápr 29, 2020 /
 
Nekem vannak 7.x verziós projectek is, azokat nem. Csak úgy, ha csinálok egy új projectet a 8.40 alá beteszem az asm et és azzal fordítom le a kódot. Különben ha jól emlékszem hol hibát ír hol lefagy vagy bezár a program. Passz hogy ez mitól lehet...
(#) menyus válasza fsub hozzászólására (») Ápr 29, 2020 /
 
Ha csak új eszközökkel bővűlt a 8.88 is, akkor nem érdemes váltanom. PicKit2 van meg egy nagyobb sorozatprogramozóm PicStart Plus vagy mi, ősrégi darab. Az még régebbi mint a PicKit2 tehát biztosan támogatják a régebbi verziók is, bár nem használom már régen. A támogatott kontrollereket meg nekem hiába bővítik mert nem használom ki, maradok a 16 os szériánál. A 18 as tól is félek.
A hozzászólás módosítva: Ápr 29, 2020
(#) menyus válasza fsub hozzászólására (») Ápr 29, 2020 /
 
Köszönöm, az eredeti üzenet is csak annyit ír hogy lapváltás történt és ellenőrizzem a lapváltás biteket, ha jól fordítottam. De gondoltam rákérdezek, hátha beleszól valamibe a háttérben fordításkor ez a dolog.
(#) kissi válasza menyus hozzászólására (») Ápr 29, 2020 /
 
A váltás mellett azért szólnak dolgok:

- a 18-astól ne félj, sokkal könnyebb vele az élet és modernebb perifériái is vannak, mint pl. az MPLAB 7-es all programozható típusoknak ( DA, USB, belső, programozható referenciafesz. ),
- a régi PIC-ek irreális árúak, pótlása a jövőben akár nyűgös is lehet,
- nem kapsz hozzá a neten lassan segítséget, stb.

Ezért én biztatnálak a váltásra, ha jól emlékszem a korábbi verziók projektjeihez volt egy "migráló" projekt, azt keresd meg inkább !
(#) menyus válasza kissi hozzászólására (») Ápr 30, 2020 /
 
Értem, köszönöm. A legnagyobb amivel foglalkoztam az aF628, 648. És F877 el kezdtem, sőt most is egy olyannal szenvedek. Azokban is már volt(van) progrmozható referenica, használtam is. Komolyabb projectjeim meg nem hinném hogy lesznek amit pl. egy 648 as ne szolgálna ki 4K memóriával. De ha 18 asoké a jövő, akkor muszáj leszek lépést tartani a korral. Valóban egy 16F84 amit most rendeltem (a helyett hogy átírtam volna a programot 628 asra mert az van itthon egy marákkal) néhol már 2000 HUF. Bár nem tudom mik a különbségek de pl a Chicad oldalán is van vagy 10 féle belőle, és nem csak tokozásban meg hőmérséklet túrésben térnek el, én pedig más különséget nem láttam. Így nem értem az azonos típusok közti esetenként közel 1000 HUF os különbözetet.
A hozzászólás módosítva: Ápr 30, 2020
(#) Hp41C válasza kissi hozzászólására (») Ápr 30, 2020 /
 
Azért ne essünk át a lovakon...
Miért fejleszetett a Microchip az elmúlt években új 16F1 szériát. Olcsók, sokkal többet tudnak, mint a régebbi 16F -ek.
A 18F -ből is új csalág van láthatáron: 18FxxQyy, ami sokkal olcsóbb, mint a többi.

Az a program tisztába rakva vígan el fog futni a 16F877 -en.
A hozzászólás módosítva: Ápr 30, 2020
Következő: »»   1121 / 1203
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