Fórum témák

» Több friss téma
Fórum
Keresés
Lapozás: OK   4 / 197
(#) sszasza válasza asch hozzászólására (») Szept 15, 2024
Még ha fix cimre rakom is, az 5-ös sorra "initializer element is not a compile-time constant" a forditó reakciója.
(#) kameleon2 válasza pipi hozzászólására (») Szept 5, 2024
Szia!
Amit találtam az a szoftverben is benne van:
  1. initialise();
  2. output(0x0f, 0x02);  //display test register - test mode off (0) (2 best)
  3. output(0x0c, 0x01); //shutdown register - normal operation (1)
  4. output(0x0b, 0x07); //scan limit register - display digits 0 thru 7
  5. output(0x0a, 0x00);  //intensity register - max brightness (F)
  6. output(0x09, 0xff);   //decode mode register - CodeB decode all digits

Eszerint a display test register off lenne a 0, de a valóságban kevesebb a "szemét" ha 2-re állítottam.
A teljes kód jelenleg:
  1. //MAX 7219 SPI PINS
  2. #define MAX7219_DIN 2
  3. #define MAX7219_CS  4
  4. #define MAX7219_CLK 3
  5.  
  6. void initialise() {
  7. pinMode(MAX7219_DIN, OUTPUT);
  8. pinMode(MAX7219_CS, OUTPUT);
  9. pinMode(MAX7219_CLK, OUTPUT);
  10. // digitalWrite(MAX7219_CS, HIGH);
  11. // delay(1);
  12.  
  13. }
  14.  
  15. void output(byte address, byte data) {
  16.  
  17. digitalWrite(MAX7219_CS, LOW);
  18. delay(1);
  19. shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, address);
  20. shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, data);
  21. digitalWrite(MAX7219_CS, HIGH);
  22. delay(1);
  23.  
  24. }
  25.  
  26. void setup() {               // put your setup code here, to run once:
  27.  
  28. initialise();
  29. output(0x0f, 0x02);  //display test register - test mode off (0) (2 best)
  30. output(0x0c, 0x01); //shutdown register - normal operation (1)
  31. output(0x0b, 0x07); //scan limit register - display digits 0 thru 7
  32. output(0x0a, 0x00);  //intensity register - max brightness (F)
  33. output(0x09, 0xff);   //decode mode register - CodeB decode all digits
  34.  
  35. /*
  36.  * 0x00-Zero  | 0x01-1    | 0x02-2    | 0x03-3    | 0x04-4    | 0x05-5      | 0x06-6    | 0x07-7    | 0x08-8    | 0x09-9    |
  37.  * 0x0A-(-)   | 0x0B-E    | 0x0C-H    | 0x0D-L    | 0x0E-P    | 0x0F- URES  |    
  38.  * 0xA0-(0.)  | 0xA1-(1.) | 0xA2-(2.) | 0xA3-(3.) | 0xA4-(4.)   | 0xA5-(5.) | 0xA6-(6.) | 0xA7-(7.) | 0xA8-(8.) | 0xA9-(9.)  |
  39.  * 0xAA-(-.)  |
  40.  */
  41. output(0x08, 0x02); //digit 7 (leftmost digit) data (H?-0x0c)
  42. output(0x07, 0x00); //                              (E?-0x0b)
  43. output(0x06, 0x0D); //                              (L?-0x0d)
  44. output(0x05, 0xA1); //                              (P?-0x0e)
  45. output(0x04, 0x01); //                              (8? -0x08)
  46. output(0x03, 0x09); //                              (7? -0x07)
  47. output(0x02, 0x07); //                              (6? -0x06)
  48. output(0x01, 0x00); //digit 0 (rightmost digit) data (5?)
  49.  
  50. }
  51.  
  52. void loop() {
  53.  
  54. // put your main code here, to run repeatedly:
  55.  
  56. }

Az eredeti projekt kód, amiből kiindultam. Megvallom nem igazán kedvelem ezeket a buszos meghajtásokat, de most a kevés láb és a sok szegmens miatt rá vagyok kényszerítve. Időből viszont csehül állok, hogy eredményt is tudjak elérni.
(#) Tambi válasza dc001 hozzászólására (») Szept 2, 2024
Köszönöm kedves Dc001!
Az alapfrekvenciát megváltoztattam 182 Hz-re, az f++ -t f=f+10-re, a serial.print(f) gyönyörűen jelzi a 10-es lépésenkénti változást, de a kimenet marad a stabil 182 Hz, nem változik f-el együtt.

A ledcAttach(PIN, f, D); áthelyezhető a setup-ból a loop-ba?

Hogyan kell a ledcAttach()-t kiíratni? A
Serial.print(" ledcAttach: ");
Serial.println(ledcAttach); -ra nagyon hosszú hibalistát küldött:

C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino: In function 'void loop()':
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:15: error: no matching function for call to 'println(bool (&)(uint8_t, uint32_t, uint8_t))'
33 | Serial.println(ledcAttach);
In file included from C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Stream.h:26,
from C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Arduino.h:193,
from C:\Users\APA\AppData\Local\Temp\arduino\sketches\0EBA565169E8B35385C1FC4A6CDA5573\sketch\GENERATOR_LEDC_ENC_min.ino.cpp:1:
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:102:10: note: candidate: 'size_t Print::println(char)' (near match)
102 | size_t println(char);
| ^~~~~~~
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:102:10: note: conversion of argument 1 would be ill-formed:
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'char' [-fpermissive]
33 | Serial.println(ledcAttach);
| ^~~~~~~~~~
| |
| bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)}
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:103:10: note: candidate: 'size_t Print::println(unsigned char, int)' (near match)
103 | size_t println(unsigned char, int = DEC);
| ^~~~~~~
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:103:10: note: conversion of argument 1 would be ill-formed:
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'unsigned char' [-fpermissive]
33 | Serial.println(ledcAttach);
| ^~~~~~~~~~
| |
| bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)}
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:104:10: note: candidate: 'size_t Print::println(int, int)' (near match)
104 | size_t println(int, int = DEC);
| ^~~~~~~
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:104:10: note: conversion of argument 1 would be ill-formed:
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'int' [-fpermissive]
33 | Serial.println(ledcAttach);
| ^~~~~~~~~~
| |
| bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)}
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:105:10: note: candidate: 'size_t Print::println(unsigned int, int)' (near match)
105 | size_t println(unsigned int, int = DEC);
| ^~~~~~~
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:105:10: note: conversion of argument 1 would be ill-formed:
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'unsigned int' [-fpermissive]
33 | Serial.println(ledcAttach);
| ^~~~~~~~~~
| |
| bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)}
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:106:10: note: candidate: 'size_t Print::println(long int, int)' (near match)
106 | size_t println(long, int = DEC);
| ^~~~~~~
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:106:10: note: conversion of argument 1 would be ill-formed:
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'long int' [-fpermissive]
33 | Serial.println(ledcAttach);
| ^~~~~~~~~~
| |
| bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)}
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:107:10: note: candidate: 'size_t Print::println(long unsigned int, int)' (near match)
107 | size_t println(unsigned long, int = DEC);
| ^~~~~~~
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:107:10: note: conversion of argument 1 would be ill-formed:
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'long unsigned int' [-fpermissive]
33 | Serial.println(ledcAttach);
| ^~~~~~~~~~
| |
| bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)}
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:108:10: note: candidate: 'size_t Print::println(long long int, int)' (near match)
108 | size_t println(long long, int = DEC);
| ^~~~~~~
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:108:10: note: conversion of argument 1 would be ill-formed:
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'long long int' [-fpermissive]
33 | Serial.println(ledcAttach);
| ^~~~~~~~~~
| |
| bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)}
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:109:10: note: candidate: 'size_t Print::println(long long unsigned int, int)' (near match)
109 | size_t println(unsigned long long, int = DEC);
| ^~~~~~~
C:\Users\APA\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.3\cores\esp32/Print.h:109:10: note: conversion of argument 1 would be ill-formed:
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\_____ESP32\GENERATOR_LEDC_ENC_min\GENERATOR_LEDC_ENC_min.ino:33:16: error: invalid conversion from 'bool (*)(uint8_t, uint32_t, uint8_t)' {aka 'bool (*)(unsigned char, long unsigned int, unsigned char)'} to 'long long unsigned int' [-fpermissive]
33 | Serial.println(ledcAttach);
| ^~~~~~~~~~
| |
| bool (*)(uint8_t, uint32_t, uint8_t) {aka bool (*)(unsigned char, long unsigned int, unsigned char)}

exit status 1

Compilation error: no matching function for call to 'println(bool (&)(uint8_t, uint32_t, uint8_t))'

Mindig olyasmibe fogok, ami meghaladja....

Köszönettel; Tambi
(#) Massawa hozzászólása Aug 30, 2024
Olvasgatok egy cikket a szélenergia jelenlegi helyzetéröl. Érdekes modon a problémák ugyanazok maradtak mint 20 éve, amikor sok nagy bank meg befektetö kilépett a boltbol.

1. A szélerömüvek az általuk termelt energia árának több mint 20%-t elnyeli a karbantartás. Érdekes modon a mai napig nem tudják miért mennek a turbinák mechanikus részei (csapágyai, a
áttételei) ilyen gyorsan tönkre. A ventillátorok amik max 70 rpm-l forognak belül egy 4 fokozatu áttételen át hajtják az alternátort aminek a fordulatszáma 1800 ( 60Hz-re) vagy 1500 az 50Hz hálozatban.

2. Amint a szélkerekeket a közhálozatba akarják kötni elöjön a szinkronizálás kérdése. Ezt persze a szélkerék fordulatszámával kellene kezelni, sajnos a lapátok hatalmas tehetetlensége kizárja az aktiv szinkronizálást. Igy maximum a lapátok forgatásával megközelitö sebességre tudják állitani a turbinát, de ez még nem szinkron.

3. Kisebb telepeken megprobálják egy AC-DC-AC váltoval kezelni a kérdést, ez addig megy amig van energia, azaz ha lassul a szél a konverter is leáll. Márpedig a közhálozatba csak olyan energiát lehet betáplálni 24/7 rendszerben, ami tudja garantálni a frekvenciát is. A 20 éves ötlet sem nagyon müködik, hogy majd a foszilis, viz meg az atomerömüvek besegitenek, mert az ottani gépek tehetetlensége sem képes azonnal reagálni a freki lassulásra.
Az uj lassabban forgo alternátorok 28 polusuak (4 helyett) , de igen nagyok és a felhasznált mágnesek 95%-t Kina szállitja, azaz ez sem igen járhato ut. Ráadásul a mertek akkorák, hogy szinte lenetetlen megoldani a szállitásukat. És még kevésbé tud reagálni a frekvencia esésre és nem igen tudják még milyen karbantartási igények lépnek fel, annak ellenére, hogy a mechanizmus kb 7x lassabban forog.

4. Az USAban ezért nincs egy összefüggö elektromos hálozat, mert az egyes hálozatok nem tudják a federális szabályokat garantálni. Mintegy 15 éve épitettek egy hatalmas kisérleti telepet, ha jol emlékszem vagy 1000 lendkerékkel, amiket a hálozat tart állandoan forgásban, és ha kell azonnal tudnak energiát termelni és támogatni a hálozat frekvencia igényét. Az irek is valami hasonlot adtak át nemrégen, ahol egy több mint 100 tonnás lendkerék vákuumkamarában forog. Igy már az ir hálozat teljesiti a kontinens energia szabványait és megépithetik a 700 MW-s kábelt Franciaországba ahonnan ha kell atomenergiát vehetnek vagy a szélerömüveik energiáját tölthetik a kontinens hálozatába. A lendkerék kb 20 perc alatt éri el a névleges fordulatszámot.
A hozzászólás módosítva: Aug 30, 2024
(#) reloop válasza SzervízMacska hozzászólására (») Aug 21, 2024
Köszönöm! Kipróbálom, bár teljesen átlagos Redmi note 7-et használok.
(#) tunerman válasza tunerman hozzászólására (») Aug 19, 2024
Münchhausen drive V-FET SE alkatrészlista (parts list):

- doboz: Takachi SRDSL-20HS x1
- alu hűtőborda: 300x200x40mm x1
- alu hangerőgomb: Sato K-59-L AG 6mm/50mm x1
- aljzat: EMI filter/fuse/switch Power Conversion x1
- RCA bemenet: WBT 0274 pár
- SPK kimenet: WBT 0700 x2 pár
- attenuator: TKD 2P65CS x1
- hálózati transzformátor: Marantz 2245 x1
- kimenő transzformátor: Hirata Tango FG50S x2
- fojtó: Hirata Tango 0,1H/1200mA x2
- dióda: CGG JAN 1N3913 gold x4
- kék LED: SMD 5050 x2
- Sony V-FET: 2SK79 x2
- Hitachi V-MOS: 2SJ119 x2
- kondenzátor: Black Gate FK 10000µF/80v x4
- kondenzátor: Black Gate FK 100µF/100v x2
- kondenzátor: kerámia 100nF x2
- jelvezetékek:
- Audio note Kondo KSL SPz
- Audio note UK 850 SPe
- tápvezetékek: sodrott ezüstözött réz, teflon bevonattal, 1,5mm²
Ellenállások:
- termisztor: 10k NTC x2
- 1k thick film x2
- 2k2/2W tantalum x2
- 20k/2W tantalum x2
- 56k/0,5W tantalum x2
- 1M5 thick film x2
- forrasztó ón: Siltec
TJ.
(#) Tambi hozzászólása Aug 19, 2024
Kedves Fórumtársak!

Magasabb szintre léptem (pedig az alacsonyabbat sem tudom); ESP32-vel kísérletezgetek. Minden olyan timer-t tartalmazó kód, ami 1-2 éve már működött, most nem.
Pl.:
  1. #define LED 2                                    //LED legyen a D2 lábon
  2. hw_timer_t * My_timer = NULL;                     //My_timer-nek elnevezzük a hw_timer_t NULL (0) időzítőt
  3.  
  4. void IRAM_ATTR onTimer(){                        //ezt a megszakítást az onTimer generálja, de előbbre kell írni...
  5. digitalWrite(LED, !digitalRead(LED));            //ez pedig a végrehajtás (toggle LED)
  6. }
  7. void setup() {
  8. pinMode(LED, OUTPUT);                            //LED (D2) kimenet
  9. My_timer = timerBegin(0, 8, true);               //TIMER"0" kiválasztva, f= 80MHz / 2 Előosztó = 40MHz, true: felfelé számol
  10. timerAttachInterrupt(My_timer, &onTimer, true);  //a My_timer az onTimer megszakítást váltja ki
  11. timerAlarmWrite(My_timer, 1000000, true);        // 2.000.000 impulzusig számol: f LED = 40MHz/(2ÉL * 2.000.000) = 10Hz-el
  12. timerAlarmEnable(My_timer);                     //engedélyezzük a My_timer megszakítást
  13. }
  14.  
  15. void loop() {}




A HIBAÜZENET HOSSZABB, MINT A KÓD:



C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\ESP32\TIMER_LED_ESP32\TIMER_LED_ESP32.ino: In function 'void setup()':
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\ESP32\TIMER_LED_ESP32\TIMER_LED_ESP32.ino:9:22: error: too many arguments to function 'hw_timer_t* timerBegin(uint32_t)'
9 | My_timer = timerBegin(0, 8, true); //TIMER"0" kiválasztva, f= 80MHz / 2 Előosztó = 40MHz, true: felfelé számol
| ~~~~~~~~~~^~~~~~~~~~~~
In file included from C:\Users\APA-PC-Otthon\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\cores\esp32/esp32-hal.h:84,
from C:\Users\APA-PC-Otthon\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\cores\esp32/Arduino.h:36,
from C:\Users\APA-PC-Otthon\AppData\Local\Temp\arduino\sketches\C81FFCFE91EB0C7DFDC9DB9E295B2C40\sketch\TIMER_LED_ESP32.ino.cpp:1:
C:\Users\APA-PC-Otthon\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\cores\esp32/esp32-hal-timer.h:35:13: note: declared here
35 | hw_timer_t *timerBegin(uint32_t frequency);
| ^~~~~~~~~~
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\ESP32\TIMER_LED_ESP32\TIMER_LED_ESP32.ino:10:21: error: too many arguments to function 'void timerAttachInterrupt(hw_timer_t*, void (*)())'
10 | timerAttachInterrupt(My_timer, &onTimer, true); //a My_timer az onTimer megszakítást váltja ki
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\APA-PC-Otthon\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.4\cores\esp32/esp32-hal-timer.h:50:6: note: declared here
50 | void timerAttachInterrupt(hw_timer_t *timer, void (*userFunc)(void));
| ^~~~~~~~~~~~~~~~~~~~
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\ESP32\TIMER_LED_ESP32\TIMER_LED_ESP32.ino:11:1: error: 'timerAlarmWrite' was not declared in this scope; did you mean 'timerWrite'?
11 | timerAlarmWrite(My_timer, 1000000, true); // 2.000.000 impulzusig számol: f LED = 40MHz/(2ÉL * 2.000.000) = 10Hz-el
| ^~~~~~~~~~~~~~~
| timerWrite
C:\OneDrive\OneDrive - Csarnok.hu Kft\EN\AVR_2024\ESP32\TIMER_LED_ESP32\TIMER_LED_ESP32.ino:12:1: error: 'timerAlarmEnable' was not declared in this scope; did you mean 'timerAlarm'?
12 | timerAlarmEnable(My_timer); //engedélyezzük a My_timer megszakítást
| ^~~~~~~~~~~~~~~~
| timerAlarm

exit status 1

Compilation error: too many arguments to function 'hw_timer_t* timerBegin(uint32_t)'


Mi lehet a baja?

Köszönettel; Tambi.
(#) tunerman válasza tunerman hozzászólására (») Aug 18, 2024
Betenném bemutatás céljából az első vázlatos leírásomat, ami természetesen majd a végleges formájában jelenik meg a HiFi Shown.

Semmi sem új a nap alatt?
(A Münchhausen drive V-FET single ended erősítő bemutató szórólap tervezete)

Prédikátor könyve 1:9
" 9Ami volt, az lesz újra, és ami történt, az történik megint: semmi sem új a nap alatt. "

El kell ismerjem a prédikáció mélyebben rejlő igazságtartalmát, ami ezen a területen azt jelentheti, hogy mindennek van előzménye, minden ráépül az erősítéstechnika eddigi múltjára.

A Münchhausen drive V-FET Single Ended erősítő alapgondolata, elvi működése - habár félvezetőket használ - ugyan úgy az elektroncsöves SE erősítők elmúlt 100 évében történt elképzeléseket és megvalósításokat próbálja meg valamiképpen továbbvinni. A kimeneten használt egységcsatolt (Unity Coupled) SE transzformátoros megoldás elődje a szabadalommal védett McIntosh csöves PP erősítőiben található meg. Persze ez után véget is ér a hasonlóság, mert nálam nincs elektroncső, és nem push-pull, hanem egyszerű SE az erősítő működési elve. Viszont a hagyományos SE erősítőkhöz képest ez az új fejlesztésű egységcsatolt kimenet nagymértékű javulást hoz, mind a technikai paraméterekben, mind a hangzás szinvonalában.

A másik - réges régi - elnevezés már távolabbi kapcsolatra utal, és ez egy valóban egészen vidám történet. Münchhausen báró az 1700-as években élő híresen nagyotmondó, hihetetlen eseményeket mesélő személy volt. Egyik jól ismert története szerint a mocsárba merült a lovával, de Ő a saját hajánál fogva kihúzta magát a lovával együtt szorult helyzetéből.
Az erősítőm Münchhausen drive elnevezésű bemeneti fokozatának a működése ezt az eseményt idézi fel a régmúltból. A Sony 2SK79 V-FET-el kivitelezett driver a működése közben keletkezett nem kivánatos jeleket saját maga törli ki, és így távoli hasonlóságot mutat a nagyhangú előd ismert történetével

Áttérve a gyakorlati megvalósításra, a minimál koncepció követése tűnt a legszimpatikusabbnak, főleg azért, mert ebben Jean Hiraga Nemesis projektje egy korábbi példát már szolgáltatott. A nagynevű elődöt a magasabb hangzási igényeket teljesítő V-FET-ek segítségével, az SE egységcsatolt kimenettel, és a no global NFB szigorú betartásával együtt megpróbálhatom utolérni...
Az alkatrészek kevés száma adta magát ahhoz, hogy az elérhető legjobb minőségűeket építsem be (2SK79, TKD 2P65CS, Tango FG50S, Black Gate FK), a jelvezetékezés Audio note silver litze kivitelezésű.
A technológia újításokra is szükség volt, valamiképpen feljebb kellett kerülni szinvonalban az eddigi megszokott kivitelezésekhez képest. Ezt a bemeneti attenuatorra ráépített komplett driver fokozattal sikerült elérni, a "sajátlábas" technika egy teljesen egyedi megoldása lett belőle.
A prototipus műszaki adatai, bemérése visszaigazolta az előzetes elvárásokat, a hagyományos kivitelezésű SE erősítőkhőz képest remélhetőleg előrelépést sikerült elérni.

Audio Hobby
TJ.
(#) tunerman válasza tunerman hozzászólására (») Aug 6, 2024
Két napi tervezgetés után - hogy milyen hosszú kábeldarabokat vágjak le az 1,6m-es Audio note 850 SPe kábelből - belefogtam a vagdosásba
Úgy számoltam ki a darabolást, hogy a V-MOSFET és a Tango kimenő között pontos méret legyen, és a maradékból lesznek a hangszóró kimenetek felé menő szakaszok. Talán 1-2 cm-rel hosszabbak is lehetnek, mert nagyon nem szeretnék a végén látni majd egy nyúlfarknyi maradékot ebből drága csodából
TJ.
(#) MATA hozzászólása Aug 4, 2024
Üdv mesterek!
Van itt ez a kód ez egy akku kapacitásnérő arduino kódja.
A 39-40 sort hibáztatja:
Button BT1(2);
Button BT2(4);
A fordításnál a következő hibaüzenetet írja:
Compilation error: no matching function for call to 'Button::Button(int)'
Mi lehet itt a baj?
Kösszönöm!
  1. /*================================
  2. micro:                  Arduino Nano with bootloader Uno    (Arduino Uno)
  3. Display:                TFT ST7789 240x240
  4. Sensor:                 INA219
  5. Power:                 
  6. Data:                   23/01/2023
  7.  
  8. File programma: H:\arduino-1.8.13\portable\sketchbook\Battery_Test_Aldo-v3\Battery_Test_Aldo-v3.ino
  9. Annotazioni:   
  10.  ST7789 240x240 IPS (without CS pin) connections (only 6 wires required):
  11.  #01 GND -> GND
  12.  #02 VCC -> VCC (3.3V only!)
  13.  #03 SCL -> D13                         52 Mega
  14.  #04 SDA -> D11                         51 Mega
  15.  #05 RES -> D9
  16.  #06 DC  -> D8
  17.  #07 BLK -> NC
  18.  
  19.  * Adafruit INA219 Breakout board
  20.  * I2C connections:
  21.  *    SCL pin goes to Nano A5
  22.  *    SDA pin goes to Nano A4
  23.  * VCC to +5V
  24.  * GND to GND
  25.  * Vin- and Vin+ are not used
  26. ===================================*/
  27. #include <Button.h>
  28. #include <Wire.h>
  29. #include <Adafruit_INA219.h>
  30. #include <EEPROM.h>
  31. #include <SPI.h>
  32. //#include <Adafruit_GFX.h>
  33. #include <Arduino_ST7789_Fast.h>
  34.  
  35. // pin I/O Arduino
  36. #define end_sounder  A2 //buzzer
  37. #define potPin  A0                //potenziometro
  38.  
  39. Button BT1(2);
  40. Button BT2(4);
  41.  
  42. // pin display ST7789
  43. #define TFT_DC    8
  44. #define TFT_RST   7
  45. // dimensione schermo display
  46. #define SCR_WD 240
  47. #define SCR_HT 240
  48. // define what kind of fonts should be used
  49. #define USE_RRE_FONTS 1
  50.  
  51. Arduino_ST7789 lcd = Arduino_ST7789(TFT_DC, TFT_RST);
  52.  
  53. #include "RREFont.h"
  54. #include "rre_term_10x16.h"
  55. #include "rre_bold13x20.h"
  56. #include "rre_bold13x20v.h"
  57. #include "rre_bold13x20no.h"
  58.  
  59. RREFont font;
  60. // needed for RREFont library initialization, define your fillRect
  61. void customRect(int x, int y, int w, int h, int c) { return lcd.fillRect(x, y, w, h, c); }  
  62.  
  63. //-----------------------------------------------------------------------------
  64.  
  65. unsigned long ms = 0;
  66. int stato = 10;
  67. boolean FIRST = true;
  68. boolean ONCE = true;
  69.  
  70. int target_mA;                      //= 100;
  71. float cutoff_voltage;           //= 3.2;
  72. float kP;                               //= 50;
  73. float v1,v2,v3;
  74. int a1, a2, a3;
  75. float b1, b2, b3;
  76. byte cifra[4];
  77. char str_h[3];                          //stringa per ore
  78. char str_m[3];                          //stringa per minuti
  79. char str_s[3];                          //stringa per secondi
  80.  
  81.  
  82. //================== variabili per  RUN  ==================
  83. int time_limit = 360;       // 6 hours. Test relies on the..    
  84. float offset = 0.0;
  85. int tolerance = 1;
  86.  
  87. //int pwm = 0;
  88. float error;
  89. boolean manual = false;
  90.  
  91. String SW_VERSION = "3.04";
  92.  
  93. // Current shunt and voltage measurements
  94. Adafruit_INA219 ina219;
  95.  
  96. float shuntvoltage = 0;
  97. float busvoltage = 0;
  98. double current_mA = 0;
  99. float loadvoltage = 0;
  100. float power_mW = 0;
  101. /*
  102.   * La seguente variabile visualizza la tensione della cella.
  103.   * C'è una costante R che può essere impostata nella routine read_INA che può
  104.   * essere utilizzato per tenere conto delle perdite di cablaggio o traccia PCB nel loop di corrente.
  105.   * Se puoi misurarlo.
  106.   * Puoi anche utilizzare un DVM molto accurato per confrontare la tensione della cella
  107.   * con ciò che misuri e modifica questa variabile in modo che corrisponda a quanto visualizzato
  108.   * tensione di cella. Se ci tieni a questa precisione...e cell voltage
  109.  */
  110. float vR;
  111.  
  112. // lapse timer for test duration and mAh calculation
  113. unsigned long  startMillisec;           // Variables for discharge timer.
  114. unsigned long  sampleTime = 10000;      // Default samples to PC time (ms)
  115. unsigned long millis_PC_wait;           // Timer for samples to PC
  116. unsigned long millisCalc_mAh;           // Timer for mAh calc. and LCD write.
  117. float last_hours = 0.0;                 // Working variables for time and mAh
  118. float mAh_soFar = 0.0;
  119.  
  120. int days, hours;
  121. int mins, secs;
  122. int tMins;
  123.  
  124. // Beeper
  125. boolean sounded = false;  // flag to limit beeping
  126. int beep = 1;             // value coming from PC, no longer used
  127.  
  128. // Variables and flags to terminate test
  129. int cancel = 0;
  130. boolean timed_out = false;
  131. boolean high_current = false;
  132. boolean cutoff_voltage_reached = false;
  133. String error_code = "";
  134. boolean end_of_test = false;
  135.  
  136. //------------------------------------------------------------
  137. /* a hack to create up to 16-bit PWM signals:
  138.  * The above one is WRONG! Below is the correct one.
  139.  *
  140.  * I use the 13-bit version because the resolution of the 10-bit counter is too
  141.  * course to drive the error variations.
  142.  */
  143. void setupFastPWM() {
  144.   /* Changing ICR1 will effect the resolution and the frequency.
  145.   ICR1 = 0xffff; (65535) 16-bit resolution  244 Hz
  146.   ICR1 = 0x7fff; (32767) 15-bit resolution  488 Hz
  147.   ICR1 = 0x3fff; (16383) 14-bit resolution  977 Hz
  148.   ICR1 = 0x1fff;  (8192) 13-bit resolution 1953 Hz
  149.   ICR1 = 0x0fff;  (4096) 12-bit resolution 3908 Hz
  150.   */
  151.   DDRB |= (1 << DDB1) | (1 << DDB2);
  152.   TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << WGM11);
  153.   TCCR1B = (1 << WGM12) | (1 << WGM13) | (1 << CS10);
  154.   OCR1A = 0;
  155.   ICR1 = 0x1fff; /* TOP counter value (freeing OCR1A)*/
  156. }
  157. //----------------------------------------------------------
  158.  
  159. /* xx-bit version of analogWrite(). Works only on pins 9 and 10. */
  160. void analogWriteFast(uint8_t pin, uint16_t val)
  161. {
  162.   switch (pin) {
  163.     case  9: OCR1A = val; break;
  164.     case 10: OCR1B = val; break;
  165.   }
  166. }
  167. //--------------------------------------------------------------------
  168.  
  169. // PWM setup
  170. const byte pwm_pin = 9;   // PWM DAC, only pins 9 and 10 are allowed with the fast PWM
  171. int pwm = 2000;           // Starting value for 13-bit DAC. PWM is typ. @ 4540
  172. float pid_error;          // the error between current setiing and actual current,
  173.                           // used in the "PID" calculation to drive the MOSFET
  174. //==========================================================
  175.  
  176. void setup()
  177. {
  178.   Serial.begin(9600);
  179.   lcd.init(SCR_WD, SCR_HT);
  180.   font.init(customRect, SCR_WD, SCR_HT); // custom fillRect function and screen width and height values
  181.  
  182.  
  183. //inizializzazione EEPROM solo prima volta quindi remmare
  184.   //EEPROM.put(0, target_mA);                   //scrivi target_mA
  185.   //EEPROM.put(10, cutoff_voltage);             //scrivi cutoff_voltage
  186.   //EEPROM.put(20, kP);                                 //scrivi kP  
  187.   EEPROM.get(0, target_mA);
  188.   EEPROM.get(10, cutoff_voltage);
  189.   EEPROM.get(20, kP);
  190.  
  191. // Inizializza  INA219.
  192.   // Per impostazione predefinita, l'inizializzazione utilizzerà l'intervallo più ampio (32 V, 2 A). Tuttavia
  193.   // puoi chiamare una funzione setCalibration per modificare questo intervallo (vedi commenti).
  194.   ina219.begin();
  195.    
  196.   BT1.begin();
  197.   BT2.begin();
  198.   pinMode(end_sounder, OUTPUT);       // Output to sounder.
  199.   digitalWrite(end_sounder, LOW);
  200.  
  201. // Set up DAC pin come output
  202.   pinMode(pwm_pin, OUTPUT);
  203.  
  204. }
  205.  
  206. //const uint16_t lnCol  = RGBto565(255,150,255);
  207. const uint16_t ln2Col = RGBto565(180,180,180);          //bianco
  208. const uint16_t labCol = RGBto565(250,250,250);          //grigio
  209. const uint16_t v1Col  = RGBto565(100,250,100);          //verdino
  210. const uint16_t v4Col  = RGBto565(255,0,0);                      //rosso
  211. const uint16_t v2Col  = RGBto565(235, 164, 52);         //arancio
  212. const uint16_t v3Col  = RGBto565(66, 135, 245);         //azzurro
  213. const uint16_t v5Col  = RGBto565(255, 255, 0);          //giallo
  214.  
  215. int mode=0,lastMode=-1;
  216.  
  217. void setBigNumFont()
  218. {
  219.  
  220.   font.setFont(&rre_Bold13x20v);
  221.  
  222.   font.setSpacing(1);
  223.   font.setScale(1,2);
  224.   font.setDigitMinWd(16);
  225. }
  226.  
  227.  
  228. void drawField(int x, int y, int w, int h, char *label, uint16_t col=v3Col)   //disegna i campi
  229. {
  230.   lcd.drawRect(x,y+7,w,h-7,col);
  231.   font.setFont(&rre_term_10x16);
  232.   font.setScale(1);
  233.   font.setColor(labCol,BLACK);
  234.   int wl = font.strWidth(label);
  235.   font.printStr(x+(w-wl)/2,y,label);
  236. }
  237.  
  238.  
  239. void RUN_SETUP(){                               //stato 10
  240.   if (FIRST) {
  241.         lcd.fillScreen(BLACK);
  242.         setBigNumFont();
  243.         font.setFont(&rre_term_10x16);
  244.         font.setScale(2);
  245.         font.setColor(ln2Col);
  246.         font.printStr(10, 15, "Battery  Test");
  247.         font.printStr(65, 65, " v3.1.0");
  248.         font.setColor(v5Col);
  249.         font.printStr(10, 140, "BT1 >>  Setup");
  250.         font.printStr(10, 190, "BT2 >>  Run");
  251.         FIRST = false;
  252.   }    
  253.   //leggi pulsante BT1
  254.   if (BT1.pressed()) {
  255.     //entra in displaySetup  stato 0
  256.     stato = 0;  
  257.     FIRST = true;
  258.   }
  259.  
  260.   //leggi pulsante BT2
  261.   if (BT2.pressed()) {
  262.     //entra in displayRun  stato 20
  263.     stato = 20;  
  264.     FIRST = true;
  265.   }      
  266. }      
  267.  
  268. void displaySetup(){
  269.   if (FIRST) {
  270.     lcd.fillScreen(BLACK);
  271.         drawField(    0,  0,235,78," Target_mA ");
  272.         drawField(    0, 81,235,78," Cutoff_voltage ");
  273.         drawField(    0,162,240,78," Proportional Kp ");       
  274.     FIRST = false;
  275.   }
  276.   setBigNumFont();
  277.   int wv=font.strWidth("8888");                                                                         //lunghezza stringa      88.8
  278.   int wv2=font.strWidth("8.88");  
  279.   font.setFont(&rre_term_10x16);
  280.   font.setScale(1,2);
  281.   font.setColor(v1Col); font.printStr(134,36,"mA");
  282.   font.setColor(v1Col); font.printStr(141,115,"V");
  283.   font.setColor(v1Col); font.printStr(141,194,"%");
  284.  
  285.   //visualizza i dati
  286.   showVal(target_mA, 48,24, 4,0, v1Col);
  287.   showVal(cutoff_voltage, 48,106, 4,2, v1Col);
  288.   showVal(kP, 48,187, 4,1, v1Col);
  289.  
  290.   //leggi pulsante BT1
  291.   if (BT1.pressed()) {
  292.     //imposta target_mA
  293.     stato = 1;  
  294.  
  295.     FIRST = true;
  296.   }
  297.  
  298.   //leggi pulsante BT2
  299.   if (BT2.pressed()) {
  300.     //ritorna a displaySetup  stato 10
  301.     stato = 10;  
  302.     FIRST = true;
  303.   }
  304.  
  305. }      
  306.  
  307. void showVal(float v, int x, int y, int w,  int p, uint16_t col)
  308. {
  309.   setBigNumFont();
  310.   font.setColor(col,BLACK);
  311.   char txt[10];
  312.   dtostrf(v,w,p,txt);
  313.   font.printStr(x,y,txt);
  314. }
  315.  
  316.  
  317. void loop()
  318. {
  319.   switch(stato){
  320.         case 10:
  321.           RUN_SETUP();   
  322.           break;
  323.         case 0:
  324.           displaySetup();        
  325.           break;  
  326.         case 1:
  327.           setCurrent();
  328.           break;
  329.         case 2:
  330.           setVoltage();
  331.           break;
  332.         case 3:
  333.           setKP();
  334.           break;
  335.         case 20:
  336.           displayRun();
  337.           break;
  338.         case 30:
  339.           Messaggio();
  340.           break;
  341.         case 40:
  342.           result();
  343.           break;
  344.   }
  345.  
  346. }
  347.  
  348.  
  349. void setCurrent(){
  350.   if (FIRST) {
  351.     v1 = target_mA;
  352.         showVal(v1, 48,24, 4,0, v4Col);
  353.     //formatCifre( target_mA, 1);
  354.     FIRST = false;     
  355.   }
  356.  
  357.  
  358.   delay(1000);
  359.   while (BT1.read()) {       //leggi potenziometro
  360.         a1 = map(analogRead(potPin), 0, 1023, 0, 1500);
  361.         v1 = a1;       
  362.         showVal(v1, 48,24, 4,0, v4Col);
  363.         delay(200);
  364.   }
  365.  
  366.  
  367.   target_mA = v1;                 //salva valore target_mA
  368.   EEPROM.put(0, target_mA);                             //scrivi target_mA
  369.   showVal(v1, 48,24, 4,0, v1Col);
  370.   stato = 2;
  371.   FIRST = true;
  372. }      
  373.  
  374.  
  375. void setVoltage(){
  376.   if (FIRST) {
  377.     v2 = cutoff_voltage;
  378.         showVal(v2, 48,106, 4,2, v4Col);
  379.     //formatCifre( target_mA, 1);
  380.     FIRST = false;     
  381.   }
  382.  
  383.  
  384.   delay(1000);
  385.   while (BT1.read()) {       //leggi potenziometro
  386.         a2 = map(analogRead(potPin), 0, 1023, 0, 450)
  387.         b2 = float(a2);
  388.         v2 = b2/100;   
  389.         showVal(v2, 48,106, 4,2, v4Col);
  390.         delay(200);
  391.   }
  392.  
  393.  
  394.   cutoff_voltage = v2;              //salva valore target_mA
  395.   EEPROM.put(10, cutoff_voltage);               //scrivi cutoff_voltage
  396.   showVal(v2, 48,106, 4,2, v1Col);
  397.   stato = 3;
  398.   FIRST = true;
  399. }      
  400.  
  401.  
  402. void setKP(){
  403.   if (FIRST) {
  404.     v3 = kP;
  405.         showVal(v3, 48,187, 4,1, v4Col);  //formatCifre( target_mA, 1);
  406.    
  407.     FIRST = false;     
  408.   }
  409.  
  410.  
  411.   delay(2000);
  412.   while (BT1.read()) {    //leggi potenziometro
  413.         a3 = map(analogRead(potPin), 0, 1023, 0, 800);
  414.         b3 = float(a3);        
  415.         v3 = b3/10;    
  416.         showVal(v3, 48,187, 4,1, v4Col);
  417.         delay(200);
  418.   }
  419.  
  420.  
  421.   kP = v3;              //salva valore target_mA
  422.   EEPROM.put(20, kP);           //scrivi cutoff_voltage
  423.   showVal(v3, 48,187, 4,1, v1Col);
  424.   stato = 10;
  425.   FIRST = true;
  426. }
  427.  
  428.  
  429. void displayRun(){
  430.   if (FIRST) {
  431.     lcd.fillScreen(BLACK);
  432.         drawField(0, 0, 115, 78, " Voltage ");
  433.         drawField(120, 0, 115, 78, " Current ");
  434.         drawField(0, 81, 115, 78,"  PWM  ");
  435.         drawField(120, 81, 115, 78, "  PID  ");
  436.         drawField(0, 162, 115, 78," Capacity ");
  437.         drawField(120, 162, 115, 78," Time ");
  438.  
  439.         //--------------------------------------
  440.        
  441.     setupFastPWM();                                             // imposta registri DAC
  442.     analogWriteFast(pwm_pin, pwm);  // and set to zero PWM out (off)
  443.        
  444.         //* Con la risoluzione pwm più alta, ci vuole più tempo per passare a un'impostazione di corrente elevata
  445.     //* abbreviare il tempo di accelerazione
  446.         if (target_mA > 99){
  447.                 kP = 50;  // the maximum
  448.     }
  449.        
  450.         // bleep once to signal the start of the test
  451.     digitalWrite(end_sounder, HIGH);
  452.     delay(300);
  453.         digitalWrite(end_sounder, LOW);
  454.        
  455.         startMillisec = millis();   // get millisec timestamp for the starting point
  456.         //---------------------------------------
  457.        
  458.         FIRST = false;
  459.   }
  460.   setBigNumFont();  
  461.   font.setFont(&rre_term_10x16);
  462.   font.setScale(1,2);
  463.   font.setColor(v1Col); font.printStr(95, 36, "V");
  464.   font.setColor(v1Col); font.printStr(210, 36, "mA");
  465.   font.setColor(v1Col); font.printStr(80, 195, "mAh");
  466.  
  467.   // inizia test
  468.   // get the data from the INA219
  469.   readINA219();
  470.   //Serial.println("ciclo iniziato");
  471.    /*
  472.     * Questa è una routine "PID" molto semplificata per pilotare il MOSFET con un
  473.     * valore PWM, basato sulla differenza tra il valore target_mA impostato e il valore actual_mA misurato
  474.     * valore corrente.
  475.     */
  476.   pid_error = abs(target_mA - current_mA);
  477.   pid_error = (pid_error / target_mA) * 100;
  478.  
  479.   if ((!end_of_test) && (pid_error > tolerance)) {    // If out of tolerance (deadband to stop 'hunting')
  480.     pid_error = pid_error - offset;                   // Bias (long term error compensation)
  481.     pid_error = (pid_error * kP) / 100;               // 'proportional' factor reduces impact of 'raw' error.
  482.     pid_error = constrain(pid_error, 0.0, 50.0);      // limit to max incremental steps
  483.  
  484.     if (current_mA > target_mA){
  485.       pid_error = - pid_error;                        // Determine if it's a pos or neg error.
  486.     }  
  487.     pwm =  abs(pwm + round(pid_error));
  488.     pwm = constrain(pwm, 0, 8192-1);                  // constrain to 13-bit max
  489.   }
  490.  
  491.  
  492. //----------------------- Rilevamento Errori  o  Fine Test---------------------------------------------
  493.  
  494.         // check if the cell voltage has reached the set cut off voltage
  495.         // and abort the cycle if it has.
  496.         // end_of_test is used to stop further processing.
  497.  
  498.   if ((!end_of_test) && (loadvoltage < cutoff_voltage)) {
  499.     delay(3000);    // tenere conto di un breve calo quando iniziamo il processo di scaricamento
  500.     readINA219();   // read the values again
  501.     if (loadvoltage < cutoff_voltage) {
  502.       analogWriteFast(pwm_pin, 0);  // turn PWM off.                                
  503.       cutoff_voltage_reached = true;
  504.       target_mA = 0;
  505.       error_code = "  END TEST";  // display this on line 5 of theLCD
  506.                          
  507.       end_of_test = true;
  508.     }
  509.   }
  510.  
  511.         // Check if the measured current has overshot the target value
  512.         // by more than 100%. If so, we have a problem so abort.
  513.   if ((!end_of_test) && (current_mA > (target_mA * 2.0))) {
  514.      analogWriteFast(pwm_pin, 0);  // turn PWM off.
  515.      
  516.          target_mA = 0;
  517.      error_code = "ERR - Hi mA";  // display this on line 5 of the lcd
  518.      end_of_test = true;
  519.   }  
  520.  
  521.   // If the cycle takes too long, terminate it
  522.   if ((!end_of_test) && (tMins > time_limit)) {
  523.     analogWriteFast(pwm_pin, 0);  // turn PWM off.
  524.     timed_out = true;
  525.     target_mA = 0;
  526.     error_code = "ERR-Time Out"; // display this on line 5 of the lcd
  527.     end_of_test = true;  
  528.   }
  529.  
  530.   //* Se tutto è OK e non ci sono condizioni di errore,
  531.   //* uscire dal nuovo valore PWM per regolare la corrente.
  532.   if ((cancel == 0) && (!timed_out) && (!high_current) && (!cutoff_voltage_reached) && (!end_of_test)) {
  533.     analogWriteFast(pwm_pin, pwm);  // Adjust the 13-bit PWM to the calculated error correction value.
  534.   }
  535.   else {  // if the process is terminated, sound the beeper, but only once
  536.     if (!sounded) {
  537.       sounded = true;
  538.       for (int i = 0; i< 3; i++) {
  539.         digitalWrite(end_sounder, HIGH);
  540.         delay(300);
  541.         digitalWrite(end_sounder, LOW);
  542.         delay(100);
  543.       }
  544.     }          
  545.         //entra in Messaggio  stato 30
  546.         stato = 30;
  547.         FIRST = true;
  548.   }
  549.  
  550. //-----------------------------------------------------------------------------------------------------
  551.  
  552.  
  553.   // * Calcola il tempo trascorso e i mAh utilizzati ciascuno
  554.   // * secondo giro del giro.
  555.    
  556.   getTime();
  557.   // calculate the mAh capacity so far of the cell
  558.   if (millis() > millisCalc_mAh + 1000) {
  559.     float this_hours = (millis() - startMillisec) / (1000.0 * 3600.0);
  560.     mAh_soFar = mAh_soFar + ((this_hours - last_hours) * current_mA);
  561.     last_hours = this_hours;  
  562.     millisCalc_mAh = millis();
  563.   }
  564.  
  565.   // finally, update the lcd with the fresh values
  566.   write_to_lcd();
  567.  
  568.   //leggi pulsante BT2  
  569.   if (BT2.pressed()) {
  570.         analogWriteFast(pwm_pin, 0);  // turn PWM off.
  571.     target_mA = 0;
  572.         cancel = 1;
  573.         end_of_test = true;  //false;
  574.        
  575.         //entra in Messaggio  stato 30
  576.         stato = 30;
  577.     FIRST = true;
  578.   }      
  579. }                                       // end of displayRun
  580.  
  581.  
  582.  /*
  583.   * Ottieni corrente e tensione dalla scheda breakout Adafruit INA219.
  584.   *
  585.   * L'INA219 non è stato originariamente progettato per essere utilizzato in questo tipo di applicazione.
  586.   * Doveva aiutare a calcolare e visualizzare la capacità della batteria per i laptop,
  587.   * tablet e telefoni. In queste applicazioni, la precisione non è realmente richiesta.
  588.   *
  589.   * In questa applicazione, la lettura corrente INA219, che all'inizio è molto nervosa,
  590.   * viene utilizzato per pilotare un MOSFET nella regione lineare. Thge MOSFET viene utilizzato come resistenza variabile.
  591.   * Un cambiamento di tensione molto piccolo (singolo mVolt) applicato al Gate si tradurrà in un cambiamento abbastanza grande
  592.   * modifica corrente. Questo è il motivo per cui ho utilizzato un PWM a 13 bit, per ottenere una risoluzione migliore.
  593.   * Le letture INA219 devono essere mediate un numero di volte per ottenere valori ragionevolmente stabili.
  594.   *
  595.   */
  596. void readINA219() {   // Obtain the INA219 readings.
  597.   float R = 0.09;     //modifica questo valore per compensare le perdite
  598.                       //di resistenza del circuito.
  599.   float temp_mA = 0.0;
  600.   float temp_V = 0.0;
  601.   float temp_shunt = 0.0;
  602.   shuntvoltage = 0;
  603.   busvoltage = 0;
  604.   current_mA = 0;
  605.  
  606.   for (int i = 0; i< 10; i++) {               // attempt to pre-filter the readings
  607.     temp_shunt = ina219.getShuntVoltage_mV(); // Voltage accross the shunt in mV.
  608.     delayMicroseconds(600);
  609.     shuntvoltage += temp_shunt; // Sum results
  610.   }
  611.   shuntvoltage = shuntvoltage / 10;
  612.      
  613.   for (int i = 0; i< 10; i++) {          // attempt to pre-filter the readings
  614.     temp_V = ina219.getBusVoltage_V();   // Voltage from INA219 minus to gnd in V
  615.     delayMicroseconds(600);
  616.     busvoltage += temp_V; // Sum results
  617.   }
  618.   busvoltage = busvoltage / 10;
  619.  
  620.   // the readings for the current are very jittery
  621.   for (int i = 0; i< 20; i++) {         // attempt to pre-filter the readings
  622.     temp_mA = ina219.getCurrent_mA();   // Current through the shunt in mA
  623.     delayMicroseconds(600);
  624.     current_mA += temp_mA; // Sum results  
  625.   }
  626.   current_mA = current_mA / 20;
  627.  
  628.   vR = R * current_mA / 1000;                               // Circuit/wire resistance factor
  629.   loadvoltage = busvoltage  + (shuntvoltage/1000) + vR;     // Total cell voltage
  630. }
  631.  
  632.  
  633.  /*
  634.   * Scrivere i valori ottenuti sullo schermo LCD
  635.   *
  636.   * Il modo più semplice è semplicemente cancellare lo schermo e costruirlo prima
  637.   * inviandolo di nuovo.
  638.   *
  639.   * Il testo per il display LCD viene prima inserito in un buffer prima di essere trasferito
  640.   * lo schermo invocando la funzione display().
  641.   *
  642.   * Per rendere più piacevole la visualizzazione dei numeri in varie dimensioni, ho provveduto a
  643.   * posizionare i numeri giustificati a destra. Questa è l'unica "complessità" in questo codice.
  644.   *
  645.   */
  646. void write_to_lcd() {
  647.  
  648.   //visualizza i dati
  649.   showVal(loadvoltage, 10, 24, 4, 2, v5Col);
  650.   showVal(current_mA, 130, 24, 4, 0, v5Col);
  651.   showVal(pwm, 10, 106, 4, 0, v2Col);
  652.   showVal(pid_error, 130, 106, 4,1, v2Col);
  653.   showVal(mAh_soFar, 10, 187, 4, 0, v4Col);
  654.  
  655.   //converti valori tempi in stringa
  656.   sprintf(str_h, "%02d", hours);
  657.   sprintf(str_m, "%02d", mins);
  658.   String string_h = str_h;
  659.   String string_m = str_m;
  660.   String s = string_h + ":" + string_m;         //stringa composta  hh:mm
  661.  
  662.  
  663.   int buffer_len = 6;
  664.   char buffer[buffer_len];
  665.  
  666.   s.toCharArray(buffer, buffer_len);
  667.  
  668.   font.printStr(130, 187, buffer);                      //visualizza tempo trascorso
  669.  
  670. }
  671.  
  672.  
  673. /*
  674.  * Routine generica per calcolare ore, minuti e secondi tra due valori millis().
  675.  */
  676. void getTime() {
  677.      
  678.  long day = 86400000; // 86400000 milliseconds in a day
  679.  long hour = 3600000; // 3600000 milliseconds in an hour
  680.  long minute = 60000; // 60000 milliseconds in a minute
  681.  long second =  1000; // 1000 milliseconds in a second
  682.  
  683.      
  684.  unsigned long timeNow =  millis() - startMillisec;
  685.  tMins = timeNow / minute;
  686.  
  687.  days = timeNow / day ;                              
  688.  hours = (timeNow % day) / hour;                      
  689.  mins = ((timeNow % day) % hour) / minute ;        
  690.  secs = (((timeNow % day) % hour) % minute) / second;
  691. }
  692.  
  693.  
  694. void Messaggio(){
  695.   if (FIRST) {
  696.     lcd.fillScreen(BLACK);
  697.         drawField(    0, 81,235,88," Message");
  698.         setBigNumFont();
  699.         font.setFont(&rre_term_10x16);
  700.         font.setScale(2);
  701.         font.setColor(v2Col);
  702.        
  703.         //converti stringa in char
  704.         if (cancel == 0) {
  705.                 String m = error_code;          //stringa messaggio errore
  706.                 int buffer1_len = 13;
  707.                 char buffer1[buffer1_len];
  708.                 m.toCharArray(buffer1, buffer1_len);   
  709.                 font.printStr(10, 115, buffer1);
  710.         }
  711.         else {
  712.                 font.printStr(10, 115, "  CANCELLED");         
  713.         }              
  714.         FIRST = false;
  715.   }
  716.   //leggi pulsante BT2
  717.   if (BT2.pressed()) {
  718.     //entra in result  stato 40
  719.     cancel = 0;
  720.         stato = 40;  
  721.     FIRST = true;
  722.   }
  723. }
  724.  
  725.  
  726. void result(){
  727.   if (FIRST) {
  728.     lcd.fillScreen(BLACK);
  729.         drawField(0, 0, 115, 78, " Voltage ");
  730.         drawField(120, 0, 115, 78, " Current ");
  731.         drawField(0, 81, 115, 78,"  PWM  ");
  732.         drawField(120, 81, 115, 78, "  PID  ");
  733.         drawField(0, 162, 115, 78," Capacity ");
  734.         drawField(120, 162, 115, 78," Time ");
  735.  
  736.         setBigNumFont();  
  737.         font.setFont(&rre_term_10x16);
  738.         font.setScale(1,2);
  739.         font.setColor(v1Col); font.printStr(95, 36, "V");
  740.         font.setColor(v1Col); font.printStr(210, 36, "mA");
  741.         font.setColor(v1Col); font.printStr(80, 195, "mAh");
  742.        
  743.         write_to_lcd();
  744.         FIRST = false;
  745.   }
  746.   //leggi pulsante BT2
  747.   if (BT2.pressed()) {
  748.     //entra in run/setup  stato 10
  749.     stato = 10;  
  750.     FIRST = true;
  751.   }            
  752. }
(#) antikzsolt válasza mraulajos hozzászólására (») Aug 4, 2024
Pont ezért van nekem kikapcsolva az online vásárlás. Igaz macera hogy mindig visszakapcsolgassam de havonta az a 2 alkalom be és kikapcsolás nem megöltető. De ha ennek ellenére is valahogy megoldják hogy lopjanak vásárlás segítségével akkor ott már a bank a bűnös. Amúgy volt rá már precedens hogy próbáltak vásárolni vele csak nem sikerült. A próba még ment (ezer valahány ft)Mert a napi limitet már aznap elértem. Kártya csere, feljelentés megvolt ismeretlen tettes ellen. 2-3 hónap múlva ügy lezárva nincs gyanúsított. Pedig a bolt tuti be van kamerázva. Csak hogy a fenébe jutottak hozzá a kártya adataimhoz? A kártyán le van ragasztva a számok, számlák kifizetésén kívül sosincs elő véve. Pénzt leveszem vagy vásárlás esetén azzal fizetek. A számlán egyéb esetben mindig csak annyi marad hogy a havi kv/csoki pénz meglegyen rajta.
A hozzászólás módosítva: Aug 4, 2024
(#) tunerman válasza tunerman hozzászólására (») Aug 2, 2024
A mai napon is haladtam a projektemmel, a hálózati transzformátor bekötése volt először soron.
Majd a nagyáramú JAN 3913 gold diode négyes következettt, az ezüstszalagra való ráforrasztáshoz kettő pákát kellett beüzemelnem
Majd a tápegységek vezetékezése következett, fájt a szívem mikor méretre kellett vágnom a Tango fojtók hosszú kivezetéseit .
Jövő héten az Audio note 850 SPe kábel feldarabolása következik, remélem a megvásárolt kábel hossza kifogja adni amit kell.
TJ.
(#) tunerman válasza tunerman hozzászólására (») Aug 1, 2024
Helyére került a Münchhausen drive input 2SK79 V-FET-es egysége, ez valójában az erősìtő első felét tartalmazza.
A kettő bejővő és kettő elmenő vezeték az Audio note Kondo KSL SPz kábel kibontott belső ereiből készült. Az elmenő vezetékek egymás melletti futása nem okozhat semmilyen gondot, mivel bennük azonos fázisú jelek haladnak ...ez a Münchhausen drive működésének lényegi eleme
TJ.
(#) vision61 válasza dB_Thunder hozzászólására (») Júl 24, 2024
Idézet:
„Yazoo. Do not go Hatalmas!”

Bizony az, most nosztalgiából elővettem a 200 Ft-ért (rajta van az árcédula) vett Upstairs At Eric's lemezemet, ezt hallgatom.
(#) dB_Thunder válasza Massawa hozzászólására (») Júl 24, 2024
Yazoo. Do not go Hatalmas!

Imádom a szinti pop-ot, az italiano discót, a 90'-es évek "technóját" a hardcore-t, a jumpstyle-t, a trance-t! És ha ezeket épp "unom" jöhetnek a nagyzenekaros filmzenék, az "igényesebb" rock, mint a Queen, Edda, Bikini, Manowar...
Nem törekedek 0,0000x% THD-ra, a csöves hangzásra, a TÉMA legyen jó, magával ragadó!!

Úgy elmentem volna mostában volt Kebu koncertre!!
A hozzászólás módosítva: Júl 24, 2024
(#) Massawa válasza tothbela hozzászólására (») Júl 24, 2024
Hát mégha mindig tudnánk hogyan is keletkezett a hang ( itt most elsösorban modern rock stb zenéröl van szo).
A minap az egyik szintetizátor guru probálta utánozni a 80-s évek egyik hires dalának a hangzását. Nem tudjuk biztosan, hogy valamikor a yazoo ezt hogyan csinálta, de ma is egy sereg szinti meg nehány trükk kellett hozzá, hogy megközelitsd az eredeti hangot, ráadásul olyasmi is, ami nem tipikus semilyen hangszerre, söt a vájtfülüeket lehet, hogy egyenesen infarktusba üldözné, amikor a komplex hangzásban kettö tényezö készakarva hamis..

Yazoo. Do not go

Ekkoriban mi is ugy nyujtottuk meg a cintányérok hangját, hogy a pult gate funkcioját kihasználva szürt zajt adtunk hanghoz stb.
(#) Massawa válasza bbb hozzászólására (») Júl 23, 2024
Hogy engedhet meg magának ilyesmit bármelyik komolyabb cég a világon, amikor még egy mezei APPot is gyakran hetekig engedélyeznek, erre az egyik kritikus beszállitojuk ezt kikerüli.
Ki ilyenkor a felelös?
Kit lehet ilyenkor perelni, mert az valoszinü nem fog elmaradni, mert sok 100000 ember szenvedett kárt közel 5000 légitársaság, további néhány ezer bank, vasut meg hasonlo méretü vállalat ( és ki tudja meg ki más mert szerintem azt be sem merik vallani.
És nagyon valoszinü, hogy nem a helyi rendszergazdákon akarják majd elverni a port.
(#) bbb válasza Massawa hozzászólására (») Júl 23, 2024
Amiről ugattam, kiderült, hogy a crowdstrike egy az egyben kikerüli a belső szabályzókat:
Idézet:
„CS Falcon has a way to control the staging of updates across your environment. businesses who don't want to go out of business have a N-1 or greater staging policy and only test systems get the latest updates immediately. My work for example has a test group at N staging, a small group of noncritical systems at N-1, and the rest of our computers at N-2.

This broken update IGNORED our staging policies and went to ALL machine at the same time. CS informed us after our business was brought down that this is by design and some updates bypass policies.

So in the end, CS caused untold millions of dollars in damages not just because they pushed a bad update, but because they pushed an update that ignored their customers' staging policies which would have prevented this type of widespread damage.”

Ezt a hozzászólást az alábbi videó alatt találod meg: CrowdStrike IT Outage Explained by a Windows Developer
Ha figyelmesen végighallgatod, akkor elmondja, hogy miért nem kell végigmennie a WHQL procedúrán a teljes kernel drivernek. Itt már csak az a durva, hogy hibásan kikerülhetett ellenőrzés nélkül az a frissítésszeletke, ami az egészet okozta.
(#) tunerman válasza mek-elek hozzászólására (») Júl 16, 2024
1. Le kellene írni, hogy mi tűnt fel igazán
2. Ez a panel egy Audio note EL34 PP mostanában gyártott erősitőé (Overture)
3. Az eredeti Kondo Ongaku 211 SE egy több mint 30 évvel ezelőtt forgalomba hozott model
4. Abban az évtzedekkel ezelőtti eredeti Ongakuban volt beépítve a TKD 2P65CS attenuator
5. Ebben az Overture erősítőben pedig egy ALPS HQPro RK50 tipusú potenciméter van

Az egyik attenuator, a másik egy potenciométer.
TJ.
(#) tunerman válasza mek-elek hozzászólására (») Júl 15, 2024
Idézet:
„Ahogy néztem 90 táján árulják.”


Ezzel a mondattal nem tudok mit kezdeni, pontosítást kérek.
Ezt a TKD 2P65CS tipust több évtizeddel ezelőtt forgalmazták, igencsak ritkán van fenn a neten és megkérik akkor az árát. Én egy komplett készüléket vettem meg Japánból, amiben ez az attenuator volt beszerelve...így jutottam csak hozzá.
Amúgy például az Audio note/Kondo álltal gyártott Ongaku erősítőjében különben ilyen bemeneti szabályzó van.
TJ.
(#) Rober_4 válasza kapu48 hozzászólására (») Júl 13, 2024
Köszi a választ!
Sajnos nem kaptam 8-as buszlehúzó ellenállást, de beforrasztottam 8db 4,7kOhmos ellenállást és jó lett. Igen le kellett húzni a testre. Érdekes, hogy chatGPT-nek is én magyaráztam el mi a probléma, mire ugyanazt mondta, és használhatatlan kódokat dobott. Most ezzel a kóddal szépen küldi a MIDI-t a kis Casio:
  1. bool note[128];
  2. byte trans = 48;
  3. String notENAME[14] = {"C", "CISZ", "D", "DISZ", "E", "F", "FISZ", "G", "GISZ", "A", "B", "H"};
  4. void setup() {
  5.   for (int i = 0; i < 128; i++)
  6.   {
  7.     note[i] = false;
  8.   }
  9.   // Set MIDI baud rate:
  10.   //Serial.begin(38400);
  11.   Serial.begin(31250);
  12.  
  13.  
  14.   pinMode(10, OUTPUT);
  15.   pinMode(11, OUTPUT);
  16.   pinMode(12, OUTPUT);
  17.   pinMode(13, OUTPUT);
  18.  
  19. //  Serial.print("end output\n");
  20.   pinMode(2, INPUT);
  21.   pinMode(3, INPUT);
  22.   pinMode(4, INPUT);
  23.   pinMode(5, INPUT);
  24.   pinMode(6, INPUT);
  25.   pinMode(7, INPUT);
  26.   pinMode(8, INPUT);
  27.   pinMode(9, INPUT);
  28.  
  29.  // Serial.println("end input");
  30. }
  31.  
  32. void loop() {
  33.  
  34.   //Serial.println("scan\n");
  35.   for (byte i = 10; i <= 13 ; i++)
  36.   {
  37.     digitalWrite(10, LOW);
  38.     digitalWrite(11, LOW);
  39.     digitalWrite(12, LOW);
  40.     digitalWrite(13, LOW);
  41.     digitalWrite(i, HIGH);
  42.  
  43.     for (byte j = 2; j <= 9 ; j++)
  44.     {
  45.       byte a = ((i - 10) * 8) + (j - 2);
  46.      // Serial.println(String(i)+" "+String(j)+" "+String(a));
  47.       if (digitalRead(j))
  48.       {
  49.         if (!note[trans + a]) {
  50.          // Serial.print(a);        
  51.          // Serial.print(notENAME[a%12] + String(a / 12) + " ON");
  52.           noteOn(0x90, trans + a, 127);
  53.           note[trans + a] = true;
  54.         }
  55.       } else {
  56.  
  57.         if (note[trans + a]) {
  58.           //Serial.print(a);
  59.           //Serial.print(notENAME[a%12] + String(a / 12) + " OFF");
  60.           noteOn(0x80, trans + a, 127);
  61.           note[trans + a ] = false;
  62.         }
  63.       }
  64.     }
  65.   }
  66. }
  67.  
  68. void noteOn(int cmd, int pitch, int velocity) {
  69.   Serial.write(cmd);
  70.   Serial.write(pitch);
  71.   Serial.write(velocity);
  72. }
A hozzászólás módosítva: Júl 13, 2024
(#) Csanadradio válasza uniman hozzászólására (») Júl 4, 2024
Bekötési rajzot nem adtak, a kamera részéhez igen, de multimediahoz nem volt. Még múlt héten felvettem a kapcsolatot az Xtronssal, mert elvileg ennek a rádiónak működnie kellene ebben a kocsiban. Nekik voltak a videók (csak át kell állítani a fogaskeréknél a minőséget 720p-re, mert YouTube 360-ba hozza alapon), amiket kértek kipróbáltam, arra jutottak, hogy rakjak fel egy tetőantennát.
Egyébként a multimedia kicsomagolásakor már az az érzésem volt, mintha nem új lenne, plusz hiányzott ugye a bekötési rajz is. Az is érdekes volt, hogy az eredeti rádió vette az adást táp nélkül a multimedia pedig egyáltalán nem (fordítva vártam volna egy modernebb eszköztől). Amint odakerülök, adni fogok neki 12V-ot.(gyanítom, hogy ez segíteni is fog). Most visszaolvastam az Xtrons levelezést és amikor azt írták, úgy látja a mérnökük, mintha 2 antennája lenne az autónak és ellenőrizzem és próbáljam ki mindkettővel, akkor írtam ide be a fórumra, hogy inkább megkérdezek jártasabbakat.

I have check the video with our engineer. They confirmed that, it may be the original car radio antenna is not compatible with the radio.

Could you please doublecheck if your car has other radio antenna or not? It seems that, your oiginal car has 2 radio antennas.

If both radio antenna do not work, you will need to add on extra radio antenna like below photo.


A menü beállításokat is próbáltam.
(#) bbb válasza Massawa hozzászólására (») Jún 29, 2024
Ezt a "vitát" már kb. egy éve is lejátszottuk... Akkor is Massawa elmondta, hogy évek óta kint vannak neki nyomtatott cuccai kültéren (ha jól emlékszem, valami dróttartó volt, amit akkor említett). A minap ennek örömére szembe jött velem ez a videó: 3D Prints - 7 Years outside
S ami az egész vitára végre pontot tehetne, az egyik hozzászóló kommentje:
Idézet:
„The company I work for makes PLA for outside use. It took some research, but our products can be used outside now for at least 15 years. In an industrial plant it still can be recycled into compost within a week or two. On the other hand we can make PLA with will degrade in nature within a year or two. So there are a lot of different qualities of PLA. The key factor is the P (which stands for poly). PLA with short chains of Lactic Acid will not be suitable for outside use. PLA with very long chains of PLA is so hard it is not suitable for 3d-printing (filament is hardly bendable), but quite durable for outside use.”
Magyarul PLA és PLA között is van különbség, minden attól függ mire gyártották. Amit bbatka használ és elporlad, az nem kültéri használatra készült, amit meg Massawa, az jól bírja a kültéri viszonyokat is. A videóban is látható olyan, amelyik egy év alatt elhajlott és simán eltörik, meg olyan is, ami tényleg hosszú évek óta kint van a napon és kutya baja.
(#) Kera_Will válasza norbiv8 hozzászólására (») Jún 13, 2024
Aha szoval nem artana 1 2 regiszter tartalmat is megnezni ...

Idézet:


LW Bands LW2 Frequency range may register by MW2_LOW_CHAN <10: 0> with M W2_CHAN_NUM <11: 0> Set
LW Bands LW2 Frequency range may register by MW2_LOW_CHAN <10: 0> with M W2_CHAN_NUM <11: 0> Set
LW Bands LW2 Frequency range may register by MW2_LOW_CHAN <10: 0> with M W2_CHAN_NUM <11: 0> Set
LW Bands LW2 Frequency range may register by MW2_LOW_CHAN <10: 0> with M W2_CHAN_NUM <11: 0> Set
LW Bands LW2 Frequency range may register by MW2_LOW_CHAN <10: 0> with M W2_CHAN_NUM <11: 0> Set
LW Bands LW2 Frequency range may register by MW2_LOW_CHAN <10: 0> with M W2_CHAN_NUM <11: 0> Set
LW Bands LW2 Frequency range may register by MW2_LOW_CHAN <10: 0> with M W2_CHAN_NUM <11: 0> Set
LW Bands LW2 Frequency range may register by MW2_LOW_CHAN <10: 0> with M W2_CHAN_NUM <11: 0> Set
up, at the same time LW2 Stepping through channels separate registers MW2_SPACE <1: 0> To set 1KHz , 9KHz or 10KHz .
up, at the same time LW2 Stepping through channels separate registers MW2_SPACE <1: 0> To set 1KHz , 9KHz or 10KHz .
up, at the same time LW2 Stepping through channels separate registers MW2_SPACE <1: 0> To set 1KHz , 9KHz or 10KHz .
up, at the same time LW2 Stepping through channels separate registers MW2_SPACE <1: 0> To set 1KHz , 9KHz or 10KHz .
up, at the same time LW2 Stepping through channels separate registers MW2_SPACE <1: 0> To set 1KHz , 9KHz or 10KHz .
up, at the same time LW2 Stepping through channels separate registers MW2_SPACE <1: 0> To set 1KHz , 9KHz or 10KHz .
up, at the same time LW2 Stepping through channels separate registers MW2_SPACE <1: 0> To set 1KHz , 9KHz or 10KHz .
up, at the same time LW2 Stepping through channels separate registers MW2_SPACE <1: 0> To set 1KHz , 9KHz or 10KHz .
up, at the same time LW2 Stepping through channels separate registers MW2_SPACE <1: 0> To set 1KHz , 9KHz or 10KHz .
up, at the same time LW2 Stepping through channels separate registers MW2_SPACE <1: 0> To set 1KHz , 9KHz or 10KHz .
up, at the same time LW2 Stepping through channels separate registers MW2_SPACE <1: 0> To set 1KHz , 9KHz or 10KHz .
note that when the MW2_LOW _CHAN <10: 0> with MW2_CHAN_NUM <11: 0> Configured to LW When the wavelength
note that when the MW2_LOW _CHAN <10: 0> with MW2_CHAN_NUM <11: 0> Configured to LW When the wavelength
note that when the MW2_LOW _CHAN <10: 0> with MW2_CHAN_NUM <11: 0> Configured to LW When the wavelength
note that when the MW2_LOW _CHAN <10: 0> with MW2_CHAN_NUM <11: 0> Configured to LW When the wavelength
note that when the MW2_LOW _CHAN <10: 0> with MW2_CHAN_NUM <11: 0> Configured to LW When the wavelength
note that when the MW2_LOW _CHAN <10: 0> with MW2_CHAN_NUM <11: 0> Configured to LW When the wavelength
note that when the MW2_LOW _CHAN <10: 0> with MW2_CHAN_NUM <11: 0> Configured to LW When the wavelength
range, must be avoided MW2
Band.range,

(#) KoblogPerGyok válasza Hp41C hozzászólására (») Jún 9, 2024
Én azt hittem, hogy timer2-nek nincs átfordulásra interrupt.

TMR2IF: Timer2 to PR2 Match Interrupt Flag bit
1 = Timer2 to PR2 match occurred (must be cleared in software)
0 = Timer2 to PR2 match has not occurred

A Timer2-nek van overflow interruptja? Nem csak egyezésre? Az adatlapot nem néztem olyan mélyen át, nekem úgy tűnt, hogy ennél a típusnál nincs a timer2-nek, a timer1-nek és a timer0-nak van. Ezért írtam hogy más, mint amivel találkoztam eddig. A PR2-vel való egyezésre ad interuptot, ha jól értem. (most lehet keverem, mert épp Arduino Timer1 ComparA, ComparB, és overflow interrupt van a fejemben)

A kódot felületesen olvasva egyik interrupt sincs engedélyezve, nincs erre függvény felhúzva, ebben az esetben lesz egyezés? Mikor?

Idézet:

2. #define HA_IDO ((HALV_IDO/255)*255-1) kérdése.
A műveleteket a fordítók a saját alapbeállításuk szerinti típussal végzik, mivel nincs megadva a változók típusa. A Hi-Tech C 32 bites egész típussal számol. Az osztás is egyész osztás. Így a sor egy kerekítési művelet.


Ezt nem tudtam, köszi!

De épp az ilyenek adják az okát, hogy ki legyen szervezve minden és tesztelve legyen rendesen minden, akár csak egy blink-kóddal is, amivel a timer-t ellenőrizni lehet könnyedén.

Megnézem milyen van nekem itthon, azt tudom, hogy 16F, de nem tuti, hogy 648-as.
A hozzászólás módosítva: Jún 9, 2024
(#) Hp41C válasza madzagos hozzászólására (») Máj 31, 2024
A 16F628A nem indul el. Van jel az RA7 (16) és a RA6 (15) lábon? A MCLR láb fel van húzva a tápra? Talán a 16F628 igényli a kondenzátorokat a quartz kivezetései és a föld kötött. Valamint egy 100nF kerámia kondenzátor is kellene a táp és a föld közé a pic közvetlen közelében elhelyezve.
Esetleg nem is sikerül felprogramozni rendesen.... Programozás közben az RB4 hova van kötve? Eléri-e a Vdd a 4.7V -ot programozás alatt?

If LVP is not being used for programming and the LVP
Configuration bit is set (i.e., LVP feature is enabled),
the PGM pin must not be allowed to toggle while
programming. The PGM pin is edge sensitive and if an
edge is detected during programming, it may cause the
PC to reset. If the LVP feature is disabled, the PGM pin
will have no effect on programming.

Egy törölt kontrolleren az LVP engedélyezett.
A hozzászólás módosítva: Máj 31, 2024
(#) Gombszem hozzászólása Máj 31, 2024
Lehet, hogy alaplapot fogok cserélni, de nem akarok minden telepítést, beállítást újra kezdeni, mert az rohadt nagy meló lenne. Gondoltam kipróbálom sysprep lehetőséget, ha már benne van a Win-ben. Hát persze, hogy nem működött, a log fájlban ezt írja:

Microsoft.BingSearch_1.0.91.0_x64__8wekyb3d8bbwe was installed for a user, but not provisioned for all users. This package will not function properly in the sysprep image.

Próba 2: egy üres SSD-re felraktam a legújabb Win10-et. Semmit sem telepítettem, váltóztattam benne. Futtattam a syprep-et. És láss csodát: ugyanaz a szövegű a hibaüzenet, csak most nem a Bing-el, hanem az Edge-el van baja.
A gépen egy User van, sosem volt több.

Használta már valaki erdményesen a sysprep-et? Mi lehet a gond?
Vagy van valami helyettestő visszafejtő megoldás?
(#) Doky586 válasza Kera_Will hozzászólására (») Máj 20, 2024
Az eredmény csak ez:
Access denied
You are not authorized to access this page.
A hozzászólás módosítva: Máj 20, 2024
(#) takacs4444 válasza bbalazs_ hozzászólására (») Máj 13, 2024
Szia! Beállítottam nagyobb értékre az I_MOT_MAX 20 Amper most. Ilyenkor egy motornál 20A a maximum vagy 10A? Valamivel jobb lett, de néha kikapcsol az elektronika ha elakad a fűnyíró. A programban a
Idézet:
„BAT_DEAD_ENABLE 1 // to poweroff or not to poweroff, 1 or 0”
funkció be van kapcsolva. Ha csak egy rövid pillanatra esik le a feszültség és ezért kapcsol ki, a poweroff funkció kikapcsolásával megoldódik. A következő próba e-bike vezérlőkkel hajtanám meg a motorokat. A kérdéses dolog, hogy tudnám a távirányítóval összehozni? A vevő kimenete pwm jel az e-bike vezérlő bemenet pedig analóg 0-5V. És még ott van az irányváltás (hátramenet).
(#) nemgyuri válasza Pali79 hozzászólására (») Ápr 25, 2024
Az én változatomhoz hasonlítottam a programodat, és két helyen látok eltérést: 70-83 és 100-113-as soroknál. 1 bittel el van csúszva!?
Az enyém ilyen:
  1. LCDINIT:
  2.         banksel PORTLCD ;bank0
  3.         bcf     PORTLCD,LCDRS   ;vezérlés mód          
  4.         call    vár_100
  5.         call    vár_100
  6.         call    vár_100
  7. ; lassú tápfelfutás miatt ajánlott:
  8.         movlw   b'00110000'     ;b'00110100'    ;FUNKCIO 8 bites interface
  9.         call    LCD_nible
  10.         movlw   b'00110000'     ;b'00110100'    ;FUNKCIO 8 bites interface
  11.         call    LCD_nible
  12.         movlw   b'00110000'     ;b'00110100'    ;FUNKCIO 8 bites interface
  13.         call    LCD_nible
  14.         call    vár_100
  15.        
  16.         movlw   b'00100000'     ;b'00100100'    ;FUNKCIO 4 bites interface
  17.         call    LCD_nible
  18.         call    vár_100u
  19. ;
  20.         movlw   b'00111000'     ;2 soros, norm 5x7 pixel
  21.         movwf   LCDVez
  22.         call    LCDVEZ
  23.         call    vár_100u
  24.         movlw   b'00001100'     ;kijelző be, kurzor aláhúzás ki, villogás ki
  25.         movwf   LCDVez
  26.         call    LCDVEZ
  27.         call    vár_100u
  28.         movlw   b'00000001'     ;kijelző törlés
  29.         movwf   LCDVez
  30.         call    LCDVEZ
  31.         call    vár_1
  32.         call    vár_1  
  33.         movlw   b'00000110'     ;Entry(karakterbeviteli) mód: kursor increment, kijelző eltolás ki
  34.         movwf   LCDVez
  35.         call    LCDVEZ
  36.         call    vár_100u
  37.         RETURN

Volt olyan 16x2-es LCD kijelzővel dolgom, ami nem akart működni olyan programmal ami más kijelzőkkel gond nélkül ment. Valamit módosítanom kellett - időzítések növelése? -és jó lett.
Következő: »»   4 / 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