Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   19 / 118
(#) Jossz válasza bladika hozzászólására (») Márc 7, 2009 /
 
Szia!

Többször dolgoztam már 4550-el, de azért én is megnéztem az adatlapot... Csatlakozom MPi-hez: a 4550-ben csak a B és a D porton vannak belső. programból vezérelhető portszintű felhúzó ellenállások. A D port ilyen vezérlése pedig nem megy "direktben", hanem pontosan úgy, ahogy azt MPi írta.
(#) bladika válasza MPi-c hozzászólására (») Márc 7, 2009 /
 
Köszönöm a segítséget mindkettőtöknek, közben megoldottam úgy, hogy "NOMCLR"!

És igazatok van nem tud olyat a 18f4550, de azt is tudom honnan vettem. Ennek az adatlapjával meg volt nyitva egyszerre a 16f727 -nek az adatlapja is és éjszaka belekeveredtem.

Köszi még egyszer!
(#) zsozso128 hozzászólása Márc 21, 2009 /
 
Sziasztok!

Nemrég kezdtem el C-ben PIC-t programozni, és a megszakításkezelésnél elakadtam. (PIC16f84A)
Megszakítás után szeretnék egy bitet törölni, de a fordító hibát ír ki.
  1. INTCONbits.intf  =0;
//ezt akarom 0-ba állítani
Error 12 "int1.c" Line 21(1,11): Undefined identifier INTCONbits
próbálkoztam így is:
  1. #asm
  2.         BCF     INTCON,INTF
  3. #endasm

eredmény: Undefined identifier INTCON
Mit csinálok rosszul?
Előre is köszönöm a segítséget !
(#) potyo válasza zsozso128 hozzászólására (») Márc 21, 2009 /
 
Ilyenkor hasznos, ha megírod, hogy melyik fordító. Az INTCONbits alapján C18-al próbálkozol, ami viszont - mint ahogy a neve is mondja - csak 18F-hez való, tehát 16F-hez nem lehet használni.

Ha már ebbe a témába írtad, akkor valószínűleg CCS, abban INTCONbits biztosan nincs, ott úgy emlékszem, a fordító törli az INTF bitet magától, nem kell külön beleírni a kódba. Nézd meg a generált listing fájlt, abból egyértelműen kiderül. Az INTCON nem ismerete szintén a CCS-re utal. Sajnos ebben a fordítóban kézzel kell beírni a regisztereket, emiatt én inkább kerülném a helyedben... A Hi-Tech fordítói lettek a Microchip hivatalos C fordítói, inkább azokat használd.
(#) El_Pinyo válasza zsozso128 hozzászólására (») Márc 21, 2009 /
 
Szia !
Szerintem hiányzik egy preprocessor direktíva, azért akad ki a fordító.
Így csináld :

  1. #BIT INTF = 0x0B.1


Így már tudsz hivatkozni az INTCON regiszter INTF bitjére.
Erre azért van szükség, mert a CCS-C nem támogatja a közvetlen regisztercímzést. Ezzel az eljárással egy memóriacímet adtál az INTF bitnek. Tanulmányozgasd a PIC adatlapjában a register file map szekciót.
Üdv.

szerk.: lehet, hogy nem is a CCS-el küzdesz?
(#) zsozso128 válasza potyo hozzászólására (») Márc 21, 2009 /
 
Igen azért ebbe a témába írtam mert CCS-t használok.
Az INTCONbits csak próbálkozás volt, nemtudtam , hogy csak a 18-hoz jó. A fordító törli az INTF bitet magától? Ezt én nem tapasztaltam, ezért akarom "kézzel" törölni.
(#) zsozso128 válasza El_Pinyo hozzászólására (») Márc 21, 2009 /
 
Beírtam:
  1. #BIT INTF = 0x0B.1

Ezt írja: A numeric expression must appear here
(#) El_Pinyo válasza zsozso128 hozzászólására (») Márc 21, 2009 /
 
Tedd fel légy szíves a programot, úgy könnyebb lenne segíteni.

szerk.: Amikor hívatkozol az intf bitre, akkor azt így teszed: pl.: INTF = 0; ?
(#) zsozso128 válasza El_Pinyo hozzászólására (») Márc 21, 2009 /
 
Igen, úgy hivatkozom.
A programot csatolom.

int1.c
    
(#) El_Pinyo válasza zsozso128 hozzászólására (») Márc 21, 2009 /
 
A #bit -et a #byte után tedd be, ne a megszakítást kiszolgáló rutinba! Felfigyeltem még egy problémára. A főprogram inicializálós részében a b port 0. bitje bemenetre van állítva, gondolom neked kimenetként kellene, akkor ezt módosítsd.
Nem néztem meg a Pic adatlapját, de lehet, hogy a 6 MHz sok lesz a kontrollernek.
A #byte PORTB = 0x06 is javítsd.


Szerk.: Ránéztem az adatlapra, bírni fogja a 6MHz-et, de a #fuses-nál az XT-t írd át HS-re
(#) MPi-c válasza zsozso128 hozzászólására (») Márc 21, 2009 /
 
Első fontos szabály, hogy megszakításban késleltetéseket ne használj! Nem arra való. Kapcsolókkal (flagek) jelezd a főprogramnak az esemény megtörténtét és ott kezeld az eseményt.
Az INTF törlését elvégzi az interrupt kezelése.
(Nézd meg fordítás után a lista fájlt, benne kell lennie.)
A megszakítást lefutóélre állítottad, gondolom, külső felhúzó ellenállást raktál.
6 MHz-es órajel -> HS-re kell konfigurálni az oszcillátort.
(#) MPi-c válasza El_Pinyo hozzászólására (») Márc 21, 2009 /
 
Idézet:
„inicializálós részében a b port 0. bitje bemenetre van állítva”

Az úgy jó, különben hogy nézi a külső megszakítást.

A "#byte PORTB = 0x08" tényleg nem a PORTB-re mutat, de ez a sor fölösleges, mert a "PORTB"-t nem használja a programban.
(#) El_Pinyo válasza MPi-c hozzászólására (») Márc 21, 2009 /
 
Jajj !!
Ez igaz
Kicsit megzavart a főprogramban az output_b(11111111)
(#) zsozso128 válasza El_Pinyo hozzászólására (») Márc 21, 2009 /
 
A b port 0. bitje azért van bemenetre állítva mert azon van a nyomógomb ami a megszakítást végzi. Az igaz, hogy a PIC elméletileg csak 4 MHz-es, de azért volt 6-os mert, még azzal is kipróbáltam és fut. A #bit -et a #byte után tettem be és máris működik. Nagyon szépen köszönöm a segítséget.
(#) El_Pinyo válasza zsozso128 hozzászólására (») Márc 21, 2009 /
 
Örülök, hogy végül is sikeredett a mutatvány. Elnézést a figyelmetlenségért, kicsit felületesen néztem át a kódodat. Ez van, ha az ember egyszerre több dologgal foglalkozik. Jó tanácsként javasolnám, hogy nézd át a CCS helpjét a direktívákkal kapcsolatban is.
Csak így tovább, sok sikert a programozásban !
(#) MPi-c válasza zsozso128 hozzászólására (») Márc 21, 2009 /
 
Felesleges neked, kézzel birizgálnod az INTF bitet, a fordítás odateszi:
  1. .................... /*#asm
  2. ....................    BCF     INTCON,INTF // ürítem a megszakítás flaget!
  3. .................... #endasm*/
  4. .................... }
  5. .................... //===================
  6. 005E:  BCF    0B.1    <-----
  7. 005F:  BCF    0A.3
  8. 0060:  GOTO   025
  9. .................... void main(){


Tehát az a #BIT , és INTF = 0; teljesen felesleges.
De ha neked így tetszik:
  1. .................... INTF = 0;
  2. 005E:  BCF    0B.1    <------
  3. .................... }
  4. .................... //===================
  5. 005F:  BCF    0B.1    <------
  6. 0060:  BCF    0A.3
  7. 0061:  GOTO   025
  8. .................... void main(){
(#) potyo válasza zsozso128 hozzászólására (») Márc 21, 2009 /
 
Nyomógombot külső megszakítással csak hardveres pergésmentesítéssel szabad kezelni, mert anélkül a kontroller egy gombnyomás helyett sok gombnyomásként fogja érezni. RC tag nem elég, hiszterézissel rendelkező kapu is kell utána az RC tag és a pic bemenete közé. Ezért célszerűbb (főleg több nyomógomb esetén) szoftveresen pergésmentesíteni. Keress rá itt a fórumon a PIC-es témákban, volt már ennek a megvalósításáról többször is szó.
(#) NagyKrisz hozzászólása Ápr 2, 2009 /
 
Birka kérdésem van:

C18 compilerbe a LATA(hexában megadva melyik kimenet) parancs beállítja a kimeneteket nullába vagy 1-be, azonban ugyan ennek a csak ezt találtam output_low(pinX) vagy output_high(pinX).
Nah én ugyanezt akarom elérni a CCS-ben, mi a megoldás?
(#) MPi-c válasza NagyKrisz hozzászólására (») Ápr 2, 2009 /
 
Ne haragudj, de elég értelmetlen lett, amit írtál.
1.
Idézet:
„C18 compilerbe a LATA(hexában megadva melyik kimenet) parancs beállítja...”

A LATA nem a C18 parancsa, hanem a PIC A portjának latch regisztere. Igazság szerint mindegy, hogy a PORTA-ba vagy a LATA-ba írunk, de a helyes szokás az, hogy a LAT-ba írunk és a PORT-ból olvasunk(Javaslom tanulmányozni az adatlapban a portok felépítését). A regiszter hexa kódját minden PIC adatlap tartalmazza!
2. A CCS-ben a output_low(pinx) vagy output_high(pinX) egy bitet változtat a porton. Ha az egész portot akarod egyben, akkor az output_x (value) függvény segít, ahol a x helyére a port betűjét kell írni.
3. Meg lehet oldani úgy is, hogy mutatóval hivatkozol a LATA-ra:
  1. #word LATA = 0x0F89
  2.  
  3. //aztán a kódban pl.
  4. LATA = 0x55;
(#) icserny válasza NagyKrisz hozzászólására (») Ápr 2, 2009 /
 
Idézet:
„csak ezt találtam output_low(pinX) vagy output_high(pinX).”

Olyat miért nem találtál, hogy:
output_a(value), optput_b(value), output_c(value) stb.?

Példa: OUTPUT_B(0xf0);
(#) bladika hozzászólása Ápr 6, 2009 /
 
Sziasztok!

Nincs meg esetleg valakinek CCS Compilerhez az update amiben már a 18f14k50 is benne van? Nagyon jó lenne!

Előre is köszi!
(#) MPi-c válasza bladika hozzászólására (») Ápr 6, 2009 /
 
Bővebben: Link
Szerintem működik.
(#) bladika válasza MPi-c hozzászólására (») Ápr 6, 2009 /
 
Jövök 1el! Vettem 3db ilyen ICt legyártottam a panelokat, minden kész és akkor látom, hogy nem támogatja a Compiler! Kicsit kétségbe estem! Tényleg köszi!
(#) potyo válasza bladika hozzászólására (») Ápr 6, 2009 /
 
Használhatnád a gyári fordítót hozzá...
(#) bladika válasza potyo hozzászólására (») Ápr 6, 2009 /
 
Tudom igazad van, de már annyira megszoktam ezt, meg ennek jó a helpje! Ezzel nem azt mondom, hogy a gyárinak rossz, mert annak még nem is láttam!
(#) sanyo hozzászólása Ápr 15, 2009 /
 
Sziasztok! Segítséget szeretnék kérni a köv. problémában a fájlmellékletben szereplő fájlt szeretném valahogy lefordítani .hex fájlba...pontossan mi is kell hozzá? Milyen programot kell alkalmaznom? Előre is köszi a válaszokat!
(#) icserny válasza sanyo hozzászólására (») Ápr 15, 2009 /
 
Ezt a www.microchip.com oldalról letölhető MPLAB fejlesztői programcsomag MPASM assembler fordítójával kellene megpróbálni. A CCS C fordítóhoz (amiről a topik szól) nem sok köze van...

Watt fórumtársunk honlapján
találsz egy hasznos linkgyűjteményt.
(#) czinka hozzászólása Ápr 20, 2009 /
 
CCS fiuk ismét erre jártak http://www.megaupload.com/?d=1CUR432H
(#) sysy válasza czinka hozzászólására (») Ápr 20, 2009 /
 
Köszönjük czinka!

:kalap: :wave:
(#) czinka hozzászólása Ápr 23, 2009 /
 
Leírás hozzá
Következő: »»   19 / 118
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