Fórum témák
» Több friss téma |
Szia!
Én a 18-as családot ajánlanám. Azon belül is kezdetnek a PIC18F14K22-est. Kellően nagy a tudása, és sehol nem kell bankváltással foglalkozni. Kezdőknek ideális. Programozó tekintetében teljesen egyetértek Pali79-el.
A megszakítás a 9. órajel lefutó éle után jön, és a CKP -t 0-ra állítja a modul, amivel várakozásra kényszeríti a mastert. Így a megszakítás kiolvashatja a SSPBUF tartalmát és feldolgozhatja azt. Ha címet vett, akkor saját cím esetén az ACKDT 0 szintre állításával fogadja el. Ha adatot vett, az ACKDT 0 szintre állításával jelezheti, hogy sikeresen vette. Ha beállította az ACK értékét, a CKP 1 -re állításával tovább engedheti a kommunikációt. A CKP engedélyezése utáni órajel felfutó élre a master beolvassa az ACK -szintet.
Én ezzel nem teljesen értek egyet. Jobb valamit megtanulni és utána elhagyni ha nincs rá szükség, mint szívni vele ha rákényszerülsz. Gondolj a saját példádra, amikor PIC18 után PIC 12-öt használtál.
Ebben igazad van. Viszont a gyengébb képesség, bonyolultabb programozással párosítva akadályoz a kreativitásban. Pl: RAM kezelés, RAM-on belüli munka.
Olvastad, hogy mit szeretne? LED-eket kapcsolgatni, hidd el a RAM terület kezelésétől messze van mint Makó Jeruzsálemtől.
Sziasztok!
Tudnátok segíteni abban, hogy hogyan lehet adatot kiolvasni SPI-n az ADE7753 típusú IC-ből? A MODE regisztert beállítottam az alábbiak szerint, hogy a feszültség minta legyen a waveform regiszterbe, mintavételt, stb. A 24 bit kiolvasását így oldottam meg, de csak nullák jönnek:
Vonalak felülről: SCK, !CS, SDO, SDI
Ha a waveform-ból olvasol, a parancs és az olvasás között kell min. 4us szünet. (Doksi, 6. oldal, "t9 4μs (min) Minimum time between read command (i.e., a write to communication register) and data read.")
Ennek a hiánya okozhatja a nullákat.
Nem ez volt a hiba, nem működik más SPI inicializálással sem. Azt hiszem nem kell mást konfigurálni a minimális működéshez, de tehettek volna egy inicializálási sorrendet az adatlapba...
Sziasztok!
Most valtottam 18F-rol 24HJ-re es az asm30 'szuper' assemblert hasznalom. De nem tudok pint nevvel definialni. (sd_ss = LATA,#2) Makroval meg tudom oldani a bset,bclr-t, de nem elegans. A neten sokfele megoldast lattam, de az, hogy installald fel a c30-at es hasznald azt, szamomra elfogadhatatlan. Tenyleg nem tudja az asm30 ezt? Elegge rohejesnek tunik...
Üdv!Kezdő vagyok a pic-ek terén.Vettem egy boardot , amin egy 16F887a van.Szeretnék egy ds1307 rtc - vel kommunikálni i2c-n csak sajnos eddig nem jártam túl nagy sikerrel.Valaki nem tudna küldeni esetleg egy példaprogramot c-ben amin be van állítva az i2c kommunikáció illetve kiolvassa az adatokat az rtc-ből?
Sziasztok
A következőkben kérném tapasztaltabbak segítségét. Adott egy 12F629, belső órajelről jár, de van egy külső órakvarc LP üzemmódban. Erről a belső 8-as előosztó és Timer 1 10 másodpercenként megszakítást generál és így gyakorlatilag végigszámol 24 órát. Az első négy órában csinál valamit a többi 20 ban SLEEP-ben van csak 10 mp-ként tér magához, amíg a 24 óra el nem telt, akkor megint ténykedik 4 órát és így tovább. Ez általában jó is de néha siet fél - egy órákat. Látni csak persze akkor látom, amikor a 4 ill. a 20 óra letelik. Olyan, mintha sietne az órakvarc. Ezt csinálta a próbapanelen is, akkor másik kvarcot kapott, azzal jól ment. Most a végleges programmal megint teszi. Órakvarc órából lett még régen kitermelve, a PIC adatlap szerinti 80pf kondenzátorokkal még inkább csinálta, most - az általában a kvarcokhoz ajánlott - 2x15 pf van benne, először ezzel jobbnak tűnt de most is megőrül néha. És vagy pontos, vagy siet, késni soha nem késik. Szkóppal (x10) rálépve az OSC1 lábra, pár mp alatt lassan 30-40 %-ot nő a jel, mintha az oszcillátor jobban érezné magát a mérőfejtől. Volt már valakinek ilyen tapasztalata? Ti mekkora kondenzátort tesztek rá? Előre is köszönöm a válaszokat. A hozzászólás módosítva: Dec 21, 2015
Szia!
32,768kHz-es kvarcot használsz? Csak mert 8-as osztóval az 16 másodpercre jön ki. Vagy előtöltöd a TMR1 regisztereket?
Szerintem ha 0-val kezdi, akkor az 64 másodpercre jön ki.
Ne haragudj, hogy le kellet írnod ezt a hosszas magyarázatot, nem ez volt a probléma az angol szöveget félreértelmeztem és azt értettem, ha a BF bit egy akkor nincs ACK, csak azt már elfelejtettem a végén, hogy akkor nincs ACK ha új bájt érkezik és a BF bit még mindig egy.
Valamint rosszul fogalmaztam meg a kérdést nem ismertettem az egészet. A probléma megoldódott, hogy a slave nem küld vissza ACK-ot. Egy PPS-el rendelkező PIC-en volt ez a probléma és az SDA/SCL lábakat nem állítottam be kimenetnek is csak bemenetnek és így nem tudta az SDA vonalat az ACK-hoz lehúzni. Idézet: „De nem tudok pint nevvel definialni. (sd_ss = LATA,#2)” Már definiálva vannak a nevek a megfelelő (például a p24HJ128GP502.inc) állományban. Például a LATA,#2 az névvel írva: LATA,LATA2. A hozzászólás módosítva: Dec 21, 2015
Sziasztok,
igen 0x60 (96)-nal töltöm a TMR1H-t és 0-val a TMR1L-t Innen 40960-at számol felfelé túlcsordulásig, x 8 az pont 327680 ciklus azaz 10 mp Ilyenkor jön az Interrupt, megnövel egy tárhelyet (sec) 10-ze, ha eléri a 60-at nullázza és incrementálja a percet. Ha az eléri a 60-at inc óra és nullázza a percet. 24 óránál nullázza az órát. Ennyi az INT, 4 MHZ mellett "nudli", hogy népiesen fejezzem ki magam. A többi INT-en kívül van, speciel egy karácsonyi (miért pont most ????) ablakdísz LED-et hajt meg 50% Duty Cycle-val a négy órában kb 150 Hz-en. Aztán kikapcsol, és várja a következő estét. Most egyébként átírtam a programot , 8-as osztót kivettem, és így fél óra alatt elvégzi a 4 órás LED-es ciklust. Megnöveltem a kondenzátorokat és tettem be csillapító ellenállást, így szebb az oszci jelalak, és most fél óra alatt három másodpercet sietett. Reggel 15 pf-es kapacitásoknál ellenállás nélkül ez 1 mp volt. Nem értem. Második kvarc, sokadik kondi, CHIP nem szokott így meghalni....., ill. ritkán. Most leviszem a kondikat 12 pF-re, benne hagyom az ellenállást és mérek. De ennek stabilabbnak kellene lennie 100 nF szűrés egyébként pont az IC hasa alatt van, az sem lehet.
Nem a bittel van problema, hanem a pinnel.
Amikor kiadom a bset LATA2 parancsot, kozli, hogy keves a parameter (varja a #valami-t). Vagyis az elejen szeretnem EGYSZER definialni neki a megfelelo pint es utana ezzel a nevvel hivatkozni ra a program teljes teruleten. De nem segit semmi, se define se egyenlosegjel, sem global, sem ilyesmi. Mas is kuzdott vele, mas sem tudta megoldani. Csak ha atternek a c30-ra.
Szia!
Bát nem tudom milyen PIC-et használsz, de 16bites módban elsőnek a H regisztert kell írni, aztán az L-t. 8 bitesben elsőnek nullázni kell az L regisztert, beírni a felső értéket, és ezután lehet írni az alsó regisztert. Azonban pontatlanságot okozhat az, hogy állandóan újra és újra írni kell a timert. Megszakítás alatt, ha épp a tmr1-et is frissíteni kéne mindenképp hiba áll elő.Ezért kell olyan időzítőt készíteni,amit sose kell újra írni, és ez pedig a TMR2 . Van elő és utóosztója,szinte bármilyen kvarcnál be lehet állítani a pontos másodperc alapú megszakítást, de sosem kell beleírni. Az utóosztója 1-15 ig állítható. A periódus regisztert (PR2) eggyel kisebbre kell állítani (pl. 250 kell, akkor 249 re)i. Én mindenképp azt használnám. A megszakítás csak egy jelzőbitet billent be ,majd a főprogram ciklikusan figyeli ezt a jelzőt, ha 1 akkor nullázza és végrehajtja az adott feladatot. Biztos programbeli probléma lehet nálad, mert kvarccal ekkora eltérés szerintem sok. üdv. Foxi A hozzászólás módosítva: Dec 21, 2015
Elárulnád, mi a jó abban, hogy így elbonyolítod azt ami amúgy egyszerű?
Töltögeted mindenféle értékekkel a Timert. Minek? Ha egyszer óraquarzot használsz, és békén hagyod a TIMER1-est, akkor az 2 másodpercenként vált ki egy megszakítást. A megszakításban törlöd a flag bitet, és semmi mást. A számlálódat növeled 1-el, és 30-nál lépsz. Én több órával vezérelt szerkezetet is készítettem már, de ezzel a hibával még nem találkoztam. Bár nem atomóra, de napi 1 sec eltérésnél többet még nem tapasztaltam. Igaz, bontott quartzal sem dolgoztam még. Kibírtam azt a 30 Ft-ot amibe kerül. Amúgy én 33 pF-es kondikat használok. Eddig bevált. Az adatlap egyébként 27-et ír. Majd elfelejtettem. Előosztás sem kell. Amikor így írkálod, az előosztás is csúnyán bekavarhat. A hozzászólás módosítva: Dec 21, 2015
Szia,
köszönöm a választ a 12 F629-ben sajnos nincsen TIMER2 a Timer1 viszont olyan lassan működik, hogy az Interruptban lévő CLRF TMR1L tulajdonképpen hatástala, úgyis 0 van benne, a TMR1H pedig alapvetően nem változik, még nagyon sokáig, hiszen az a TMR1L túlcsordulásakor lépne csak egyet. Tehát szerintem az L-ben és a H-ban is 0-van. Az interrupt rutin max 40 ciklus ez 4 MHz-en ami 40 microsec. A 32kHz kristály egy órajele meg 30 usec, azaz a 8-as előosztó éppen egyet lép, mire kint vagyok az Interruptból az új timer értékekkel. Most, hogy leszedtem a leírás szerinti 80 pf-et és 15 pF maradt, fél órán belül nem látható az eltérés. Lemegyek 12 pF-re, meg szerzek egy új kvarcot, ezek már túléltek velem együtt vagy 30 évet a fiókban, hátha nyugdíjba mentek már. Az OSC2 elég gnóm jelalakkal jön, annak pedig színusznak kellene lennie a MICROCHIP szerint. Lehet, hogy mégis a PIC döglött? Egyébként a kapcsolás célja az, hogy az elemes ablakdíszt ne kelljen kapcsolgatni, hanem az első bekapcsolást követően 4 órát világít (azt is 50% kitöltési tényezővel) a többit a 24-ból meg alussza. Ha stabil lesz, és érdekel valakit, megoszthatom. Következő karácsonyra hátha valakit érint.
Köszi,
én azért csinálom ezt a macerát az osztóval, mert így van egy RTC-m az interruptból vezérelve, a főprogram meg csak az órát nézi, mikor mit kell tennie. Nekem így tetszik, de gondolom mindkettő megoldás megy. Kvarccal meg nem spórolok, csak macerás elmenni ebben a karácsonyi tömegben. Ha úgyis van itthon. Habár úgyis akarok venni pár alkatrészt (400 Ft parkolás + 100 Ft alkatrész ) Idézet: „400 Ft parkolás + 100 Ft alkatrész” Sajnos ez igaz. Meg odamenni sincs ingyen.
Másfél óra alatt nem látok eltérést
Megyk kvarcért. Csak azt szeretném tudni, hogy a 12f629 adatlapján MIÉRT 68-100 pF szerepel.
Köhömm...
Rossz adatlapot tetszett nézni!
Ha nem ragaszkodsz nagyon a 10 másodperces megszakításhoz, akkor én inkább a 16-ot ajánlanám, és akkor nem kell a Timer regiszterekhez nyúlni. Így lesz egy regiszter, amit 16 másodpercenként növelsz, ami 3600 másodperc alatt 225, vagyis simán elfér 8 biten. Onnan meg már használhatod a mostani eljárásodat.
Már az én válaszom után jött az ifó, a PIC típusáról.
Amúgy igazad van.
Sziasztok
Igen Zenetom tippje is egy jó és elegáns megoldás. Amikor elkezdtem, mindenféle egyéb plusszokon járt az agyam, amihez egy RTC ideálisabb lett volna, de aztán rájöttem, hogy egy ablakdísz nem kíván hitec konfig menüt és hasonlót. De az RTC megmaradt Most új kvarc és 12 pF valamint a raszter-nyák saját kapacitása van benn, így stabil eddig, de az órajel ugyanolyan gnóm, mint előtte. Majd játszom vele, karácsony után úgyis egy évig pihiben lesz. A quartz házát földre kötitek? Az elmélet kedvéért: tudtok valami rizikóról a TIMER1 írásánál azon kívül, ha pont az incrementtel együtt van az írás/olvasás? (Ez ugye nálam nincs, mert olyan messze van az első INC, hogy a szele sem ér a TIMER1-hez) Üdv és köszönet mindenkinek a segítségért és Boldog Karácsonyt! A hozzászólás módosítva: Dec 21, 2015
Timer1 errata
A timer2 nem működik speel üzemmódban. |
Bejelentkezés
Hirdetés |