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   60 / 118
(#) nagy_david1 válasza Zsora hozzászólására (») Aug 14, 2011 /
 
4 és pascal és fél év C. Az előzőt kényszerből ezért azzal nem is kérkedek. Az a fél év C ami érdekelt is.
(#) watt válasza nagy_david1 hozzászólására (») Aug 14, 2011 /
 
Az a baj, hogy nem ismered a mikrovezérlő műkösését. Kezd ezzel! Készülj fel, hogy ez egy logikai áramkör, nem egy "PC".
(#) nagy_david1 válasza watt hozzászólására (») Aug 14, 2011 /
 
A "PIC mikrovezérlők alkalmazástechnikája, Kónya László - Kopják József" könyv ajánlott olvasmány? Úgy értem, hogy ismerős és kezdőnek szól?
(#) Zsora válasza nagy_david1 hozzászólására (») Aug 14, 2011 /
 
4 év nagy idő.
Azért kérdeztem rá erre, mert ez a több-LED-villogtatós feladat olyan egyszerű, hogy aki már korábban programozott bármit is, az pikk-pakk megoldja. A korábbi példámból is látszik hogy csupán egy végtelen ciklusban kell két vagy több számlálót csökkenteni, majd azok nullázódásakor újratölteni az adottat és invertálni a hozzátartozó LED állapotát.
Ha ez nem érthető számodra...
(#) watt válasza Zsora hozzászólására (») Aug 14, 2011 /
 
Nem feltétlenül. A PC esetében nem kell ismerni a hardvert és nem is LED-eket villogtatsz. (Eltekintve az LPT protos játékoktól...)
(#) Zsora válasza watt hozzászólására (») Aug 14, 2011 /
 
Egy mikrovezérlő pont úgy működik mint egy számítógép. Aki tud számítógépet programozni, az mikrovezérlőt is tud. (Azért persze ajánlatos ismerni hogy hogyan is épül fel hardware szinten egy ilyen rendszer.)
(#) watt válasza nagy_david1 hozzászólására (») Aug 14, 2011 /
 
Jó, de előtte elektronikai ismereteket kell szerezz a digitális logikai áramkörökről, majd a memóriákról, egyéb perifériákról stb. Ha ez megvan, akkor meg kell érteni, hogyan is működik egy mikrovezérlő, amit az adatlapok rajzaiból is meg lehet érteni, ha elektronikából és digitlogikából már jó vagy. Annak semmi értelme, hogy neki állj úgy programozni PIC-et, hogy ezeket nem ismered. Persze ha csak játszani akarsz, annak jó a LED villogtatás példákból öszeollózva, de ha komolyan foglalkozni akarsz ezzel, akkor arra időt kell szánni és sokat tanulni. (sajnos ismét offba hajlottunk ebben a topicban. Látod ide értünk az RTOS-tól...)
(#) Zsora válasza watt hozzászólására (») Aug 14, 2011 /
 
Ezen most ne vesszünk össze!
Egy számítógépnél is ismerni kell valamennyire a hardware-t. És miért lenne bonyolultabb egy kimenet invertálása egy szöveg kiírásánál?
Persze lehet hogy számomra azért olyan egyformák mert számítógépet is hardware-közeli módon és assemblyben programoztam.
Na jó, lehet hogy igazad van.
A témától való eltérést akkor itt befejezem.
(#) watt válasza Zsora hozzászólására (») Aug 14, 2011 /
 
Nem értünk egyet, pont a kitételed miatt. (Ja és nem ugyanúgy működik, és más logikával is kell programozni!)
(#) icserny válasza nagy_david1 hozzászólására (») Aug 14, 2011 /
 
Idézet:
„az időzítés abbamaradna és újra kezdődne amikor váltok.”
A "hagyományos" PIC16 esetén nem valósítható meg a preemptív RTOS, mert a veremtár nem olvasható ki, tehát nem is menthető el. Ezért a várakozó ciklus sem szakítható meg, tehát más megközelítés kell.

Az egyik leggyakrabban alkalmazott megközelítés arról szól, hogy (hardveres) időzítéssel, vagy timer megszakításokkal időszeleteket képezünk, s minden időzítés ezen időszeletek egész számú többszöröse lesz. Ahány feladat fut, annyi (vissza)számláló kell, s amelyik éppen lejárt, az ahhoz tartozó feladatot hajtjuk végre.

Ha "feladatok" egyszerűek, akkor interrupt szinten is végrehajthatók. Ha nem, akkor egy-egy jelzőt állítunk csak be, s a főprogram ezeket figyelve ágazik el.

Egyszerű, mint a faék, s nem kell hozzá semmi hókusz-pókusz.
(#) nagy_david1 válasza icserny hozzászólására (») Aug 14, 2011 /
 
Ugyan így indultam el most ahogy írtad. Remélem sikerül. Ettől eltekintve megfogadom watt tanácsát. Köszönöm.
(#) vilmosd válasza nagy_david1 hozzászólására (») Aug 14, 2011 /
 
Konyvespolc. Ha meg nem ismerned. Van sok irodalom a PIC vilagarol. Mintapeldakat is talasz.
(#) nagy_david1 válasza vilmosd hozzászólására (») Aug 14, 2011 /
 
Köszi szépen. Jól elleszek velük. Mellesleg nem tudtam több könyvespolc is van mert egyben járkáltam amit a könyves topikba kaptam és oda nem volt ennyi minden feltöltve pic-ekről.
(#) Gettobike hozzászólása Aug 16, 2011 /
 
Sziasztok!
RS232 problémáim akadtak. A beépített rutin nem hajlandó működni, bármit csinálok vele. A ccs fórumán is olvasgattam, kipróbáltam sok leírt dolgot, sajnos eredménye nem lett. A picből tudok adatot küldeni, ez hibátlanul ki is megy. Fogadni viszont nem tudok. Addig se jut el a dolog, hogy a vételi megszakítás rutinba ugorjon a program. A portok illesztettek egy max232 icvel. Mi lehet a gond? Mellékeltem a forrásfilet.

rs232teszt.c
    
(#) vilmosd válasza Gettobike hozzászólására (») Aug 16, 2011 /
 
Lehet hogy a rcv buffer tulcsordul, es utana uj karakter vetelenel nem ad IT-t. Figyelni kell a RCSTA regiszterben az OERR bitet, es ha 1 a CREN=0, CREN=1 utasitasokkal ki majd be kell kapcsolni a vevot. es utana ki kell olvasni a veteli buffert.
(#) szkrep válasza Gettobike hozzászólására (») Aug 17, 2011 /
 
Ha simán pollingolsz, akkor tudsz fogadni? Ha az megy, hardveresen jó az illesztésed befelé is. Ha jól értem, el sem sül a megszakítás, akkor első körben azt kell életre kelteni. Ehhez a pichez mikor egy sima B port megszakítást kellett csinálnom, a regisztereket kellett közvetlenül írogatnom, mert a fordító saját függvényei nem voltak képesek beállítani... Lehet, hogy itt is az adatlap alapján kicsit mélyebbre kell ásnod, ha kifogtál valami bugot.
>Itt< pedig a reciever kódban a vilmosd féle módszer van.
(#) Gettobike válasza vilmosd hozzászólására (») Aug 17, 2011 /
 
Köszönöm a válaszokat! Sajnos így sem működik, az OERR bit állandóan 0ban van. Áttettem a portokat a hardveres uartta (c6,c7), itt minden hibátlanul működik, van vétel és megszakítás is. Ezek szerint rosszul tudtam, és csak a megadott tx/rx port használható az rs232re?
(#) potyo válasza Gettobike hozzászólására (») Aug 17, 2011 /
 
Most nemazért, de hogy várhatsz megszakítást a nem hardveres RS232-nél?
(#) nagy_david1 hozzászólása Aug 17, 2011 /
 
Üdv!

Először is szeretném bejelenteni, hogy sikerült megoldanom a problémám viszont most itt lenne egy másik.

Készítettem egy "időzítőt". Egyszerű "delay" utasítással. A probléma az, hogy a várakozás idejét változóval adom meg amit kívülről viszek be. Nyomogatok egy gombot és a váltózó értékét növelem ezzel. A gond az, hogy egy adott nyomogatássorozat után reset-ál az egész ahelyett, hogy tovább tudnám növelni az értéket. Nem adtam meg semmilyen függvényt ami ezt kéne végezze. Kb olyan mintha lenne egy "ha nyomogatások/változó száma/értéke elérte X-et ugorjon vissza a kezdő értékre" függvény. Gondolom ez megint valami egyszerű hiba az én részemről amit figylemen kívül hagytam.
(#) whalaky válasza nagy_david1 hozzászólására (») Aug 17, 2011 /
 
nem lehetséges hogy egyszerűen túlcsordúl?
(#) kissi válasza nagy_david1 hozzászólására (») Aug 17, 2011 /
 
Szia!

például rossz változó típust választottál és "túlcsordul" ( azaz lenulláz !) és ezért úgy tűnik, mintha elölről kezdené ( de ilyenkor jó lenne látni a programot is ! ) !

Steve
(#) nagy_david1 válasza kissi hozzászólására (») Aug 17, 2011 /
 
Szia!

Mivel kezdő vagyok ezért bármi elképzelhető és új amit mondotok :yes: Mi lenne ilyenkor a teendő ha ez a baj? Mármint az orvoslásra.

Tömören a kód:
  1. unsigned int i=100;
  2. void main()
  3. {
  4.  
  5.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  6.    setup_timer_1(T1_DISABLED);
  7.    setup_timer_2(T2_DISABLED,0,1);
  8.    setup_comparator(NC_NC_NC_NC);
  9.    setup_vref(FALSE);
  10.  
  11. while(1){
  12.               if (input(pin_b3)) i+=10;
  13.               while (input(pin_b3));
  14.               delay_ms(i);
  15.               ...
  16.              }
  17. }


Nagyjából lecsupaszítva a program. Még elől a be include-olások hiányoznak. Szükségesek? Csak egy pin-re szerettem volna kiküldeni. Ennyi amit még kivettem mivel nem lényeges.
(#) kissi válasza nagy_david1 hozzászólására (») Aug 17, 2011 /
 
Nem ismerem a CCS-t, de a delay_ms( ) paramétere 'int' típusú változó lehet ? Mert, ha csak byte-os, akkor pont azt fogja csinálni, amit írtam !

Steve
(#) nagy_david1 válasza kissi hozzászólására (») Aug 17, 2011 /
 
Mivel kezdő vagyok ezért én nem igazán tudom megválaszolni a kérdésed. Az integer elméletbe egy 5 jegyű szám és nálam még 1000 előtt bekövetkezik.

Most nézem a ccs könyvet a delay-re:
Idézet:
„... the variable 0-65535(int16) or a constant 0-65535...”
(#) kissi válasza nagy_david1 hozzászólására (») Aug 17, 2011 /
 
A leírásod alapján lehet int a változó típusa.
Idézet:
„nálam még 1000 előtt bekövetkezik”
<-- ezt honnan tudod ? kb. ezerszer ( vagy százszor ? ) nyomtad meg ?! Nem látom a programodban a nyomógomb "prellmentesítést", ami szintén ilyen problémát okozhat!

Steve

Bocs, ezt maga a késleltetésed csinálja!
(#) kissi válasza kissi hozzászólására (») Aug 17, 2011 /
 
Ezek alapján jó lehet a programod... Nem látom még a konfigurációs biteket, nézd meg, hogy a WatchDog nem maradt-e bekapcsolva, mert az is újraindít egy idő után !

Steve
(#) nagy_david1 válasza kissi hozzászólására (») Aug 17, 2011 /
 
Azt hittem, hogy elég ha a gomb megnyomása után írok egy függvényt arra, hogy csak akkor lépjen tovább ha elengedtem. Onnan tudom, hogy 17 és 30 közötti értékekig el tudok számolni. 17 előtt soha nem reset-ál de leggyakrabban itt.

  1. #FUSES NOWDT                    //No Watch Dog Timer
  2. #FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
  3. #FUSES NOPUT                    //No Power Up Timer
  4. #FUSES NOPROTECT                //Code not protected from reading
  5. #FUSES NOBROWNOUT               //No brownout reset
  6. #FUSES NOMCLR                   //Master Clear pin used for I/O
  7. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  8. #FUSES NOCPD                    //No EE protection


Proteus szimulátorban is jelentkezik a hiba.
(#) kissi válasza nagy_david1 hozzászólására (») Aug 17, 2011 /
 
Azt várni, hogy elengedted, nem biztos, hogy elég általában, mert a gomb lenyomásakor az érintkező záródik, de a rugalmassága miatt újra bonthat ( ez a prell! ), akár többször is, és így már át is lépte a várakozó részt!

Nem tudom mi lehet a problémád, de a szimulátor sokat segíthet ( elvileg a WatchDog ki van kapcsolva! )!

Steve
(#) nagy_david1 válasza kissi hozzászólására (») Aug 17, 2011 /
 
Mint írtam szimulátorban is jelentkezik a bibi. Pedig ott nem hiszem lenne prellegés a gomb nyomásakor. Olyan kidolgozott szimulátor lenne, hogy a nyomógomb prellegését is beleszámították volna?
(#) kissi válasza nagy_david1 hozzászólására (») Aug 17, 2011 /
 
Azt szerintem nem, de nem lehetetlen...

Állítsd meg lépésenként vagy bizonyos időnként a program futását és nézd meg a változók állapotát, így meg kell találnod a hibát!

Steve
Következő: »»   60 / 118
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