Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Ezeken már túl vagyok, le is fordul, csak nem működik a PIC-ben. Én a konfigurációs bitekre gyanakszom, hogy nem mind van jól beállítva. De MPLAB-ban nem is lehet ennyi félét beállítani, vagy csak én nem tudok róla!?
Ha így állítod be a config biteket, akkor megkapod az ő bitjeit ( nézd meg a config szót : 3F31H --> 11 1111 0011 0001B ) !
Ha nem működik, akkor más baj van! Steve
Még most nézem, hogy a BANK-ot PAGE-el jelöli, ill. váltja! Ezekre figyeltél?!
Steve
Nekem nem teljesen így volt beállítva. Majd holnap este beletöltöm a PIC-be. És lesz ami lesz. Köszi a segítséget. És az org 0 beszúrásom kell, vagy sem?
Igen azt én is észrevettem és át is írtam. De mivel már csináltam belőle már 3 féle projektet, így már nagy bennem a kavarodás. Elkészítem a végleges verziót és megpróbálom úgy, ha nem jó akkor feltöltöm ide is.
Kész egy végleges verzió. Így is lefordul, de ha találnál benne még hibát, akkor kérlek jelezd. A konfigurációs biteket úgy állítottam be, ahogy mondtad.
(Ahol módosítottam, ott jól láthatóan jeleztem a megjegyzésnél.)
Tegyel ra (legalabb) 10A-es FET-eket...
Egy kicsit bővebben, kérhetem?
Mondjuk használjak egy IRF 740 FET-et?
Én meg autót akarok vezérelni PIC-el, hogy kell autót építeni?
Szia!
Látom átírtad a megbeszéltek szerint, ezután már csak a próba van hátra (ha lefordul, akkor OK, én nem akarom az egészet értelmezni ! )! Még annyit, hogy az MPLAB projektben csak az angol ABC normál karaktereit használd ( az elérési útban, a file nevekben nincs ékezetes karakter, space, stb. ! ) ! Steve
Izééé..., nem tudom mi a gond a hozzáállásommal. Én csak megköszöntem az eddigi segítségeket mivel ezekből rengetegek tanultam azoktól akik tényleg értenek ehhez a témához..nekem meg elég nehezen áll rá az agyam azokra a dolgokra amiket még nem ismerek... És hidd el én lennék a legboldogabb ha napi 24 órában azzal foglalkozhatnék amit szeretek de néha sajna van más is amit intéznem kell. Ezért írtam hogy ha hazajövök felrakom azt a programot amivel próbálom megtanulni nezt a RAM dolgot....
Ezzel az alábbi demo val próbálgatom a RAM ba letárolást, a USART on érkező adatot letárolom a 0x20 címtől. Kérdés, az mi törénik akkor ha a letárolni adat mennyisége meghaladja a RAM terület tartományát...? Mert nekem egy komplet ismeretlen tartalmú (és ezért ismeretlen karakterszámú...) SMS t kéne letárolni. Az (összefűzetlen...) sms max karakterszáma 160 lehet, de ehhez még hozzájön a küldő száma, a dátum és még jó pár adat ami jön a USART on egy sms kiolvasásakor. Azt már megoldottam hogy csak azt olvasom ki ami számomra lényeg (csak a telefonszám és az üzenet tartalma) a többi adatot "eldobom" mert felesleges. Így nem foglalnak helyet a RAM ban. De egy RAM terület ebben az esetben sem elég...hogyan kéne megoldanom azt hogy ha az egyik RAM terület megtelik (BANK0 0x20h - 0X7F h ig) akkor megőrizve ennek a tartalmát a kiértékeléshez, folytatni tudjam az adatok letárolósát a BANK1 0xA0 h - 0XFF h területen.
hát az a kód nem épp úgy jelent meg ahogy szerettem volna de remélem a lényeg lászik...
Idézet: „nem tudom mi a gond a hozzáállásommal.” Semmi! kissi őszintén elmondta, hogy tetszik amit írtál(Gondolom, szimpatikus neki, ahogy minősíted a saját próbálkozásaidat.). Egyébként nekem is. Mi ebben a gond? Miért veszik az emberek támadásnak az egyszerű tetszésnyílvánítást? Nem értem...
Ok, köszönöm a segítséget. Este letesztelem, ha nem működik akkor még jelentkezek. (De remélem hogy nem így lesz.)
Egyébként ezt úgy lehet megoldani, hogy lefoglalsz 160 helyet a memóriában, és akkor nem lóghat túl.
A másik, hogy egy ilyen ciklusban vagy előre tudod a várható karakterek számát, vagy valami vége jelet figyelned kell. Most nem tudom milyen vége jel jön az SMS-ben, de valaminek lennie kell. Erre kell egy feltételt készítened, amikor is kilép a vételi ciklusból Egyébként soha nem fog.
[OFF]Ja, akkor sorry, én azt hittem valamit rosszul / kétértelműen fogalmaztam és félre értett valamit....akkor bocs csak kíváncsi voltam mi velem a baj ha van... Mert csak akkor tudom korrigálni...nem vagyok én sértődős...szép is lenne...
Jut eszembe, azok az adatok, amik neked kellenek, hol helyezkednek el az üzenetben? Lehet, hogy nem is kéne eltárolni, csak az első 30-at. pl...
Az megvan, a CR LF szöveg CR LF a tematika. A telszám előtt meg mögött pedig " karakter van, igaz előtte is van pár, de ezeket a megszámolgatva, és a felesleget átlépve / kihagyva ki tudom bogarászni azt a részt ami az adatsorból kell nekem. Így tudok spórolni a hellyel... ha jól számolom kb 190 karakternyi hely kell nekem kb. 160 lehet az sms szövege max + az "egyebek".
Ez a kód csak egy olyan demo mi szerint veszem és tárolom le az adatokat, az természetes hogy magától nem fog kilépni a ciklusból lebben a megoldásban. tehát azt mondod foglaljak le 24 db regisztert a memóriából a mentéseknek?A gáz az hogy már alig van helyem..
Csatolom textben, ez jön a USART on ha kiolvasom az smst. ebből nekem csak az eleje kell (CGMR) ezzel különböztetem meg pl egy hívástól mert akkor pl a RING jön a USART on Meg persze a küldő száma és a szöveg...remélem a text nincs elcsúszva, próbáltam valahogy átláthatóan összeszedni...
Sajnos nincs 160 folyamatos hely az említett PIC-ben. Bankokra elosztva, a család legnagyobb tagjában (16F648) van 80-80-80 általánosan használható regiszter, valamint a 16 közös, ami minden bank végén elérhető. Így jön össze az adatlapban írt 256 byte-nyi belső memória.
A gond az, hogy ha FSR-rel címezve folyamatosan próbálja meg elérni az ember mondjuk a nullás bank kezdetétől (0x20 címtől) a regisztereket, akkor az FSR növelgetésével először a közös memóriaterületre (0x70-0x7F), majd az egyes bank elején lévő SFR területre kerül (0x80-0x9F) a címzés. Tehát nincs más megoldás, mint az FSR tartalmát figyelni, és ha egy határt elért, akkor módosítani úgy, hogy ezeket a területeket kikerülje. Gyakorlatilag valami olyasmit kell csinálni, hogy a mutató növelése után meg kell nézni, hogy a mutató értéke nem 0x70-e. Ha igen, akkor a mutatóba 0xA0 értéket kell tölteni (én a közös területet mindenképpen kikerülném, az ugyanis kihagyhatatlan az interruptkezelésben). A 16F648-on én úgy oldanám meg a dolgot, hogy a saját változóimat (kicsit szokatlan módon) a bank2-be tenném, és a bank0-bank1 területén alakítanék ki egy 160 (80+80) byteos puffert az SMS számára. Ennek a puffernek a címzéséhez makrókat vagy szubrutinokat kellene összetákolni, amik a bankok közötti váltást is kezelik a puffermutató növelésekor. Mivel a bank0 és bank1 is az alsó 256 byteba esik, így indirekt címzéssel elérve ezt csak az FSR tartalmát kell változtatni, az IRP bit mindig nulla lesz.
Ez az....!! Tökéletesen átlátod a problémát amit én nem nagyon tudtam értelmesen megfogalmazni..A gondom az, hogy hiába figyelem az FSR t (kiolvasom minden INCF után) ha 0xFF h elérése után hiába váltok az FSR címzésével a 0X120 címre nem történik meg a váltás....Sőt... a probléma ott kezdődik hogy a 0X120 - területre nem is tudok írni valamiért....
Ja hogy 16F628A... Én úgy oldanám meg, hogy másik PIC-et használnék, vagy kiszűrném a szükséges karakterrrészt, ha lehetséges.
Az FSR-be 0x120-at nem tudsz tenni, 0x20-at tudsz tenni úgy, hogy mellette az IRP bitet 1-be állítod. Ezt le kellene tudni MPLAB-ban nyomkövetni a szimulátorral, ennek működnie kell. Lehet, hogy valahol máshol a programban (pl. az interruptban) elrontod az IRP bitet?
Igen, a másik PIC (pl. akármelyik legkisebb 18F, amiben egy bankon belül van legalább 160 byte) talán a legjobb megoldás lehetne, én azért nem akartam ezt javasolni, mert lehet, hogy a hardver adott. Bár a 18 lábú 18F-ek között még akkor is lehet, hogy érdemes lenne szétnézni.
Ha csak az eleje kell, akkor nem kell letárolni mindent, csak annyit, amennyibe belefér a szükséges infó. Így nem kell bankot váltogatni és előre tudod, hány db karaktert kell venned.
Valójában nincs olyan cím, hogy 0x120 egyben, azt két részből kell összerakni, értelmezni. Nézd meg az adatlapban az indirekt címzésnél hogyan épül fel a valós cím!
Igen azt a 0x120 at úgy értettem hogy BSF STATUS,IRP 0X20. De így sem megy. Ha viszont átírom (semmit nem változtatok, csak annyit hogy BCF STATUS,IRP és 0XA0 ra, címzem az FSR t) akkor az 0XA0 RAM címtől szépen írja az adatokat ...
nem 628 as, 648 as, egy kaptafa csak 4 k s...
|
Bejelentkezés
Hirdetés |