Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Problem sa PIC16F15313 i NCO
#1
Drugari, 

da li neko zna u čemu je ovde greška da ovaj NCO oscilator ne radi?
Svašta sam probao i ne znam šta je tu sporno, probam GPIO togle na RA2 nararvno radi, NCO nema ništa 0.
Ovaj code sam iskopirao iz aplikacione note, to bi trebalo da radi ...


//------------------------ PIC16F15313 ------------------------------------------------ 
#include "xc.h"

void setup_nco(void) {
// Set the oscillator frequency to 16 MHz
OSCCON1bits.NOSC = 0b110;  // Select HFINTOSC as the oscillator source
OSCFRQbits.HFFRQ = 0b110;  // Set the HFINTOSC frequency to 16 MHz

    NCO1CONbits.N1EN = 1;      // Enable NCO module
    NCO1CONbits.N1PFM = 0;    // Fixed Duty Cycle mode
    NCO1CONbits.N1POL = 0;    // NCO output is active high
    NCO1CLKbits.N1CKS = 0b01;  // Clock source is FOSC = 16 MHz
    NCO1INCL = 0x33;          // Increment value low byte
    NCO1INCH = 0x34;          // Increment value high byte
    RA2PPS = 0x13;            // NCO output on RA2
}

void main(void) {
    // Setup RA2 as output for NCO
    TRISA2 = 0;
    setup_nco(); // Initialize NCO

    while (1) {
        // Main loop (NCO will generate the frequency on RA2)
    }
}
Reply
#2
RA2PPS treba da bude:
RA2PPS = 0x1A;
Reply
#3
Bravo Gorane!
Tačno to mi je pravilo prblem, ooo svašta ...

Pravim delitelj za Boring frekvencmetar sa GPS, tj hteo sam svašta tu da probam jer je taj NCO 20bitni brojač, to je cool, može svašta da se napravi sa tim čak i kompletan frekvencmetar.

Hvala puno.
Reply
#4
Sad bi trebao da dogradim taj primer da umesto internog clock koristi externi pin, to je glavna stvar, da radi kao najobičniji delitelj (/10, /100, /1000) poput nekog CD4040 ili CD4060, bukvalno to ali da ima jeddan button da prebacuje izmedju 4 kombinacija, to je cela stvar koju treba taj MCU da odradi na HW nivou.
Reply
#5
Klok za NCO može da ti bude jedan izlaz iz CLC (Configurable Logic Cell). Pogledaj taj deo o CLC u datasheet-u a nešto više možeš da nađeš u: 
AN2912 -  Using CLCs in Real-Time Applications
AN2133 -  Extending PIC® MCU Capabilities Using CLC
Reply
#6
Da moralo je preko CLC da se rutira interno signal, preko kapija se napravi samo "pass-trough" i za to mora da se minimalno bar dve logičke kapije konfiguriš ili svih 4 drugom neom kombinacijom i to AND-OR, ne može prosto samo da se propusti, tu sam grešio, mora po logičkim kapijama da se slože stanja da bi samo to radio, da preslika stanja sa ulaza na izlaz CLC.

Dakle namestio sam NCO da radi kao delitelj, ulazi clock na jednu nožicu, na drugu izlazi podeljeno po izboru /1, /10, /100, /1000
Kao preskaler radi, ništa specialno funkcicki ali da bi to radio na HW nivou to treba tako da se namesti.
Kod STM je to rešeno na nivou jednog timer modula pa generalno lakše da se napravi ali krajnji rezultat je isti.

Pravili su ljudi te preskalere sa PIC10/12 serijom bez internih HW modula, u MCU program vrtu u loop po ASM instrukcijama, broje se instrukcije/clock i kad predje neku "okruglu" brojku togluje izlaz, uračunata svaka instrukcija i radi potpuno tačno, clokuju MCU spolja.
Microchip PIC radi sa clock-om od 0Hz, od DC, potpuno je staticki napravljen interno i tako naprave delitelje bez HW modula.

Kod PIC16F15313 i ove varijante sa GPS treba da dodam i slično iskoristim još jednu CLC da prespojim ulazni pin gde dolazi 10kHz ili 20kHz na još jedan TIM1 koji bi samo radio kao komparator, da li je jedna ili druga frekvencija, granica je recimo 15kHz da se ostavi tolerancija za variranje internog RC oscilatora za MCU kao bi sigurno mogao to da detektuje, jedna ili druga, tj GPS locked ili unlocked.
Na osnovu toga uskladim preskalere, dajem na izlazu potrebnu frekvenciju a cela stvar je da se samo detektuje stanje GPS-a, locked-unlocked i prikaže na jednoj LED Smile
Spomenuo sam da neki GPS imaju TCXO interno, kad nema signala rade na TCXO, sjajno, super, podelim i pravim bazu za frekvencmetre i bez signala.
Reply
#7
Napravio sam to što sam hteo, skockao sam ga samo tako, da code može da stane na jednu stanicu a da HW radi sve ostalo Smile

Automatski prepoznaje da li dolazi sa GPS 20kHz za sinhronizovanu frekvenciju ili 40kHz za ne-sinhronizovanu i tako postavlja delitelje.
Na button se ciklično bira jedna od vremenskih baza 0.1s, 1s, 10s i 100s.

LED nisam još dodao, najmanji problem, ovo gore do sad je bila potrebna HW logika.

[Image: attachment.php?aid=43556]


Attached Files
.png   vremenska-baza.png (Size: 340,83 KB / Downloads: 40)
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)