Diskusije : Elektronika

 Komentar
Pitanje za SinisaJ, a i ostale
Axe
(zjakoprodavac)
24. decembar 2011. u 04.17
Леп поздрав свима,
потребно ми је мало помоћи око микроконтролера.
Микроконтролер је мали ПИЦ 12Ф629,Програмски језик МикроЦ,задатак...наизглед једноставан.
Произвести на неком пину фреквенцију од 52кХз четвртасти таласни облик (укључено/искључено).

SinisaJ
(Електр�)
24. decembar 2011. u 07.16
Mislim da ti je najprostije rešenje koriscenjem interapt rutine i hardverskog tajmera, pod uslovom da ne koristis biblioteke koje takođe koriste interapt rutine. Ako koristis vise interapt rutina, stavi ispitivanje i obradu tajmer rutine prvo da dobijes ponovljive rezultate.
Axe
(zjakoprodavac)
21. januar 2012. u 02.46
Pozdrav,
prodjose svi silni praznici i ja konacno nadjoh vremena da poradim na ovom problemu.Ovako stoji stanje,nasao sam skoro gotov program,malo sam ga samo preradio i izgleda da skoro pa radi.Evo prvo programa pa da napisem čemu je još ostao problem:

/*Header******************************************************/

unsigned short cnt; // Define variable cnt

void interrupt() {
cnt++ ; // Interrupt causes cnt to be incremented by 1
PIR1.TMR1IF = 0; // Reset bit TMR1IF
TMR1H = 0x80; // TMR1H and TMR1L timer registers are returned
TMR1L = 0x00; // their initial values
}

void main() {

GPIO = 0b000000; // Initial value of port B bits
TRISIO = 0; // Port B pins are configured as outputs
T1CON = 1; // Set timer TMR1
PIR1.TMR1IF = 0; // Reset bit TMR1IF
TMR1H = 0x80; // Set initial value for timer TMR1
TMR1L = 0x00;
PIE1.TMR1IE = 1; // Enable interrupt on overflow
cnt = 0; // Reset variable cnt
INTCON = 0xC0; // Enable interrupt (bits GIE and PEIE)

do { // Endless loop
if (cnt == 76) { // Change port B state after 76 interrupts
GPIO = ~GPIO; // Number in port B is inverted
cnt = 0; // Reset variable cnt
}
} while (1);
}

Menjanjem TMR1H i TMR1L s ne desava ništa!?Tajmer broji stalno maksimalnih 65535 impulsa sa eksternog oscilatora.Koristim kvarc od 8MHz.Menjanjem broja interapta dobijam promenu...
Axe
(zjakoprodavac)
21. januar 2012. u 05.53
Eh...,resio sam...kad sam slep kod zdravih ociju...:)
SinisaJ
(Електр�)
22. januar 2012. u 13.19
Ех, увек је тако и код мене... Понеки пут се чак обнови вера у постојање Гремлина :-)
Axe
(zjakoprodavac)
23. januar 2012. u 12.33
Uh,gremlini ili ne ali opet problem.
Menjanjem vrednosti TMR1L i TMR1H (low,hi) tajmera 1 dobijam sad promenu,također i kad menjam broj interapta dobijam promenu,ali nikako ne mogu da dobijem više od nekih 7,5 kHz.,lepe četvrtke na osciloskopu ali neće više od toga!?Kristal je 8MHz.
Sve živo isprobah,ostajem bez ideja.
SinisaJ
(Електр�)
23. januar 2012. u 18.45
Извини, сад сам се вратио са годишњег од месец дана, тако да немам времена сад одмах да пробам решити тај проблем. Ако не успеш да решиш сам у међувремену, надам се да ћу погледати за неколико дана. Провери да ли ти је делитељ такта намештен како треба (T0CS,PSA,PS0 - PS2). Води рачуна да ти је интерни такт 4 пута мањи од спољног. Не верујем да си потрошио преко 260 тактова у интерапт рутини. Буџет ти је максимум 38 тактова за интерапт за тих 52kHz, али ти треба да потрошиш далеко мање ако хоћеш да контролер ради и друге послове осим да седи у интерапт рутини. Води рачуна да се интерапт генерише на прелазу са $FF на $00, тако да је фреквенција директно пропорционална са вредношћу бројача коју стављаш на почетку.
Axe
(zjakoprodavac)
24. januar 2012. u 08.35
Nigde ne gori,nije ništa hitno...
Znam da je takt 4x manji,8MHz kristal=2MHz takt.
Mikrokontroler ne radi ništa drugo,samo da mi služi kao referenca frekvencije.
I ja kuburim sa slobodnim vremenom :)
Pozdrav.
 Komentar Zapamti ovu temu!

Looking for Tassel Necklaces?
.