Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Nálam sem működik rendesen, törlődik a TMR0H. Lehet írni kellene microchipéknek egy hibajelentést, csatolva mellé a kódodat.
Adatlapokkal még elboldogulok, de levelezni nem tudnék velük.
Van esetleg vállalkozó, aki mengtenné?
Üdv
Szerintem a T0CONbits.T08BIT = 0; a jó beállitás, 16bites módban.
Igen, így is van a forrásban. Máshogy láttad valahol?
Egyébként most 8bites módra váltottam és az előosztóval működik az SIM-is.
Hi,
Ha priviben elküldesz mindent magyarul, fordítom, és elküldöm nekik, ha szeretnéd. zimpee
Szia Watt, Integer promocio be van kapcsolva a forditasi opcioknal?
Bővebben: Link
Az angolosok itt tudják követni a bug életét, persze, ha jön hivatalos válasz, jelzem majd. zimpee
Szia! Bekapcsoltam, ugyanaz.
Ez egyébként mire jó? Még annyi adaléknak, hogy van mikor úgy belekavarodik a SIM magába, hogy még meg sem áll a megszakításban, valószínű azért, mert olyankor abszolut nem megy a TIMER!
Szevasztok. Egy kis segítségre lenne szükségem. PIC18F2550-át szeretném programozni ASSEMBLY ben, de elakadtam ott hogy hogyan definiálok változókat (pontosabban hogy hova definiáljam). Eddig PIC16F627-et programozgattam, azzal semmi gondom nem volt de a két pic Template-je eléggé eltér. Addig eljutottam hogy konfigurációs biteket beállítottam... Az interneten vannak példaprogramok de főleg C-ben, később azt is meg akarom majd tanulni de egyenlőre assemblynek jobban örülnék. Kérhetnék szépen egy egyszerű példaprogramot amin el tudok indulni?
Nézz fel az oldalamra, van egy pár példa, igaz más 18F-re, de az mindegy...
Rendben köszönöm szépen, nemsoká átnézem őket.
Pont az, hogy bekapcsolt allapotban gondoltam esetleg problemaz ha elbenaztak a forditot. Az egy ANSI szabvany dolog, mielott barmivel szamol elobb atalakitja int-re a szamokat, tehat ha short-tal vagy char-al szamolgatsz akkor elobb felkonvertalja int-re majd lekonvertalja a a cel regiszter short vagy char... Az az ertelme amugy, hogy pl ket char tipusut szorzol es az eredmenyt int-ben tarolod el akkor ne vesszenek el a felso helyiertekek -- csakhogy ez PIC-en ugye hosszebb kodot jelent es ezert szoktak kikapcsolni es ha kell manualisan cast-olni int-re.
Itt azert gondoltam esetleg bele szolhat, mert mint tudom en, a konvertalgatasok miatt a felso byte-ot (TMR0H-t) esetleg felul irja, bar nem kellene.
Nekem van egy csomo, hova kuldhetem?
Egyebkent a 18F-eseknek nullanal indul a valtozok cime. Onnantol 7F-ig nincs gond. En cblock-al szoktam definialni, akkor nem kell egyenkent bohockodni a cimekkel, hanem egymas utan rakja, egeszen az endc-ig. Idézet: Nézegesd meg a honlapomon a PICCOLO projekt első öt fejezetét! „PIC18F2550-át szeretném programozni ASSEMBLY-ben” Már csak azért is érdemes megtanulni az áthelyezhető (relokálható) programok írását, mert abszolút módú címzésnél az MPLAB szimuláció vagy hardveres nyomkövetés esetén összekeveri a változókat és az egyéb szimbólumokat.
Fejlemény, hogy LowInt be téve a TMR1-et, ha TMR1L=0x00-t írok, akkor a megfelelő időkkel okoz megszakítást, ha TMR1L+=0x00-t, akkor nem.
Tehát úgy tűnik, akkor van baja a SIM-nek, ha a TMRxL-hez hozzá akarunk adni egy állandót! Lehet, hogy ha visszakérdeznek a Microchiptől, ezt még meg kell nekik írni, ha nem jönnek rá maguktól!
Erre a problémára olyannyira rájöttek már, hogy a C18 Compiler readme fájljában, mint known problem közzé is tették (nálam a 3.36-os verzió van). ( C18-19 / 18487) kóddal.
Idézet: „With the compound assignment operators, the usual type conversions which are to be performed on the operands are not done correctly when the left operand is 8 bits in size.”
Szia! Tedd fel ide! Én is és más is tanulhatna belőle.
Idézet: Ha 16 bites módot állítottál be, akkor TMR0H beírása után egy TMR0L írásnak is kellene következnie, s csak akkor íródik át Timer0 magasabb helyiértékű felébe az, amit beírtál.„Egy képet is arról, hogy a TMR0H lenullázódik, hiába töltök bele értéket. Ha valaki tudna rá mondani valamit, annak örülnék!” A TMR0L+= 10 viszont először kénytelen visszaolvasni TMR0L értékét, ami a 16 bites mód miatt magával vonja TMR0H olvasását is. Tehát felülírja azt a regisztert, amit te a TMR0H=0xD0; utasítással feltöltöttél. Az adatlap szerint ennek nem így kellene működnie? Idézet: „TMR0H is not the actual high byte of Timer0 in 16-bit mode. It is actually a buffered version of the real high byte of Timer0 which is not directly readable nor writable. TMR0H is updated with the contents of the high byte of Timer0 during a read of TMR0L.”
Ugyan én hardveren nem próbáltam, de mintha watt azt írta volna, hogy a kontrollerbe beégetve jól működik, módosul a TMR0H is.
Idézet: „A TMR0L+= 10 viszont először kénytelen visszaolvasni TMR0L értékét, ami a 16 bites mód miatt magával vonja TMR0H olvasását is. Tehát felülírja azt a regisztert, amit te a TMR0H=0xD0; utasítással feltöltöttél.” Ott a pont! Ez teljesen jogos felvetes, persze felvetodik akkor ez miert mukodik a harveren? Szerintem amugy az mar mas miatt lesz, de ezt majd watt megmondja. Idézet: Csak egy másik változat (az ADDWF utasítással) működött neki. Bővebben: Link „mintha watt azt írta volna, hogy a kontrollerbe beégetve jól működik”
Én eddig is arról beszéltem. Az, hogy a nem ADDWF-es megoldások nem működnek sem a hardverben, sem a szimulátorban, az teljesen logikus, nincs is miről beszélni ezzel kapcsolatban.
Köszönöm a felvilágosítást, megértettem, hogy az összeadás 16bites regisztereknél nem működhet egy lépésben Assemblerben sem a Timer felépítése miatt!
A megoldást már kitaláltam íme:
Mégegyszer köszönöm a profi segítséget mindenkitől, aki hozzászólt! A levéllel kapcsolatban pedig, az a része igaz, hogy a TMRx nem lép C-ben, ha léptetem a programot, lehet ezzel tudnak kezdeni valamit!
Helló!
PIC18F2455 -nél, ha kvarcnak 48 MHz-est teszek be, akkor ahhoz milyen ajánlott értékű kondenzátorok tartoznak? Akárhogy is nézem az adatlapot, ott csak max 20 MHz-hez van írva 15 pF, pedig a maximális frekvencia 48 MHz is lehet. A választ előre is köszönöm. Üdv, mate_x
Szerintem 48 MHz csak külső oszcillátor jele lehet (EC mód).
Van esetleg valami oka, hogy nem használod a belső PLL áramkört?
Szia!
Szóval akkor maximum 20 MHz-es külső kristályt lehet rátenni. Köszi a választ. Üdv, mate_x
Szia, nem 20MHz a max, maximum annyit tehetsz rá amennyit az adatlapján ír, PIC18F2455 esetén ez 48MHz.
Egy 48 MHz -es kvarcnak kb 10-15pF-os kondikat tegyél |
Bejelentkezés
Hirdetés |