Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
A 16F887 Timer2-nek sincs 5-ös utóosztója. Sőt, semelyiknek sincs. Általában a 2 egésszámú hatványaival operálnak. A Timer2-nek konkrétan vagy nincs (1), vagy 16 az utóosztója.
A tények makacs dolgok Virág elvtárs! A Timer2-nek nincs utóosztója a /16-on kívül. Lehet, hogy egyes egzotikus PICekben van, de eddig nem találkoztam velük.
Egyébként ahogy a Potyó forumtársunk ajánlotta, érdemes néha belekukkantani az adatlapokba is. Csuda dolgok vannak bennük. A hozzászólás módosítva: Feb 22, 2015
Akkor a képen lévő postscale értékeket hogyan kell értelmezni, mert én azt látom hogy 1:1-től 1:16 ig állítható.
Ne vezessük már itt félre az olvasókat. 16F887-nek (adatlap) igenis van 1:5 arányú utóosztója. 82-es oldal, T2CON regisztert tessék nézni. Meg ahogy nekem rémlik, amivel összefutottam 8 bites PIC kontrollerrel, és volt benne Timer2, abban mindben volt 1:1 és 1:16 között egyesével állítható utóosztó.
A hozzászólás módosítva: Feb 22, 2015
Pedig ez a beállítás jó, hacsak a fordító nem ront el valamit. Állítsd meg a program futását a szimulátorban, és nézd meg, hogy mi van a T2CON és a PR2 regiszterekben.
Ennél a 45536 helyére a szimuláció alapján be kell lőni, hogy mit adj hozzá a get_timer1() eredményéhez, hogy pontosan 10ms-ot kapj. Attól függ, hogy hány utasításból áll ez a számítás, ASM-ben meg lehetne pontosan mondani, C-nél már nehezebb, legjobb a szimulátor alapján belőni.
És tényleg! Mea culpa. Én csak a sematikus ábrát néztem meg amin 1 to 16 érték volt feltüntetve.
Jobban megnézve 4 biten lehet állítgatni ezek közötti értékeket. Na, ezzel beégtem nagyon. Bocsánat mindenkitől, akit ezzel tévútra vittem. Ezek szerint minden PIC egzotikus. A hozzászólás módosítva: Feb 22, 2015
Közben gondolkoztam, és itt inkább 249 lenne a jó érték.
Nincs gond előfordul az ilyesmi. Az 1 to 16 pont azt jelenti hogy 1-től 16-ig
Hahó!
16F685-re írtam egy programot és 4.104-es fordítóval fordítottam. Tökéletesen megy. Majd mindezt megpróbáltam a legújabb demo compilerrel: 5.0.26. egyáltalán nem működik az interrupt handling. Valaki tapasztalt már ilyet? Az a gáz, hogy szeretnék 16F1509-re fordítani, de azt a 4.104 nem támogatja. Van valami megoldás? Köszi! Üdv: P
már nagyon kibeleztem és így sem megy:
#include <16F685.h> #device *=16 #device ADC=8 #fuses HS,NOWDT,NOPROTECT,PUT #use delay(clock=4000000) #INT_RB void detect_rb_change(){ // ide soha sem jutunk el } void init(){ init_timer_0(); init_timer_1(); set_tris_a(0b1111011); set_tris_b(0b11111111); set_tris_c(0b0000000); enable_interrupts(INT_RB); enable_interrupts(GLOBAL); } void main(){ setup_oscillator(OSC_4MHZ | OSC_INTRC); delay_ms(1000); init(); while(TRUE){ .... } } A hozzászólás módosítva: Feb 23, 2015
Hirtelen annyi látszik, hogy a Fuses-okban külső high speed oszcillátor van beállítva, a mainban pedig belső RC oszcillátor. LED villogtatás működik ilyen beállítások mellett?
igen, led villogtatás megy. A megszakításkezelés az ami totál süket.
Azokban a régebbi verziókban van olyan hiba, hogy printf után nem billen vissza a GIE, de úgy látom te nem használsz ilyet. Nézd meg a C/ASM list-ben, hogy mi történik a GIE bittel!
RB megszakítás esetén nem árt kiolvasni a PORTB-t, hogy megszűnjön a "mismatch condition", és ezzel törlődjön az RBIF bit.
Úgy rémlik, nemrég róla szó itt, hogy ezt CCS-ben hogyan lehet kivitelezni, próbáld megkeresni. A hozzászólás módosítva: Feb 23, 2015
megoldás: IOCB = 0xFF;
A PORTB kiolvasás megvolt, csak elfelejtettem bemásolni ide. Elnézést érte! A GIE bitet és az egész INTCON regisztert helyesen kezeli a fordító. Na mindegy, lényeg h működik. köszi! P
Mi is ez az IOCB=0xFF?
Mert nem ismerős ez a regiszter név. A hozzászólás módosítva: Feb 24, 2015
Four of the PORTB pins are individually configurable as
an interrupt-on-change pin. Control bits IOCB<7:4> enable or disable the interrupt function for each pin.
A 16F1509 nem rendelkezik ilyen regiszterrel.
Jaaaaa! A 16F685-nek van ilyen. Értem már.
Egy kis segítség kellene ...
Kinéztem mondjuk egy speciális karakter bináris kódját az LCD kijelző karakterkészletéből, akkor azt hogyan tudom kiiratni az LCD-vel? printf(lcd_putc,"valami szoveg ? más szöveg"); a kérdőjel helyére kéne a spec karakter.
Itt a 223, a fok jel.
Itt tudsz kalkulálni. A sor és oszlop számait összeadod és azt írod be a 223 helyére.
Vagy binárisan is beírhatja, ha az úgy átláthatóbb neki...
Na, ez a tipikus "gooomba" esete!
És még le is buktam, egyből tudtátok, hogy a fokot akarom kiiratni! Köszönöm a segítséget (természetesen mindenkinek)!
NTC-vel kellene megoldanom hőmérséklet mérést, mondjuk 1 tizedesjegy pontossággal. Ahogy elnézem a karakterisztikáját nem nagyon látok más lehetőséget mint a katalógusból kinézni és beírogatni az értékeket a programba.... de pl -20 ... +40C tartományban ez már 600 érték lenne ...
Túrtam a netet, találtam egy PIC + NTC-s hőmérőt annál is ezt a módszert haszálták, de csak 1 fokos felbontás volt. Létezik valami képlet amivel lehetne számolni? |
Bejelentkezés
Hirdetés |