Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Bocs ismét elírtam....na most a helyeset írtam be:
#include < p16f690.inc > ; processor specific variable definitions
Igen az output_bit-nek a 2. paramétere tényleg az hogy ki vagy be, és port helyett pin-t kapcsolnak. A többi infó viszont nagyon hasznos volt köszönöm. Most azután pláne nem tudom mi a fenéért nem megy. Erre nincs ötleted?
Vezeték nem lehet gond? Utp-ből kiszedett vezetékkel kötöttem be a 3 lábat, a vezeték hossza kb. 50cm. Kimértem nem szakadt.
Első kérdés: eljutsz-e a fordítással a BUILD SUCCEEDED-ig, vagy valmi hibára fut?
Másodk kérdés: (ha sikeres a fordítás) milyen MPLAB verziód van? Lehet, hogy frissíteni kellene? Vagy valami félre van konfigurálva? A harmadik mér nem kérdés, hanem kérés: a programot vagy {code=asm}-mal szúrd be (természetesen szögletes zárójellel...), vagy mellékletként csatold, mert így átszerkesztés nélkül nem tudja kipróbálni senki. Válasz: nem, nem így gondoltam! Kell egy főprogram, ami beállítja az operandusok értékét, majd meghívja a M_ADD (vagy aminek hívják) eljárást, ésatöbbbi... Tehát a műveletvégző eljárásokba ne piszkálj bele. A korábban adott linken tesztprogramot is lehet találni, azt kellene tanulmányozni és megérteni. Javaslom, hogy előbb csak az összeadást és a teszprogramot pipáld be, s az így letöltött programot tanulmányozd! A több-bájtos összeadás algoritmusa az, hogy előbb összeadjuk a legalacsonyabb helyiértékű bájtokat, s eltároljuk, majd az eggyel magasabb helyiértékű bájtok összeadánál figyelembe vesszük, hogy az előzőekben volt-e átvitel (STATUS bájt C bitje), s ha igen, akkor eggyel növeljük az eredményt. Az indirekt címzés megértéséhez a PIC16F690 adatlapjának 2.4 alfejezetét kell áttanulmányozni. Erre valójában nem lenne szükséged, de mivel a készen kapott eljárások általánosan vannak megírva (hogy tetszőleges méretű változókra is működjön) ezért indirekt címzéssel kezelik az adatokat. Ha van hozzá időd és türelmed, akkor érdemes megtanulni! Idézet: „A többi infó viszont nagyon hasznos volt köszönöm.” Ne nekem köszönd, a CCS Help-jében van leírva, én is onnan merítem az "okosságot"! Első körben a várakozások nyújtásával próbálkoznék, s a PICkit2-őt logikai analizátor üzemmódban ráakasztanám az adatvonalra, hogy lássam, mi zajlik rajta. Oszcilloszkóp még jobb lenne, de ha nincs kéznél, akkor ne... A tápfesz szűrések rendben vannak? Az órajel frekvenciát mások is kérdezték már, az rendben van?
Ez az eleje.
Az LCD-t jól kezeli, azt átírtam mert nálam C porton van az lcd, ha az órajel nagyon rossz lenne, akkor az lcd sem menne. Én is gondolkodtam a pickit2 analizátorrá alakításán, még este megcserélem a 2-es 3-as portot (a 3-as tuti jó mert azon van led), ha úgysem megy akkor az egészet összerakom próbapanelen, azután jöhet a pickit2 mint analizátor. Szerencse, hogy van egy icd2 is, azzal mehet a debug is közben. #include <16f726.h> #fuses NOWDT,HS, NOPUT, NOPROTECT,NOLVP,BROWNOUT //Oscillator mode HS #use delay(clock=4000000) //Clock speed HZ = 4MHZ #include "lcdc.c
Lassan tényleg ideje lenne megnézni azt az asm kódot, és kipróbálni a szimulátorban, hogy tényleg annyi-e az annyi...
Az nem zavarhat be, hogy a CCS-ben alapban ezek az output akarmi fugvenyek allitjak a TRIS-t is egyben? Meg kell neki adni valami fast IO pragmat vagy define-t, hogy ezt elkeruljuk - most nem emlekszem pontosan, de ez is benne van a doksiban.
Pont az a lényeg, hogy állítsák a TRIS-t mert pl. itt kell is:
output_float(PIN_B2); // float 1-wire high delay_us( 5 ); // allow pin to stabilize if (!input(ONE_WIRE_PIN)) { bár a help szerint az input úgyis állítja, és ennél a résznél már nem megy tovább. Olyan sok időzítés itt még nincs is, ezzel Potyonak is megadtam a választ, és már itt nem jut tovább. Ha lesz időm délután akkor csak ezt a részt megírom asm-ben, és utána kiderül. Az is lehet, hogy B2-es láb halott. Az biztos, hogy érintkezik, mert az ic tetejétől (ahol kijön láb) a ds1820 középső lábáig ki lett mérve, 0 ohm, a ds1820 középső lábától az 5V-ig meg 4.7k ohm, a gnd és az egyes láb között valamint a 3-as láb és az 5V között szintén 0 ohm. Sajnos a szimulátor nem mondja meg tényleg csinál e valamit a B2, erre jó lesz a pickit2 analizátor módban, csak annak még utána kell nézni.
"Első kérdés: eljutsz-e a fordítással a BUILD SUCCEEDED-ig, vagy valmi hibára fut?"
eljutok lefordul hiba nélkül. "Másodk kérdés: (ha sikeres a fordítás) milyen MPLAB verziód van? Lehet, hogy frissíteni kellene? Vagy valami félre van konfigurálva?" Mplab 8.00 "A harmadik mér nem kérdés, hanem kérés: a programot vagy {code=asm}-mal szúrd be (természetesen szögletes zárójellel...), vagy mellékletként csatold, mert így átszerkesztés nélkül nem tudja kipróbálni senki." Rendben ez már nekem is feltűnt,h.nem jól szúrom be Amugy ahogy írtad csak egy operandussal próbálkozom, de nem tudom figyelni a regiszterek tartalmát, mert sajnos még mindig inaktív az add symbols gomb:S "A több-bájtos összeadás algoritmusa az, hogy előbb összeadjuk a legalacsonyabb helyiértékű bájtokat, s eltároljuk, majd az eggyel magasabb helyiértékű bájtok összeadánál figyelembe vesszük, hogy az előzőekben volt-e átvitel (STATUS bájt C bitje), s ha igen, akkor eggyel növeljük az eredményt." okés ez érthető is, de akkor miért nem látom a tesztelésnél felsőket, miért csak az alsókat lehet beállítani??
Idézet: „Mplab 8.00” Ezt jó lenne frissíteni, hogy lehetőleg mindketten ugyanazt lássuk... Idézet: „ de akkor miért nem látom a tesztelésnél felsőket” Ezt a kérdést nem igazán értem, de nem is tartom idevágónak, amíg az MPLAB-bal szürke gombos mizériája meg nem szűnik. Utána úgy megy a dolog, ahogy tegnap megírtam.
azt vettem még észre,h.akkor lesz aktív nekem az add symbols ha nem projekt varázslóval teszem, hanem csak új projektként állítom be. ez lenne a baj?
felsőkre meg a felső 8 bitet értettem az M_TEST-nél,h.nem látom,h.hol tudom megadni ebben a progiban a felső 8 bitet.
8.10-re frissítem, remélem ez jó lesz
Tagold eloszor is fel a rutinjaidat, utana kommentezd fel mit miert kivansz csinalni - a komment epp arra valo, hogy oda irdd mi a szandekod, es a szandekot egyszerubb osszehasonlitani az aktualis koddal, hogy ahhoz kepest mi tortenik, igy kiderulhet hol a hiba.
Velemenyem szerint joval egyszerubb lenne az egeszet lemakrozni es nem vacakolni az FSR-rel, vegulis nem tutasidoben fog eldolni, hogy milyen precizitassal dolgozol. Azonban ha megis FSR-t valasztasz es ilyen modon oldod meg a pointerek szamolgatasat, akkor celszerubb lenne big-endianos abrazolasra atterni es ugy valamivel csokkenne a pinter szamolgatas. Ja, es amugy az FSR-nel nem allitod be az IRP bitet, es nem torodsz az esetleges tulcsordulasokkal - bar mivel abszolut modban programozol lehet sohasem fogsz talalkozni az ezekbol eredo gondokkal.
Üdv!
Végezvén a projectemmel, még van két hetem itt Franciahonban, gondoltam elütöm az időt egy kis PIC továbbtanulással. Van nekem egy PIC18F4520-I/P -s procim. Eddig a 16F877-el dolgoztam. Nézetem a 18 as adatlapját, ugy látom a lábkiosztás ugyan az. Mégis miben különbözik a 16-ostól és mit kell másképp programozni mint a 16ban? Van egy PICDEM2plus-os panelem, azon van egy LCD- azt szeretném első körben életre lehelni. Ez pontosan milyen LCD? További szép napot mindenkinek!
Elso korben tanulmanyozd a 18F utasitaskeszletet! Sok elteres van!
Azért nem kristályt használok, mer a PIC 3.3V-on megy, és az adatlap szerint ezen a feszkón max 25-30MHz-et visel el. Amúgy észrevettem egy érdekes dolgot. Rákötöttem egy 8, 12, 13.xx MHz-es kvarcot, bekapcsoltam a PLL-jét, és a 12-13.xxMHz-en látszólag ugyan azzal a sebességgel ment, mint a 40-es oscillátorral. Adatlap szerint pedig a PLL sak 4-10MHz-ig használható. Elképzelhető, hogy a 12MHz-nél még stabilan működik a PLL? Tehát 48 MHz lesz belőle, vagy valami pontatlan, használhatatlan akármi?
Jah és feltűnt még valami, ezt csak érdekességként írom: ráraktam egy 60MHz-es oscit, PLL nélkül nem csinált semmit, azt bekapcsolva viszont kb 2-szer olyan gyors volt, mint a 40MHz-es osci PLL nélkül. Csak néha hibásan olvasta ki a RAMját
Nem kell bankot váltani a 18-asoktól felfelé. Ez pl. nagy könnyebbség. Biztos van még sok más hasznos dolog.
A 3.3V-on megadott frekvencia nem azt jelenti, hogy olyan kvarcot tud meghajtani, hanem hogy a komplett processzora ezen az órajelen képes megbízhatóan futni. Tehát teljesen mindegy, hogy te külső forrásból biztosítod a frekvenciát, vagy a ráakasztott kvarcból kapja.
A PLL az egy érdekes dolog, én is végeztem ilyen kisérleteket, de 16MHz-es kvarccal már nem 64MHz volt az órajel, hanem kevesebb, úgy emlékszem 50MHz körüli. 20MHz-es kvarccal szintén kb. ugyanennyit sikerült kicsikarni belőle. Sajnos 12MHz-es kvarcom nem volt, hogy kipróbáltam volna azzal is. Elképzelhető, hogy stabilan működik, de erre nem építhetsz. Lehet, hogy a chipek 95 százalékánál megy, de ott van az a maradék 5%, aminél nem megy.
Akkor majd kipróbálom a 12MHz-et PLL-el, UART is van a kütyüben, szóval kiderül majd egyből, hogy működik-é-e. Majd megírom, mennyire stabil.
Idézet: „nem látom,h.hol tudom megadni ebben a progiban a felső 8 bitet.”
De ezt már tegnap is megírtam!!!
Idézet: „8.10-re frissítem, remélem ez jó lesz” Nem tudom, hogy miért nem lehetett a legújabb kiadásra frissíteni. Idézet: „azt vettem még észre,h.akkor lesz aktív nekem az add symbols ha nem projekt varázslóval teszem,” Nekem 8.14-gyel és 8.15a-val nem voltak ilyen gondjaim. Listázd már ki, légyszi, hogy milyen fájlok vannak a projekt könyvtárban egy sikeres build után! Még jobb, volna ha összezippelve csatolnád a projekt könyvtáradat!
Hello
Kérdésem lenne, hogy hogyan lehet microC-ben a 16F628as mikroprocesszort sleep üzemmódba elküldeni ?
asm{sleep}
és microC-ben?
szia.
ok igazad van már leírtad és már beleraktam és működik is az összeadás meg a kivonás, de a szorzás osztás nem adja vissza azokat az értékeket mit szeretnék. értékek figyelését máshogyan megoldottam és látom is,h.mit rak bele.. progit majd csatolom. és frissítem akkor a legújabb verzióra az Mplabom.
A mellékelt tesztet végigléptettem a szimulátorban (step over gomb), s nekem úgy tűnik, hogy minden alapművelet működik.
Az eredeti teszt: (0x8A+0xFC)/0x5 = 4E Magyarra fordítva (138+252)/5 = 78 Megtoldottam a tesztet azzal, hogy visszaszorzok öttel, és kivonok 252-t (0xFC-t), s akkor visszakapom a kiindulási adatot (0xA). Arra ügyelj, hogy szorzáskor ne csorduljon ki a 16 bitből (tehát a szorzás eredménye ne legyen nagyobb 655535-nél)! Arra is ügyelj, hogy nem mindig Z-be kerül a művelet eredménye, hanem Y-ba.
Üdv, valaki tudna nekem ebben segíteni, hogy az ADCON1 és 0 mit csinál?
START BANKSEL TRISC CLRF TRISC MOVLW B'00001110' MOVWF ADCON1 BANKSEL PORTC MOVLW B'01000001' MOVWF ADCON0 A többivel tisztában vagyok, csak ezt nem tudom, ha esetleg kell még valami, akkor begépelem
Az adatlapban keress rá az ADCON0 és ADCON1 szavakra, és meg fogsz lepődni, mert le van írva, hogy mit csinálnak!
|
Bejelentkezés
Hirdetés |