Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   44 / 153
(#) trudnai válasza Kiwy hozzászólására (») Júl 19, 2011 /
 
Idézet:
„Watt kollégánk párhuzamos port alapú PIC programozóját építettem meg, ha visszanézed a hsz-okat.”


Rendben, csak programozo helyett valami meghajtot emlegettel A tobbit mar watt megvalaszolta, ill. en is reagaltam.
(#) watt válasza Kiwy hozzászólására (») Júl 19, 2011 /
 
Lehet, hogy a proteus nem figyeli a konfig biteket, csak a programot értelmezi. Ha nem jól kerül a hex-be a konfig, akkor nem fog jól működni. Ezért kéne egy összehasonlítás a te és az én általam fordított hex között! Megaztán, ha én betöltöm azt amivel próbálkozol és nem megy, akkor egyértelmű, hogy jók a PIC-ek!

Megnéztem, az új leíró bázissal, ami letölthető a gyártó oldaláról, kezeli a saját programjával a PICKit2 is a PIC-et.
(#) Kiwy válasza watt hozzászólására (») Júl 19, 2011 /
 
Amit Te küldtél c-fájlt, azt nekem le se fordítja, mert kidob egy csomó hibát (nem ismeri az unprotectet...stb.). Az a baja, hogy nem látja a PIC h-fájlját, amit akkoriban szintén mellékeltél. Orvosolható a probléma, ha beírom az első include után, hogy
  1. #include "legacy/pic12f6x.h"
sort is. Ilyenkor hiba nélkül lefordul. Mellékelem a c-fájlt (az enyémet meg a tiedet is) és a belőlük generált hex-fájlokat. Nézz rá légyszi, és hasonlítsd össze azzal, amit nálad dob ki a fordító hex-fájlként. Kicsit más volt az én c-fájlom, mert a 2-es lábat billegtetném a 4-es helyett. Ezt csak azért módosítottam, mert oda kötöttem be a LED-et a próbapanelon, míg a breadbordon a 4-eshez fértem hozzá kényelmesebben. Ezért átírtam az általad küldött c-fájlban ezt (GPIO4 helyett GPIO2 van). Kipróbáltam egyébként mindkét PIC-et ma este, de nem akarja az igazat egyik sem.
(#) watt válasza Kiwy hozzászólására (») Júl 20, 2011 /
 
Egyelőre annyi, hogy a két fájl(c is, hex is) amit küldtél egyforma, függetlenül melyik h-val fordítod, ami egyébként normális, miután ezt várja el az ember egy adott programtól, hogy a fordító azonos kódot generáljon. A h-ban is ugyanazok a kódok vannak, csak más elnevezéshez rendelve.
Délután beégetem, szerintem nálam működni fog.
(#) Kiwy válasza watt hozzászólására (») Júl 20, 2011 /
 
Hát igen, azonos c fájlhoz eltérő h fájlok esetén is ugyanazt a kódot várjuk a fordítótól, ez jogos Várom a fejleményeket!
(#) watt válasza Kiwy hozzászólására (») Júl 21, 2011 /
 
Szia!
Betöltöttem a hex-edet a PIC-be, működik...
(#) Kiwy válasza watt hozzászólására (») Júl 21, 2011 /
 
Akkor ezek szerint a PIC-eimmel van a baj... lehet, tényleg ártott nekik, hogy a rosszul megépített LPT kábel miatt tönkrementek. Ami viszont szerintem azért érdekes, mert ma már védik az IC-ket az esetleges túlfeszültségtől. Bár az is lehet, hogy valamelyik lábon túl nagy áramot kaptak. Tegnap is sikerült tönkretennem egy feszültség- és áramstabilizátor IC-t (rövidrezártam véletlenül a kimenetét), és forró lett mint az állat, meg is égette az ujjam, úgy felforrósodott.

Na mindegy, szerintem szerzek ilyen PIC-et, aztán megpróbálom újra. Köszi a segítséget, watt!
(#) potyo válasza Kiwy hozzászólására (») Júl 21, 2011 /
 
Nem lehet minden hülyeségre felkészíteni az áramköröket. Az ellen nem lehet megvédeni, ha nagyobb feszültséget kap a tápján vagy valamelyik bemenetén. Statikus töltéstől lehet valamennyire védeni, de ha valahonnan folyamatos táp van, azzal nemnagyon lehet mit kezdeni.

Az ilyen 7805 típusú stabilizátorokat a kimenet rövidrezárásával nagyon ritkán lehet tönkretenni. Miután lehűlik, ezek működni szoktak tovább.
(#) Kiwy válasza potyo hozzászólására (») Júl 21, 2011 /
 
Nem is 7805 típusú volt, hanem a jó öreg L200-as Szörnyű régi adatlapja van, némelyik ábra nehezen értelmezhető, mert nincs semmi leírás a kapcsoláshoz (méretezés). És akkor a lábak fizikai elhelyezkedéséről ne is beszéljünk... De amúgy elég jó dolgokat lehet csinálni vele.
(#) kissi válasza Kiwy hozzászólására (») Júl 22, 2011 /
 
Szia!

Mi a problémád vele? Első oldalon írják, hogy "SHORT CIRCUIT PROTECTION" --> rövidzár védett és az 1.ábrán láttam a méretezési képleteket is ( rövidzárási áramra és a kimeneti feszültségre is ! ) az általad belinkelt adatlapban ?!

Steve
(#) Kiwy válasza kissi hozzászólására (») Júl 22, 2011 /
 
Bocsi, összetévesztettem egy másikkal, az L200-as adatlapjában tényleg vannak méretezési képletek (azt hiszem, valamelyik LMxxx adatlapjában voltak ilyen jellegű hiányosságok). Látom, hogy az L200-as rövidzárvédett, de nekem rohadtul megdöglött, 0V volt állandóan a kimenetén (jól volt minden beforrasztva, ilyen probléma nem lehetett, bemértem a panelt), és kibaszottul forró volt.
Kicseréltem egy másikra, ez már működik, de ha bekapcsol az áramkorlát, még mindig rohadtul felforrósodik, pedig tettem rá egy kicsi TO-220 hűtőbordát. Nagyobb terhelésre (amikor nem kapcsol be az áramkorlát) is meleg egy kicsit. Lehet kicserélem egy nagyobbra a hűtőbordát, hátha segít rajta.
(#) adamhollos hozzászólása Júl 23, 2011 /
 
Sziasztok!

Hogyan tudok egyidejüleg két programszálat futtatni?

nyelv: HI-TECH C
(#) potyo válasza adamhollos hozzászólására (») Júl 23, 2011 /
 
Vannak ezek az RTOS-ek, azoknál nézz körül. De ehhez legalább 18F kellene szerintem.

Egyébként miért van szükség két szálra?
(#) icserny válasza adamhollos hozzászólására (») Júl 23, 2011 /
 
Idézet:
„Hogyan tudok egyidejüleg két programszálat futtatni?”

Ha tudnál, akkor nem kérdeznéd... Bonyolult dolog ez, s az optimális megoldás függ attól, hogy mi ez a két szál,milyen viszonyban vannak, s milyen erőforrás igényük van.

Megoldásként számbajöhet egy állapotgép, az interupt/főprogram szint kreatív alkalmazása, korutinok, kooperatív RTOS, preemptív RTOS, stb.

Ha bele akarsz csapni a lecsó közepébe, akkor:
- Tiny threads
- OSA RTOS
(#) watt válasza adamhollos hozzászólására (») Júl 23, 2011 /
 
Az egyértelmű, hogy egyszerre két szál nem futhat, csak felváltva, kvázi multiplexelve, más néven időosztásban. Ez egy PIC esetében nagyon erőforrás pazarló(mindegyiknél, csak a PIC-nek kevés van eleve), ha nem muszáj, nem kell erőltetni. Ha muszáj, nem PIC-et kell választani, vagy ha PIC, akkor nagy(32).
De nem hiszem, hogy szükség lenne egyidőben két szálra, pontosabban meg lehet úgy oldani, hogy úgy tűnjön, hiszen egyébként is csak úgy tűnik...
(#) trudnai válasza adamhollos hozzászólására (») Júl 24, 2011 /
 
Meg annyi kiegeszitest az elottem szolokhoz ha szabad, hogy igazandibol a gondolkodasmod az amiben kulonbozik egy RTOS hasznalata a hagyomanyos allapot gepes es megszakitasos modszerektol. Magyaran ugy gondolsz a szalakra vagy feladatokra, hogy azok parhuzamosan hajtodnak vegre noha fizikailag nem igy tortenik -- igy viszont konyebb elkepzelni a folyamatokat. Amugy ha bele gondolsz a PC-k is ugyanezt teszik, kiveve ha tobb processzoros vagy tobb magos CPU-d van...

Van meg egy lenyeges szempont is, hogy az RTOS egy csomo terhet levesz a valladrol, segit szinkronizalni es utemezni feladatokat ill a kommunikaciot a feladatok kozott. Szoval nem rossz dolgok ezek, de ahogy watt mester is emlitette sok eroforrast elvesz a hasznos programod elol.
(#) AZoli hozzászólása Aug 6, 2011 /
 
Sziasztok!

C30 -ban hogyan tudom egy változó bitjeit elnevezni, és később hivatkozni rájuk? A p30F6012A.h -ban néztem hogy SFR esetén hogyan csinálják, de nem megy.
  1. unsigned int ALLAPOT ;
  2. typedef struct tagALLAPOTbits {
  3.   unsigned T5_m_int:1;
  4.   unsigned aa:1;
  5.   unsigned bb:1;
  6.   unsigned cc:1;
  7.   unsigned dd:1;
  8.   unsigned ee:1;
  9.   unsigned ff:1;
  10.   unsigned gg:1;
  11.   unsigned hh:1;
  12.   unsigned ii:1;
  13.   unsigned jj:1;
  14.   unsigned kk:1;
  15.   unsigned ll:1;
  16.   unsigned mm:1;
  17.   unsigned nn:1;
  18.   unsigned oo:1;
  19. } ALLAPOTbits;
  20.  
  21.  
  22. ALLAPOTbits.T5_m_int == 1;  //később így hivatkoznék rá
(#) vilmosd válasza AZoli hozzászólására (») Aug 6, 2011 /
 
  1. ALLAPOTbits.T5_m_int == 1;
helyett
  1. ALLAPOTbits.T5_m_int = 1;

esetleg
(#) AZoli válasza vilmosd hozzászólására (») Aug 6, 2011 /
 
Uhhh.. köszönöm..

De még mindig nem jó valami:
error: syntax error before '.' token
(#) trudnai válasza AZoli hozzászólására (») Aug 6, 2011 /
 
Ez egy tipus definicio, nem csinaltal belole valtozot... Kellene valami hasonlo:

  1. ALLAPOTbits allapot;
  2.  
  3. allapot.T5_m_int = 1;
(#) AZoli válasza trudnai hozzászólására (») Aug 6, 2011 /
 
Kicsit részletesebben kérhetném? Próbálom assembly után megérteni a C-t, de még nagyon nem állt össze a kép..
(#) vilmosd válasza AZoli hozzászólására (») Aug 6, 2011 /
 
Esetleg nezz szet a konyvespolcon. Talasz irodalmat, mintapeldakat PIC-re es C nyelvre.
(#) trudnai válasza AZoli hozzászólására (») Aug 6, 2011 /
 
A 'typedef' az tipust definial (Type Definition -- Tipus Definicio). Tehat mikor azt csinalod, hogy:

  1. typedef struct {
  2.    unsigned elsobit:1;
  3.    unsigned masodikbit:1;
  4.    unsigned harmadikbit:1;
  5. } enTipusom;


Akkor csak egy tipusod keletkezik, valtozod nem. Tipusnak pedig nem lehet erteket adni, igy kell valtozot csinalnod belole, pl:

  1. enTipusom elsoValtozom;
  2. enTipusom masodikValtozom;
  3. enTipusom harmadikValtozom;


De csinalhatod maskepp is, nem csinalsz tipust a strukturabol:

  1. struct {
  2.    unsigned elsobit:1;
  3.    unsigned masodikbit:1;
  4.    unsigned harmadikbit:1;
  5. } enValtozom;


Es ekkor van egy 'enValtozom' nevu valtozod, de nincs tipusod, tehat ha meg egy ugyanolyan tipusu / szerkezetu valtozot szeretnel, akkor gondban vagy... Ezert lehet nevet adni a strukturanak:

  1. struct enStrukturam {
  2.    unsigned elsobit:1;
  3.    unsigned masodikbit:1;
  4.    unsigned harmadikbit:1;
  5. }


Ami hasonlit a tipus dekaraciohoz, tehat abbol meg valtozot kell csinalni:

  1. struct enStrukturam elsoValtozom;
  2. struct enStrukturam masodikValtozom;
  3. struct enStrukturam harmadikValtozom;


De tenyleg a konyv atolvasasa jo otlet.
(#) AZoli válasza trudnai hozzászólására (») Aug 7, 2011 /
 
Köszi a segítséget, nehezen, de megérettem..
(#) nagy_david1 hozzászólása Aug 11, 2011 /
 
Üdv!

Először is azzal kezdeném, hogy teljesen kezdő vagyok e téren. Most nem rég kezdtem el olvasgatni a pic-ek életéről. Remélem jó helyre írok. Van a pic kezdőknek topik is de ott ahogy láttam több az assambly-s probléma.
A problémám az, hogy szerettem volna egy programot írni ami véletlenszerűen számokat generál. Először nekifutottam az ugyancsak nem épp dús C tudásommal és megírtam úgy mint:
Idézet:
„randomize;
x=random(szám);”

Ezt persze a CCS nem ismerte fel és következett az error.
Ekkor módosítottam a parancsot a következőre.
Idézet:
„srand(szám);
x=rand();”

Ezt a CCS elfogadta és beírta a PIC-be de nem generálja le a kért számokat. Hogyan lehetne lefuttatni másképp és lekövetni a program működését illetve elakadását?
(#) trudnai válasza nagy_david1 hozzászólására (») Aug 11, 2011 /
 
Szia!

A rand() fuggveny (nem parancs!) egy un pseudo-veletlen szamgenerator. Azaz nem igazi veletlen szamokat negeral, hanem egy jo elore meghatarozhato, veletlennek tuno szamsorozatot produkal neked. Ez a szamsorozat fugg az un. 'seed' -tol, amit az srand() fuggvennyel adsz meg. Azonos seed eseteben ugyanazt a szamsorozatot fogja neked adni -- azaz ha mindig ugyanazt a szamot teszed bele az srand() parameterebe kozvetlenul a rand() hivasa elott akkor mindig ugyanazt a szamot fogod eredmenyul kapni...
(#) nagy_david1 válasza trudnai hozzászólására (») Aug 11, 2011 /
 
Szia!

Akkor hogyan lehet véletlenszerű számot generálni amivel később dolgozhatok? Pont mint a C parancs amit először írtam be.
(#) trudnai válasza nagy_david1 hozzászólására (») Aug 11, 2011 /
 
Igazi veletlen szamot nehez generalni, de pl ha van user interface akkor mikor a user megnyomja a gombot az eppen a szabadon futo timerben levo szamot lehet az srand-nak atadni. Egyenlore csak ugy csinaldd, hogy az srand() -ot egyetlen egyszer hivod meg az inicializalaskor, es nezdd meg tetszik-e az neked.
(#) nagy_david1 válasza trudnai hozzászólására (») Aug 11, 2011 /
 
Mivel kezdő vagyok ezért leírom mit szeretnék. Persze tudom, hogy véletlen szám nem létezik de mert megadott algoritmus alapján jön létre minden. Nekem az kéne történjen dióhéjban a programban, hogy X idő után visszatér a program és generál magának egy új számot amit majd én felhasználok. A program lefutásának ideje konstans maradna de mindig amikor visszatérne egy új értékért akkor generálódjon egy új szám. Persze a szám intervallumot is szeretném megadni.

Pont mint C-ben. pl.: randomize; random(10); és nekem generálna egy számot 1-től 10-ig.
(#) nagy_david1 hozzászólása Aug 11, 2011 /
 
Még lenne egy sokkal egyszerűbb kérdésem is amin fenn akadtam.
Idézet:
„while(1){
if (n==0) output_high(PIN_A1);
if (n==1) output_high(PIN_A0);
if (n==2) output_high(PIN_A7);
if (n==3) output_high(PIN_A6);
....
delay_ms(500);
n++;
}”

Na ez meg mi a fenéért nem működik? Az elvárásom az lett volna, hogy lábakat sorra mind tápfeszültségre emelem. Erre fel az első if-be mindig bemegy és végrehajtja. Nem tudom miért van ez. Az "n" nem növekszik? Miért nem ha ez a baj. Csak ez lehet a baj mert ha nőne akkor az első if-be nem menne be.
Következő: »»   44 / 153
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