Fórum témák
» Több friss téma |
Ü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.
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!
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.
Idézet: 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). „egy tippem van, hogy nem jó felé van zárva az AD 10 bites eredménye.” 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ó!!!
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.
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
Használd a kód gombot, hogy ne vágja szét a fórummotor!
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:
a másik:
Másik kérdés, hogy a PIC ben SSPSR és SSPIF megnevezések vannak. Most akkor az első 'S' betű hova lett?
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
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.
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?
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.
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:
És szerinted mit jelent a
ben az inb ??? Egyébként megtalálható itt is a kód. Tehát az AVR általánosan használja.
Ahogy nézem, az inb(SPSR) ugyanaz, mintha azt írnád, hogy SPSR: Link.
Ü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?
Szia!
Miért nem az UART1_Write_Text() függvényt használod a "rendben" válaszhoz?
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?
szerintem egy switch(receive) szerkezettel válaszd szét hogy mit csináljon a PIC. A default ágba menjen ha nem jó parancs érkezett.
Működik,kösz a segítséget.Switch-el kapcsolgat szépen.
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
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
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.
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
Ü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?
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,
Ú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.
Project->Select language toolsuite vagy valami ilyesmi nevű menűpontban ki van választva a C30?
Igen. Minden ki van választva.
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...
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) |
Bejelentkezés
Hirdetés |