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   581 / 1210
(#) nedudgi válasza don_peter hozzászólására (») Okt 19, 2014 /
 
Automatikusan menti a rendszer a hozzászólásokat. Ha még egyszer írsz választ ugyanarra a hozzászólásra, akkor előjöhet.
(#) don_peter válasza lastewer hozzászólására (») Okt 19, 2014 / 1
 
nedudgi: Módosítani akartam az előző bejegyzésem, de lejárt az idő..
Szépen elszállt...


lastewer: no akkor kezdjük előröl.
Az egyik legfontosabb a PIC konfigurációs beállítások.
Hi-tech C 10-12-16-os fordítóra.
Konfiguráció belső OSC-re állítva:
  1. __CONFIG(UNPROTECT & UNPROTECT & LVPDIS & BORDIS & MCLRDIS & PWRTEN & WDTDIS & INTIO);

Aztán ha ez megvan akkor jöhet a program:
  1. void main(void){
  2.  
  3. ANSEL = 0;        // Minden láb digitális
  4. CMCON0 = 7;        // Comparator kikapcsolva
  5. CCP1CON = 0;        // Capt/Comp/PWM kikapcsolva       
  6. INTCON = 0;        // Összes interrupt láb kikapcsolva
  7. TRISA = 0;        // A port lábak kimenetere állítva
  8. TRISB = 0;        // B port lábak kimenetere állítva
  9.  
  10. while(1){
  11.  
  12. RB0 = !RB0;        // B0-ás láb invertálása (villogtatás)
  13. __delay_ms(100);        // Hi-Tech C fórdító késleltető függvénye
  14. }//while
  15.  
  16. }//main

A delay nem 100%, hogy működni fog elsőre, de elvileg mennie kell.
MPLAB-nál meg kell adni a kristály méretét erre majd hiba üzenetet fog feldobni fordításnál.
Nem próbáltam ki, de ennek működnie kell..
Azt hiszem nem hagytam ki semmit, bár az adatlapban azért nézd meg, a konfigurációs és a regisztereket, abból sokat lehet tanulni.
A LED-et B0 lábra kell tenned.
Ne feled, hogy a LED elé vagy mögé tegyél ellenállást. (220-470Ohm körülit)
Arra is figyelj, hogy a while ciklus soha ne érjen véget mert különbem reset lesz az eredménye..
A hozzászólás módosítva: Okt 19, 2014
(#) lastewer válasza don_peter hozzászólására (») Okt 19, 2014 /
 
Uh , nagyon szépen köszönöm neked . Mindjárt neki is állok
(#) lastewer válasza don_peter hozzászólására (») Okt 19, 2014 /
 
Szia!

Ezeket a hibákat dobja ki fordításnál :

6.1 undefined identifier "ANSEL"
7.1 undefined identifier "CMCON0"
16.31 undefined identifier "_XTAL_FREQ"


Gondolom hiányzik egy include az elejéről , csak azt nem tudom , melyik vagy milyen?

Ezzel a kóddal próbáltam :
  1. #include <htc.h>
  2.   __CONFIG(UNPROTECT & UNPROTECT & LVPDIS & BORDIS & MCLRDIS & PWRTEN & WDTDIS & INTIO);
  3.  
  4.  void main(void){
  5.      
  6.     ANSEL = 0;        // Minden láb digitális
  7.     CMCON0 = 7;        // Comparator kikapcsolva
  8.     CCP1CON = 0;        // Capt/Comp/PWM kikapcsolva      
  9.     INTCON = 0;        // Összes interrupt láb kikapcsolva
  10.     TRISA = 0;        // A port lábak kimenetere állítva
  11.     TRISB = 0;        // B port lábak kimenetere állítva
  12.      
  13.     while(1){
  14.      
  15.     RB0 = !RB0;        // B0-ás láb invertálása (villogtatás)
  16.     __delay_ms(100);        // Hi-Tech C fórdító késleltető függvénye
  17.     }//while
  18.      
  19.     }//main
A hozzászólás módosítva: Okt 19, 2014
(#) Hp41C válasza lastewer hozzászólására (») Okt 19, 2014 /
 
A kontrollered 16F628(A).
Ezen nincs ANSEL, helyette a komparátort kell kikapcsolni. CMCON = 0x07;
A delay a kontroller órajel frekvenciáját a _XTAL_FREQ változóban keresi. Meg kellene adni:
  1. # define _XTAL_FREQ 4000000
(#) eSDi válasza don_peter hozzászólására (») Okt 19, 2014 /
 
A számolásod jó, csak nem tudom mire szeretnél kilyukadni vele...
Jól sejtem, hogy azt szeretnéd, hogy a program x ideig várakozzon?
Nem tudom, hogy C-ben ez, hogy működik, de ezt nem a fordítónak kellene elintéznie?
Én BASIC-ben csak kiadom hogy Waitus vagy Waitms és mögéírom a számot, hogy mennyi us-ig, vagy ms-ig várjon.
(#) don_peter válasza eSDi hozzászólására (») Okt 19, 2014 /
 
Igen-igen a várakoztatás miatt gondoltam egy delay() függvényt írni.
Nem mindegyik fordítónál van előre deklarálva vagy legalább is én nem tudok róla.
Gondoltam írok egy sajátot és akkor mindig kéznél lesz...

lastewer: igen ahogyan Hp41C írta...
Nem próbáltam ki és lehet kicsit kevertem 16F684-el a dolgokat, de azzal a módosítással mennie kell.
(#) lastewer válasza don_peter hozzászólására (») Okt 19, 2014 /
 
Összedobtam , és a feszültség folyamatosan emelkedik és csökken , 1.27 - 2 V között. De a ledem sajnos nem világít , se villog se semmi ..Egy 1k-s ellenállást tettem elé , most jelenleg másom nincs.
(#) don_peter válasza lastewer hozzászólására (») Okt 19, 2014 /
 
Gond nélkül megy..
  1. #include <htc.h>
  2.         #define _XTAL_FREQ 4000000
  3.       __CONFIG(UNPROTECT & UNPROTECT & LVPDIS & BORDIS & MCLRDIS & PWRTEN & WDTDIS & INTIO);
  4.      
  5.      void main(void){
  6.          
  7.         CMCON = 0x07;
  8.         CCP1CON = 0;        // Capt/Comp/PWM kikapcsolva      
  9.         INTCON = 0;        // Összes interrupt láb kikapcsolva
  10.         TRISA = 0;        // A port lábak kimenetere állítva
  11.         TRISB = 0;        // B port lábak kimenetere állítva
  12.          
  13.         while(1){
  14.          
  15.         RB0 = !RB0;        // B0-ás láb invertálása (villogtatás)
  16.         __delay_ms(100);        // Hi-Tech C fórdító késleltető függvénye
  17.         }//while
  18.          
  19.         }//main


Az 1k-s ellenállás az elég sok.
220-470Ohm ellenállással tuti jó lesz..
Most teszteltem..

ui: a topik elején sárga dobozban vannak fontos tudni valók azt is nézd meg.
VDD és MCLR közé 10K-s ellenállás...stb
Végső esetben mutasd a kapcsolásod.
A hozzászólás módosítva: Okt 19, 2014

teszt.JPG
    
(#) don_peter hozzászólása Okt 19, 2014 /
 
Srácok találkoztatok már olyannak, hogy 18F46K22-nél az EECON regiszter RD és WR bitjére hibát dob?
  1. EECON1bits.RD = 1;
  2. EECON1bits.WR = 1;

Idézet:
„mcc18.exe -I="C:\Program Files (x86)\Microchip\mplabc18\v3.47\bin\..\h" -p18LF46K22 -fo="main.o" "../main.c"
C:\Users\DPTP\Documents\PIC18LF46K22\main.c:113:Error: syntax error
make: *** [main.o] Error 3

Error code 2”

Nem értem ezt a dolog.
Lehet szimulátor hiba?
A hozzászólás módosítva: Okt 19, 2014
(#) don_peter válasza don_peter hozzászólására (») Okt 19, 2014 /
 
Ez tárgytalan..
Az MCP23S17 és az SPI2 kever meg valamit...
Még hozzá az, hogy a EECON regiszter bit neveivel azonos definíciókat hoztam létre.
Példa értékű ez a hiba
Tanuljatok belőlem
A hozzászólás módosítva: Okt 19, 2014
(#) Pali79 hozzászólása Okt 20, 2014 /
 
Mennyire lehet hinni a szimulátor számlálójának? Tesztelem a CCP-t használó sebességmérő programot, de a szimulátor teljesen más eredményt mutat mint amit kellene. 10 ms-re beállítva a CCP megszakítást kb 43-nak kéne kijönnie a számítások alapján, de a szimulátor több mint 70-et mutat.
(#) Hp41C válasza Pali79 hozzászólására (») Okt 20, 2014 /
 
Tegyél fel egy PICkit2 logikai analizátor regisztrátumot min. 1 MHz mintavételi frekvenciával.
(#) Pali79 válasza Hp41C hozzászólására (») Okt 20, 2014 /
 
Van erről valami leírás valahol, hogy miként kell ezt csinálni? Sose használtam még a PICkit2-t programozáson kívül másra.
(#) Hp41C válasza Pali79 hozzászólására (») Okt 20, 2014 /
 
Sajnos az előző hozzászólás rossz helyre ment...
(#) don_peter hozzászólása Okt 20, 2014 /
 
Srácok segítségeteket kérném 18F46K22 10bit-es PWM beállításához.. (C18, MPLAB)
Egy olyan PWM jelet illetve rutint kellene írnom ami képes lenne a kitöltési tényezőt is változtatni.
Az adatlapot nézegetem de olyan sok állítási lehetőség van ami teljesen érthetetlenné teszi számomra a megértés.

RE2/CCP5/AN7-es lábra szeretném a PWM kimenetet.
Addig eljutottam, hogy CCP5CON regiszterben bekacsolom a PWM5-ot és hogy a CCPTMRS1 regiszterben beállítom hozzá Timer1, Timer2 időzítőket.
  1. CCP5CON = 0x06; // PWM mód
  2. CCPTMRS1 = 0;   // Capture/Compare modes use Timer1, PWM modes use Timer2

Sajnos ennél a PIC-nél nem működnek az előre megírt C18-as függvénykönyvtárak így az OpenPWM() függvények sem..
Előre is köszi...
A hozzászólás módosítva: Okt 20, 2014
(#) ktamas66 válasza don_peter hozzászólására (») Okt 20, 2014 /
 
Én ezzel szoktam számolgatni: pic_pwm_calc.
(#) don_peter válasza ktamas66 hozzászólására (») Okt 20, 2014 /
 
Megnézem... Köszi..
Az utóbbit annyira változtatnám, hogy a C18-as programkönyvtár még is csak támogatja a PIC-et már csak el kellene jutnom odáig, hogy működjön is.

Most ezzel próbálkozom:
  1. OpenPWM5(0xff, 0);      // Timer2 kiválasztva
  2. SetDCPWM5(100);         // Kitöltési tényező
  3. ClosePWM5();            // PWM5 leállítása

Úgy néz ki működik is..
Köszi srácok..
A hozzászólás módosítva: Okt 20, 2014
(#) Birs Alma hozzászólása Okt 20, 2014 /
 
Sziasztok. Tudna valaki segíteni? 16F877a-hoz lenne szükségem XC8-ban i2c.inc fájlra. Esetleg volna valakinek? Nagyon megköszönném. L.
(#) Birs Alma válasza Birs Alma hozzászólására (») Okt 20, 2014 /
 
vagy .h
(#) Hp41C válasza Birs Alma hozzászólására (») Okt 21, 2014 /
 
<Telepítési könyvtár>/include/plib/i2c.h
(#) usane válasza Birs Alma hozzászólására (») Okt 21, 2014 /
 
A mester megelőzött. Az XC8-nak van saját i2c headerje, ott ahol Hp41C kolléga írta. A legtöbb fordítónak megvannak a saját periféria kezelő fájljai,ha rákeresel a telepítési könyvtárban. Esetleg a nagyon régiekből hiányozhat, nem tudom, nem használok őskövületeket.
(#) Birs Alma válasza usane hozzászólására (») Okt 21, 2014 /
 
Kösz a választ mind a kettőtöknek, de sajna nem segít rajtam.
Ha 18F...-eszközt adok meg, akkor hibátlanul lefordul a program. Ha 16F887a-t állítok be eszközként, akkor OpenI2C függvényre undefined symbol üzenetet kapok

A program mindössze ennyi:

  1. #include "configbits.h" ;
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include "i2c.h"
  5.  
  6. int main(int argc, char** argv) {
  7.  
  8.      OpenI2C( MASTER, SLEW_OFF) ;
  9.  
  10.     return (EXIT_SUCCESS);
  11. }
A hozzászólás módosítva: Okt 21, 2014
(#) Hp41C válasza Birs Alma hozzászólására (») Okt 21, 2014 /
 
AN735 ugyan assembly, de könnyen átírható C -re.
(#) Birs Alma válasza Hp41C hozzászólására (») Okt 21, 2014 /
 
Köszönöm. Nem kis meló De tényleg kösz!
(#) Birs Alma válasza Hp41C hozzászólására (») Okt 22, 2014 /
 
Na igen, de ebben csak deklarációk vannak. Pl. a ReadI2C() függvényé. De vajon hol van definiálva?
(#) usane válasza Birs Alma hozzászólására (») Okt 22, 2014 /
 
Olvasd el hogy működik, és akkor meg tudod írni a saját függvényed. Segítségképpen ajánlom icserny fórumtárs oldalát, igaz az c18-ban van írva, de az alapján meg már pláne könnyű.Bővebben: Link
(#) Birs Alma válasza usane hozzászólására (») Okt 22, 2014 /
 
Köszönöm.
Meg hát!
Csak gondoltam hátha valaki már megtette..
De tényleg köszönöm!!!
(#) Hp41C válasza Birs Alma hozzászólására (») Okt 22, 2014 /
 
Ott, ahonnan a link származik, megtalálható egy zip is, benne a rutinot asm forrásával. Bővebben: Link
(#) Birs Alma válasza Hp41C hozzászólására (») Okt 22, 2014 /
 
Köszönöm szépen!
Közben már átírtam, most tesztelem (vagyis tesztelném, ha asszony nem nyaggatna) de egyelőre 0xFF-et olvasok vissza a tesztként beírt adat helyett, szóval nem kerek még a dolog.
Következő: »»   581 / 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