vas1957 Postat August 12, 2023 Partajează Postat August 12, 2023 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
mars01 Postat August 12, 2023 Partajează Postat August 12, 2023 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
mars01 Postat August 12, 2023 Partajează Postat August 12, 2023 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
vas1957 Postat August 13, 2023 Autor Partajează Postat August 13, 2023 (editat) mars, antemir, Multumesc. Am incercat dar nu lucreaza. Folosesc un osciloscop pentru a vedea semnalul. Poate fi o sarcina interna pe acest pin? Editat August 13, 2023 de vas1957 Link spre comentariu
mars01 Postat August 13, 2023 Partajează Postat August 13, 2023 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
vas1957 Postat August 13, 2023 Autor Partajează Postat August 13, 2023 (editat) 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 August 13, 2023 de vas1957 AM vrut sa sterg "...antemir said", dar cred ca nu se poate Link spre comentariu
vas1957 Postat August 14, 2023 Autor Partajează Postat August 14, 2023 Mulțumesc @mars01 A MERS !!!!!!! Link spre comentariu
vas1957 Postat August 15, 2023 Autor Partajează Postat August 15, 2023 (editat) Dar, atentie, compilat direct cu ccs last version!!! Editat August 15, 2023 de vas1957 Link spre comentariu
vas1957 Postat August 15, 2023 Autor Partajează Postat August 15, 2023 (editat) 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 August 15, 2023 de vas1957 Link spre comentariu
mars01 Postat August 15, 2023 Partajează Postat August 15, 2023 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
vas1957 Postat August 15, 2023 Autor Partajează Postat August 15, 2023 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
vas1957 Postat August 15, 2023 Autor Partajează Postat August 15, 2023 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
vas1957 Postat August 15, 2023 Autor Partajează Postat August 15, 2023 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
vas1957 Postat August 15, 2023 Autor Partajează Postat August 15, 2023 ...Si poza cu iesirea dac-ului. Multumesc inca o data la toti. Link spre comentariu
vas1957 Postat August 15, 2023 Autor Partajează Postat August 15, 2023 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum