Fórum témák

» Több friss téma
Fórum
Keresés
Lapozás: OK   7 / 197
(#) yagi hozzászólása Nov 3, 2023
Sziasztok,

egy kis segítségre lenne szükségem, hogy megértsem mit csinálhattam rosszul.
Korábban nem tervezgettem 3D-be semmit, de most szükségem lenne egy alkatrészre. Megterveztem SketchUp-ban, minden jónak néz ki rajta, olyan amilyennek szeretném hogy legyen, innen generáltam a .stl file-t, amit kiküldtem a JLCPCB-nek.

Onnan az alábbi üzenetet kaptam vissza:

"There are some bad edges and errors need to be fixed in your file. These errors occurred because there might be some accuracy algorithms difference of different format files between the different software or some hidden surfaces had not been deleted yet when drawing the structural surfaces. Please kindly check if there are some hidden surfaces had not been deleted."

Valamint egy képet is csatolt, de nem látom rajta hogy mi lehet a probléma.
(#) Hp41C válasza don_peter hozzászólására (») Nov 3, 2023
Csak az MpLba 8 -on használtam stimulust.
Itt lehet találni módszereket.
register injection: Egy regiszter értékét lehet a stimulussal beállítható idővel vagy időközönként módosítani.
(#) KoblogPerGyok hozzászólása Nov 2, 2023
Üdv!

Vannak fejlemények, de sajnos nem jók. Egyszerűen nem jó az ADC. Timer3-interruptban hívnám meg és mérnék. Elvileg ez meg is történik, de az adatok nem jók. Ennek a 12 bite módnak vannak sample A és sample B bitjei. Ha az ALTS-t 0-ra állítom, akkor a legjobb eredmény az, hogy 1 minta jó, a másik 4095, majd megint jó, megint 4095. Na ekkor jutott eszembe, hogy ok, szándékosan legyen ALTS=1,hogy váltakozzon a sample A és a sample B között. Ekkor, ha definiáltam a CH0SA-t és CH0SB-t is, pozitív és negatív pinekkel mindennel, akkor a legjobb eredményem a következő volt:
1 mérés, legyen a sampl A, kiadja a szinuszt, de csak fele minavétellel. A sample B is kiadja a szinuszt, de 180 fokos fázistolással, szintén fele mintavétellel.

Hol lehet a hiba? DMA máshogy tölti fel? Időzítési probléma? Van valaki akinek ez sikerült rendesen? dsPIC128MC802.

  1. void init_ADC_1( void )
  2. {
  3.      TRISAbits.TRISA4=1; //Analóg jel ide jön be, input
  4.     //ADPCFGbits.PCFG4=5; //adc low láb??
  5.    
  6.     //dsPIC33FJ32MC302, dsPIC33FJ64MC202/802 and dsPIC33FJ128MC202/802 devices only:
  7.     //00101 = Channel 0 positive input is AN4
  8.  
  9.     //00010 = Channel 0 positive input is AN2
  10.     //00001 = Channel 0 positive input is AN1
  11.     //00000 = Channel 0 positive input is AN0.
  12.     AD1CHS0bits.CH0SA=0b00100;
  13.     //CH0NA: Channel 0 Negative Input  for Sample A bit
  14.     //1 = Channel 0 negative input is AN1
  15.     //0 = Channel 0 negative input is VREF      
  16.     AD1CHS0bits.CH0NA=0; //channel 0 negatív ref VREF- láb
  17.    
  18.    
  19. //    AD1CHS0bits.CH0SB=0b00100;
  20. //    //CH0NB: Channel 0 Negative Input  for Sample B bit
  21. //    //1 = Channel 0 negative input is AN1
  22. //    //0 = Channel 0 negative input is VREF      
  23. //    AD1CHS0bits.CH0NB=0; //channel 0 negatív ref VREF- láb
  24.    
  25.     AD1CON1bits.FORM = 0; // Data Output Format: integer//Signed Fraction (Q15 format)
  26.     AD1CON1bits.SSRC = 0; // 000 = Clearing sample bit ends sampling and starts conversion
  27.     AD1CON1bits.ASAM = 0; // ADC Sample Control: Sampling begins immediately after conversion
  28.     AD1CON1bits.AD12B = 1; // 12-bit ADC operation SINGLE Chanel
  29.     //AD1CON1bits.SIMSAM =0; // 10-bit ADC operation
  30.     AD1CON2bits.CHPS = 0b00; // Only CH0
  31.     AD1CON2bits.CSCNA = 0; // Do not scan inputs
  32.    
  33.     AD1CON2bits.ALTS = 1; // Alternálás, Sample A és Sample B között!!!
  34.    
  35.     //bit 15-13 VCFG<2:0>: er Voltage Reference Configuration bits
  36.     //VREFH VREFL
  37.     //000 AVDD AVss
  38.     //001 External VREF+(3) AVss
  39.     //010 AVDD External VREF-(3)
  40.     //011 External VREF+(3) External VREF-(3)
  41.     //1xx AVDD AVss    
  42.  
  43.     AD1CON2bits.VCFG=0b11;
  44.     AD1CON2bits.BUFM = 0; // Always start filling at buffer 0
  45.     //    If ADRC = 0
  46.     //ADC Clock Period (TAD) = TCY ? (ADCS + 1)
  47.     //If ADRC = 1
  48.     //ADC Clock Period (TAD) = TADRC
  49.     AD1CON3bits.ADRC = 0; // ADC Clock is derived  Systems Clock
  50.     AD1CON3bits.ADCS =15; // ADC Conversion Clock Tad=Tcy*(ADCS+1)= (1/40M)*16 = 200ns (0.4Mhz)
  51.    
  52.    
  53.     AD1CON3bits.SAMC = 4; // Auto Sample Time = 0*Tad
  54.    
  55.  
  56.     // ADC Conversion Time for 10-bit Tc=12*Tab = 900ns (1.1MHz)
  57.     AD1CON1bits.ADDMABM = 1; // DMA buffers are built in conversion order mode
  58.     AD1CON2bits.SMPI = 0; // SMPI must be 0, interrupt az els? minta után. Elvileg 16 bufferbe is tölthet
  59.  
  60.     AD1CON4bits.DMABL = 0; // Only 1 DMA buffer for each analog input
  61.  
  62.     //AD1CHS0/AD1CHS123: A/D Input  register
  63. //    AD1CHS0bits.CH0SA = 0; // MUXA +ve input ion (AIN0) for CH0
  64. //    AD1CHS0bits.CH0NA = 0; // MUXA -ve input ion (Vref-) for CH0
  65. //Az MC802-nél nincs külön analóg bemenet negatívra lehet?ség, a ref- haszálhatom    
  66. //01 = CH1, CH2, CH3 negative input is VREF-
  67. //00 = CH1, CH2, CH3 negative input is VREF-  
  68.    
  69. //    AD1CHS123bits.CH123NB = 0; // MUXA -ve input ion (Vref-) for CH1, CH2,CH3
  70.    
  71. //CH123SB: Channel 1, 2, 3 Positive Input  for Sample B bit
  72. //If AD12B = 1:
  73. //1 = Reserved
  74. //0 = Reserved
  75. //If AD12B = 0:
  76. //1 = CH1 positive input is AN3, CH2 positive input is AN4, CH3 positive input is AN5
  77. //0 = CH1 positive input is AN0, CH2 positive input is AN1, CH3 positive input is AN2
  78. //Mert az analg jel AN4-re csatlakozik    
  79.     //AD1CHS123bits.CH123SB = 1; // MUXA +ve input ion (AIN0) for CH1
  80.  
  81.     IFS0bits.AD1IF = 0; // Clear the A/D interrupt flag bit
  82.     IEC0bits.AD1IE = 0; // Do not Enable A/D interrupt
  83.  
  84.     AD1CSSLbits.CSS4 = 1; //Scan  AN4 only
  85.    
  86.  
  87.     AD1PCFGLbits.PCFG4 = 0; //Only AN4 in analog input mode
  88.  
  89.     AD1CON1bits.ADON = 1; // Turn on the A/D er
  90. }
  91.  
  92. unsigned int readADC(void) {
  93.    
  94.     // Start conversion
  95.     //Manuális módban a SAMP -nak változnia kell és meg is kell várni
  96.     AD1CON1bits.SAMP = 1;//Start sampling
  97.     while(!AD1CON1bits.SAMP); //Ameddig megy a mintavétel
  98.     //AD1CON1bits.SAMP = 0;   //Meg kell mondani, hogy vége, kezdődhet a álás
  99.     while(AD1CON1bits.SAMP);
  100.     while(!AD1CON1bits.DONE);  //Míg kész nincs a konvertálás,addig várni kell  
  101.    
  102.    
  103.     return ADC1BUF0;
A hozzászólás módosítva: Nov 2, 2023
(#) segítő válasza Imi65 hozzászólására (») Okt 31, 2023
Csak kérdeznék. Ilyen megszaladással EL34-el én is találkoztam, világított az anód. Katódellenállással volt beállítva a munkapont, ez meddig kompenzálja a cső öregedését?
Az ARC következetesen fix rács előfeszültséget használ, az Audio note általában katódellenállást.
Hol az igazság?
(#) Lucifer válasza asch hozzászólására (») Okt 31, 2023
Idézet:
„Ha nyílt forrású a program, akkor akár meg is lehetne javítani.”


Nem nyílt forrású, de ha lehet akkor megpatchelném inkább.

Idézet:
„Nem a ./ipecmd.sh szkript töri kettőbe? Abban mi van?”

Dauh bingó, jövök egyel!!!

Betettem a tartalmát a bash-ba és így meg. A $@ átpasszolása volt a ludas:

  1. mm@P15:/opt/microchip/mplabx/v6.15/mplab_platform/mplab_ipe$ export here=`dirname $0`
  2. export mplabx_dir=$here/..
  3. export netbeans_dir=$mplabx_dir
  4. export ipecmd_jar=$mplabx_dir/mplab_ipe/ipecmd.jar
  5.  
  6. # obtain jdkhome from mplab_ipe.conf
  7. . ../etc/mplab_ipe.conf
  8.  
  9. export jvm=$jdkhome/bin/java
  10. mm@P15:/opt/microchip/mplabx/v6.15/mplab_platform/mplab_ipe$ $jvm -jar ipecmd.jar -OV -P16F1718 -F/tmp/foo\ bar.hex -TPPK4
  11. DFP Version Used : PIC12-16F1xxx_DFP,1.6.241,Microchip
  12. Programmer not found.
A hozzászólás módosítva: Okt 31, 2023
(#) Lucifer válasza Skori hozzászólására (») Okt 31, 2023
Nyilván meg tudom oldani így csak alapból nem szeretem az ilyen tákolásokat...

Most a visszafejtett java kódot nézegetem, hogy mit baltáztak el az indiánok.
Ha akarnál sírni/nevetni akkor erre tessék:
https://github.com/martonmiklos/ipecmd/tree/master

A környezeti változós trükk jó ötlet, de nem jó sajnos az sem:
  1. mm@P15:/tmp/ipecmd/commandline$ export filepath="/tmp/foo bar.hex"
  2. mm@P15:/tmp$  cd /opt/microchip/mplabx/v6.15/mplab_platform/mplab_ipe
  3. mm@P15:/opt/microchip/mplabx/v6.15/mplab_platform/mplab_ipe$ ./ipecmd.sh -OV -P16F1718 -F$filepath -TPPK4
  4. Hex file not found.
  5. mm@P15:/opt/microchip/mplabx/v6.15/mplab_platform/mplab_ipe$ echo $filepath
  6. /tmp/foo bar.hex
  7. mm@P15:/opt/microchip/mplabx/v6.15/mplab_platform/mplab_ipe$ ./ipecmd.sh -OV -P16F1718 -F$filepath -TPPK4
  8. Hex file not found.
A hozzászólás módosítva: Okt 31, 2023
(#) MATA válasza asch hozzászólására (») Okt 31, 2023
Közben megtaláltam a beállítást most ezt a híbát írja:
uilding file: ../misc/aux.cpp
Invoking: AVR C++ Compiler
avr-g++ -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -fno-exceptions -mmcu=atmega328 -DF_CPU=16000000UL -MMD -MP -MF"misc/aux.d" -MT"misc/aux.o" -c -o "misc/aux.o" "../misc/aux.cpp"
../misc/aux.cpp: In function ‘void aux_ADCReadIntr(uint8_t)’:
../misc/aux.cpp:38:39: error: ‘ADFR’ was not declared in this scope
ADCSRA = (1<<ADEN) | (1<<ADIE) | (1<<ADFR) | (1<<ADIF) | (1<<ADSC) |
^
make: *** [misc/subdir.mk:23: misc/aux.o] Error 1
"make all" terminated with exit code 2. Build might be incomplete.

11:16:01 Build Failed. 2 errors, 0 warnings. (took 721ms)
(#) Bakman válasza MATA hozzászólására (») Okt 29, 2023
Ebben van a lényeg:
  1. DigitalPowerSupply-1.elf section `.data' will not fit in region `text'
  2. /usr/lib/gcc/avr/5.4.0/../../../avr/bin/ld: region `text' overflowed by 30 bytes
Valamelyik változóban (?) nem férnek el az adatok.

A ".data" rész nem fog elférni a "text" területen. "text" túlcsordulás 30 bájttal.
(#) MATA válasza asch hozzászólására (») Okt 29, 2023
Hello!
Megpróbltam Linuxon is ezeket írta ki utána:
7:02:32 **** Build of configuration Release for project DigitalPowerSupply-1 ****
make all
Building file: ../sensors/ds18b20.cpp
Invoking: AVR C++ Compiler
avr-g++ -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -fno-exceptions -mmcu=atmega8 -DF_CPU=16000000UL -MMD -MP -MF"sensors/ds18b20.d" -MT"sensors/ds18b20.o" -c -o "sensors/ds18b20.o" "../sensors/ds18b20.cpp"
Finished building: ../sensors/ds18b20.cpp

Building file: ../misc/aux.cpp
Invoking: AVR C++ Compiler
avr-g++ -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -fno-exceptions -mmcu=atmega8 -DF_CPU=16000000UL -MMD -MP -MF"misc/aux.d" -MT"misc/aux.o" -c -o "misc/aux.o" "../misc/aux.cpp"
Finished building: ../misc/aux.cpp

Building file: ../misc/pwm.cpp
Invoking: AVR C++ Compiler
avr-g++ -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -fno-exceptions -mmcu=atmega8 -DF_CPU=16000000UL -MMD -MP -MF"misc/pwm.d" -MT"misc/pwm.o" -c -o "misc/pwm.o" "../misc/pwm.cpp"
Finished building: ../misc/pwm.cpp

Building file: ../lcd/hd44780.cpp
Invoking: AVR C++ Compiler
avr-g++ -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -fno-exceptions -mmcu=atmega8 -DF_CPU=16000000UL -MMD -MP -MF"lcd/hd44780.d" -MT"lcd/hd44780.o" -c -o "lcd/hd44780.o" "../lcd/hd44780.cpp"
../lcd/hd44780.cpp: In member function ‘void HD44780::sendstringformat(char*, ...)’:
../lcd/hd44780.cpp:192:9: warning: unused variable ‘LASTCHAR’ [-Wunused-variable]
int LASTCHAR = NUMCHARS - 1;
^
Finished building: ../lcd/hd44780.cpp

Building file: ../io/DigitalIn.cpp
Invoking: AVR C++ Compiler
avr-g++ -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -fno-exceptions -mmcu=atmega8 -DF_CPU=16000000UL -MMD -MP -MF"io/DigitalIn.d" -MT"io/DigitalIn.o" -c -o "io/DigitalIn.o" "../io/DigitalIn.cpp"
Finished building: ../io/DigitalIn.cpp

Building file: ../io/DigitalOut.cpp
Invoking: AVR C++ Compiler
avr-g++ -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -fno-exceptions -mmcu=atmega8 -DF_CPU=16000000UL -MMD -MP -MF"io/DigitalOut.d" -MT"io/DigitalOut.o" -c -o "io/DigitalOut.o" "../io/DigitalOut.cpp"
Finished building: ../io/DigitalOut.cpp

Building file: ../main.cpp
Invoking: AVR C++ Compiler
avr-g++ -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -fno-exceptions -mmcu=atmega8 -DF_CPU=16000000UL -MMD -MP -MF"main.d" -MT"main.o" -c -o "main.o" "../main.cpp"
../main.cpp: In function ‘int main()’:
../main.cpp:159:32: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
"********************\n");
^
../main.cpp:190:4: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
);
^
Finished building: ../main.cpp

Building target: DigitalPowerSupply-1.elf
Invoking: AVR C++ Linker
avr-g++ -Wl,-Map,DigitalPowerSupply-1.map,--cref -mrelax -Wl,--gc-sections -Wl,-u,vfprintf -lprintf_flt -lm -Llibprintf_flt.a -Llibm.a -mmcu=atmega8 -o "DigitalPowerSupply-1.elf" ./sensors/ds18b20.o ./misc/aux.o ./misc/pwm.o ./lcd/hd44780.o ./io/DigitalIn.o ./io/DigitalOut.o ./main.o
/usr/lib/gcc/avr/5.4.0/../../../avr/bin/ld: DigitalPowerSupply-1.elf section `.data' will not fit in region `text'
/usr/lib/gcc/avr/5.4.0/../../../avr/bin/ld: region `text' overflowed by 30 bytes
collect2: error: ld returned 1 exit status
make: *** [makefile:94: DigitalPowerSupply-1.elf] Error 1
"make all" terminated with exit code 2. Build might be incomplete.

17:02:33 Build Failed. 3 errors, 3 warnings. (took 1s.77ms)
(#) KoblogPerGyok hozzászólása Okt 29, 2023
Üdv!

Minden úgy működik, ahogy kell, de tényleg. UART, SPI-RAM stb. is simán megy a sok buktató ellenére. A különböző GND probléma is meg van oldva. Sok szimulációs hiba/bug és spi trükkös megoldással sikerült sok-sok problémát megoldani, olyanokat is, amikre az adatlap sem tér ki. DE MEGINT van egy ilyen...

Kezdek belebolondulni, hogy semmi sem úgy megy, mint ahogy azt az ember elgondolná. ADC-t szeretnék csinálni az alábbi feltétlekkel:

-Vref+ A0
-Vref - A1
-Jel + An4
-Jel - A5 -de errenincs szükség dsPIC33FJ128M802-nél, mert az adott beállítások mellett nem tudja, a Vref- -t használja, ha jól tudom.

-Nincs Scan, csak 1 csatorna kell, 16 órajel 1 mintára, csak ezt használja, nincs interrupt, mert a timer indítja, amit én paraméterezek fel. A gond már ott kezdődik, hogy sdPIC33FJ32M202-t lehet szimulálni, de az is kétséges sokszor, mert volt olyan, hogy a logikailag hibás SPI-vel simán ment, a helyessel meg kerülőkkel szóval...
Itt a gond, amit bármilyen beállítást alkalmazok sem jó. (persze csak azt az egyet nem próbáltam, ami jó lenne!!!!

Ha ebből a while-t kiszedem, és sok nop-al helyettesítem, akkor kapok sok-sok nullát, ami ugyan nem jó, de előrelépés a semmihez képest. While-al semit semkapok, mert soha nem teljesül a feltétel, ez miatt minden más funkció is megáll, amit a main loop-ból hívnék.... A baj az, hogy a DONE soha nem lesz 1. Miért? Melyik beállítás miatt nem lesz ez soha 1? Ezt is a netről kaptam, valakinél így megy, kap eredményeket is. Ebben az esetben két dolog lehet. 1 ha jó minden, akkor a szimuláció nem jó az eltérő procik miatt. 2 nem jók a bellításaim sem.

  1. unsigned int readADC(void) {
  2.     // Start conversion
  3.     //Ha ezeket bennthagyom, és  a while-t kiveszem, akkor megy, de nem mér semmit
  4.     //Csak nullákkal tér vissza, amit okozhat a helytelen init is és az eltérő proceszorok is.
  5.     __builtin_nop();
  6.     __builtin_nop();
  7.     __builtin_nop();
  8.     __builtin_nop();
  9.     __builtin_nop();
  10.     // Clear the DONE bit
  11.     AD1CON1bits.DONE = 0;
  12.     AD1CON1bits.SAMP = 1;
  13.     // Wait for conversion to complete
  14.     //while (!AD1CON1bits.DONE);
  15.     __builtin_nop();
  16.     __builtin_nop();
  17.     __builtin_nop();
  18.     __builtin_nop();
  19.     __builtin_nop();
  20.     // Return the result
  21.     return ADC1BUF0;
  22. }


Itt van a harmadik beállítás.

  1. void init_ADC_2(void)
  2. {
  3.     TRISAbits.TRISA4 = 1; // Analóg jel ide jön be, input
  4.     ADPCFGbits.PCFG4 = 0; //Analógra állítva
  5.    
  6.     AD1CON1bits.FORM = 0; // Data Output Format: integer (Signed Fraction - Q15 format)
  7.     AD1CON1bits.SSRC = 0; // 000 = Clearing sample bit ends sampling and starts conversion
  8.     AD1CON1bits.ASAM = 0; // ADC Sample Control: Sampling begins immediately after conversion
  9.     AD1CON1bits.AD12B = 0; // 10-bit ADC operation
  10.     AD1CON1bits.SIMSAM = 1; // Simultaneous sampling for multiple channels
  11.     AD1CON2bits.CHPS = 0b10; // s CH1, CH2, CH3, because CH2 is the one you are using.
  12.     AD1CON2bits.CSCNA = 0; // Do not scan inputs
  13.     AD1CON2bits.VCFG = 0; // Use voltage reference Vss/Vdd
  14. //Eleve ezt is be  kell majd állítani jóra, de addig eljutni....
  15.  
  16.     AD1CON2bits.ALTS = 0; // Always use input  for channel A
  17.     AD1CON2bits.BUFM = 0; // Always start filling at buffer 0
  18.     AD1CON3bits.ADRC = 0; // ADC Clock is derived  Systems Clock
  19.     AD1CON3bits.SAMC = 0; // Auto Sample Time = 0*Tad
  20.     AD1CON3bits.ADCS = 2; // ADC Conversion Clock Tad = Tcy * (ADCS + 1) = (1 / 40M) * 3 = 75ns (13.3MHz)
  21.  
  22.     // ADC Conversion Time for 10-bit Tc = 12 * Tad = 900ns (1.1MHz)
  23.     AD1CON1bits.ADDMABM = 1; // DMA buffers are built in conversion order mode
  24.     AD1CON2bits.SMPI = 0; // SMPI must be 0
  25.  
  26.     AD1CON4bits.DMABL = 0; // Only 1 DMA buffer for each analog input
  27.  
  28.    
  29.         //AD1CHS0/AD1CHS123: A/D Input  register
  30. //    AD1CHS0bits.CH0SA = 0; // MUXA +ve input ion (AIN0) for CH0
  31. //    AD1CHS0bits.CH0NA = 0; // MUXA -ve input ion (Vref-) for CH0
  32. //Az MC802-nél nincs külön analóg bemenet negatívra lehet?ség, a ref- haszálhatom    
  33. //01 = CH1, CH2, CH3 negative input is VREF-
  34. //00 = CH1, CH2, CH3 negative input is VREF-  
  35.     AD1CHS123bits.CH123NB = 0; // MUXA -ve input ion (Vref-) for CH1, CH2,CH3
  36.    
  37. //CH123SB: Channel 1, 2, 3 Positive Input  for Sample B bit
  38. //If AD12B = 1:
  39. //1 = Reserved
  40. //0 = Reserved
  41. //If AD12B = 0:
  42. //1 = CH1 positive input is AN3, CH2 positive input is AN4, CH3 positive input is AN5
  43. //0 = CH1 positive input is AN0, CH2 positive input is AN1, CH3 positive input is AN2
  44. //Mert az analg jel AN4-re csatlakozik    
  45.     AD1CHS123bits.CH123SB = 1; // MUXA +ve input ion (AIN0) for CH1
  46.    
  47.    
  48. //    // Az AN4 lábat válaszd ki pozitív referenciaként
  49. //    AD1CHS0bits.CH0SA = 4; // AN4 láb kiválasztása
  50.  
  51.     IFS0bits.AD1IF = 0; // Clear the A/D interrupt flag bit
  52.     IEC0bits.AD1IE = 0; // Do not Enable A/D interrupt
  53.  
  54.     AD1CSSLbits.CSS4 = 1; // Scan  AN4 only
  55.     AD1PCFGLbits.PCFG4 = 1; // Only AN4 in analog input mode
  56.  
  57.     AD1CON1bits.ADON = 1; // Turn on the A/D er
  58. }


Ezek egyelőre csak tesztek lettek volna, de a readADC()- ben a while miatt soha, egyik sem megy, ezért nem tudom az init-ben sem pontosítani a beállításokat.

Van valaki aki ezen már sikeresen végigment?
Proteus 8.1, MplabIDE 5.35, dsPIC33FJ128MC802.

Köszönöm a segítséget előre is!
(#) asch válasza MATA hozzászólására (») Okt 26, 2023
Megnéztem a kódot, a fordítókörnyezethez adott vsnprintf hívást használja a kiíráshoz (lásd: https://github.com/radhoo/digital_bench_power_supply/blob/1a3af2e5a...p#L195 )
Rákerestem hasonló problémára, és azt találtam, hogy a float formázást kihagyja a fordító a rendszerből, ha nem kapcsoljuk be. Gondolom azért, hogy spóroljon a kódterülettel. A problémára találat itt: https://stackoverflow.com/questions/37815771/snprintf-not-working-a...vr-gcc

A megoldás onnan kimásolva (nem próbáltam ki): Ezeket a linker opciókat hozzá kell adni a linker híváshoz:

  1. -Wl,-u,vfprintf -lprintf_flt -lm


Eclipse alatt fordítod a kódot, azzal a .project fájllal, amit benn van a git projektben? Vagy csináltál hozzá make fájlt? El tudom képzelni, hogy Eclipse alatt ezt a paramétert az egész workspace-re állította be, vagy valamiért az ő környezetében alapból ki volt kapcsolva ez a méretoptimalizáció, azért működött jól az eredeti kód az eredeti szerzőnél.
(#) MATA hozzászólása Okt 26, 2023
Üdv mesterek!
A következő lenne a gondom van itt ezen az oldalon ez a kapcsolás:
https://www.pocketmagic.net/digital-bench-power-supply/
Nos én letöltöttem a tömörített mappát amiben bent volt a lefordított Hex fálj is meg a forráskód is.
Namármost amikor feltöltöttem a Hex fájlt az AVR-re teljesen jó volt a kijelzés csak éppen az a baj hogy a kódban meg kellene változtatni az ellenállás értékeket azt meg ugye a Hex fájlban nem lehetséges. Ezért elővettem a forráskódot de amikor azt lefordítom és felírom az AVR-re akkor a feszültség és áram értékek helyett csak ?-et ír ki a kijelző és nem tudom ez mitől lehet.
Itt van egy kép az eredti Hex-el és a frissen fordítottal.
És a forráskód:
  1. /*
  2.  File:       main.cpp
  3.  Version:    1.0 - first version
  4.  Date:       April 7, 2015
  5.  License:       GPL v2
  6.  
  7.  Digital Bench Power supply
  8.  http://www.pocketmagic.net/digital-bench-power-supply/
  9.  
  10.  ****************************************************************************
  11.  Copyright (C) 2015 Radu Motisan  <radu.motisan@gmail.com>
  12.  
  13.  http://www.pocketmagic.net
  14.  
  15.  This program is free software; you can redistribute it and/or modify
  16.  it under the terms of the GNU General Public License as published by
  17.  the Free Software Foundation; either version 2 of the License, or
  18.  (at your option) any later version.
  19.  
  20.  This program is distributed in the hope that it will be useful,
  21.  but WITHOUT ANY WARRANTY; without even the implied warranty of
  22.  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23.  GNU General Public License for more details.
  24.  
  25.  You should have received a copy of the GNU General Public License
  26.  along with this program; if not, write to the Free Software
  27.  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  28.  ****************************************************************************
  29.  */
  30. #include <avr/io.h>
  31. #include <avr/interrupt.h>
  32. #include <avr/wdt.h>
  33. #include <string.h>
  34. #include <stdlib.h>
  35. #include "timeout.h"
  36. #include "io/DigitalIn.h"
  37. #include "io/DigitalOut.h"
  38. #include "sensors/ds18b20.h"
  39. #include "lcd/hd44780.h"
  40. #include "misc/aux.h"
  41. #include "misc/pwm.h"
  42.  
  43.  
  44. /************************************************************************************************************************************************/
  45. /* Main entry point                                                                                                                                                                                                     */
  46. /************************************************************************************************************************************************/
  47. HD44780         lcd;
  48. DS18B20         ds18b20;
  49. PWM             pwm;
  50. DigitalOut      relay,
  51.                         speaker,
  52.                         fan;
  53. DigitalIn       but1, // v+
  54.                         but2, // v-
  55.                         but3, // i+
  56.                         but4; // i-
  57. float tempval = 0;
  58. float vref = 5.0;
  59.  
  60. /* power control modes */
  61. #define MODE_MEASURE_CURRENT 0
  62. #define MODE_MEASURE_VOLTAGE 1
  63. volatile bool adc_mode = MODE_MEASURE_CURRENT;
  64. volatile float current = 0, voltage = 0;
  65.  
  66. /* my power supply after rectifier shows 16.1V on the center tap and 33.8V on full secondary
  67.  * opamp will introduce some upper voltage limitations. Currently using TL082 and we can reach close to 26V maximum
  68.  */
  69. #define VOLTAGE_LIMIT   26
  70. #define CURRENT_LIMIT   5
  71. #define TEMPERATURE_STARTFAN 50 // if 40degrees celsius are reached, we will start the fan
  72. #define TEMPERATURE_SHUTDOWN 70 // if 80degrees celsius are reached, we will reduce the power until the unit cools down
  73.  
  74.  
  75. /* set default values: later save/load them to/from EEPROM */
  76. volatile float targetVol = 5.0, targetCur = 1;
  77.  
  78. volatile bool alarm = false;
  79. uint16_t cycles = 0;
  80.  
  81.  
  82. // Interrupt service routine for the ADC completion
  83. // we measure the current (PC5) and the voltage (PC4) alternatively
  84. ISR(ADC_vect){
  85.         uint16_t analogVal = ADCL | (ADCH << 8);
  86.         if (adc_mode == MODE_MEASURE_CURRENT) {
  87.                 current = (analogVal / 1024.0 * vref) / 0.186666; // the output power resistor measures 0.55Ohm
  88.                 // alternate mode
  89.                 adc_mode = MODE_MEASURE_VOLTAGE;
  90.                 ADMUX = PC4; // next time we will do ADC on PC4, to get the voltage
  91.         } else if (adc_mode == MODE_MEASURE_VOLTAGE) {
  92.                 // the actual R13 and R14 resistors can be measured using a multimeter for better accuracy
  93.                 float R14 = 9.87, /*10k*/ R13 = 98.2; /*100K */
  94.                 voltage = analogVal / 1024.0 * (R13 + R14) / R14 * vref;
  95.                 // alternate mode
  96.                 adc_mode = MODE_MEASURE_CURRENT;
  97.                 ADMUX = PC5; // next time we will do ADC on PC5, to get the current
  98.         }
  99.  
  100.         // If free-running mode is enabled (ADFR), we don't need to restart conversion
  101.         // But we can't use ADFR as we want to monitor two separate ADC channels alternatively
  102.  
  103.         // start another ADC conversion
  104.         ADCSRA = (1<<ADEN) | (1<<ADIE) | (1<<ADIF) /* | (1<<ADFR) */ | (1<<ADSC) |
  105.                                 (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // set prescaler to 128 (16M/128=125kHz, above 200KHz 10bit results are not reliable)
  106.  
  107.         // control operations, in order
  108.  
  109.         // 1. act on short circuit
  110.         // decrease quickly on current spike
  111.         if (current > targetCur + targetCur / 2) {
  112.                 pwm.setDuty(pwm.getDuty() / 2);
  113.                 alarm = true; // will sound alarm in main thread
  114.         }
  115.         // 2.act on over current
  116.         // decrease slowly on higher current
  117.         else if (current > targetCur) {
  118.                 pwm.setDuty(pwm.getDuty() - 1);
  119.         }
  120.         // 3.act on over temperature
  121.         else if (tempval > TEMPERATURE_SHUTDOWN) {
  122.                 pwm.setDuty(pwm.getDuty() - 1);
  123.                 alarm = true;
  124.         }
  125.         // 4. act on over voltage
  126.         // take care of voltage with lower priority
  127.         else if (voltage > targetVol) pwm.setDuty(pwm.getDuty() - 1);
  128.         // 5. act on under voltage
  129.         else if (voltage < targetVol) pwm.setDuty(pwm.getDuty() + 1);
  130. }
  131.  
  132. int main(void) {
  133.         // setup everything
  134.         relay.init(&PORTD, PD5);
  135.         fan.init(&PORTD, PD6);
  136.         speaker.init(&PORTB, PB0);
  137.         pwm.initPWM();
  138.  
  139.         but1.init(&PORTC, PC0);
  140.         but2.init(&PORTC, PC1);
  141.         but3.init(&PORTC, PC2);
  142.         but4.init(&PORTC, PC3);
  143.  
  144.  
  145.         ds18b20.init(&PORTD, PD7);
  146.         lcd.init(&PORTD, PD4, &PORTB, PB3, &PORTD, PD3, &PORTB, PB4, &PORTD, PD2, &PORTB, PB5); //RS, E, D4, D5, D6, D7
  147.  
  148.         // setup ADC to measure as interrupt: go for current first
  149.         adc_mode = MODE_MEASURE_CURRENT;
  150.         ADMUX = PC5;
  151.         ADCSRA = (1<<ADEN) | (1<<ADIE) | (1<<ADIF) | (1<<ADSC) |
  152.                         (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // set prescaler to 128 (16M/128=125kHz, above 200KHz 10bit results are not reliable)
  153.         sei();
  154.  
  155.         // show welcome screen
  156.         lcd.sendstring("********************\n"\
  157.                                    "*Digital Pwr Supply*\n"\
  158.                                    "*pocketmagic.net'15*\n"\
  159.                                    "********************\n");
  160.  
  161.         // keep screen then clear
  162.         //_delay_ms(500);
  163.  
  164.         // main loop
  165.         while (1) {
  166.  
  167.                 // engage relay if we're at 12V or more. use measured voltage or configured voltage?
  168.                 relay.set(targetVol > 12);
  169.                 // engage fan is temperature is above threshold
  170.                 fan.set(tempval > TEMPERATURE_STARTFAN);
  171.  
  172.                 // limit the frequency for some ops including display and temperature reading
  173.                 if (cycles == 0) {
  174.                         float temp = 0;
  175.                         cli();
  176.                         if (ds18b20.readTemperature(&temp) == THERM_OK)
  177.                                 tempval = temp;
  178.                         sei();
  179.  
  180.                         lcd.cursorhome();
  181.                         lcd.sendstringformat(
  182.                                 " +SET: %5.2fV %5.2fA\n"\
  183.                                 "%5.1fC %5.2fV %5.2fA\n"\
  184.                                 "%s       PWM:%4d\n"
  185.                                 "2015 pocketmagic.net",
  186.                                 targetVol, targetCur,
  187.                                 tempval, voltage, current,
  188.                                 fan.get()?" +FAN":"     ",
  189.                                 pwm.getDuty()
  190.                         );
  191.                 }
  192.                 cycles ++;
  193.                 if (cycles > 10000) cycles = 0;
  194.  
  195.  
  196.                 // sound alarm
  197.                 if (alarm) {
  198.                         speaker.set(1);
  199.                         _delay_ms(30);
  200.                         speaker.set(0);
  201.                         // stop alarm
  202.                         alarm = false;
  203.                 }
  204.  
  205.                 // act on buttons
  206.                 if (but1.get() == 0) {
  207.                         if (targetVol < VOLTAGE_LIMIT) targetVol += 0.1;
  208.                         cycles = 0; // force lcd refresh
  209.                 }
  210.                 if (but2.get() == 0) {
  211.                         if (targetVol > 0.1) targetVol -= 0.1;
  212.                         cycles = 0; // force lcd refresh
  213.                 }
  214.                 if (but3.get() == 0) {
  215.                         if (targetCur < CURRENT_LIMIT) targetCur += 0.1;
  216.                         cycles = 0; // force lcd refresh
  217.                 }
  218.                 if (but4.get() == 0) {
  219.                         if (targetCur > 0.1) targetCur -= 0.1;
  220.                         cycles = 0; // force lcd refresh
  221.                 }
  222.  
  223.  
  224.  
  225.         }
  226.  
  227. }

Köszönöm előre is ha valaki tudna ebbe segélni.
(#) KoblogPerGyok válasza Bakman hozzászólására (») Okt 24, 2023
Nekem sem világos, ezt valahonnan nyestem, a szimulációkban ok minden.

Adatlapból:

Idézet:
„bit 1 SPITBF: SPIx Transmit Buffer Full Status bit
1 = Transmit not yet started, SPIxTXB is full
0 = Transmit started, SPIxTXB is empty
Automatically set in hardware when CPU writes SPIxBUF location, loading SPIxTXB
Automatically cleared in hardware when SPIx module transfers data from SPIxTXB to SPIxSR”


Eddig azt hittem az a while azt csinálja, hogy megvárja, mire vége lesz az átvitelnek. Itt lehet a hiba? Nincs vége, de már bezárom? Ok, kipróbálom, majd, hogy csak az init-ben indítom el és nem kapcsolom ki. De addig is nincs olyan lehetőség, while, ami megmondja, hogy mikor ment át az adat? Hasonlóan a read-nél lévőnél? Melyik regiszter és bitje lehet ez. Sajnos most nem látom már át rendesen.
A hozzászólás módosítva: Okt 24, 2023
(#) KoblogPerGyok hozzászólása Okt 24, 2023
Üdv!

Megint nem értem pontosan mi történik, mert megint hulla fáradt is vagyok már.

Minden működik, de tényleg. UART-ról fogadok karaktereket, küldök sok adatot, de az SPI csak nem megy. Az is a baj, hogy Proteusban csak p33FJ32MC202-t tudok szimulálni, de nekem p33FJ128MC202-m van. A szimulációban minden tökéletes, simán jó. A valóságban meg....
Átírom mindenhol a header-eket, hogy a p33FJ128MC802.h forduljon bele a kódba. Feltöltöm, ráteszem az analizátort és a csatolt képet kapom. Elvileg RAM-ba kellene írni. Az írás nem jó, mert nagy vonalakban, mikor olvasnék ki akkor az óra jele megjelenik és jó. Előtte a három próbálkozás az az RAM felé az instrukció, cím felső byte, majd alsó byte, majd ami már jó, az az olvasás lenne. Nem tudom mia baj. Lehet kellene lehúzó ellenállás, meg ilyesmi, de akkor olvasáskor miért jó? Nem értem.
A MOSI sem jó, ott is hiba van, semmit nem csinál. A képen látszik, hogy az első 3 próbálkozás, ami a write lenne időben sem jó, sokkal rövidebb, nem csak hiányzik az óra impulzus sorozat.
Itt a kód:

  1. #include <p33FJ128MC802.h>
  2. //#include<p33FJ32MC202.h>
  3.  
  4.   void SPI_Master_Init(void)
  5.   {
  6.    
  7.      //SPI Error flag, overflow stb.
  8.      SPI1STATbits.SPIROV=0;
  9.      SPI1STATbits.SPITBF=0;
  10.      
  11.     //* The following code shows the SPI register configuration for Master mode */
  12.     IFS0bits.SPI1IF = 0; // Clear the Interrupt Flag
  13.     IEC0bits.SPI1IE = 0; // Disable the Interrupt
  14.     // SPI1CON1 register Settings
  15.     SPI1CON1bits.DISSCK = 0; // Internal Serial Clock is Enabled
  16.    
  17.     SPI1CON1bits.DISSDO =0; // SDOx pin is controlled by the module
  18.    
  19.     SPI1CON1bits.MODE16 = 0; // Communication is word-wide (16 bits)
  20.     SPI1CON1bits.SMP = 0; // Input data is sampled at the middle of data
  21.    
  22.     // output time
  23.     SPI1CON1bits.CKE = 0; // Serial output data changes on transition
  24.     // from Idle clock state to active clock state
  25.     SPI1CON1bits.CKP = 0; // Idle state for clock is a low level;
  26.     // If CKP = 0, always place a pull-down
  27.     //resistor on SSx.
  28.     // active state is a high level
  29.     SPI1CON1bits.MSTEN = 1; // Master mode Enabled
  30.    
  31.     //Most 1:64 és 1:8!!
  32.     //Oszcillátor leosztása://bit 1-0 PPRE<1:0>: Primary Prescale bits (Master mode)(3)
  33.     //    //11 = Primary prescale 1:1
  34.     //    //10 = Primary prescale 4:1
  35.     //    //01 = Primary prescale 16:1
  36.     //    //00 = Primary prescale 64:1
  37.     //    SPI1CON1bits.PPRE = 0b10;
  38.     //    //bit 4-2 SPRE<2:0>: Secondary Prescale bits (Master mode)(3)
  39.     //    //111 = Secondary prescale 1:1
  40.     //    //110 = Secondary prescale 2:1
  41.  
  42.     SPI1CON1bits.PPRE = 0b00; //10 = Primary prescale 64:1
  43.     SPI1CON1bits.SPRE = 0b110; //110 = Secondary prescale 2:1
  44.  
  45.     //SPI1STATbits.SPIEN = 1; // Enable SPI module
  46.  
  47.  
  48.     //SPI1BUF = 0b11111111; // Write data to be transmitted
  49.     // Interrupt Controller Settings
  50.     IFS0bits.SPI1IF = 0; // Clear the Interrupt Flag
  51.     IEC0bits.SPI1IE = 1; // Enable the Interrupt
  52.  
  53.   }
  54.   void Write_SPI(unsigned char data)
  55.   {
  56.     IFS0bits.SPI1IF = 0; // Clear the Interrupt Flag
  57.     SPI1STATbits.SPIEN = 1; // Enable SPI module    
  58.     SPI1BUF = data;     // Write character to SPI buffer
  59.     while(SPI1STATbits.SPITBF) ;  // Wait until transmission is started
  60.     IFS0bits.SPI1IF = 0; // Clear the Interrupt Flag
  61.     SPI1STATbits.SPIEN = 0; // Enable SPI module    
  62.    
  63.   }
  64.   char SPI_Read(void)
  65. {    
  66.     IFS0bits.SPI1IF = 0; // Clear the Interrupt Flag
  67.     SPI1STATbits.SPIEN = 1; // Enable SPI module  
  68.     SPI1STATbits.SPIROV = 0;  // Reset overflow bit
  69.      char C;
  70.     SPI1BUF=0x0;
  71.     SPI1STATbits.SPIRBF  =0x00;
  72.    
  73.      while (!SPI1STATbits.SPIRBF); // Wait for character
  74.      SPI1STATbits.SPIROV = 0;  // Reset overflow bit
  75.     C = SPI1BUF & 0xff;    // Get character
  76.     IFS0bits.SPI1IF = 0; // Clear the Interrupt Flag
  77.     SPI1STATbits.SPIEN = 0; // Enable SPI module      
  78.    
  79.     return(C);
  80. }


Elvileg a pin remapping jó, mert akkor nem jelenne meg az óra, mikor a read()-t hívom meg. A csatolt képen látszik a hiba, de olvasáskor a megjelenő óra ideje jó, 80 MHz van leosztva 128-al.
A hozzászólás módosítva: Okt 24, 2023
(#) Gafly válasza Audience hozzászólására (») Okt 22, 2023
Köszönöm , közben én is kutakodtam, de magyarul nem sokra jutottam, szerintem azért mert ritka dolog hazánkban:

Phase shifter
Idézet:
„The phase shifter is an Iacon relic that grants the user the ability to pass through solid objects. It works intuitively, allowing the user to phase through objects or not depending on the needs of the situation.”


Quadrature booster
Idézet:
„Where parallel circuits with different capacities exist between two points in a transmission grid (for example, an overhead line and an underground cable), direct manipulation of the phase angle allows control of the division of power flow between the paths, preventing overload.”


Szerintem egyértelműen ez utóbbiról van szó.

Nyelvet nem beszélőknek hevenyészett magyarítás:
Idézet:
„A fázisváltó egy Iacon ereklye, ami lehetővé teszi a szilárd testeken történő áthatolást. Saját szabályai szerint működik, vagy nem, a helyzettől függően.”

Idézet:
„Ahol párhuzamosan két különböző kapacitású áramkör van (például légvezeték és földkábel) a hálózatban, fázisszög közvetlen változtatása lehetővé teszi az energia áramlás szabályozott megosztását, és így az esetleges túlterhelés megelőzését.”
(#) Lamprologus válasza don_peter hozzászólására (») Okt 17, 2023
Nem értem!
Minek kéne flag register? Minek kell az előző állapot?

Jön a megszakítás, megnézed hogy magas, vagy alacsony szint van-e. Ha magas felfotó él volt, ha alacsony lefutó!
A hozzászólás módosítva: Okt 17, 2023
(#) don_peter válasza Bakman hozzászólására (») Okt 17, 2023
Sajnos a választott PIC azon lábai amit használok, csak Change notification-t tudnak. Minden változásra jeleznek. Nincs külön flag register. A bebillenést követően vizsgálom a portot és az előző elmentett állapotot megnézem és a kettő közti változásból következtetek a megszakítást kiváltó eseményre. Nos ezen logika mentén gondolkodom és haladok.
(#) antikzsolt válasza antiktelefon hozzászólására (») Okt 14, 2023
Nem az a célom. Az volt a lényeg hogy gyorsan és működjön pár napig. Így tudtam megoldani 20 perc alatt. Nem volt egy működőképes nagy kapacitású power bank azt ez lett belőle. Ma kérdéses hogy menni fog e végig. Holnap meg fel lesz töltve úgy is. Ha meglett volna a step down konverter kéznél elhiheted egy autó aksit is odaraktam volna ehelyett a valami helyére. Szerencsére csak egy mini kamera és egy telefon van rajta ami adja a netet a kamerának. Az eredeti rendszer elköszönt egy hibás töltésvezérlőnek köszönhetően. Kamera meg kell. A kinézet ellenére igényes a dobozolása. 15x10cm szerelő dobozban nyugszik így már az eső sem gond neki.
(#) KoblogPerGyok válasza pipi hozzászólására (») Okt 11, 2023
Üzenet:

cannot convert 'float*' to 'long int*' in assignment
ptr = (float*)malloc(2 * Ciklus_max * sizeof(float));
^

exit status 1

Compilation error: cannot convert 'float*' to 'long int*' in assignment

Kód:
ptr = (float*)malloc(2 * Ciklus_max * sizeof(float));

if (ptr == NULL) {
Serial.println("Memory not allocated.\n");
}
else
{
Serial.println("Memory allocated.\n");
}

Így gondoltad? Már totál belezavarodtam mindenbe. Ezt is kipróbáltam. A pointer meg nem lehet float, kipróbáltam azt is, hogy a otr is float, és a fenti kódban is ahogy mondtad.

Meg ezt is:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. float PI_=3.141592653;
  6.  
  7. const long Mintaszam=32768/2; //32768
  8. long Ciklus_max=32768/2;
  9. float Re[Mintaszam];
  10. float Im[Mintaszam];
  11. float Adatok[Mintaszam];
  12.  
  13.  
  14.  
  15. //malloc-hoz kell
  16. //long* ptr;
  17.  
  18.  
  19. void setup() {
  20.   long i;
  21.  
  22.   Serial.begin(115200);
  23.   Serial.println ("Eddig megy...");
  24.  
  25. // Dynamically allocate memory using malloc()
  26. //https://www.geeksforgeeks.org/dynamic-memory-allocation-in-c-using-malloc-calloc-free-and-realloc/
  27. //  ptr = (float*)malloc(2 * Ciklus_max * sizeof(float));
  28.  
  29. //    if (ptr == NULL) {
  30. //        Serial.println("Memory not allocated.\n");
  31. //    }
  32. //    else
  33. //    {
  34. //      Serial.println("Memory allocated.\n");
  35.  //   }
  36.  
  37.  
  38.  
  39. //******************************************************
  40.  
  41.   for (i=0; i<Ciklus_max; i++)
  42.     {
  43.       Re[i]=1.1*i;
  44.     }
  45.   for (i=0; i<Ciklus_max; i++)
  46.     {
  47.       Im[i]=10.1*i;
  48.     }
  49.   for (i=0; i<Ciklus_max;i++)
  50.     {
  51.      Adatok[i]=456.1*i;
  52.     }
  53.   Serial.println ("Ciklusok után...");
  54. }


Hiba. Írtam, hogy ezzel kezdtem, mert az az eleje mindennek. Elvileg mennie kellene, de ezek szerint másik memória területekbe kellene pakolnom, vagy ilyesmi, de nem értem.

Kell valami módszer, ami az egyiket az egyik memória szegmensbe teszi, a másikat másikba és így tovább. A DSPIC-ben van ilyesmi, de az ESP-t nem ismerem.
(#) KoblogPerGyok válasza KoblogPerGyok hozzászólására (») Okt 11, 2023
Erre már a fordító is mérges, de már nem látom át rendesen....

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. float PI_=3.141592653;
  6.  
  7. const long Mintaszam=32768/2; //32768
  8. long Ciklus_max=32768/2;
  9. float Re[Mintaszam];
  10. float Im[Mintaszam];
  11. float Adatok[Mintaszam];
  12.  
  13. //malloc-hoz kell
  14. long* ptr;
  15.  
  16.  
  17. void setup() {
  18.   long i;
  19.  
  20.   Serial.begin(115200);
  21.   Serial.println ("Eddig megy...");
  22. // Dynamically allocate memory using malloc()
  23. //https://www.geeksforgeeks.org/dynamic-memory-allocation-in-c-using-malloc-calloc-free-and-realloc/
  24.   ptr = (long*)malloc(2 * Ciklus_max * sizeof(float));
  25.  
  26.     if (ptr == NULL) {
  27.         Serial.println("Memory not allocated.\n");
  28.     }
  29.     else
  30.     {
  31.       Serial.println("Memory allocated.\n");
  32.     }
  33.  
  34.   for (i=0; i<Ciklus_max; i++)
  35.     {
  36.       Re[i]=1.1*(float)i;
  37.     }
  38.   for (i=0; i<Ciklus_max; i++)
  39.     {
  40.       Im[i]=10.1*(float)i;
  41.     }
  42.   for (i=0; i<Ciklus_max;i++)  //HIBA ROSSZUL MÁSOLTAM!!!!
  43.     {
  44.      Adatok[i]=456.1*(float)i;
  45.     }
  46.   Serial.println ("Ciklusok után...");
  47. }


A (float)i is egy teszt, ha nincs előtte, akkor sem megy.

IDE
DRAM segment data does not fit.
region `dram0_0_seg' overflowed by 94392 bytes

De ilyen hibát dobott akkor is, mikor a const Mintaszam-al akartam pár dolgot megoldani, ezért kellett a Ciklus_max. Ez teszt, nem éles, több változó is kell majd. Sokkal.
A hozzászólás módosítva: Okt 11, 2023
(#) KoblogPerGyok válasza pipi hozzászólására (») Okt 11, 2023
Linkről:

ptr = (int*) malloc(100 * sizeof(int));
Since the size of int is 4 bytes, this statement will allocate 400 bytes of memory. And, the pointer ptr holds the address of the first byte in the allocated memory.

Kód:
  1. //malloc-hoz kell
  2.  int* ptr;
  3.  
  4.  
  5. void setup() {
  6.   //long i;
  7.  
  8.   Serial.begin(115200);
  9.   Serial.println ("Eddig megy...");
  10. // Dynamically allocate memory using malloc()
  11. //https://www.geeksforgeeks.org/dynamic-memory-allocation-in-c-using-malloc-calloc-free-and-realloc/
  12.   ptr = (int*)malloc(2 * Ciklus_max * sizeof(float));
  13.  
  14.     if (ptr == NULL) {
  15.         Serial.println("Memory not allocated.\n");
  16.     }
  17.     else
  18.     {
  19.       Serial.println("Memory allocated.\n");
  20.     }


Nem sikerül allocálni. Nem lehet, hogy elromlott az ESP?

Futás a Serial monitoron:

Eddig megy...
Memory not allocated.

Ciklusok után...

Ha értéket adnék nekik, akkor rögtön hibával elszáll, azaz az IDE is azt mondja, hogy túlléptem a megengedett határt. A Malloc-al ki szerettem volna deríteni, hogy rosszul csináltam-e valamit és azért nem jó, vagy nincs elég memória ehhez, nem töltöm fel a tömböket, csak létrehozom például így:

float Adatok[16278];
float Re[16278];
float Im[16278];

A pointernek egésznek kell lennie, mert a memória területre mutat. Lehet ennek long-nak kell lennie? 540KByte meghaladná az integert? Na ez még lehet. Megnézem.
(#) KoblogPerGyok válasza kapu48 hozzászólására (») Okt 11, 2023
Vennem kell másikat, de szűkös a keret mostanában sajnos. Tegnap borozgattaam, miközben a Malloc-al foglalkoztam. De ma megnéztem, és rájöttem miért hagytam ott és ittam inkább tovább...

  1. Serial.begin(115200);
  2.   Serial.println ("Eddig megy...");
  3. // Dynamically allocate memory using malloc()
  4. //https://www.geeksforgeeks.org/dynamic-memory-allocation-in-c-using-malloc-calloc-free-and-realloc/
  5.   ptr = (int*)malloc(2 * Ciklus_max * sizeof(float));
  6.  
  7.     if (ptr == NULL) {
  8.         Serial.println("Memory not allocated.\n");
  9.     }
  10.     else
  11.     {
  12.       Serial.println("Memory allocated.\n");
  13.     }


A Ciklus_max az a tömb mérete, 16384. De nem férek el benne, de elvileg 500+KByte-nak kellene lennie. Ebben el kellene férnie nem? Ez 128KByte, de már ez sem fér el. Az IDE nem panaszkodik minden esetben, de volt olyan futás ami felment az ESP-re, de folyton újraindult. De azt egy hibás const -okozta.

Szóval hibásan írtam, hogy megvan a hiba. Sajnos nincs meg.

Másképpen kell a memóriát használni? Nekem sajnos kell ez a fajta memória, a Flash-ben is kell valamennyit tárolnom, de 3-4 ilyen tömbre szükségem lenne. Még így is Hanoi tornyait kell játszanom.
A hozzászólás módosítva: Okt 11, 2023
(#) Régi motoros válasza formasu hozzászólására (») Okt 10, 2023
Mégis hogy próbáltad le akkor a motort? Azt döntsük már el, hogy ez most BLDC vagy sima DC(kefés) motor? Mert nem mindegy milyen motorvezérlőt veszel.

A BMS -re írtam, a lényeg, hogy 7S legyen, és lítium ionhoz való, lehetőleg minél nagyobb áramú, ami még befér a régi helyére.
Idézet:
„BMS 7S 24V 10A 15A 20A 30A Li-ion 18650 Battery Charge Board With Balance Function Short Circuit / Temperature Protection
és a másik:
BMS 7S 25.9V 30A 20A 15A 10A Li-ion 18650 Battery Manage Board Balanced Charging Short Circuit Protection Common Port Power bank

Ebből én igazából csak két szöveget látok, nem magát a terméket. Azért kértem, linket tegyél fel, hogy az alapján tudjunk javaslatot tenni ha a technikai paramétereit megnéztük. Így első olvasatra az utóbbit mondanám, mert arra nagyobb feszültség van írva, csak épp ennyi információval nem sokra megyünk.

Idézet:
„...egyik miért 24 V-os, a másik miért 25,9 V-os?”

Na ez az amit mi sem tudunk, amíg nem magát a két terméket nézzük meg.
A hozzászólás módosítva: Okt 10, 2023
(#) KoblogPerGyok válasza kapu48 hozzászólására (») Okt 10, 2023
Sziasztok!

Küzdök még kicsit, de nem jó.
Mintaszam=16384;
Float típusú tömbökkel operálnék.

Elvileg ekkor 1 tömb 4*16384 Byte, ami 65536byte, ami 64KByte.

Két ilyennél ezt a hibát kapom a fordítótól:

DRAM segment data does not fit.
region `dram0_0_seg' overflowed by 28848 bytes

Elvileg az 520KByte-ba ennek és a kicsi kódnak bele kéne férnie.
Arduino IDE 2.1.0

Board:
ESP32-WROOM-DA Module

De ezzel sem jó:

NodeMCU-32S

Mi lehet a gond?
(#) formasu hozzászólása Okt 10, 2023
Sziasztok!
Szükségem van egy 7 akkucellás MBS-re, egy Bosch porszívóba. A régi panel, amiben a BMS is benne van, "meghalt". A porszívóban eredetileg 7 akku cella van, és 27,5 V van ráírva.
Gyakorlatilag kétféle MBS-t látok: az egyik:
BMS 7S 24V 10A 15A 20A 30A Li-ion 18650 Battery Charge Board With Balance Function Short Circuit / Temperature Protection
és a másik:
BMS 7S 25.9V 30A 20A 15A 10A Li-ion 18650 Battery Manage Board Balanced Charging Short Circuit Protection Common Port Power bank
MBS-ekkel eddig nem foglalkoztam, nem tudom, hogy mi a különbség köztük, az egyik miért 24 V-os, a másik miért 25,9 V-os?
Melyik lenne a jó nekem? Az eredeti panelen látok egy 20 A-es biztosítékot, ebből arra következtetek, hogy a motor nem vesz fel 15 A-nál, esetleg 10 A-nál többet.
A működési időre max. 75 perc van írva, és "Turbó" állapotban 15 perc. Feltételezem, hogy nem valami speciálisan nagy Ah-ás akkumulátorok voltak a porszívóban. (Nem látom felírva a kapacitásukat)
A kérdésem, hogy nekem melyik BMS-re van szükségem? A 24 V-osra, vagy a 25,9 Voltosra? Ezen kívül a 10, 15, vagy a 20 A-osra?
Ezen kívül szükségem van egy motor meghajtóra is. Nem tudom eldönteni, hogy 10A-os, vagy 15 A-os, esetleg a 20 A-os kellene-e? Az, hogy hány A-os a motor meghajtó, az azt jelenti, hogy a ráírt max. áramerősségnél lekapcsol, letilt, vagy azt, hogy ez fölött tönkre megy?
Én úgy gondolom, hogy ez biztosan jó lenne:
DC 6V-90V 15A DC Motor Speed Controller Stepless Speed Regulation Pulse Width PWM DC 12V 24V 36V 48V 1000W
A hozzászólás módosítva: Okt 10, 2023
(#) img válasza sonajkniz hozzászólására (») Okt 8, 2023
(#) devergo74 hozzászólása Okt 6, 2023
Sziasztok!
Szeretnék felprogramozni egy Arduino pro mini-t, de állandóan ezt a hibaüzenetet kapom:

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x25

Már telepítettem könyvtárakat, újra tettem az Arduino ide-t, próbáltam régebbi verzióval, de semmi, a hiba továbbra is fennáll.
Van valakinek valami ötlet, mi lehet a gond?
(#) sargarigo válasza sany hozzászólására (») Okt 5, 2023
This is not a bug, this is a feature! Kvantumpoti, diszkrét állapotokkal, az egyes kvantumpontok között megfelelő erejű és irányultságú kinetikus energia szükséges!
(#) tibike32 hozzászólása Szept 24, 2023
Sziasztok !

Adott egy program MH ET LIVE ESP32 MiNiKit-re, ARDUINO IDE 1.8.12 a fordító, a végén ezt a hibát dobja fel. E:\aquacontrol32-master\aquacontrol32-master\aquacontrol32\webservertask.ino: In function 'bool setupMDNS(const char*)':
webservertask:673:49: error: cannot convert 'ip4_addr*' to 'esp_ip4_addr_t*' {aka 'esp_ip4_addr*'}
esp_err_t res = mdns_query_a( hostname, 2000, &addr );
^~~~~
In file included from C:\Users\Tibi HP8470P\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\ESPmDNS\src/ESPmDNS.h:46,
from E:\aquacontrol32-master\aquacontrol32-master\aquacontrol32\aquacontrol32.ino:7:
C:\Users\Tibi HP8470P\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11/tools/sdk/esp32/include/mdns/include/mdns.h:649:83: note: initializing argument 3 of 'esp_err_t mdns_query_a(const char*, uint32_t, esp_ip4_addr_t*)'
esp_err_t mdns_query_a(const char * host_name, uint32_t timeout, esp_ip4_addr_t * addr);
~~~~~~~~~~~~~~~~~^~~~

cannot convert 'ip4_addr*' to 'esp_ip4_addr_t*' {aka 'esp_ip4_addr*'}

Mi lehet a gondja ?

Tibi
(#) tunerman válasza tunerman hozzászólására (») Szept 19, 2023
Az ötödik nap délelőttjén hatalmas sóhajtás után feldaraboltam az Audio note AN-SP QSSC hangfalvezetékeket, majd szépen befűztem a helyükre.
Délután majd az ellenállásokat kezdem el beforrasztani, ezek AN 2 wattos nem mágnesezhető tantalumok 
TJ.
Következő: »»   7 / 197
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem