Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   15 / 153
(#) gb197 hozzászólása Ápr 18, 2010 /
 
Üdv Mindenkinek!
Első alkalommal szerettem volna a a pic-ben lévő AD konvertert beüzemelni, de valami nem tökéletes, mivel teljesen fars értékek jönnek vissza a kijelzőre, nem értem miért. Az egyik furcsa dolog, hogy csak páros számok jelennek meg , (64, 128,192,stb.) és azok is csak 640-ig.
A 16f887a RA0 lábára egy potméter van csatlakoztatva + 1 ellenállás, ez biztosan rendben van. A minta programokban használt DA rutint használok, és string konvertáló is szabványos C függvény.
Nem értem mi lehet a probléma?
A segítséget előre is nagyon köszönöm.
(#) watt válasza gb197 hozzászólására (») Ápr 18, 2010 /
 
Nem néztem még a kódot, de egy tippem van, hogy nem jó felé van zárva az AD 10 bites eredménye. Lehet balra és jobbra, ami ilyen végeredményt adhat. Nézd meg ezt az adatlapban!
(#) gb197 válasza watt hozzászólására (») Ápr 18, 2010 /
 
Elméletileg (amennyire én értek hozzá) ez jobbra illeszti, mivel ADFM = 1, tehát az alsó bájt a ADRESL -ba kerül , a felső bájt az ADRESH-ba, ezét sem értem az egészet.
(#) icserny válasza watt hozzászólására (») Ápr 18, 2010 /
 
Idézet:
„egy tippem van, hogy nem jó felé van zárva az AD 10 bites eredménye.”
Tényleg úgy néz ki, mert a felsorolt számok (64, 128,192,stb.) 64 többszörösei, tehát úgy tűnik, mintha balra lenne igazítva az eredmény (pedig jobbra kellene).

Ugyanakkor az inicializálásban ADCON1 = 0b10000100; szerepel, ami jobbra igazítást ír elő, tehát elvileg jó. (A második egyesnek nem tudom, mi a szerepe, mert az adatlap szerint ott nem implementált bitek vannak!)

Még egy megjegyzés: A becsatolt kódban az ADCON0=0 beállítás csak 1 MHz-es órajelfrekvenciához használható!!!
(#) gb197 válasza icserny hozzászólására (») Ápr 19, 2010 /
 
Köszönöm szépen a tippeket!
A legfőbb hibát az okozta, hogy a hi-tech lcd vezérlő rutinja keresztbe konfigurálta az A portot, RA1: RA3 használja az lcd vezérlésére. Miután C portra állítottam az EN, RS jeleket megszűnt a probléma.
(#) kissi válasza kissi hozzászólására (») Ápr 19, 2010 /
 
Bocs, most látom, hogy mellényomtam: a 690139 sz. hozzászólásom nem icsrny-nek szólt, hanem USER-nak és úgy látom még most is aktuális lehet ( #690271 , hosszú időzítés )!

Steve
(#) potyo válasza cassis hozzászólására (») Ápr 22, 2010 /
 
Használd a kód gombot, hogy ne vágja szét a fórummotor!
(#) cassis hozzászólása Ápr 22, 2010 /
 
Sziasztok!

Tudnátok segíteni abban, hogy pontosan hogyan is kell olvasni az alábbi SPI busz SPIF flag beállását váró C programsorokat:

  1. while (!(SPSR) & (1<<SPIF))) ;


a másik:

  1. while (!(inb(SPSR) & (1<<SPIF))) ;


Másik kérdés, hogy a PIC ben SSPSR és SSPIF megnevezések vannak. Most akkor az első 'S' betű hova lett?
(#) potyo válasza cassis hozzászólására (») Ápr 22, 2010 /
 
A !(SPSR) logikailag negálja az SPSR regisztert, vagyis ha az SPSR nullától különböző, akkor nullát ad, ha nulla, akkor pedig 1-et.

Az
  1. (1<<SPIF)
létrehoz egy konstanst, amiben az a bit egyes, ahanyadik bit az SPIF az azt tartalmazó regiszterben. Tehát pl. az SPIF a negyedik bit, akkor ennek az értéke 0b00010000 lesz.

Ezután bitenkénti logikai műveletet végez az előbbi két érték között, és ha annak az értéke nem nulla, akkor marad a while ciklusban és újra ellenőrzni.

Szerintem ez egyébként hibás, egyrészt mert az SSPSR regiszter nem érhető el direktben a PIC-ben, csak az SSPBUF regiszteren keresztül, másrészt nem nagyon fér össze a logikai negálás és a bitenkénti AND művelet.

Esetleg lehet, hogy az SPSR valami makró. De jobb lenne, ha megmondanád, hogy ez melyik fordító és melyik chip, mert lehet, hogy a header fájlokban megvan a magyarázat.
(#) cassis válasza potyo hozzászólására (») Ápr 22, 2010 /
 
Most, hogy jobban utánna néztem ez egy AVR nem PIC. Tehát ez okozhatta, hogy nem találtam a PIC benn SPSR és SPIF et, lehet AVR ben így nevezik.

Magát a kódot itt találtam:
link

A hivatkozott sorok pedig a program 00132 valamint a 00140 sorai.

!(SPSR) logikai negálása azt jelenti, hogy maga a 8 bites regiszter nullától különbözik -e? Vagy a negálás bitenkénti?
(#) potyo válasza cassis hozzászólására (») Ápr 22, 2010 /
 
Igen, a ! úgy működik, hogy nulla vagy nem nulla az egész regiszter, tehát nem bitenként nézi. A bitenkénti negálást a ~ jel csinálja, az minden bitet az ellenkezőjére fordít.
(#) cassis válasza potyo hozzászólására (») Ápr 22, 2010 /
 
Ha megnéznéd a hivatkozott linken a program jelzett sorait szerintem a a PIC esetén asm ben a következőnek felelne meg:

  1. BTFSS   SSPSTAT,BF
  2. GOTO    $-1


És szerinted mit jelent a
  1. (!(inb(SPSR) & (1<<SPIF)))

ben az inb ???

Egyébként megtalálható itt is a kód. Tehát az AVR általánosan használja.
(#) potyo válasza cassis hozzászólására (») Ápr 22, 2010 /
 
Ahogy nézem, az inb(SPSR) ugyanaz, mintha azt írnád, hogy SPSR: Link.
(#) user hozzászólása Ápr 24, 2010 /
 
Üdv!

Egy mikroc-s soros kommunikációval küzdök,de csak félig működik.A kommunikáció lényege az lenne,hogy kiküldök egy karaktert a 877-es pic felé ő pedig "rendben"választ küld vissza,ha a küldött karakter helyes volt. A feltételt meg is írtam,de csak az else ágat hajlandó visszaírni.

Van valakinek ebben tapasztalata?
(#) jon@ válasza user hozzászólására (») Ápr 24, 2010 /
 
Szia!

Miért nem az UART1_Write_Text() függvényt használod a "rendben" válaszhoz?
(#) user válasza jon@ hozzászólására (») Ápr 24, 2010 /
 
Na ezt jól benéztem köszi.
Így már visszaírta a választ is.
Igazából szeretnék még egy kimenetet is bekapcsolni ezzel a karakterrel és kikapcsolni egy másikkal.
Ugyanígy beírhatom mint az előbb?
(#) jon@ válasza user hozzászólására (») Ápr 24, 2010 /
 
szerintem egy switch(receive) szerkezettel válaszd szét hogy mit csináljon a PIC. A default ágba menjen ha nem jó parancs érkezett.
(#) user válasza jon@ hozzászólására (») Ápr 24, 2010 /
 
Működik,kösz a segítséget.Switch-el kapcsolgat szépen.
(#) boomerang hozzászólása Ápr 25, 2010 /
 
Sziasztok !

Hogyan tudok egy 0.000 alakú sztringből integert csinálni hogy így felhasználható legyen mondjuk késleltetési időtartamnak ?


Köszi
(#) potyo válasza boomerang hozzászólására (») Ápr 25, 2010 /
 
A string az alapvetően tömb, vagyis az egyes elemei (karakterek) indexeléssel lekérdezhetőek. Ezután hogy számként megkapd, egyszerűen ki kell vonni '0'-t (vagyis a nulla karakter ascii kódját, ami 0x30, de írható '0' formában is) a karakterből, felszorozni mindet a megfelelő helyiértékkel, és összeadni. Valami ilyesmi

  1. char str[]={"1.234"};
  2.  
  3. ertek=(str[0]-'0')*1000u+(str[2]-'0')*100u+(str[3]-'0')*10u+(str[4]-'0');


Azért van a 100 után az u betű, hogy kényszerítse a fordítót, hogy 16 bites szorzást csináljon. Kényszerítés nélkül csak 8 bites szorzást csinálna a *100-nál, mivel a 100 is és a másik tényező is elfér 8 biten, viszont az eredmény már nem mindig fér el, ezért csonkítaná az eredményt.
(#) boomerang válasza potyo hozzászólására (») Ápr 25, 2010 /
 
Köszönöm.
(#) pipi válasza boomerang hozzászólására (») Ápr 25, 2010 /
 
Nézd meg az sscanf függvényt. Csak akkor javaslom, ha a stringben nincs más karakter(pl szöveg). Persze kicsit memória zabáló lehet ha kicsi procival dolgozol
(#) user hozzászólása Ápr 26, 2010 /
 
Üdv!

Egy 877 pic soros kommunikációval szenvedek.Szombaton már sikerült eljutni addig,hogy egy A ill. B karakter kiküldésére be,ill. kikapcsolta az egyik kimenetét.
Az eredeti elgondolás szerint a pic egy Siemens M35-ös telefonnal kommunikálna.A telefon megcsörgetésére be,ill. ki kellene kapcsolnia a megadott kimenetet,de sajnos nem működik.
A telefon a csörgetés hatására a 0D 0A 52 49 4E 74 0D 0A karaktereket küldi mindig.
Csinált már valaki ilyet?

UARTM35.txt
    
(#) GreaT hozzászólása Ápr 26, 2010 /
 
Sziasztok,

A TCP/IP Stack-el lenne egy kis problémám. A demo TCPIP Demo App szépen le is fordul és fut is. De ha saját projectet hozok létre, akkor fordításkor nem történik semmi. Villan egyet a képernyő és kész.

C30 Toolsuite-t használok.

A források, headerek, libraryk hozzá vannak adva és látja is őket.

A locate header-re kattintva sem történik semmi.


Köszi,
(#) GreaT válasza GreaT hozzászólására (») Ápr 26, 2010 /
 
Úgy viselkedik, mintha nem látná a a fordítóprogramokat. Bármit is csinálok a fordítás nem indul el, semmi hibaüzenet és nem történik semmi.
(#) potyo válasza GreaT hozzászólására (») Ápr 26, 2010 /
 
Project->Select language toolsuite vagy valami ilyesmi nevű menűpontban ki van választva a C30?
(#) GreaT válasza potyo hozzászólására (») Ápr 26, 2010 /
 
Igen. Minden ki van választva.

Untitled.png
    
(#) GreaT válasza GreaT hozzászólására (») Ápr 27, 2010 /
 
Lehet én csinálok valami rosszul? Pár objektum lefordul, de nem látok státusz ablakot a fordítás alatt.

Valamit csinál, de nem tudom, hogy hol a hiba...
(#) icserny válasza GreaT hozzászólására (») Ápr 27, 2010 /
 
Volt már olyan a világtörténelemben, hogy az Output ablak eltűnt a látómezőből, és nem lehetett előcsalni, amíg egy "normális" beállítást is tartalmazó (.mcw) projektet be nem töltünk.

Ha nem látod az Output ablakot, akkor próbálkozz a mellékelt projekttel! (a fordítás nem biztos, hogy fog menni, mert nálam más az elérési útvonal, de most mindegy, nem is a fordítás a lényeg)
(#) GreaT válasza icserny hozzászólására (») Ápr 27, 2010 /
 
Köszi,

Ez így tökéletesen működik..
Következő: »»   15 / 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