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   1073 / 1211
(#) BenőAladár hozzászólása Feb 24, 2019 /
 
Volt ma időm próbálkozni és így már jó lett, mindenkinek köszönöm a segítséget, még fogok írni ha elakadok.
  1. AdCSon(); //AD engedelyezes
  2.     __delay_us(10); //varakozas az inicializalasra
  3.    
  4.     spiWrite(0b00001100); //első adat byte kikuldes az AD-re
  5.     __delay_us(10); //varakozas a feldolgozasra
  6.     Admsb = spiRead(); // adatok fogadsas felso 4 bitje = szemet
  7.  
  8.     spiWrite(0b00001100); //masodik adatbyte kikuldese, hogy legyen továbbra is orajel      
  9.     Adlsb = spiRead(); //adatok fogadasa also 8 bit
  10.     __delay_us(10);
  11.     Addata = ((((unsigned int) Admsb) << 8) | Adlsb);
  12.     Addata >>= 4;
  13.    
  14.     AdCSoff();//AD kikapcsolasa
  15.     return;


Ez lett a végleges megoldás
A hozzászólás módosítva: Feb 24, 2019
(#) slimcolt hozzászólása Feb 24, 2019 /
 
Sziasztok!

Egy egyszerű kérdés!
Szerintetek ez a Timer0 beállítás, és megszakítás helyes? 10ms-ként szeretnék számolni 100-ig.
A PIC: PIC16F18456

  1. void TMR0_init(void)
  2. {
  3.     T0CON0bits.T0EN = 1; // TMR0 modul engedélyezve
  4.     T0CON0bits.T016BIT = 1; //TMR0 16bit-es módban.
  5.     T0CON0bits.OUTPS = 0; // 1:1 postscaller kiválasztva.
  6.     T0CON1bits.T0CS = 0b010; // TMR0 órajel forrás Fosc/4 = 1MHz
  7.     T0CON1bits.ASYNC = 0; // TMR0 szinkron módban.
  8.     T0CON1bits.T0CKPS = 0; // 1:1 prescaller kiválasztva.
  9.     TMR0 = 0xD8EF; // 10ms-os időzítés beállítva. f=100Hz.
  10.     PIR0bits.TMR0IF = 0; // TMR0 megszakítás flag törölve.
  11.     PIE0bits.TMR0IE = 1; //TMR0 megszakítás engedélyezve.
  12. }
  13.  
  14. void TMR0_ISR (void)
  15. {
  16.     if (PIR0bits.TMR0IF && (DUTCON==1))
  17.     {
  18.         PIR0bits.TMR0IF = 0;
  19.         TXMEAS++;
  20.         TMR0 = 0xD8EF;
  21.     }
  22. }
(#) Hp41C válasza slimcolt hozzászólására (») Feb 24, 2019 / 1
 
A T0CON0bits.T0EN = 1; // TMR0 modul engedélyezve sort a Timer0 beállítás végére tenném.
(#) eSDi válasza slimcolt hozzászólására (») Feb 24, 2019 / 1
 
  1. void __interrupt TMR0_ISR(void){
  2.    
  3. }


Plusz a megszakítás így lesz jó.
(#) Pali79 válasza eSDi hozzászólására (») Feb 24, 2019 /
 
Itt lehet a kutya elásva. A kimeneten csak 250 kHz jön, tehát a reset utáni alapbeállításon, 1 MHz-en jár, de nem értem miért.
(#) eSDi válasza Pali79 hozzászólására (») Feb 24, 2019 /
 
Esetleg így?

// SCS INTOSC; IRCF 4MHz_HFINTOSC/4; IDLEN disabled;
OSCCON = 0x52
// PRI_SD enabled; HFIOFL not stable;
OSCCON2 = 0x04
// INTSRC disabled; PLLEN disabled; TUN 0;
OSCTUNE = 0x00

A configban pedig:

// CONFIG1H
FOSC = IRC // Oscillator Selection bits->Internal RC oscillator
PLLEN = OFF // 4 X PLL Enable bit->PLL is under software control
PCLKEN = ON // Primary Clock Enable bit->Primary clock enabled
FCMEN = OFF // Fail-Safe Clock Monitor Enable->Fail-Safe Clock Monitor disabled
IESO = OFF // Internal/External Oscillator Switchover bit->Oscillator Switchover mode disabled

// CONFIG3H
HFOFST = ON // HFINTOSC Fast Start-up bit->HFINTOSC starts clocking the CPU without waiting for the oscillator to stablize.
(#) Pali79 válasza eSDi hozzászólására (») Feb 24, 2019 /
 
Sajnos még mindig csak 1MHz-en jár.
(#) cross51 válasza Hp41C hozzászólására (») Feb 24, 2019 /
 
Én mondjuk már majdnem csak 32 bitet használok (és így nem gondoltam bele, hogyha valaki most kezdi nem 32 bittel fog kezdeni).

De azért nagy előny hogy 4500 Ft kapsz egy olyan programozót ami az ICD3 képességeivel többnyire megegyezik/felette van.
Az újabb PIC-eket azért pl.: 16f15xx-et sárgán támogatja persze a két kezdő "alapkövet" a 628-st 877-et nem támogatja.

Ha valaki most kezd el programozni tanulni én neki már erősen csak az X-et ajánlanám. Én azon kívül hogy a mindennek mondható csak nem jónak JVM felzabálja a gépet azon kívül szerintem jobban használható mint a régi vagy akár a többiek eclipse-es "hagyjukmiei".

Amire kíváncsi leszek, hogy a dev boardokra mikor rak rendes debuggert az M mert ami a curisoity-n van az hulladék (pedig elvileg valami pk3 alapú) legalábbis nálam egy pic32mm-hez.
(#) Hp41C válasza cross51 hozzászólására (») Feb 24, 2019 /
 
Nagyon sokan csak utánépítők, azaz egy kész tervet töltenek le, az építik meg. Ehhez keresnek programozót. Ezen kapcsolások zöme régebbi, nem LVP kompatibilis Midrange kontrollert használ. Csak azért írtam, hogy tisztában legyen a képességekkel, aki vásárolni szeretne. Egy PICkit3 klónnal többre mennek ilyen esetben. Pozitívum, hogy az Atmel típusokat is fogja kezelni. A bővítés igen lassan folyik, a PICkit4 már egy éves és még csak ~300 típus tesztelt.
A PICkit2 -m több mint 2000 -et tud programozni és nem kell firmware-t frissíteni, ha családok között váltunk.
(#) slimcolt válasza eSDi hozzászólására (») Feb 24, 2019 /
 
Sajnos a fordításkor ezeket a hibaüzeneteket kapom

main.c:54:6: error: variable has incomplete type 'void'
void low_priority interrupt TMR0_ISR(void)
^
main.c:54:18: error: expected ';' after top level declarator
void low_priority interrupt TMR0_ISR(void)

Ezek mik lehetnek? Nem találtam megoldást a neten.
(#) cross51 válasza Hp41C hozzászólására (») Feb 24, 2019 /
 
A PICkit2 alapból olyan, hogy nem vált firmware-t vagy te csináltad? És a PICkit2 gondolom csak úgy tud breakpointot be rakni ha megállítod?
s
Erre a ~300 típura már 2 éve talán van némi infó a neten a pic32cz/pic32cx-ről de semmi nincs még mindig róla. Ki tudja hogy mi folyik bent az M-nél.
Azt nem tudom, hogy fejlesztik az ICD/PK/Snap-et mert elvileg ugyanaz a controller van benne csak az ICD-be van fpga +dram és ehhez és még egyéb apróságok, nem tudom hogy egy kódot írnak és kicsit portolva van vagy mindegyikhez külön írják.
(#) rolandgw válasza cross51 hozzászólására (») Feb 25, 2019 /
 
A többiek "hagyjukmiei" ingyenesek! Gondolom te kifizetted az 1100 eurót, hogy ugyanezt fordítási eredményt megkapd.. Nem kötözködés, csak legyünk korrektek, ha már összehasonlítunk.
(#) frekivalto hozzászólása Feb 25, 2019 /
 
Sziasztok!

Szeretnék ismételten segítséget kérni tisztelt fórumtársak.

Szükségem lenne arra, hogy a kontroller PIN4 MCLR/RA3 lábát bemenetként használjam.

PIC12F1822 2MHz belső óra, PLL=disabled, LVP=disabled

Amire eddig jutottam, beállítások terén EZ VAN A KONTROLLERBEN.
config word1: 2E04, b=%10111000000100
config word2: 1EFF, b=%01111011111111
option_reg=0b00001001; //WPUA engedélyezve
wpua=0b00001010; //fehúzó ellenállás bekapcsolva PORT RA1 RA3
trisa=0b00101010; //bemenetek és kimenetek beállítása

Adatlap szerint, ha bemenetként használnám az RA3-at, akkor config word1-ben:
bit 6 MCLRE: MCLR/VPP Pin Function Select bit
If LVP bit = 1:
This bit is ignored.
If LVP bit = 0:
1 = MCLR/VPP pin function is MCLR; Weak pull-up enabled.
0 = MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of the WPUA register.

Ennek megfelelően config word2-ben:
bit 8 PLLEN: PLL Enable bit
1 = 4xPLL enabled
0 = 4xPLL disabled

bit 13 LVP: Low-Voltage Programming Enable bit(1)
1 = Low-voltage programming enabled
0 = High-voltage on MCLR must be used for programming

Ami érdekes, hogy a kontroller programját lefordítva, valamint a PICKIT2-be betöltve a lefordított HEX fájlt, a config word2 nem egyezik meg azzal, amit beállítottam a programban.
(a config word1 az egyforma).
A HEX fájlban visszaírta a fordító az LVP=1re (ez most számomra érdekes, miért?)
Ezért továbbra sem használható bemenetként a láb, mert alacsony szintre kötve leáll a program, ergo még mindig MCLR bemenetként funkciónál.

2. lépésként a lefordított HEX fájt betöltve a programozóba, ott átírtam a config word2 beállítását úgy, hogy a bit13=0, majd beégettem a programot.

Jó is lett, a program működik már, alacsony szintre kötve a lábat, nem áll le a program.
Már kezdtem örülni volna, viszont előjött egy újabb hiba:
A PICKIT2 nem látja a kontrollert.
Újabb program feltőltésénél nem találja az IC-t, not device detected hibára leáll.
Manuálisan kiválasztva a kontrollert, úgy se működik.
Tools menüben kiválasztva a USE VPP First program entry-t választva se látja...

Szóval teljesen tanácstalan vagyok, hogy mi lehet a hiba.

Jó hosszúra sikerült ez, de próbáltam minden adatot, információt megadni nektek, hátha találkozott már valaki ezzel a hibával, vagy tudja, hogy mit rontottam el.

Köszönöm. Üdv. Peti
A hozzászólás módosítva: Feb 25, 2019
(#) Hp41C válasza cross51 hozzászólására (») Feb 25, 2019 /
 
Idézet:
„A PICkit2 alapból olyan, hogy nem vált firmware-t vagy te csináltad?”

Alapból nem vált firmware -t. Egy firmware elkezeli a kontrollereket PIC12F -től a PIC32 -ig.
A PICkit2 -ben egy Script Engine dolgozik, ami max 61 byte hosszú scripteket tud lefuttatni. Ezt a méretet tartani lehet, ha a script műveletek összetettebbek.
Idézet a MpLabX 5.10 Readme for PICkit2.htm -ből:
  1. PK2-96 Firmware changes necessary to support K80 devices. PIC18F66K80 datasheet family, PIC18F87K90 datasheet family, PIC18F87K22 datasheet family

De rég olvasom ezeket a sorokat... 4-5 éve programozza a 18F26K80 -at még az eredeti firmware -vel is.
Idézet:
„És a PICkit2 gondolom csak úgy tud breakpointot be rakni ha megállítod?”

A nyomkövetés azokra a típusokra tud, amit a Microchip megvalósított és úgy, ahogy megcsinálta. Az ejtagproxy segítségével több PIC32 típust lehet kezelni.
Idézet:
„Ki tudja hogy mi folyik bent az M-nél.”

Szerintem senki sem tudja (talán még a Microchip sem), hogy mi lesz. Az Atmel megvásárlásával más 32 bites kontrollerek gyártása is a kezükbe került.
(#) Hp41C válasza frekivalto hozzászólására (») Feb 25, 2019 /
 
Mi kapcsolódik a MCLR lábra?
(#) frekivalto válasza Hp41C hozzászólására (») Feb 25, 2019 /
 
Egyenlőre semmi.
Próbapanelen van összerakva. Vagy +5V-ra vagy 0V-ra kapcsolom egy kapcsolóval.
Alapból egy "gyenge" felhúzó ellenállással (belsővel) van felhúzva +5V-ra. A kapcsolóval ezt 0V-ra húzom le.

Első esetben ha kapcsolót bekapcsoltam, akkor leállt a program, MCLR miatt.
Második esetben már nem állt le a program, ha nullára húztam a bemenetet.
Csak most új programot nem tudok bele tölteni.

Persze a programozó MCLR lába az rácsatlakozik a PIC-re.
A hozzászólás módosítva: Feb 25, 2019
(#) frekivalto válasza frekivalto hozzászólására (») Feb 25, 2019 /
 
Annyit kipróbáltam, ha a próbapanelről kiveszem a kontrollert, és beteszem egy sima Hextool foglalatba, amit az égetőhőz direkt csináltam, úgy látja a PIC-et a PICKIT2.

Viszont ha visszarakom a helyére, úgy nem...
(#) Pali79 válasza eSDi hozzászólására (») Feb 25, 2019 /
 
Meglett a hiba. Egy sima elírás volt az OSCCON-nál. Köszönöm a segítséget!
(#) pipi válasza frekivalto hozzászólására (») Feb 25, 2019 /
 
Akkor túl nagy terhelés az a "gyenge" ellenállás vagy ha még kondi is van az MCLR-en, vagy még a PGC/PGD lábakon is valami keresztbeakaszt.
(#) eSDi válasza slimcolt hozzászólására (») Feb 25, 2019 /
 
Nem tudom mi lehet, nálam jó bárhogy is írom le.
(#) slimcolt válasza eSDi hozzászólására (») Feb 25, 2019 /
 
Én MPLAB X 5.1-et és XC8 2.05-öt használok.
Te mivel próbáltad?
(#) eSDi válasza slimcolt hozzászólására (») Feb 25, 2019 /
 
Épp most frissítettem IDE v5.15 és XC8 v2.05-re. De v5.10/v1.45-el is jó volt. Másold be ide a kódrészletet, abból talán kiderül.
(#) usane válasza slimcolt hozzászólására (») Feb 25, 2019 /
 
Ha azt írtad be amit eSDi írt
Idézet:
„void __interrupt TMR0_ISR(void)”
akkor működnie kell.
Ha viszont az amit a hibaüzenet ír:
Idézet:
„void low_priority interrupt TMR0_ISR(void)”

akkor jó, hogy nem működik.
Emlékeim szerint, ha prioritást is akarsz megadni akkor is az interrupt megnevezésnek előre kell mennie. (emlékeim szerint)
(#) eSDi válasza usane hozzászólására (») Feb 25, 2019 /
 
XC8 v1.45 és v2.05

Nekem így lefordul:
  1. void low_priority interrupt main_isr(void){
  2.    
  3. }


Meg így is:
  1. void interrupt low_priority main_isr(void){
  2.    
  3. }
A hozzászólás módosítva: Feb 25, 2019
(#) usane válasza eSDi hozzászólására (») Feb 25, 2019 /
 
Nem próbáltam, csak emlékezetből írtam. Akkor nem tudom ő mit írt el.
(#) slimcolt válasza usane hozzászólására (») Feb 25, 2019 /
 
Bemásolom a szükséges részleteket. A lényeg annyi, hogy két helyen használom a TMR0-t, 10ms és 1ms-os beállításban.
PIC16F18456 -ra szeretném a programot megírni.

  1. void TMR0_init10ms(void)
  2. {
  3. //TMR0 beállítások
  4.  
  5.     T0CON0bits.T016BIT = 1; //TMR0 16bit-es módban.
  6.     T0CON0bits.OUTPS = 0; // 1:1 postscaller kiválasztva.
  7.     T0CON1bits.T0CS = 0b010; // TMR0 órajel forrás Fosc/4 = 1MHz
  8.     T0CON1bits.ASYNC = 0; // TMR0 szinkron módban.
  9.     T0CON1bits.T0CKPS = 0; // 1:1 prescaller kiválasztva.
  10.     TMR0 = 0xD8EF; // 10ms-os időzítés beállítva. f=100Hz.
  11.     PIR0bits.TMR0IF = 0; // TMR0 megszakítás flag törölve.
  12.     PIE0bits.TMR0IE = 1; //TMR0 megszakítás engedélyezve.
  13.     T0CON0bits.T0EN = 1; // TMR0 modul engedélyezve
  14. }
  15.  
  16. void TMR0_init1ms(void)
  17. {
  18.     T0CON0bits.T016BIT = 1; //TMR0 16bit-es módban.
  19.     T0CON0bits.OUTPS = 0; // 1:1 postscaller kiválasztva.
  20.     T0CON1bits.T0CS = 0b010; // TMR0 órajel forrás Fosc/4 = 1MHz
  21.     T0CON1bits.ASYNC = 0; // TMR0 szinkron módban.
  22.     T0CON1bits.T0CKPS = 0; // 1:1 prescaller kiválasztva.
  23.     TMR0 = 0xFC17; // 1ms-os időzítés beállítva. f=1KHz.
  24.     PIR0bits.TMR0IF = 0; // TMR0 megszakítás flag törölve.
  25.     PIE0bits.TMR0IE = 1; //TMR0 megszakítás engedélyezve.
  26.     T0CON0bits.T0EN = 1; // TMR0 modul engedélyezve
  27. }
  28.  
  29. //TMR0 megszakítások
  30.  
  31. void __interrupt TMR0_ISR(void)
  32. {
  33.     if (PIR0bits.TMR0IF && (TXOK == 0))
  34.     {
  35.         TXMEAS++;
  36.         PIR0bits.TMR0IF = 0;
  37.         TMR0 = 0xD8EF;
  38.     }
  39.    
  40.     if (PIR0bits.TMR0IF && (TXOK == 1))
  41.     {
  42.         PIR0bits.TMR0IF = 0;
  43.         TMR0 = 0xFC17;
  44.     }
  45. }


A fordításkor ezeket a hibaüzeneteket kapom:

main.c:21:12: warning: implicit conversion from 'unsigned int' to 'unsigned char' changes value from 55535 to 239 [-Wconstant-conversion]
TMR0 = 0xD8EF; // 10ms-os id?z<ED>t<E9>s be<E1>ll<ED>tva. f=100Hz.
~ ^~~~~~
main.c:34:12: warning: implicit conversion from 'unsigned int' to 'unsigned char' changes value from 64535 to 23 [-Wconstant-conversion]
TMR0 = 0xFC17; // 1ms-os id?z<ED>t<E9>s be<E1>ll<ED>tva. f=1KHz.
~ ^~~~~~
main.c:54:6: error: variable has incomplete type 'void'
void __interrupt TMR0_ISR(void)
^
main.c:54:17: error: expected ';' after top level declarator
void __interrupt TMR0_ISR(void)
^
;
2 warnings and 2 errors generated.

A TMR0 beállítása sem okés ezek szerint.
A hozzászólás módosítva: Feb 25, 2019
(#) Pali79 hozzászólása Feb 25, 2019 /
 
Próbáltam felébreszteni a pic-et uarton keresztül. Az adatlap szerint a BAUDCON,WUE bitjének beállításával egy felfelé futó élre az RX lábon ébreszti a pic-et. De nem ébred. Szimulátorban, működik csak élőben nem.
Kihagyom valamit?
(#) usane válasza slimcolt hozzászólására (») Feb 25, 2019 /
 
Először is, tudtommal ebben a PICben a T0 az 8 bites, szóval azt a 2 warningot oldd meg, aztán nézd meg mit fordít.
(#) usane válasza eSDi hozzászólására (») Feb 25, 2019 /
 
Egyébként a user guide ezt írja:
void __interrupt(low_priority) myLoIsr(void)
(#) slimcolt válasza usane hozzászólására (») Feb 25, 2019 /
 
Elvileg lehet használni 16bit-ben is.
datasheet 362. oldalon vannak a részletek.
De valamit tuti elnézek mint legtöbbször
Következő: »»   1073 / 1211
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