Sari la conținut
ELFORUM - Forumul electronistilor

PIC18F14K22_RA0


vas1957

Postări Recomandate

Buna ziua, Vreau să fac o referință analogică pentru un regulator de viteză, este prima dată când lucrez cu DAC-ul de la 18F14K22, Am folosit rutina de mai jos pentru test, dar nu găsesc semnalul generat de acesta la pinul RA0. Ce am greșit ? Multumesc pentru orice raspuns.

 

#include <18F14K22.h>
#use delay(internal = 4MHZ)
void main(void)
{
#byte VREFCON0 = 0xFBA
#byte VREFCON1 = 0xFBB
VREFCON1 = 0xA8;//VREFCON1 = 0xC8;
VREFCON0 = 0xA0;
set_analog_pins(PIN_A0);
int8 i=0;
setup_dac(DAC_OUTPUT | DAC_VSS_VDD);
while(1)
  {
   for(i=0; i< 128; i++)
       dac_write(i);
 delay_us(1000);//delay_us(100);
  }
}

 

Link spre comentariu
  • Răspunsuri 15
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • vas1957

    12

  • mars01

    4

Top autori în acest subiect

Imagini postate


Bună, încearcă asta:
 

// Configuration bits
// CONFIG1H
#pragma config FOSC = IRC       // Oscillator Selection bits (Internal RC oscillator)
#pragma config PLLEN = OFF      // 4 X PLL Enable bit (PLL is under software control)
#pragma config PCLKEN = ON      // Primary Clock Enable bit (Primary clock enabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF       // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

// CONFIG2L
#pragma config PWRTEN = OFF     // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = SBORDIS  // Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
#pragma config BORV = 19        // Brown Out Reset Voltage bits (VBOR set to 1.9 V nominal)

// CONFIG2H
#pragma config WDTEN = OFF      // Watchdog Timer Enable bit (WDT is controlled by SWDTEN bit of the WDTCON register)
#pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)

// CONFIG3H
#pragma config HFOFST = ON      // HFINTOSC Fast Start-up bit (HFINTOSC starts clocking the CPU without waiting for the oscillator to stablize.)
#pragma config MCLRE = OFF      // MCLR Pin Enable bit (RA3 input pin enabled; MCLR disabled)

// CONFIG4L
#pragma config STVREN = ON      // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config LVP = OFF        // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
#pragma config BBSIZ = OFF      // Boot Block Size Select bit (1kW boot block size)
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

// CONFIG5L
#pragma config CP0 = OFF        // Code Protection bit (Block 0 not code-protected)
#pragma config CP1 = OFF        // Code Protection bit (Block 1 not code-protected)

// CONFIG5H
#pragma config CPB = OFF        // Boot Block Code Protection bit (Boot block not code-protected)
#pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM not code-protected)

// CONFIG6L
#pragma config WRT0 = OFF       // Write Protection bit (Block 0 not write-protected)
#pragma config WRT1 = OFF       // Write Protection bit (Block 1 not write-protected)

// CONFIG6H
#pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers not write-protected)
#pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot block not write-protected)
#pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM not write-protected)

// CONFIG7L
#pragma config EBTR0 = OFF      // Table Read Protection bit (Block 0 not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF      // Table Read Protection bit (Block 1 not protected from table reads executed in other blocks)

// CONFIG7H
#pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot block not protected from table reads executed in other blocks)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>

#define _XTAL_FREQ 4000000     // Internal oscillator frequency (4MHz)

void main() {
    // Disable comparators
    CM1CON0bits.C1ON = 0;
    CM2CON0bits.C2ON = 0;
    
    // Configure oscillator settings
    OSCCONbits.IRCF = 0b101; // Set internal oscillator to 4MHz
    OSCCONbits.SCS = 0b00;   // Internal oscillator used for system clock
    
    // Initialize DAC using VREF
    TRISAbits.TRISA0 = 0; // Set RA0 as output
    ANSELAbits.ANSA0 = 1; // Disable digital input on RA0
    TRISB = 0x00; // Set all PORTB pins as outputs
    
    // Configure voltage reference for DAC
    VREFCON1bits.D1EN = 1; // Enable DAC
    VREFCON1bits.D1LPS = 1; // Select positive reference source disabled in Low Power mode
    VREFCON1bits.DAC1OE = 1; // Enable DAC output on DAC1OUT (CVREF) pin
    VREFCON1bits.D1PSS = 0b00; // Select VDD as positive source
    VREFCON1bits.D1NSS = 0; // Select VSS as negative source
    
    // Main loop
    while (1) {
        // Increase DAC output from 0 to 31; 5bit DAC max value is 32
        for (unsigned int value = 0; value <= 31; value++) {
            VREFCON2bits.DAC1R = value; // Set DAC output value
            __delay_us(100); // Delay for smooth transition (adjust as needed)
        }
        
        // Decrease DAC output from 31 to 0
        for (unsigned int value = 31; value >= 0; value--) {
            VREFCON2bits.DAC1R = value; // Set DAC output value
            __delay_us(100); // Delay for smooth transition (adjust as needed)
        }
    }
}

 

Link spre comentariu
La 12.08.2023 la 21:27, antemir a spus:

Sau ceva de genul:
 

void main(void)
{
  setup_dac(DAC_OUTPUT | DAC_VSS_VDD);
  while(1+1<3)for(int i=0;i<128;(dac_write(i++)+delay_ms(i)));;;
}

 

 

Ce vrei să spui ?

Link spre comentariu

mars, antemir, Multumesc. Am incercat dar nu lucreaza.

Folosesc un osciloscop pentru a vedea semnalul.

Poate fi o sarcina interna pe acest pin?

 

Editat de vas1957
Link spre comentariu

Linia aceasta este gresita, am copiat gresit dintr-un alt program:

ANSELAbits.ANSA0 = 1; // Disable digital input on RA0


Corect este asa:
 

ANSELbits.ANS0 = 1; // Disable digital input on RA0

BTW, daca nu ai realizat, se compileaza cu compilatorul XC8 al Microchip.

Link spre comentariu
2 hours ago, antemir said:

Cred ca am ghinion(https://www.ccsinfo.com/devices.php?page=versioninfo),

doar la v. 5.072 cred ca s-a rezolvat problema mea:  "5.072 Fixed an issue with setup_comparator() and dac_write() function for PIC18F14K22 family". Ghinion, am 5.066.

Multumesc tuturor pentru sfaturi. Se poate inchide postul.

 

 

Editat de vas1957
AM vrut sa sterg "...antemir said", dar cred ca nu se poate
Link spre comentariu

Am incercat sa folosesc MPLAB 8.92 cu ccs 5.115 si rezultatul compilarii nu trimite nimic la RA0. Stiti sub ce versiune de MPLAB lucreaza bine ccs 5.115?

Am W11(64Bits).

Editat de vas1957
Link spre comentariu
Acum 4 ore, vas1957 a spus:

Am incercat sa folosesc MPLAB 8.92 cu ccs 5.115 si rezultatul compilarii nu trimite nimic la RA0. Stiti sub ce versiune de MPLAB lucreaza bine ccs 5.115?

Am W11(64Bits).

Eu zic sa incerci cu ultima versiune de MPLab X.

Acum 3 ore, antemir a spus:

Eu nu ințeleg ceva.
Ai compilat codul postat de @mars01 folosind compilatorul CCS ?

Se referea la altceva, ce am discutat pe MP.

Link spre comentariu
2 hours ago, mars01 said:

Eu zic sa incerci cu ultima versiune de MPLab X.

Se referea la altceva, ce am discutat pe MP.

Multumesc Mars01, este greseala mea, in Build Configuration trebuie setat Release.

Acum cele doua fisiere .hex(cel generat sub MPLAB si cel generat direct de compilator), sint identice.

Link spre comentariu
1 hour ago, antemir said:

Trebuia ca răspunsul să fie tot acolo. Nu ?
Altfel nu mai întelege nimeni , nimic din ce discută.
PS: Este ceva secret, sau de ce discutați resolvările problemelor in privat și trageți concluziile aici ?



 

Nu este nimic secret, mi-a sugerat sa schimb compilatorul. Am verificat ipoteza, nu am gasit 5.072(cum este sugerat in post), o cunostinta(China) are 5.115 si mi-a confirmat ca dac-ul functioneaza. Am si poza de pe osciloscopul lui, dar nu stiu cum sa o postez aici. Scuze, trebuia sa explic inainte asta, n-am avut timpul necesar.

Link spre comentariu
Quote

 

11 minutes ago, vas1957 said:

 

1.Poza mea are ~4M si nu se poate posta aici.

2.Nu stiu cum sa sterg o postare gresita.

3.Aveti dreptate, chiar asta faceam acum.

Codul:

 

#include <18F14K22.h>
#FUSES NOMCLR, NOWDT, NOLVP
#use delay(internal = 4MHZ)

void main(void)
{
   int8 i;
   setup_dac(DAC_OUTPUT | DAC_VSS_VDD);
   set_analog_pins(PIN_A0);
   //delay_ms(10); //ensure supply is stable before starting

   while(1) //using TRUE avoids error message
   {
       for(i=0; i<128; ++i)
       {
          dac_write(i);
          delay_ms(10);
       }
       output_toggle(PIN_A2); //check chip is running
   }
} 

Compilator: CCS Compiler 5.115

Sub MPLAB 8.92 trebuie setat "release" in "Build Configuration".

Link spre comentariu
38 minutes ago, antemir said:

Ok. Eu nu am înteles nimic :)
Tu ai postat aproximativ acelasi cod, inițial.
Eu ți-am propus ceva asemănator.
Acelea de ce nu au mers ?
Sau acum merg și ele ? :)
 

Am vrut sa gasesc o solutie pentru un dac functional. Sigur merge si varianta dvs., miine dimineata plec in delegatie cind ma intorc o probez. Dar ce am postat ultima data functioneaza. Multumesc pentru tot.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări