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   927 / 1207
(#) attika válasza eSDi hozzászólására (») Ápr 14, 2017 /
 
Átállítottam, hogy minden indításnál rendszergazdaként induljon és így már nincs hiba, be lehet zárni a programot.
Köszönöm a segítséget.
(#) cross51 hozzászólása Ápr 14, 2017 /
 
Sziasztok!

Nem rég említettem, hogy kellene nekem excel fájlos pinout.
"Elkészült" az exportáló program.
Csinál 2003/2007-es excel-t.

Esetleg érdekel valakit?
Ha igen még nem küldöm mert még sufnisan néz ki (kép)
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 14, 2017 /
 
A hibaüzenetek konkrétan:
- ; expected, but 'TRISRA0_Bit' found
- ; expected, but 'at' found
- Specifier needed
- Invaild declarator expected'(' or identifer
Ezeket mind a négy sornak megfelelően kiírta, pedig a hibás sorok alatt még kettő sor van ugyanilyen felépítéssel, de arra már nincs ERROR!
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 14, 2017 /
 
Találtan manualját, eszerint:
ezt írtad:"sbit LCD_D4_Direction at TRISRB4_Bit;"
helyettte:sbit LCD_RS_Direction at TRISB4_bit;
tehát R betű kimarad a direction sorokban.
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 14, 2017 /
 
Tehát az "R" betű nem kell...? Én viszont ezt találtam a súgóban: [mellékelt kép]
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 14, 2017 /
 
Nem olvasható a képed. Esetleg LCD-nél egy porton kell lenni mindennek, tehát pld.: PORTB van az EN, RS, D4-D7. Nem tudom, próba megmondja.
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 14, 2017 /
 
Töröltem az "R" betűket, így már jó, viszont továbbmenve máshol is van ERROR:
  1. C1ON_Bit = 0;
  2. C2ON_Bit = 0;
  3. ANSEL = 0;
  4. ANSELH = 0;
- Undeclared indetifier 'C1ON_Bit' in expression
- Undeclared indetifier 'C2ON_Bit' in expression
- Undeclared indetifier 'ANSELH' in expression
  1. LCD_CHR(1,1,keydata)
- ; expected, but '}' found
  1. lcdtele = 0;
- '}' expected ';' found
  1. {
  2. lcdtele = 0;
  3. lcdoszlop = 1;
  4. lcdsor = 1;
  5. LCD_CMD((_LCD_CLEAR);
  6. Delay_ms(5);
  7. }
Az alsó } nem tetszik neki:
- '}' expected '}' found
  1. {
  2. lcdoszlop = 1;
  3. lcdsor++;
  4. }
Itt is az alsó } nem jó:
- '}' expected '}' found
  1. {
  2. lcdtele = 1;
  3. }
- Internal error ''
Eddig ennyit írt ki, bár lehet, hogy ezek kijavítása után talál még...
A hozzászólás módosítva: Ápr 14, 2017
(#) Pali79 válasza nagym6 hozzászólására (») Ápr 14, 2017 /
 
Ha új lapon nyitod, akkor nagyítható, de a képen is az van amit írtál.
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 14, 2017 /
 
Nem ismeri a "C1ON_bit" kifejezést, próbáld a PIC leírásból a komparátor konfig regiszterbe írni, CMCON = 0, ANSEL = 0, kész.
(#) nagym6 válasza Pali79 hozzászólására (») Ápr 14, 2017 /
 
Valóban, elfelejtettem, hogy nem ugyanaz a képre, vagy alá a névre kattintani. Most már nagy a kép.
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 14, 2017 /
 
Jó, cseréltem, viszont a video leírásából inkább letöltöttem a kódot, amit átszabtam az én PICemhez, de a portoknál valami még mindig nem jó:
- Assigning to non-lvalue 'TRISA0'
- Assigning to non-lvalue 'TRISA1'
- Assigning to non-lvalue 'TRISA2'
- Undeclared indentifier 'PORTA2' in expression
- Assigning to non-lvalue 'TRISA3'
- Undeclared indentifier 'PORTA3' in expression
- Assigning to non-lvalue 'TRISA4'
- Assigning to non-lvalue 'TRISA5'
- Assigning to non-lvalue 'TRISA6'
- Assigning to non-lvalue 'TRISB0'
- Assigning to non-lvalue 'TRISB1'
- Assigning to non-lvalue 'TRISB2'
- Assigning to non-lvalue 'TRISB3'
- Assigning to non-lvalue 'TRISB4'
- Assigning to non-lvalue 'TRISB5'
- Assigning to non-lvalue 'TRISB6'
- Assigning to non-lvalue 'TRISB7'
Plusz mindegyik mellé egy ilyen:
- Undeclared indentifier 'PORTE' in expression
Más baja ezzel most már nincsen, csak még ezek nem jók neki!
(#) sonajkniz válasza Udvari Zsombor hozzászólására (») Ápr 14, 2017 /
 
Biztos, hogy C-ben a TRIS regisztereket csak ilyen kisregény stílusban lehet beállítani?
Én azt hittem, azért magasabb szintű programnyelv, hogy kevesebbet kelljen írni mint assemblyben.
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 14, 2017 /
 
Írd be így.
A hozzászólás módosítva: Ápr 14, 2017
(#) sonajkniz válasza nagym6 hozzászólására (») Ápr 14, 2017 /
 
Mindjárt jobban néz ki!
(#) _BiG_ válasza Udvari Zsombor hozzászólására (») Ápr 14, 2017 /
 
Idézet:
„Plusz mindegyik mellé egy ilyen:
- Undeclared indentifier 'PORTE' in expression”

Mert pl. a picedben nincs E-port.... Szóval még szabogasd azt a kódot...
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 14, 2017 /
 
Be van állítva a PIC típusa 16F88? Mert PORTE portnak nem szabadna megjelenni, vagy esetleg a programban van valahol PORTE?
(#) pajti2 hozzászólása Ápr 15, 2017 / 2
 
C programozási tippek minden érintettnek.

Értelmezni a C fordító hibaüzeneteit, megtanulni és gyakorolni szintaktikát, azt nem jó ötlet pic környezetben elkezdeni, mert a pic fordítók rigolyásabb fajták. Sokkal könnyebb boldogulni kezdetben asztali gépes környezetben. Általában ha valaki elkezdi a C-t, nem csak a szintaktikákat és a hibaüzenetek értelmezését kell gyakorolnia a programozási logikai gondolkodás elsajátítása mellett, de főleg az átlátható szövegszerkesztést is gyakorolnia kell. Például hogy legalább annyi esze legyen, mint egy egészen szőke titkárnőnek. Fájdalmas tény, hogy némelyik programozónak még annyi sincs, és az nagyon tisztán látszik egyetlen mintányi kódrészletéről. A smile-t azért nem tettem ide, mert szerintem nem vicces az a tény egy kicsit sem.

Amit tenni kellene:

1. Telepíteni asztali pc-re erről a lapról a 9.0 MB méretű csomagot.

2. Lépésről lépésre elolvasni, megérteni, kipróbálni a leckéket és példákat itt.

3. Gyakorolni, gyakorolni, és gyakorolni nagyobb programokat írni, félretenni őket pár hónapra, és utána előszedni újra. Kell a tapasztalat, milyen érzés nagy halom mákos tésztával szembesülni utólag, amiért nincs kit hibáztatni, mert mi magunk csináltuk, és mi magunk hagytuk ott olyan állapotban. Az a legjobb - és talán egyetlen - módja kigyógyulni a programozói szőkeségből, ami eltart minimum 1-2 évig.
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 15, 2017 /
 
Ez elég lesz? Mert csak RA2 és RA3 lábaknak kellene bemenetnek lennie a billentyűzet miatt. Vagy hogy van ez?
Idézet:
„Trisa = % 01111100
Trisb = % 00001111
Porta = 0
Portb = 0”
A port bemenet és B port kimenet?
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 15, 2017 /
 
A típust beállítottam... - Most nézem, hogy én nem is írtam E portot! Akkor ezt honnan vehette a program?
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 15, 2017 /
 
Trisa = %01111100 ez egyben a 8db. A port egymás után írva. Jobbról első a Trisa0, második a Trisa1, így tovább. Ahol 1-es az bemenet, ahol 0 az kimenet. Trisa2 és Trisa3 1-es, így lesznek bemenetek, ahol 0 van azok kimenetek. Ugyanez van TrisB-nél is.
Fordítsd le újra a megfelelő típussal. Mi volt az előző típus? Biztosan maradt a programban valami E portos rész.
(#) _BiG_ válasza Udvari Zsombor hozzászólására (») Ápr 15, 2017 /
 
Ha a linkelt video alatti link programját gyúrod (19_ora.c), akkor abban pl van ilyen:
void main()
{
TRISA = 0;
PORTA = 0;
TRISB = 255;
TRISC = 255;
TRISD = 0;
PORTD = 0;
-> TRISE = 0;
-> PORTE = 0;


Kiemelés tőlem. De lehet még máshol is hivatkozás rá, nem csak itt.
Mondjuk a TRISC meg a TRISD is fölösleges...

Még egy megjegyzés: a példaprogram nagyon vacakul van tagolva, javaslom, hogy minden kapcsos zárójelet két szóközzel beljebb tegyél, ha továbbiak vannak egymásban, akkor még beljebb következzen, persze a lezárás után következő sorok meg ugyanennyivel kijjebb. Így az összetartozó zárójelek (és utasítássorok) függőlegesen oszlopba rendeződnek, könnyebb lekövetni, melyek tartoznak össze. Ahogy a hibaüzeneteidet néztem, a nagy gyomlálás közepette nem figyeltél a zárójelekre, pontosvesszőkre. Így szegény fordító teljesen belezavarodott végül - ahogy ezt neked meg is jósolták.

A tagolásra a példa, hogy is nézzen ki (a 19_ora.c állományt másoltam ide):
  1. while(1)
  2.   {
  3.      if(PS2_Key_Read(&keydata, &special, &down)) // megnyomtunk egy gombot
  4.        {
  5.    
  6.          if(down && (keydata >=32))// nem funkció billentyût nyomtam meg (ALT,CTRL, F12 stb)
  7.           {
  8.    
  9.             if(lcdtele == 1)
  10.              {
  11.                lcdtele=0;
  12.                lcdoszlop = 1;
  13.                lcdsor = 1;
  14.                LCD_CMD(_LCD_CLEAR);
  15.                PORTE.F2 = 0;
  16.                Delay_ms(5);
  17.              }
  18.    
  19.            LCD_CHR(lcdsor,lcdoszlop,keydata);
  20.            lcdoszlop++;
  21.            if(lcdoszlop>=17)
  22.             {
  23.                lcdoszlop = 1;
  24.                lcdsor++;
  25.             }
  26.           if(lcdsor >= 3)
  27.            {
  28.               lcdtele=1;
  29.               PORTE.F2 = 1;
  30.             }
  31.    
  32.          }//funkció gombot nyomtunk e?  vége


(Természetesen nem minden kapcsos zárójel páros a fenti példában, de nem akarom az egészet itt szerkesztgetni...)

Azaz, ahogy lépkedsz be a zárójelekbe, egyre beljebb kezded, majd ahogy lépkedsz ki, egyre kijjebb. Így átláthatóbb marad a program és le tudod követni akár görgetéssel is, hogy minden kapcsos zárójelnek van-e párja és ott van-e ahol kell lennie. Ha eltévedsz a zárójelezéssel, akkor sose fogod befejezni a hibakeresést, illetve még ha lefordul is a program valami csoda folytán, egyáltalán nem lehetsz biztos benne, hogy jól is fog működni. mert darabra lehet, hogy meglesznek a zárójelek, de biztos, hogy a megfelelő utasításokat tartalmazzák?
A hozzászólás módosítva: Ápr 15, 2017
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 15, 2017 /
 
Átírtam, de még mindig nem jó, és máshol is vannak sajnos hibák:
  1. Trisa = % 00110000
- Invaild expression
- ; expected, but 'Trisb' found
  1. CMCON = 0;
- '}' expected ';' found
  1. LCD_Chr(lcdsor,lcdoszlop,keydata);
- Syntax error: ')' expected, but 'lcdoszlop' found
- ; expected, but ',' found
- Specifier needed
- Invaild declarator expected'(' or identifier
- ; expected, but ')' found
- 'keydata' Indentifier redefined
- Specifier needed
- Invaild declarator expected'(' or identifier
- '' Identifier redefined
- Internal error ''
Igen, ezt a sokat ugyanarra a sorra írta ki! Na most mi van?
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 15, 2017 /
 
Figyelj oda jobban, Trisa = után mit írtam?
Változók vannak definiálva?
(#) _BiG_ válasza Udvari Zsombor hozzászólására (») Ápr 15, 2017 / 1
 
Idézet:
„- '}' expected ';' found”


Elrontottad a zárójelezést. Kezdd elölről az egészet, mert mivel nagyon-nagyon kezdő vagy, nem biztos, hogy belátható időn belül ki tudod javítani - hiszen azt se tudod, mi mire való, tehát nem is tudod felismerni, mikor mi kell.

Pontosvessző: utasítás lezárás. Mindig kell. Ahogy nézem, te kihagyod.

Kapcsos zárójel: ha egy utasítás (pl: if ( "feltétel" ) "utasítás, ha igaz" ; ) csak egy további utasítást tartalmazhat, tehát csak a következő sorra (vagy ha mögé írod, arra) fog csak vonatkozni (pl. itt a feltételes végrehajtás), de neked több mindent kéne odatenni, akkor kapcsos zárójelek közé kell tenni azokat, a fordító számára ez egy blokkot jelent, olyan, mintha csak egy utasítás lenne ott, de természetesen az egész blokk lefordul és működni fog.
Nagyon figyelj erre!
A hozzászólás módosítva: Ápr 15, 2017
(#) sonajkniz válasza nagym6 hozzászólására (») Ápr 15, 2017 /
 
Azt már megtapasztaltuk, hogy Zsombinak kissé szelektív a látása.
A hozzászólásokból csak részleteket lát meg.
Ezért kell többször leírni neki ugyanazt.
Légy vele türelmes!
(#) Udvari Zsombor válasza _BiG_ hozzászólására (») Ápr 15, 2017 /
 
Ez nincs önálló kapcsos zárójelben:
  1. LCD_Chr(lcdsor,lcdoszlop,keydata);
  2. lcdoszlop++;
Biztos, hogy itt jó helyen van "lcdoszlop++;"?
És ezekkel mi lehet a baja?
  1. Trisa = % 00110000
  1. CMCON = 0;

Ehhez pedig tényleg 10 hiba van:
  1. LCD_Chr(lcdsor,lcdoszlop,keydata);

És az eredeti kapcsos zárójelekhez pedig nem nyúltam, csupán egy "lcdtele" résznél felkapcsolódó LEDet (egy lábat logikai 1-re kapcsol, míg ki nem ürül az lcd) akartam kigyomlálni!
(#) nagym6 válasza Udvari Zsombor hozzászólására (») Ápr 15, 2017 /
 
Trisa = %01111100
(#) Udvari Zsombor válasza nagym6 hozzászólására (») Ápr 15, 2017 /
 
Áh, nem oszt, nem szoroz, ott ugyanúgy maradt az a két hiba!
És ezt nem értem:
  1. LCD_Chr(lcdsor,lcdoszlop,keydata);
  2.      lcdoszlop++;
  3.  
  4.      if (lcdoszlop>=17)
  5.      {
  6.      lcdoszlop=1;
  7.      lcdsor++;
  8.      }
Azt a 10 hibát most a "lcdoszlop++;" és "if" közötti üres sorra írta be!
(#) _BiG_ válasza Udvari Zsombor hozzászólására (») Ápr 15, 2017 /
 
Az, hogy az az lcdoszlop jó helyen van-e, azt így nem tudom, mert egy utasítás elhelyezése az a megvalósítandó feladattól függ, ennyire nem mentem bele. De előbb tanulj meg algoritmizálni, azaz a feladatot bontsd le lépések folyamatára (papír-ceruza, rajzolás) és aztán tedd kódba. Hidd el, jobb lesz, nem fogsz elkeveredni a programban.

Ez a hiba
Trisa = % 00110000

- Invaild expression
- ; expected, but 'Trisb' found

Azt mondja, érvénytelen kifejezés, illetve egy pontosvesszőt vár, de azt te kihagytad.
Helyesen (nagym6 se írta jól):

Trisa = %01111100 ; <- a pontosvesszőre figyelj!!!!!

Illetve figyelj arra, hogy a C nyelvű fordítók kisbetű-nagybetű érzékenyek (case sensitive), így nem mindegy, hogyan írod le a neveket. Trisa vagy TRISA? Nem mindegy!

Az egy sorra 10 hiba: mivel sem a pontosvesszővel, sem a kapcsos zárójellel nem vagy tisztában és a fene se tudja, mint is "alkottál", így a fordító eltévedhetett. Mert a hibás központozás meg tudja zavarni. A fordító szigorúan logikus - elvégre program - így a rossz zárójelezés, pontosvessző elhagyás olyan dogokat rendelhet össze a kis agyában, amik valójában nem tartoznak össze. Miután ezt a katyvaszt fel akarja oldani, nem fog neki sikerülni, és írja a hibaüzeneteket, de már a belezavarodás miatt látszólag összevissza.
A hozzászólás módosítva: Ápr 15, 2017
(#) zenetom válasza _BiG_ hozzászólására (») Ápr 15, 2017 /
 
Nekem volt már olyan, hogy úgy bekattant, hogy az egész projectet újra kellett kezdeni. Hiába volt jó a kód. Bár ez az IDE hibája volt, nem a fordítóé.
Következő: »»   927 / 1207
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