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   756 / 1210
(#) c27 válasza c27 hozzászólására (») Feb 29, 2016 /
 
Közbe megtaláltam a hibát. Ha valaki netalán ugyan ilyen piccel 18F4431 dolgozna, arra kell figyelni, hogy az ADCHS állítása minden előzőleg megadott beállítást töröl, így még az elején kell ezt beállítani. Adatlapban egy apró betűs rész figyelmeztet erre. Legalább is ez volt a fő hiba, meg van még pár apróság amit nem jól adtam meg.
A hozzászólás módosítva: Feb 29, 2016
(#) Kapagerenda hozzászólása Márc 1, 2016 /
 
Üdv,

Következő a problémám: Assigning to non ivalue IOCB4

Ez miatt nem engedi lefordítani a programot.

  1. oid initMain() {
  2.  
  3. ANSEL = ANSELH = 0; // All I/O pins are configured as digital
  4. PORTB = 0;          // All PORTB pins are cleared
  5. TRISB = 0b00010000; // All PORTB pins except PORTB.4 are configured as outputs
  6. RBIE = 1;           // Interrupts on PORTB change are enabled
  7. IOCB4 = 1;          // Interrupt on PORTB pin4 change is enabled
  8. GIE = 1;            // Global interrupt is enabled


Az RBIE= 1 -nél valamint a GIE = 1 nél is ugyanezt írja ki, de ott áttudom fogalmazni az utasítást INTCON.F7 = 1 -re ( GIE-1 helyett) valamint INTCON.F3 = 1 (RBIE = 1 helyett).

Szóval valami más formában kéne megadni azt az utasítást, de nemtudom hogyan.
(#) icserny válasza Kapagerenda hozzászólására (») Márc 2, 2016 /
 
Az nem ivalue, hanem lvalue (gyk. LVALUE) lesz! Arról értesített a fordító, hogy olyan azonosítót írtál az értékadás baloldalára, ami számára nem értelmezhető változóként vagy regiszterként, vagyis nem tudja hová tenni az adatot.

Szemérmesen elhallgattad, hogy milyen fordítóról és mikrovezérlőről van szó, így csak általánosságban próbálok segíteni:

ANSEL, ANSELH, PORTB, TRISB regiszternevek, ezeknek a beírásával nincs gond (ezek "lvalue" típusú azonosítók).

RBIE, GIE pedig nem önálló egység, hanem egy-egy regiszterbit. Ezeket általában egy-egy struktúra elemeiként szokás dekalarálni (de a biztos módszer a megfelelő fejléc állomány megtekintése). Ezekre struktúranév.elemnév formában lehet hivatkozni, tehát INTCONbits.GIE=1 (vagy aminek deklarálta a gyártó a fordítóval telepített fejléc állományban).


C18 esetén például a PIC18F13k22.h fejléc állományban az INTCON regisztert kétféle struktúra uniójaként deklarálták az INTCON regiszter bitjeit:
  1. extern volatile near unsigned char       INTCON;
  2. extern volatile near union {
  3.   struct {
  4.     unsigned RABIF:1;
  5.     unsigned INT0F:1;
  6.     unsigned TMR0IF:1;
  7.     unsigned RABIE:1;
  8.     unsigned INT0E:1;
  9.     unsigned TMR0IE:1;
  10.     unsigned PEIE:1;
  11.     unsigned GIE:1;
  12.   };
  13.   struct {
  14.     unsigned :1;
  15.     unsigned INT0IF:1;
  16.     unsigned T0IF:1;
  17.     unsigned :1;
  18.     unsigned INT0IE:1;
  19.     unsigned T0IE:1;
  20.     unsigned GIEL:1;
  21.     unsigned GIEH:1;
  22.   };
  23. } INTCONbits;


Ennek megfelelően a GIE bitre kétféle módon is hivatkozhatunk:
INTCONbits.GIE vagy INTCONbits.GIEH.

Más fordítónál nyilván másképp csinálják a deklarálást (az INTCON.F7 hivatkozásod számomra ismeretlen címzésmód), de az aktuális fejléc állományból kisilabizálható.
(#) PLaci hozzászólása Márc 2, 2016 /
 
Sziasztok!
Egy PIC16F1454-t programoznék assemblyben, de már az elején kifogott rajtam
Eddig ezt íram be a 8.86-os mplab-ba:
  1. ;spi tesztprogi  
  2.  
  3.    list     P=16F1454, F=INHX8M,R=HEX           ; Processzor  16F1454
  4.       #include p16f1454.inc                  ; A szukséges INC fajl
  5.  
  6.                 __CONFIG _FOSC_XT&_WDTE_OFF&_CP_OFF&_MCLRE_OFF&_PWRTE_ON  ;config bitek beállítása  
  7.        
  8.  
  9.         end

Sajnos nem fogadja el a fordító. Nézve a PIC adatlapját látom, hogy itt már két konfigurációs byte van, de ha CONFIG1-t írok akkor sem jó
Hogy a csudába kell beírni a config biteket ebbe a PIC-be?
A hozzászólás módosítva: Márc 2, 2016
(#) Pali79 válasza PLaci hozzászólására (») Márc 2, 2016 /
 
Szia!
Így próbáld! De ez nem ehhez a PIC-hez való, írd át amit kell!
  1. __CONFIG _CONFIG1,_FOSC_INTOSC&_WDTE_OFF&_PWRTE_OFF&_MCLRE_OFF
  2. __CONFIG _CONFIG2,_WRT_OFF&_LPBOR_OFF&_LVP_OFF
A hozzászólás módosítva: Márc 2, 2016
(#) PLaci válasza Pali79 hozzászólására (») Márc 2, 2016 /
 
Szia!
Köszi a választ!
Nem jöttem volna rá, hogy így kell megadni :-O
Kiírtottam belőle azokat a részeket ami nálam nem szerpel, ezt kapom fordítás után hibaüzenetnek:
Error[133] C:\PIC_PROJECTEK\SPI\SPI.ASM 11 : Hex file format INHX32 required
Pedig a radixben ki van választva a hex

Közben megtaláltam.
Az F betűnél kellett átírni, nem a Radixot
Most már lefordul. Köszi szépen
A hozzászólás módosítva: Márc 2, 2016
(#) bbalazs_ válasza PLaci hozzászólására (») Márc 2, 2016 /
 
A radix csak a forrasfile-ban megadott szamokra vonatkozik.
Ez a hibauzenet a fordito altal letrehozott .hex file formatumara.
(#) Pali79 válasza PLaci hozzászólására (») Márc 2, 2016 /
 
Ha nem titikos akkor az egész forrást feltehetnéd mellékletben, mert így ki tudja mi a nem jó neki...
(#) PLaci válasza Pali79 hozzászólására (») Márc 2, 2016 /
 
Még nincs más a forrásban
Közben megtaláltam.
Az F betűnél kellett átírni, nem a Radixot
Most már lefordul. Köszi szépen
De sajnálattal veszem észre, hogy ehhez a PIC-hez nincs mplab simulátor
Így nem lesz egyszerű. Lehet újabb verziókban már van?
(#) Pali79 válasza PLaci hozzászólására (») Márc 2, 2016 /
 
Idézet:
„De sajnálattal veszem észre, hogy ehhez a PIC-hez nincs mplab simulátor
Így nem lesz egyszerű. Lehet újabb verziókban már van?”

Nem tudom melyik Mplab-ot használod, de a 8.92-ben tudja a simulator.
(#) PLaci válasza Pali79 hozzászólására (») Márc 2, 2016 /
 
8.86-ot. Lehet frissítenem kell. Mégegyszer köszi a leírakat!
(#) nedudgi válasza PLaci hozzászólására (») Márc 2, 2016 /
 
Azt tudod, hogy az MPLab MPASM könyvtárában megtalálhatók a template alkönyvtárak úgy abszolút, mint relokálható programok számára?
(#) PLaci válasza nedudgi hozzászólására (») Márc 2, 2016 /
 
Szia!
Igen tudom. Első fordításkor meg is kérdezi a fordító, hogy milyen címre fordítsa le.
(remélem egyről beszélünk)
(#) PLaci válasza Pali79 hozzászólására (») Márc 2, 2016 /
 
Igen. Feltettem a 8.92-t ebben már felkínálja a szimulátort!
Még egyszer köszi mindenkinek a segítséget!
(#) Hp41C válasza PLaci hozzászólására (») Márc 2, 2016 /
 
A Project / Build Options / Project lapon, az MPLinker fülön a HEX File format keretben válaszd ki az INHX32 -őt.
(#) PLaci válasza Hp41C hozzászólására (») Márc 2, 2016 /
 
Köszi neked is, de már megoldódott a probléma.
Én így választottam ki:
list P=16F1454, F=INHX32,R=HEX ; Processzor 16F1454
De megnéztem amit írtál és az van kiválasztva.
(#) zenetom hozzászólása Márc 2, 2016 /
 
Bár 18F-hez vagyok szokva, de megéri asm-ben programozni ezt a PIC-et (16F1454), meg úgy általában a 16F-et.. ?
Rengeteg BANK van benne, és ha jól látom, itt muszáj bankolni.
Egyébként szerintem a Microchip egyre rosszabb irányba megy...
A hozzászólás módosítva: Márc 2, 2016
(#) Pali79 válasza zenetom hozzászólására (») Márc 2, 2016 /
 
Az assembly vs C és társai örök vitatéma, de szerintem igen, mert ha spórolni kell az idővel és a memóriával az assembly-t nem nagyon lehet megszorítani. Egybként csak xxF1xxx-ben van ilyen sok bank, a régebbi típusokban csak 2-4, az még okos program szervezéssel kezelhető.
A hozzászólás módosítva: Márc 2, 2016
(#) zenetom válasza Pali79 hozzászólására (») Márc 2, 2016 /
 
Most talán nem is az asm vs C miatt írtam (bár az asm közelebb áll a szívemhez), hanem mert szerintem rendkívül zavaró a bankváltogatás. Főleg ha az elmaradásából valamilyen hiba származik. Szóval én kicsit furcsának tartom, hogy 86ezer perifériát raknak egy tokba, aminek ráadásul a következménye, hogy bankolgatni kell. Jó, mondjuk nem hiába írják most már az adatlapokba az új PIC-eknél hogy "C Compiler Optimized Architecture". Mondjuk én inkább úgy értelmezem, hogy "Code Complicating Architecture"...
De részben azért írom ezt, mert nem akarom elfogadni, hogy ma már a C az "Isten".
(#) Pali79 válasza zenetom hozzászólására (») Márc 2, 2016 /
 
Okoz is hibát, én is most hasonló PIC-en dolgozok, pedig nem is olyan nagy szám szerintem, nincs benne olyan sok periféria, de az is 32 bankban van szétszórva, nem is igazán értem, mert a legtöbb bankban csak néhány regiszter van.
(#) zenetom válasza Pali79 hozzászólására (») Márc 2, 2016 /
 
Na igen, speciel ebben a PIC-ben nincs is sok periféira. A sok bankra meg biztos meg van az indok, de nem folytam ebbe bele, maradok a jól bevált 18F-nél. Bár azt is kezdik "elrontani"..
(#) nedudgi válasza zenetom hozzászólására (») Márc 2, 2016 / 1
 
Ez nem jelenthet problémát, ha az assembler támogatását használod. Az "errorlevel +302" esetén szól, ha bankváltásra lehet szükség.
Ha szólt a bankváltás szükségessége miatt, akkor az ember "errorlevel -302" beírásával kikapcsolja, és sajátkezűleg bankot vált, beírja a megfelelő utasítást/makrót, majd visszakapcsolja az "errorlevel+302"-vel. Ez csak a program megírásakor jelent némi pluszmunkát, a későbbiekben már nincs dolgod vele.
(#) usane hozzászólása Márc 2, 2016 /
 
Üdv!

PIC24-en le lehet valahogy tiltani a MCLR lábat?
(#) Hp41C válasza usane hozzászólására (») Márc 2, 2016 /
 
Csak a HVP módon (is) programozhatók esetén : PIC24FxxKAyyyy, PIC24FVxxKAyyyy, PIC24FxxKMyyyy, PIC24FVxxKMyyyy
(#) Pali79 hozzászólása Márc 2, 2016 /
 
Urak!
Kellene egy kis segítség, mert teljesen kifogytam az ötletekből. Adott egy PIC16F1507. Egy órát csináltam vele, de a belső oszcillátorról járatva nagyon pontatlan. Először próbáltam azt, hogy maga a PIC a beslső órajelről jár és csak a Timer1-et hajtom egy 32,768 kHz-es kristályról, de ez nem ment. Ha jól néztem az adatlapban ez a PIC nem tud ilyet, de lehet, hogy tévedek. Viszont próbáltam 4 MHz-es külső kavicsról is, de el sem indul a program és nem tudom miért nem. A 2-3 lábon van a kavics, 2×22 pF a lábakon és a GND-n. A konfigban is az összes oszcillátorra vonatkozó beállítást végigpróbáltam, de semmi.
Van valakinek ötlete, hogy hol rontom el?
(#) zenetom válasza Pali79 hozzászólására (») Márc 2, 2016 /
 
Szia!
Az adatlap szerint ebben a PIC-ben nincs olyan oszci, ami kvarcról tudna járni. Szóval ha nincs külső stabil órajeled, akkor ezzel a PIC-el nem érdemes órát csinálni.
A hozzászólás módosítva: Márc 2, 2016
(#) icserny válasza Pali79 hozzászólására (») Márc 3, 2016 /
 
Miért nem raksz mellé egy RTC-t (pl. DS3231)?
(#) Pali79 válasza zenetom hozzászólására (») Márc 3, 2016 /
 
Hát ez egyre jobb és jobb lesz. Jól megszívattam magam ezzel a PIC-kel. Az adatlap 43. oldalán lévő ábra bal felső részén nem egy kristály van?

icserny: nem akartam plusz dolgokat beletenni az áramkörbe, a lehető legegyszerűbbre szerettem volna megcsinálni. Több PIC-nél használtam azt a megoldást, hogy a főprogram végrehajtása ment a belső órajelről, mert ott nem nagyon számít a pontosság, a Timer1 meg ment egy óra kristályról és máris megvolt egy elég pontos óra. De elméletileg 4MHz-es kristállyal is meg lehet csinálni, mert ha jól van beállítva a Timer1 akkor 0,5 másodpercenként ad megszakítást.
De ez itt úgy látom nem működik.
(#) icserny válasza Pali79 hozzászólására (») Márc 3, 2016 /
 
Az időmérés az a terület, ahol nagyon kis hiba (egy milliomodrésznyi eltérés, azaz 1 ppm) is bosszantó tud lenni, ha felhalmozódik. Ehhez viszonyítva a 20 ppm-es kvarc is kiábrándító eredményt ad (szoftveres kompenzációval kell ügyeskedni, hogy elfogadható eredményt kapjunk), a százalékos hibájú belső oszcillátor pedig nyilvánvalóan használhatatlan.
(#) Pali79 válasza icserny hozzászólására (») Márc 3, 2016 /
 
Persze, viszont ha jól tudom minden RTC ic-t is óra kvarc hajt, tehát a hiba ott is jelentkezhet. Vannak nyilvánvaló előnyei az RTC alkalmazásának, de számomra egyik sem nagyon releváns. Ezért lett volna jó normális kvarccal hajtani magát a PIC-et és abból lehetne egy viszonylag elfogadható megoldást kreálni. De továbbra sem értem, hogy ezt a PIC-et miért nem lehet külső kvarcról hajtani.
Következő: »»   756 / 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