Fórum témák

» Több friss téma
Fórum » AVR - Miértek hogyanok
 
Témaindító: pakibec, idő: Márc 11, 2006
Témakörök:
WinAVR / GCC alapszabályok:
1. Ha ISR-ben használsz globális változót, az legyen "volatile"
2. Soha ne érjen véget a main() függvény
3. UART/USART hibák 99,9% a rossz órajel miatt van
4. Kerüld el a -O0 optimalizációs beállítást minden áron
5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás
6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et
Bővebben: AVR-libc FAQ
Lapozás: OK   837 / 840
(#) Tambi válasza Hp41C hozzászólására (») Márc 13, 2024 /
 
Köszönöm szépen kedves Hp41C!

Ez volt az egyetlen variáció, amit nem próbáltam..., holnap folytatom.
Idebiggyesztem a "megfejtést", hátha mást is érdekel.

A "CS"-vel nem találkoztam egy leírásban sem, az milye neki?

Derűs estét; Tambi.
A hozzászólás módosítva: Márc 13, 2024
(#) lazsi válasza Tambi hozzászólására (») Márc 13, 2024 /
 
Chip Select?
(#) Tambi hozzászólása Márc 25, 2024 /
 
Ismét elakadtam.
Kipróbálva az AD9833-at messze nem olyan négyszögjelet kaptam, amilyet szerettem volna. Kb 500 kHz-ig elfogadható, de 1MHz felett már nagyon kezd csúcsosodni.

Megpróbáltam a legegyszerűbb ESP32-vel, de ezt eme programocskával nem tudum 173 kHz fölé vinni, bármit is írjak előosztónak vagy timerAlarm-nak, és még "ugrál" is (instabil) a jelfrekvencia.

https://deepbluembedded.com/esp32-timers-timer-interrupt-tutorial-a...p-true

  1. #define LED 21
  2.  
  3. hw_timer_t *Timer0_Cfg = NULL;
  4.  
  5. void IRAM_ATTR Timer0_ISR()
  6. {
  7.     digitalWrite(LED, !digitalRead(LED)); //a 21 lábon négyszögjelet generál
  8. }
  9. void setup()
  10. {
  11.     pinMode(LED, OUTPUT);
  12.     Timer0_Cfg = timerBegin(0, 2, true);                 //a 80MHz / 2 = 40MHz
  13.     timerAttachInterrupt(Timer0_Cfg, &Timer0_ISR, true);
  14.     timerAlarmWrite(Timer0_Cfg, 10, true);               // 40MHz / 10 = 4MHz helyett 173kHz a 21 lábon a négyszögjel
  15.     timerAlarmEnable(Timer0_Cfg);
  16. }
  17. void loop()
  18. {
  19.     // Do Nothing!
  20. }


Mit rontok el?

Köszönettel; Tambi.
A hozzászólás módosítva: Márc 25, 2024
(#) Travolta hozzászólása Márc 26, 2024 /
 
Sziasztok!
Remélem jó helyen teszem fel a kérdésem, ellenkező esetben kérném a moderátorokat a megfelelő topikba helyezéshez.
Építek egy áramkört, ami ATSAM4S2BA-AU processzort tartalmaz. Ebbe a processzorba kellene betöltenem egy .bin fájlt. A hozzáértők segítségét kérném, hogy mi módon tudom beletuszkolni a fájlt a processzorba. Valószínű, hogy több ilyen eszköz programozására nem szükségem, ezért a méregdrága programozók használatát mellőzném, ha megoldható, amennyiben még sem, abban az esetben keresek vállalkozó fórumtársat, akik beprogramozza nekem.
Segítségeteket előre is köszönöm!
(#) asch válasza Tambi hozzászólására (») Márc 26, 2024 /
 
Mit jelent pontosan az hogy
Idézet:
„1MHz felett már nagyon kezd csúcsosodni”
? Ha a jelforma nem szögletes, az analóg elektronikai jelenség lesz, mennél nagyobb a frekvencia annál nagyobb lesz az eltérés a pontos szögletes négyszögjeltől. Például egy tipikus jelenség a túllövés és utána néhány hullámnyi lecsengő rezgés a jelváltásoknál. "Overshoot and ringing" keresőszóra találsz ilyen rajzokat a neten, megvan a fizikai oka, hogy miért történik ez: a parazita indukciók és kapacitások miatt kialakul egy rezgőkör.
Idézet:
„a legegyszerűbb ESP32-vel, de ezt eme programocskával nem tudom 173 kHz fölé vinni”
: Az interruptba be és kilépés elviheti a csip összes idejét. STM32-t mértünk (más csip, de hasonló kategória) és pár mikroszekundum volt egy interrupt kiszolgálása, amiből hasonló érték jönne ki legnagyobb elérhető frekvenciára (egy jelalak T ideje alatt két ISR-t kell kiszolgálni egy ilyen programban). Tisztán ASM-ben programozva szerintem egy kicsit lehetne feljebb menni, de a jó megoldás a PWM használata ebben a tartományban.
(#) vargham válasza Travolta hozzászólására (») Márc 26, 2024 /
 
Idézet:
„Remélem jó helyen teszem fel a kérdésem”

Nem, ez nem AVR, hanem ARM mikrokontroller.
Ez jó hozzá.
(#) Travolta válasza vargham hozzászólására (») Márc 26, 2024 /
 
Köszönöm szépen!
Esetleg neked van ilyened vagy tudsz segíteni a felprogramozásában?
(#) vargham válasza Travolta hozzászólására (») Márc 26, 2024 /
 
Pont ilyenem nincs. Azért ajánlottam ezt, mert ez a legolcsóbb. De van más. Látom, a szomszéd kerületben laksz. Keress privát üzenetben!
(#) Tambi válasza asch hozzászólására (») Márc 27, 2024 /
 
Köszönöm szépen kedves ASCH, értem!

Az újabb kérdés:

Ennél kevés egyszerűbb program van, így azt gondolja a magamfajta egyszerű halandó, hogy ez a leggyorsabb, de csupán 2,6MHz-es, kb. 25% kitöltésű jelelt ad Arduino Nano-n:

1:

  1. void setup() {
  2.         DDRB = B00000010;
  3. }
  4. void loop()
  5. {
  6.         PORTB = B00000010;
  7.         PORTB = B00000000;
  8. }


Ez viszont 8MHz-val rezeg:
2:

  1. void setup() {
  2.   DDRB = B00000010;
  3.   TCCR1A = B01000011;
  4.   TCCR1B = B00011001;
  5. OCR1A = 0;
  6. }
  7. void loop() {
  8. }


Az utóbbi OCR1A = 7-el 1MHz-en (szinte) elfogadható jelet ad, de az 1. miért használ el 3-4szer annyi időt, mint a 2.?

Köszönettel; Tambi.
A hozzászólás módosítva: Márc 27, 2024
(#) lazsi válasza Tambi hozzászólására (») Márc 27, 2024 /
 
A képek alapján "tökélesen" működik...
Ahogyan ASCH kolléga írta: ez itt "analóg dolog"...
Ha megnézed, mindhárom képen azt lehet látni, hogy a fel- és lefutó él 35ns körüli (±3ns). Ennyit tud az áramkör, ennyi az időállandója. Ha négyszögjelet szeretnél látni, akkor minimum 3x tau, de inkább 5x tau kellene minden félperiódushoz...
Tehát a periódusidő legalább: 2 x 3..5 x 35ns = 210..350ns legyen. Vagyis maximum 3-4MHz esetén láthatsz "szinte elfogadható" jelet.


Az első képen, ha nem 25%, hanem 50% lenne a kitöltési tényező, akkor az is elfogadható négyszögjel lenne. (2.6MHz -> 378ns -> teljesül az 5x tau feltétel...)

Miért lesz 25%-os a kitöltési tényező?
Az 1. programrészletet elemezve:
- a 6. sorban beállítod a kimenetet magasba
- a 7. sorban beállítod a kimenetet alacsonyba
- ezután záródik a hurok és visszatér az elejére
- a magas és alacsonyba állítás között nagyjából 50ns telik el (gondolom a proci 20MHz-en működik...)
- bizonyára a másik irányú váltás is ugyanennyi időt vesz igénybe
- mindebből következik, hogy maga a hurok 378ns - 2 x 50ns = 278ns ideig tart

Mit lehet tenni?
Ha a portot nem magasba - alacsonyba állítod, hanem negálod minden egyes ciklusban, akkor bár alacsonyabb lesz a frekvencia, de szinte tökéletesen 50%-os lesz a kitöltési tényező - ha ez elsődleges szempont.

Mi a rossz hír (ezeken túl)?
Nyilván, ha mindezt egy program részeként szeretnéd használni, akkor a hurokból valahogyan ki is kell tudnia lépni... az pedig további utasítás (feltételvizsgálat), vagyis a hurok idejének további növekedését okozza.

Idézet:
„de az 1. miért használ el 3-4szer annyi időt, mint a 2.?”

Az 1. programod esetén a fentebb leírt lépések miatt lesz a periódusidő annyi, amennyit látsz (378ns).
A 2. programod esetében a kapcsolgatást hardverből intézi. Ekkor a periódusidő az processzor alap-órajelétől és az előosztó beállításától függ. Ráadásul mindeközben bármilyen program futhat, az nem befolyásolja a kimenetet.
Ha megszakításokat is használsz közben, akkor az 1. esetében egy beérkező megszakítás teljesen felboríthatja az időzítést, míg a 2. esetben abszolút semmi hatás nem lesz.

Remélem tudtam segíteni!
(#) majkimester válasza Tambi hozzászólására (») Márc 27, 2024 /
 
Próbáld meg 1:10-es állásban. A szkóp probe-ok 1:1-ben lényegesen kisebb sávszélességet tudnak.
(#) vargham válasza lazsi hozzászólására (») Márc 27, 2024 /
 
Annyit még hozzátennék, hogy a
  1. void loop()
  2. {
  3.         PORTB = B00000010;
  4.         PORTB = B00000000;
  5. }

nem ugyanaz, mint a
  1. void loop()
  2. {
  3.         while (true) {
  4.                 PORTB = B00000010;
  5.                 PORTB = B00000000;
  6.         }
  7. }

Az Arduino keretrendszer több mindent is csinál a loop két meghívása között.
Ahol pontos időzítésre van szükség, ott érdemes elfelejteni az Arduinot.
(#) Tambi válasza lazsi hozzászólására (») Márc 27, 2024 /
 
Köszönöm szépen kedves Barátaim, így már értem!

A probe 1:10 is segített "szépíteni" a jelet.

1,1MHz:

  1. void setup() {
  2.         DDRB = B00000010;
  3. }
  4.  
  5. void loop()
  6. {
  7.         PORTB ^= B00000010;
  8. }


Hogyan lehetne ezt megcsinálni:

PB1 ^= PB1;

Köszi!
A hozzászólás módosítva: Márc 27, 2024
(#) Tambi válasza Tambi hozzászólására (») Márc 27, 2024 /
 
RIGOL szerint FEL-LE 7nsec; ez lehet?
A hozzászólás módosítva: Márc 27, 2024
(#) lazsi válasza Tambi hozzászólására (») Márc 27, 2024 /
 
Idézet:
„Hogyan lehetne ezt megcsinálni:
PB1 ^= PB1;”

Mint mondtam, az sajnos több utasítás...
Én a következőképpen csinálnám:
in reg, PORTB
xor reg, B00000010
out PORTB, reg
Ez így 3 órajelciklus + a hurok ideje...
De legalább biztosan 50%-os kitöltési tényezőjű lesz. HA nem használsz megszakítást és a processzor csak ezt csinálja...
Konkrétan Arduino-t nem használtam, csak régebbi ATTiny-t és ATMega-t... Érdemes lehet átböngészni az Arduino utasítás-készletét, hátha kellemes meglepetés ér és van megfelelő utasítás...

A kép alapján lehet 7ns... A mérőfejen, ha van lehetőség, akkor érdemes a kompenzálást beállítani, hogy ne legyen túllövése
(#) asch válasza lazsi hozzászólására (») Márc 28, 2024 / 2
 
A leggyorsabb toggle az a PINA regiszter írása. (A legrégebbi AVR-ek nem mind tudták, de egy ideje mindegyik tudja, hogy az input regiszterbe ha 1-et írunk az toggle-nek számít! Nézzetek utána az adatlapban ha nem hiszitek!)
Ha periódikusan kell és semmi más dolgunk nincsen, akkor ez a leggyorsabb szoftveres PWM, aminek ráadásul pontosan 50% lesz a kitöltési tényezője - kvázi ASMben - két utasítás összesen. A PINA regiszter a legtöbb csipen elérhető az SBI utasítás számára, így tényleg nagyon gyors a toggle funkció elérése, még regiszterbe se kell betölteni az értéket.

  1. ujra:
  2.  sbi PINA, 4 // a 4-es indexű pin-t togglezzük
  3.  RJMP ujra


Ha C-ben a kódba ezt írjuk, akkor 99% hogy megtalálja fordító a fenti megfejtést:
  1. ujra:
  2. PINA|=0b00010000; // sbi-re fordul mert a C fordító felismeri a lehetőséget
  3. goto ujra;
(#) lazsi válasza asch hozzászólására (») Márc 28, 2024 /
 
Idézet:
„de egy ideje mindegyik tudja, hogy az input regiszterbe ha 1-et írunk az toggle-nek számít!”

Ez most nagyon hasznos infó volt a számomra!!!
Egészen pontosan így utólag megmagyaráz egy rejtélyes hibát, amit nem sikerült megtalálnom, amikor egy régebbi prociról áttértem egy újabb, elvileg kompatibilis procira, és valami nem jól működött a portkezelésnél.
Tanulság: El kell olvasni az adatlapot!!!
(#) Building12 hozzászólása Máj 21, 2024 /
 
Sziasztok!


C nyelven írt programba hol lehet átírni, hogy ne közös anódos 7-szegmenses kijelzőt használjon, ha nem közös katódosat?
Úgy tudom a közös anódosnál a vezérlőjel magas, a katódosnál alacsony.
AVR studio-ba a "h", vagy a "c" fájlban keressem a megoldást? Ahol a portok vannak definiálva, vagy a programon belül kell átírni?
(#) kalmi.kalmi válasza Building12 hozzászólására (») Máj 22, 2024 / 1
 
Végig kell nézned a programot és az érintett részeket átírni. Nem kis móka !
(#) wbt hozzászólása Júl 23, 2024 /
 
Sziasztok!
AVR-ből (M328) programból kiolvasható valahogy, hogy le van-e zárva a programmemória?
(#) Tambi hozzászólása Aug 3, 2024 /
 
Kedves Fórumtársak!

Potenciométer helyett forgó jeladót (encoder-t) szeretnék használni. Az lenne a szerencsés, ha a két "végállása" 1 és 100 lenne.
Pl.:
  1. if(pulse < 1){
  2. pulse = 1;
  3. }
  4. else {
  5. pulse = pulse;
  6. }
  7.  
  8. if(pulse > 100){
  9. pulse = 100;
  10. }
  11. else{
  12. pulse = pulse;
  13. }


Ez bizony meglehetősen "elegánstalan" időrabló megoldás...

Hogyan lehetne ezt rövidebben egy-kétsorban megoldani?

Köszönettel; Tambi
A hozzászólás módosítva: Aug 3, 2024
(#) majkimester válasza Tambi hozzászólására (») Aug 3, 2024 /
 
A te megoldásod leegyszerűsítve:

  1. if(pulse < 1) {
  2.     pulse = 1;
  3. }
  4. else if (pulse > 100) {
  5.     pulse = 100;
  6. }


Ha van min és max maco (arduino környezetben pl.) vagy MIN és MAX macro akkor így:

  1. pulse = min(pulse, 100);
  2. pulse = max(pulse, 1);


Egy sorban, de kevésbé olvashatóan:

  1. pulse = min(max(pulse, 1), 100);


esetleg kérdőjel operatátorral:

  1. pulse = pulse < 100 ? pulse : 100;
  2. pulse = pulse > 1 ? pulse : 1:


Ezt is lehetne egy sorban, de azt inkább ne, mert az tényleg nem olvasható.
(#) Tambi válasza majkimester hozzászólására (») Aug 4, 2024 /
 
Köszönöm kedves Majki!

Az IDE kódellenőrző min a négy megoldásodat elfogadta; és sokkal szebbek, mint az eredeti...
Hardveresen holnap tudom kipróbálni, de ha nem jelzett hibát, akkor biztosan működni fog.

Köszönettel derűs napot kíván; Tambi
(#) Tambi válasza majkimester hozzászólására (») Aug 4, 2024 /
 
Kipróbáltam két drótdarabbal; nagyszerűen működik!

  1. const byte aCh_int0_Pin = 2;      //az A-csatorna jelét az "INT0" 2. lábra kötjük
  2. const byte bCh_int1_Pin = 3;      //az A-csatorna jelét az "INT0" 2. lábra kötjük
  3.      volatile int pulse = 5;      //a "pulse" impulzusösszeget "volatile int" tipusú, "10" kezdőértékűre állítjuk
  4.  
  5. void setup(){
  6.     Serial.begin(9600);
  7.     pinMode(13, OUTPUT);
  8.     pinMode(aCh_int0_Pin, INPUT_PULLUP);  //a zavarszűrés érdekében az "aCh_int0_Pin" INT0 2. lábat "INPUT_PULLUP" bemenetként felhúzzuk tápfeszültségre
  9.     pinMode(bCh_int1_Pin, INPUT_PULLUP);  //a zavarszűrés érdekében a  "bCh_int1_Pin" INT1 3. lábat "INPUT_PULLUP" bemenetként felhúzzuk tápfeszültségre
  10.     attachInterrupt ( digitalPinToInterrupt (aCh_int0_Pin), INT0_SUB, FALLING); //az "aCh_int0_Pin" INT0 2. láb => INPUT_PULLUP tápfeszültségen van;                                                                                //GND-re zárva a "FALLING" lefutóélre meghívja az "INT0_SUB" alprogramot
  11.     attachInterrupt ( digitalPinToInterrupt (bCh_int1_Pin), INT1_SUB, FALLING);
  12. }
  13.  
  14. void loop(){
  15.     Serial.print("pulse  ");  
  16.     Serial.println(pulse);              
  17. }
  18. void INT0_SUB ()                     //INT0 2. láb "FALLING" lefutóélére innen folytatja
  19. {
  20.   digitalWrite(13, HIGH);
  21.    pulse++;                          //növeli 1-el "pulse" összegét
  22.    pulse = min(max(pulse, -100), 100);   // 1 < pulse <10
  23. }                                    //"INT0_SUB" végrehajtva, vissza a főprogramba
  24.  
  25. void INT1_SUB ()                     //INT0 3. láb "FALLING" lefutóélére innen folytatja
  26. {
  27.     digitalWrite(13, LOW);
  28.    pulse--;                          //csökkenti 1-el "pulse" összegét
  29.    pulse = min(max(pulse, -100), 100);   // 1 < pulse <10
  30. }


Köszönöm
(#) majkimester válasza Tambi hozzászólására (») Aug 4, 2024 /
 
A fenti kódodhoz még annyit, hogy ahol növeled a pulse-t, ott utána elég a pulse = max(pulse, 100);, ahol csökkented ott pedig a pulse = min(pulse, 1);
(#) 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.
(#) Bakman válasza Tambi hozzászólására (») Aug 19, 2024 /
 
A

timerBegin(0, 8, true)

három paramétert tartalmaz, de a funkció csak egyet kíván:

hw_timer_t* timerBegin(uint32_t)
(#) Tambi válasza Bakman hozzászólására (») Aug 19, 2024 /
 
Köszönöm, kedves Bakman!

Természetesen tökéletesen elfogadom a válaszodat.
Azért háborgatok a fórumon hozzád hasonló segítőkész embereket, mert mindenki (még a GPT is!) azt válaszolja, amit te, de a kódjában mégis három paraméter szerepel...
imígyen, ahogy az "enyém"-ban:

My_timer = timerBegin(0, 8, true);

a "0" a timer sorszáma, a "8" az előosztó, a "true" jelentené azt, hogy előre számlál, persze lehet, hogy rosszul gondolom...

A My_timer = timerBegin(0, 8, true); helyére beírva az általad javasolt

hw_timer_t* timerBegin(uint32_t) sort természetesen elfogadja, de most a következő;

timerAttachInterrupt(My_timer, &onTimer, true); sort kifogásolja a sok adat miatt.

Feldugtam az eszközt, lefuttattam az egy és kétmagos tesztet (//http://faragocsaba.hu/esp32), az eredmények jók, akkor gondolom, az eszközválasztás is jó.

Nem vagyok biztos benne, de mintha páréve működött volna ez a szoftver. Azóta nagy pusztítás volt a gépemen. Ha a sebességteszt jó, akkor telepítve vannak a szükséges fájlok, vagy ez nem bizonyos?

Ha nulláról kezdeném miket kellene az IDE-n kívül feltenni?

Köszönettel; Tambi.
(#) Bakman válasza Tambi hozzászólására (») Aug 19, 2024 /
 
Nem foglalkozom ESP32-vel, konkrétabban nem tudok segíteni.

Azt írod, pár éve működött. Minden bizonnyal az újból telepített könyvtárak nem egyeznek a régiekkel. Vagy frissítették őket vagy másik, de azonos nevű könyvtárt töltöttél le.

Itt: Bővebben: Link.

A példaprogramban:
  1. timer = timerBegin(1000000);                   //timer 1Mhz resolution

Neked elvileg csak ennyi kellene:
  1. My_timer = timerBegin(1000000);

Hirtelen nem tudom megmondani melyik Timer-t indítja a parancs, a gyári könyvtárakkal soha nem bajlódtam, maximum példaként tekintettem rájuk.
(#) Tambi válasza Bakman hozzászólására (») Aug 19, 2024 /
 
Köszönöm kedves Bakman!

Feladom mára. Holnap megpróbálom a munkahelyi laptopomról, amin még kb hároméves állapotában van az IDE. Nagyon kíváncsi vagyok...

Jó éjt!
Következő: »»   837 / 840
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