Fórum témák
» Több friss téma |
Szia!
- Neked csak az egyenlőség vizgálata kell, akkor többféle módon is megoldható a feladat, mindegy a számok ábrázolása: - Az LCD DDRam-jába ASCII karakter kódokat kell írni, hogy a karakterek megjelenjenek. Ha a kapcsolás olyan, hogy lehet az LCD-ből olvasni is, akkor a 4 karakterkód összehasonlításával megoldható az ellenőrzés és 4 byte-on a tárolás. - Ha BCD kódolást használsz - egy byte két decimális számjegy, akkor a kód elfér két byte-on, a összehasonlítás 16 bites xor művelettel megoldható, a tároláshoz két byte kell. Két bevitt karaktert egy byte-re kell pakolni - ha csak a számok kellenek, a kódjuk alsó 4 bitjén a számok bináris kódját találod. - Bináris számábrázolást használsz: A legproblémásabb, mert a szám előállításához a kódot binárissá kell alakítani, és nem nyersz vele semmit, ez is csak két byte-on fér el.... Ha a kódokkal más műveletet is kellene végezni, akkor ezt a formát ajánlanám...
Helo
Megint én. Timer0 megszakítás lenne, de nem jövök rá, hogy mit nézek el folyamatosan, mert ez a kód a valóságban (próba panel) kb. 10 másodperc alatt billenti lata0-t 1-be. Na de 50000 megszakítással? Felvilágosítana valaki? Köszönöm! (PIC18F4321 4MHz rezonátor).
Talán kimaradt a T0CON inicializálástól egy olyan, hogy a 00000111 érték binárisan értendő, ezért a fordító decimálisan értelmezi ezt. Így ha a T0CKI lábról lépteti a Timer0-t, ami láb nagyimpedanciás állapotban van, ezért minden zajt összeszed, többek között a főoszcillátor jelét is, így kb. 12,8 másodpercenként telik le az 50000 megszakítás.
Ha már be van csatolva a timers.h állomány, akkor miért nem "öndukumentáló" módon írod a beállításokat? Például:
De akár a PIC18 programkönyvtár támogatói függvényeit is meghívhatod (ha már a Microchip mérnökei fáradtak vele és megírták):
Ez ugyanazt csinálja, mint amit az InitT0-ban fölöslegesen újra megírtál, a makrók használata pedig sokkal olvashatóbbá teszi a programlistát, szemben a T0CON = 0b00000111 típusú szörnyűségekkel. Megjegyzés: az USE_OR_MASK definiálásának elhagyása esetén az AND maszkokat kell használni. Például így:
Dokumentáció a C18 fordító telepítési könyvtárában!
Hálás köszönet mindkettőtöknek!
Remélem eljön majd az idő, amikor az ilyen dolgok nekem is egyértelműek lesznek. Köszönöm még egyszer!
Sziasztok.
Ha egy PIC16F676-ost sleep modbol megszakitással ébresztek az INT lábán akkor elindul a Timer0? Vagy csak azután miután a megszakitásba lévö dolgokat befejezte.
Hali
Akkor indul amikor a belso oszci indul. Ha kulso jelrol kap impulzust, akkor sem megy a belso oszci nelkul, mert a szamlalast szinkronizalja a belso oszcihoz. Udv Vili
A timer0 az belső oszsirol megy és sleeböl a timer 1 ébreszti fel meg az INT láb. A belsö osci akkor elméletileg nem indul el ha INT láb ébreszti.Mert ha oda irok egy idözitést amit a timer0 léptetné akkor azt nem hajtra végre. Gondolom azért mert nem indult el a timer0. Jol gondolom?
Én úgy nézem, hogy nemnagyon lehet trükközni itt, ha a kontroller fut (márpedig a SLEEP-ből felébredés ezt jelenti), akkor a Timer0 is fut, feltéve hogy nem a T0CKI lábról hajtásra van beállítva. Szóval ha az OPTION_REG T0CS bitje nulla, akkor fut a Timer0 is a kontrollerrel együtt. Nálad esetleg nem ér el oda, hogy túlcsorduljon, azért nem látod jelét a futásának. Szimulátorban nézd meg.
Hali
SLEEP-bol barmi is feleleszti a procit. Viszont ha feleled be kell indulni az oszcinak, mert maskepp nem tudna a proci dolgozni. Ha van oszci, akkor ha mas nem tiltja, megy a TMR0. Epp valamelyik nap csinaltam egy projektet, ahol altattam a procit, de nekem rogton az ebredes utan indult a TMR0 minden gondolkodas nelkul. Jo kis proci (12F683). 3 voltrol a proci es egy Hall switch kemeny 8 uA-t zabalt. A hall switch ebresztette a procit. Udv Vili
Volt már nekem is pár áramköröm 12F683-al, meg most is készül egy, tényleg durva, hogy teszek mellé egy egyszerű 78L05 stabkockát, az benyel alapjáraton 8mA-t, PIC meg elvan 4MHz-en kevesebb mint 1mA-el. Akkus vagy elemes üzemnél muszáj az embernek valami rendesebb stabilizátort használnia, pl. MCP1703-at, hogy tartson is valameddig, mert hiába küldi SLEEP-be a 78L05-nél, alig számít valamit. Persze én autóakkuról hajtom, de akkor is bántja a szépérzékemet a felesleges fogyasztás...
Oké akkor majd nézegetem ha lessz idöm. Addig is köszönöm.
Hali
Az enyem belso 31k oszcirol jar. Abban igazad van, hogy nincs egy igazan jo, kis nyugalmi aramu stabler. En is kinlodtam mar sokat ilyen miatt. Ha autoba csinalsz valami cuccot, es mindig mennie kell, bizony az a par miliamper is sokat szamit. Nekem kellett csinalni riasztos akkuhoz hordozhato cuccot, es ugy banyasztam ki stablert valami rossz panelbol, mert itt nem ismerik a kereskedok csak a 78Lxx sorozatot, es egy keszulekert nem rendelek alkatreszt az USA-bol. Kulonben is tegnapra kell minden. Udv Vili
Én a chipcadből szereztem be MCP1790-et, meg ott elvileg van MCP1703 is. Előbbi csak 70uA nyugalmi áramú, viszont a bemenetén 30-40V környékét is elvisel. Nem mertem az 1703-at betenni, mert igaz, hogy 2uA nyugalmi áramú, de csak max. 16V, azt meg kevésnek éreztem. 70uA is már elég kellemes, bár igaz, hogy SLEEP-ben meg a kontroller kb. semmit sem fogyaszt (idő 99%-ban), akkor ahhoz képest még mindig rengeteg a 70uA is...
Nekem sajnos kiesik a bejarasi utvonalbol a chipcad. Viszont idonkent rendelek a Mousertol es akkor hozzateszek a rendeleshez 1-2 hasznos alkatreszt, mert igy a szallitasi koltseg megoszlik.
Idézet: Be kell tenni 15 voltos szupresszort es megszunik a problema.„de csak max. 16V, azt meg kevésnek éreztem” Udv Vili
Helo
Végül is annál a megoldásnál maradtam, hogy gombnyomás után kikerül a szám az LCDre, majd átadja egy függvénynek, ami a,b,c,d változókban tárolja a négy számot (ezzel a törlést is meg tudtam oldani egyszerűen). Így könnyű eepromba menteni is. Ha a program elején mondjuk beolvasom eepromból a mentett kódot (pl. aa,bb,cc,dd) akkor formailag hogyan tudom összehasonlítani őket a legegyszerűbben? Vagy csak 4 IF-el lehet?
Miért nem képzed a számot és hasonlítod úgy össze? Pl.: számképzés=a*1000+b*100+c*10+d
Így átláthatóbb és könnyebb lekezelni mint egyesével összehasonlítgatni.
Hát azért, mert ez nem jutott eszembe.
De ezt fogom tenni. Kössz!
Szia!
Mint fenntebb már ajánlottam egyszerűbb az élet, ha a számképzés=a*16^3+b*16^2+c*16+d, mert csak léptetni kell (swapf, iorwf ). A kiírásnál nem kell majd osztogatni 10 hatványaival, hanem a digiteket közvetlenül (andlw 0x0F - a magasabb 4 bitnél pedig egy swapf megoldja a helycserét...) lehet felhasználni. Ez a szám is elfér 16 biten...
Maximálisan jogos, de ez pedig az része ami fogyasztásra kész és átlátható a logika.
Sziasztok!
Remélem, hogy jó helyen teszem fel a kérdésemet. Egyetemista vagyok és néhányan szabadidőnkben *nagyon* régóta egy égető áramkörön dolgozunk, de sosem sikerült működésre bírni. Végső soron 6 darab PIC16F684 beprogramozásához kellene. Azt szeretném kérdezni, hogy ismertek-e olyan embert Budapesten vagy az agglomerációban(Érden lakok) akit megkérhetünk, hogy elvégezze a beégetést ha elvisszük neki a chipeket. Cserébe sört/csokit viszünk
Hali!
Asm-ben a kivonás (8 bites) is 4 órajel periódust vesz igénybe, vagyis ugyanannyi idő alatt hajtódik végre mint az összeadás? zoli530: ha budapesti lennék még én is elvállalnám, egyébként még nem írt senki se privit?
Ugyanannyi. De az utasításlistánál te is megnézheted, írja mindegyik mellett, hogy meddig tart a végrehajtása.
Köszi!
Azt írja hogy 1 "kör" alatt megcsinálja, csak biztos akartam lenni benne (ezeknél a pikeknél semmin se lehet csodálkozni ).
Igen, de ezt Te is könnyedén ellenőrizheted. Az adatlapban az utasítás készlet áttekintésénél a táblázatban fel van tüntetve minden utasításnál a ciklusszám. Egy utasításciklus a PIC mikrovezérlőknél 4 órajel periódust jelent.
szerk.: látom, Potyo megelőzött
Itt a kivonás után az eredmény visszakerül a BCD_SZAM-ba? Az adatlap szerint visszakerül...
Igen, visszakerül. Mindig az adatlap információja a döntő és ha az errata nem cáfolja az adatlapban foglaltakat, akkor szinte biztosan úgy is van.
A MOVF utasítással nem lehet változóból változóba másolni?
A
helyett
ezt használva működik. :gumicsirke: Idézet: Nyilvánvalóan nem, mert az utasítás kódjában nincs elég hely a műveleti kód mellett két változó címének tárolására. „A MOVF utasítással nem lehet változóból változóba másolni?” PIC18 esetén erre a kétszavas (32 bit) MOVFF utasítás használható. |
Bejelentkezés
Hirdetés |