Fórum témák

» Több friss téma
Fórum
Keresés
Lapozás: OK   2 / 842
(#) pont válasza tursaba hozzászólására (») Feb 23, 2026
Például. Bővebben: Link
Kell még hozzá egy 10 Pin-es tüskesor és egy ic foglalat, valami proba panelon, és megfelelően összekötni őket.
(#) tursaba válasza pont hozzászólására (») Feb 23, 2026
Az USBASP eszközkezelő drivert feltöltöttem.Milyen "égetŐvel" tudom a céláramkört programozni?
(#) tursaba válasza vargham hozzászólására (») Feb 23, 2026
Köszönöm.
Van Micro-m, de ahhoz jobban kellene értenem a software mókoláshoz, hogy meg tudjam csinálni.
Az Alin rendeltem 1 MK II-t, remélem jó lesz ~6500Ft.
(#) vargham válasza tursaba hozzászólására (») Feb 22, 2026
A LUFA projektben van AVR ISP mkII kompatibilis firmware.
Feltöltöd egy Arduinora (Micro/Leonardo), és kész a programozód.
Kb 12 éve én is készítettem, tök jól működött. Mondjuk azóta nem használtam, mióta váltottam Atmel ICE-re, ami most 30000 ft.
Vagy itt van egy Olimex AVR ISP mkII klón 8000 ft.
(#) Nabukodonozor válasza tursaba hozzászólására (») Feb 21, 2026
Uh, ezt szomorúan olvasom .

Még tavaly sikerült az ebay-en eredeti ISP mkII-t venni egész baráti áron. Ha nem sürgős, akkor érdemes lehet nézegetni és várni.
(#) tursaba válasza Nabukodonozor hozzászólására (») Feb 21, 2026
Nem csak ennyi.
A GTL2003-as IC-t (illesztő) kicseréltem, de az USB-s, AT162-es állandóan ismételten küld ki a céláramkör AVR-nek rövid RESET jelet.
A programozó ATMEGÁT érte valami.
(#) zoz11 hozzászólása Feb 21, 2026

Atmeg64A olvasás

Sziasztok,
Egy olyan kérdéssel fordulnék hozzátok, hogy van e arra bármi féle, akár költséges, de elérhető módszer arra, hogy egy Atmega64A tartalmát kilehessen olvasni akkor ha az zárolva van(LB1=0, LB2=0)
Köszönöm.
(#) pont válasza tursaba hozzászólására (») Feb 20, 2026
USBASP
(#) Nabukodonozor válasza tursaba hozzászólására (») Feb 20, 2026
Könnyen lehet, hogy "csak" ennyi a fix: YT - AVR ISP MKII Repair & Upgrade

MOD: úgy tudom, hogy az AVR ISP mkII-t publikussá tették és ezt a kínaiak lemásolták. Szerintem az működik. Személy szerint nem vagyok a klónok híve, így nincs gyakorlati tapasztalatom.
A hozzászólás módosítva: Feb 20, 2026
(#) tursaba hozzászólása Feb 20, 2026

AVR programozót milyet?

Sziasztok!
Milyen olcsó és jó programozót ajánlotok AVR ISP-n programozáshoz?
Eddig AVR STUDIÓ-val használtam ISP MK II-t , de megpusztult.
Köszönöm.
(#) pont válasza fecus hozzászólására (») Jan 31, 2026
Mindenképpen érdemesebb foglalatba tenni, és programozóval programozni, mert akkor nem kellenek vezetősávok az ISP-hez, és nem fordulhat elő, hogy valami nyákon lévő alkatrész bekavar. De csak az órajelre, arra azt tudom mondani, hogy USB ASP-al rengetegszer írtam quartz nélkül, viszont arduinoval nem írtam még.
(#) fecus hozzászólása Jan 31, 2026

ISP programozás ATtiny25

Attiny25-öt szeretnék programozni kész áramkörben. A kapcsolásban belső órajelet szeretnék használni. Tudom majd programozni vagy egy quartz-ot be kell tennem az áramkörbe csak ezért?
Ha tudom, hogyan kell beállítani az arduino IDE-t?
(#) Laslie válasza Laslie hozzászólására (») Dec 12, 2025
Elolvasva a hozzászólásokat, rá kellett jönnöm, hogy ez az AI kérdezés is egy külön tudást igényel. Ezen elgondolkodva, pontosítottam a ChatGPT-nek feltett kérdést, és kértem tőle egy programot, ATTiny85-re optimalizálva. Átnéztem a kódot, és most már sokkal logikusabbnak tűnik.
  1. /*
  2.  * ATtiny85 ultra low power LED timer
  3.  * 6 óra ON → 18 óra OFF → ismétlődés
  4.  *
  5.  * LED-füzér PB2-ről (7-es láb) vezérelve
  6.  * AO3400 N-MOSFET meghajtás
  7.  *
  8.  * FUSE: gyári értékek megfelelőek
  9.  *  - CKDIV8 = programmed → CPU clock = 1 MHz
  10.  *  - Internal 8 MHz RC oscillator /8
  11.  */
  12.  
  13. #include <avr/io.h>
  14. #include <avr/interrupt.h>
  15. #include <avr/sleep.h>
  16. #include <avr/wdt.h>
  17.  
  18. // ----------- Időzítés -----------
  19. #define WDT_INTERVAL_SECONDS 8          // watchdog max delay
  20. #define SECONDS_PER_HOUR     3600
  21. #define WDT_TICKS_PER_HOUR   (SECONDS_PER_HOUR / WDT_INTERVAL_SECONDS) // = 450
  22.  
  23. #define ON_HOURS   6
  24. #define OFF_HOURS 18
  25.  
  26. #define ON_TICKS   (ON_HOURS * WDT_TICKS_PER_HOUR)    // 2700
  27. #define OFF_TICKS  (OFF_HOURS * WDT_TICKS_PER_HOUR)   // 8100
  28.  
  29. volatile uint8_t wdt_fired = 0;
  30. volatile uint32_t wdt_counter = 0;
  31.  
  32. // ----------- Watchdog interrupt -----------
  33. ISR(WDT_vect) {
  34.     wdt_fired = 1;
  35. }
  36.  
  37. // ----------- Watchdog inicializálás (8s + interrupt) -----------
  38. void setup_watchdog() {
  39.     cli();
  40.  
  41.     wdt_reset();
  42.     // Engedélyező írás
  43.     WDTCR = (1 << WDCE) | (1 << WDE);
  44.     // Valódi beállítás
  45.     WDTCR = (1 << WDIE) | (1 << WDP3) | (1 << WDP0);
  46.  
  47.     sei();
  48. }
  49.  
  50. // ----------- BOD kikapcsolása alvás idejére -----------
  51. void disable_bod_in_sleep() {
  52.     /*
  53.      * Az ATtiny85 előírja:
  54.      * 1) BODS és BODSE bitek beírása egyszerre
  55.      * 2) 4 cikluson belül BODSE törlése, BODS megtartása
  56.      */
  57.  
  58.     cli();
  59.     MCUCR |= (1 << BODS) | (1 << BODSE);
  60.     MCUCR = (MCUCR & ~(1 << BODSE)) | (1 << BODS);
  61.     sei();
  62. }
  63.  
  64. // ----------- Perifériák lekapcsolása -----------
  65. void power_save_init() {
  66.     // ADC kikapcsolása
  67.     ADCSRA &= ~(1 << ADEN);
  68.  
  69.     // Perifériák tiltása
  70.     PRR |= (1 << PRADC) | (1 << PRUSI) | (1 << PRTIM0);
  71. }
  72.  
  73. // ----------- LED vezérlés -----------
  74. #define LED_PIN PB2
  75.  
  76. void led_on() {
  77.     PORTB |= (1 << LED_PIN);
  78. }
  79.  
  80. void led_off() {
  81.     PORTB &= ~(1 << LED_PIN);
  82. }
  83.  
  84. // ----------- Mélyalvás BOD nélkül -----------
  85. void go_sleep() {
  86.     disable_bod_in_sleep();                 // BOD off ONLY during sleep
  87.     set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  88.     sleep_enable();
  89.     sleep_cpu();                             // itt alszik el
  90.     sleep_disable();                         // ide ébred fel
  91. }
  92.  
  93. // ============================================================
  94. //                       FŐPROGRAM
  95. // ============================================================
  96. int main(void) {
  97.  
  98.     // PB2 (7-es láb) kimenet
  99.     DDRB |= (1 << LED_PIN);
  100.  
  101.     power_save_init();
  102.     setup_watchdog();
  103.  
  104.     // Indulás: LED bekapcsolva
  105.     uint8_t state = 1;
  106.     led_on();
  107.     wdt_counter = 0;
  108.  
  109.     while (1) {
  110.         // Várjuk a watchdog ébresztést
  111.         while (!wdt_fired) {
  112.             go_sleep();
  113.         }
  114.         wdt_fired = 0;
  115.  
  116.         // 8 másodperc eltelt
  117.         wdt_counter++;
  118.  
  119.         if (state == 1) {
  120.             // LED ON szakasz
  121.             if (wdt_counter >= ON_TICKS) {
  122.                 led_off();
  123.                 state = 0;
  124.                 wdt_counter = 0;
  125.             }
  126.         } else {
  127.             // LED OFF szakasz
  128.             if (wdt_counter >= OFF_TICKS) {
  129.                 led_on();
  130.                 state = 1;
  131.                 wdt_counter = 0;
  132.             }
  133.         }
  134.     }
  135. }

Láttok benne buktatót?
(#) vargham válasza tki hozzászólására (») Dec 4, 2025
Igen, ez érthető. Nálunk telefon töltőről megy. A szoftver azért kellett, hogy szépen halványítson, ne villogva, mint a gyári vezérlő. Azért hátha van benne hasznos rész neked is.
(#) tki válasza Nabukodonozor hozzászólására (») Dec 3, 2025
"az ISR() paraméterei hiányosak"

Ha csak ennyire gondolsz, az ISR makrónak változó argumentumlistája van, valamint nyilván az ISR_BLOCK a defaultja, azt az attribute-ot nem kell külön megadni. És el van rejtve a warning. Vagy akármi. : -) https://github.com/vancegroup-mirrors/avr-libc/blob/master/avr-libc...rupt.h:

  1. #define ISR(vector, ...)            \
  2.     void vector (void) __attribute__ ((signal,used,externally_visible)) __VA_ARGS__; \
  3.     void vector (void)

Megnéztem pár régi kódomat, vegyesen volt benne megadva és nem megadva a kezelés módja, de az már minimum tíz éve volt:
- ISR(INT2_vect)
- SIGNAL(SIG_OUTPUT_COMPARE1A)
A hozzászólás módosítva: Dec 3, 2025
(#) tki válasza vargham hozzászólására (») Dec 3, 2025
Végül is igaz, ez a proci úgysem eszik többet néhány milliampernél 8 MHz-nél sem, az meg szinte elhanyagolható a világítás mellett. Mindig a legegyszerűbb megoldás marad ki. : -)

Csakhogy... a cucc 24 órából, ha jól értettem:
- 8 órában világít 240 mA körüli árammal, procival együtt ez max. 250 mA,
- 16 órában pedig magában fut max. 10 mA fogyasztással.

Egy (találomra mondom) 2,5 Ah-s akkupakkból, mert az elemeket felejtsük el, a 8 óra elviszi a töltöttség 80%-át, a 16 óra magában futás pedig a maradék energia kb. egyharmadát.

A probléma csak az, hogy egy újabb 8 órás világítási periódushoz úgyis tölteni kell az eszközt, ahhoz meg be kell dugni vagy kivenni az akkukat, foglalkozni vele, vagyis az éjszakai időzítésnek, önműködésnek gyakorlatilag nem lesz értelme - csak sokkal nagyobb akkumulátorral. Nem is tudom, miért árulnak ilyeneket, elemmel sem mehet tovább, hacsak nem villog kis kitöltéssel.
A hozzászólás módosítva: Dec 3, 2025
(#) Nabukodonozor válasza tki hozzászólására (») Dec 3, 2025
A WDTCR állítás: megnéztem a datasheetet és azt értem, hogy miért történik két lépcső, de azt nem hogy először miért "|=" a "=" helyett.

Igazából sosem mélyültem el a watchdog lelki világában és eddig csak védelemre használtam olyan szempontból, hogy ha valami beakad, akkor a WD resetelje az CPU-t. Csak simán meghívom a wdt_enable(...) és a wdt_reset() függvényeket innen: Bővebben: Link

Ah, szóval a race condition ott van, hogy a WD interruptja akkor hívódik meg mielőtt a sleep megtörténik. Szóval, lesz egy igazából hatástalan interrupt, mert nincs minek feldolgoznia és a CPU meg megy aludni.

Az ISR esetén erre gondolok: Bővebben: Link (ha van beállított LSP clangd-vel, akkor az jelzi is, hogy az ISR() paraméterei hiányosak).

Ezer köszi az infókat! Bőven vannak hiányosságaim az AVR területen, de a C-ben és a szoftverfejlesztés körüli dolgokban úgy gondolom, hogy erős vagyok.
(#) vargham válasza Laslie hozzászólására (») Dec 3, 2025
Nálunk ezzel megy a karácsonyi fényfűzér. Feleségem reklamált, hogy a gyári programban túl hirtelen változik a fényerő. Ez tulajdonképpen egy potméterekkel állítható paraméterű fader.
Olyan időzítést pont nem tud, amit te szeretnél, de nem macera beletenni.
  1. /*
  2.  * blink_fade_85.cpp
  3.  *
  4.  * Created: 2020. 12. 17. 11:14:02
  5.  * Author : VMP
  6.  */
  7.  
  8. #ifndef F_CPU
  9. #define F_CPU 8000000u
  10. #endif
  11.  
  12. #include <avr/io.h>
  13. #include <avr/interrupt.h>
  14. #include <util/delay.h>
  15. #include <avr/pgmspace.h>
  16.  
  17. const uint8_t PROGMEM gamma8[] = {
  18.   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  19.   1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
  20.   1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,  2,  2,  2,
  21.   2,  3,  3,  3,  3,  3,  3,  3,  4,  4,  4,  4,  4,  5,  5,  5,
  22.   5,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  9,  9,  9, 10,
  23.   10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
  24.   17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
  25.   25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
  26.   37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
  27.   51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
  28.   69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
  29.   90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
  30.   115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
  31.   144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
  32.   177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
  33.   215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255 };
  34.  
  35. constexpr uint8_t cPotmeter1Adc = 0x1u;
  36. constexpr uint8_t cPotmeter2Adc = 0x2u;
  37. constexpr uint8_t cPotmeter3Adc = 0x3u;
  38. constexpr uint8_t cAdcChannelCount = 3u;
  39. constexpr uint8_t cFirstAdcChannel = 1u;
  40. constexpr uint16_t cAdcMaxValue = 1023u;
  41. constexpr uint8_t cPwmMaxValue = 255u;
  42. constexpr uint8_t cAdcLowerLimit = 4u;
  43. constexpr uint16_t cAdcUpperLimit = 1020u;
  44.  
  45. volatile uint8_t edAdcChannel = cPotmeter3Adc;
  46. volatile uint16_t maxDuty = 0; // Potmeter on ADC1
  47. volatile uint16_t onDelay = 0; //Potmeter on ADC3
  48. volatile uint16_t offDelay = 0u; //Potmeter on ADC2
  49.  
  50. void NextAdcChannel() noexcept {
  51.   edAdcChannel = ++edAdcChannel <= cAdcChannelCount ? edAdcChannel : cFirstAdcChannel;
  52.   ADMUX &= ~(3);
  53.   ADMUX |= edAdcChannel;
  54. }
  55.  
  56. void startConversion() noexcept {
  57.   ADCSRA |= (1 << ADSC);
  58. }
  59.  
  60. ISR(ADC_vect) {
  61.   switch (edAdcChannel) {
  62.     case cPotmeter1Adc: {
  63.       maxDuty = ADC / 4u;
  64.       break;
  65.     }
  66.     case cPotmeter2Adc: {
  67.       offDelay = ADC > cAdcLowerLimit ? ADC : 0u;
  68.       offDelay = ADC < cAdcUpperLimit ? ADC : cAdcMaxValue ;
  69.       break;
  70.     }
  71.     case cPotmeter3Adc: {
  72.       onDelay = ADC > cAdcLowerLimit ? ADC : 0u;
  73.       onDelay = ADC < cAdcUpperLimit ? ADC : cAdcMaxValue ;
  74.       break;
  75.     }
  76.     default: {
  77.       break;
  78.     }
  79.   }
  80.   NextAdcChannel();
  81.   startConversion();
  82. }
  83.  
  84. int main(void) {
  85.   cli();
  86.   TIMSK &= ~(1 << OCIE1A); //Disable Timer0 compare A interrupt
  87.   TIMSK &= ~(1 << OCIE1B); //Disable Timer0 compare B interrupt
  88.   DDRB |= (1 << PB1); //LED output (OC0B/OC1A)
  89.   TCCR1 &= ~(1 << COM1A1); //Toggle OC1A
  90.   TCCR1 |= (1 << COM1A0); //Toggle OC1A
  91.   TCCR1 |= (1 << CS10); //Timer runs  IO clock without prescaler
  92.   TCCR1 |= (1 << PWM1A); //Enable PWM output mode
  93.   OCR1A = 0u;
  94.   ADMUX |= (1 << MUX1) | (1 << MUX0); //Use ADC3 (PB3)
  95.   ADCSRA |= (1 << ADPS0); //Set ADC clock prescaler to 32
  96.   ADCSRA |= (1 << ADIE); //Enable conversion ready interrupt.
  97.   ADCSRA |= (1 << ADEN); //ADC enable
  98.   DIDR0 |= (1 << ADC3D) | (1 << ADC2D) | (1 << ADC1D); //Disable digital input on ed analog inputs
  99.   startConversion();
  100.   sei();
  101.  
  102.   while (true) {
  103.     // Always on
  104.     while (onDelay == 0u && offDelay == 0u) {
  105.       OCR1A = maxDuty;
  106.       _delay_ms(1u);
  107.     }
  108.     OCR1A = 0u;
  109.     // Fade in
  110.     uint8_t duty = 0u;
  111.     while (duty < maxDuty) {
  112.       OCR1A = pgm_read_byte(&gamma8[duty++]);
  113.       uint16_t counter = 0u;
  114.       while (counter++ < onDelay / 16u) {
  115.         _delay_us(1u);
  116.       }
  117.     }
  118.     // Sustain
  119.     uint16_t counter = 0u;
  120.     while (counter++ < onDelay / 32u) {
  121.       OCR1A = pgm_read_byte(&gamma8[maxDuty]);
  122.       _delay_ms(1u);
  123.     }
  124.     // Fade out
  125.     duty = maxDuty;
  126.     while (duty > 0) {
  127.       OCR1A = pgm_read_byte(&gamma8[duty--]);
  128.       uint16_t counter = 0u;
  129.       while (counter++ < onDelay / 16u) {
  130.         _delay_us(1u);
  131.       }
  132.     }
  133.     // Off period
  134.     OCR1A = 0u;
  135.     volatile uint16_t fakeVariable = 0;
  136.     while (fakeVariable++ < maxDuty * 2u) {
  137.       uint16_t counter = 0u;
  138.       while (counter++ < offDelay / 32u) {
  139.         _delay_us(1u);
  140.       }
  141.     }
  142.   }
  143. }
(#) tki válasza Nabukodonozor hozzászólására (») Dec 2, 2025
A setupot most nem nézem meg a vagyolgatással és az értékadással, de nyilván arról van szó, hogy kétlépcsős a regiszter átállítása biztonsági okokból; először engedélyezzük a beállítást, aztán beállítjuk.

Az viszont igaz; hogy ha jól akarjuk csinálni, a wdt_wake változót is meg kell védeni.

Így képzelem, aztán majd kijavítasz: a WDT timer szabadon fut, így bekapcsolás után először bármikor megjöhet egy másodpercen belül a WDT interrupt. Itt lehet egyedül race condition. Amikor a WDT timer túlcsordul, az nekünk nem gond, az az ő dolga.

A cli() ... sei()-n belülre kell rakni a wdt_wake változó hamisra állítását is, amit jelenleg semmire sem használunk. A set_sleep_mode()-nak meg mindegy, jön-e megszakítás előtte-utána - ha minden igaz, a bitjeit semmi sem változtatja meg, csak a biztonság kedvéért állítjuk be minden alkalommal.

Azt meg biztosan tudod, hogy:
- az sei() garantálja, hogy a következő utasításig nem lesz interrupt,
- a sleep_cpu() pedig nem egy függvény, hanem egy makró, egyetlen Assembly utasítás, vagyis nem lehet előtte interrupt. Vagyis így nem lehet race condition: ...sei(); sleep_cpu();...

Források:
- "Timed Sequences for Changing the Configuration of the Watchdog Timer" egy doksiban (mégis megnéztem),
- https://github.com/avrdudes/avr-libc/blob/main/include/avr/sleep.h a sleep függvényekhez,
- https://ww1.microchip.com/downloads/en/DeviceDoc/AVR-Instruction-Set-Manual-DS40002198A.pdf, 5.104.1-es bekezdés.

Itt mit hiányolsz: "az ISR-nél nincs explicite jelölve, hogy a megszakítás hogyan kezelődjön"?
(#) Nabukodonozor válasza tki hozzászólására (») Dec 2, 2025
Igazából több sebből vérzik a kód, például:
- az ISR-nél nincs explicite jelölve, hogy a megszakítás hogyan kezelődjön
- a wdt_wake-t védeni kellene azzal, hogy előtte tiltani kellene a megszakításokat, utána megengedélyezni. Igazából elég lenne meghívni a wdt_enable-t.
- a 15. 16. sorok is viccesek, először szépen bit vagyolja a regisztert, aztán simán felülírja az egészet
- az i változónak elég a uint16_t típus
- akárhogy nézem, de nem találom a main-t, de szerintem ott van az csak nem lett bemásolva. És egyébként a wdt_wake-t nincs is használva.

De az utolsót leszámítva ezek nem okoznak semmilyen gyakorlati problémát ebben a programban.

A sleephez egyáltalán nem értek.

Idézet:
„amikor a kód a sleep_enable() és a sleep_cpu() között jár, így a sleep_enable() előtt tiltani kellene a megszakításokat, utána meg engedélyezni.”


Ezt miért így kell csinálni?
(#) tki válasza Laslie hozzászólására (») Dec 1, 2025
Szerintem működőképes a kód, csak nem jó. : -) Ugyanis a watchdog timernek, ha ez is belső R-C oszcillátor, 10-20%-ot is eltérhet az értéke, és ez az eltérés ebben a kódban egyfolytában halmozódik, tehát ha ennyire egyszerűen csinálod meg, akkor valamennnyivel biztosan el fognak csúszni a napok, és szerintem gyorsan. Azt hiszem, külön RTC nélkül nincs igazán kisfogyasztású megoldás, de majd valaki megmondja.

A másik egy itt jelentéktelen probléma: elmehet a levegőbe egy-egy ébresztés, ha a WDT-megszakítás pont akkor csattan be, amikor a kód a sleep_enable() és a sleep_cpu() között jár, így a sleep_enable() előtt tiltani kellene a megszakításokat, utána meg engedélyezni. De 1 másodperces ismétlődésnél és az egész rendszer pontosságát tekintve ez amúgy sem tétel.
(#) Laslie válasza vargham hozzászólására (») Dec 1, 2025
Megköszönöm, ha megkeresed.
Megkérdeztem a ChatGPT-t, mivel nem vagyok annyira otthon az AVR programozásában, és adott egy kódot (az elvárás, hogy bekapcsoláskor indít, 6 órán keresztül világítanak a LED-ek, majd 18 órára aludni megy):
  1. #include <avr/sleep.h>
  2. #include <avr/wdt.h>
  3. #include <avr/power.h>
  4.  
  5. #define LED_PIN 3
  6.  
  7. volatile bool wdt_wake = false;
  8.  
  9. ISR(WDT_vect) {
  10.   wdt_wake = true;
  11. }
  12.  
  13. void setup_wdt_1s() {
  14.   MCUSR &= ~(1 << WDRF);
  15.   WDTCR |= (1 << WDCE) | (1 << WDE);
  16.   // 1s időzítés, csak interrupt
  17.   WDTCR = (1 << WDIE) | (1 << WDP2) | (1 << WDP1);
  18. }
  19.  
  20. void sleep_1s() {
  21.   wdt_wake = false;
  22.   set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  23.   sleep_enable();
  24.   sleep_cpu();
  25.   sleep_disable();
  26. }
  27.  
  28. void setup() {
  29.   pinMode(LED_PIN, OUTPUT);
  30.   digitalWrite(LED_PIN, LOW);
  31.  
  32.   // Órajel csökkentése a kisebb fogyasztáshoz
  33.   clock_prescale_set(clock_div_8);  // 1 MHz vagy még kevesebb, ha fuse-al állítod
  34.  
  35.   setup_wdt_1s();
  36. }
  37.  
  38. void loop() {
  39.   // 6 óra = 21600 másodperc
  40.   digitalWrite(LED_PIN, HIGH);
  41.   for (uint32_t i = 0; i < 21600; i++) {
  42.     sleep_1s();
  43.   }
  44.  
  45.   // 18 óra = 64800 másodperc
  46.   digitalWrite(LED_PIN, LOW);
  47.   for (uint32_t i = 0; i < 64800; i++) {
  48.     sleep_1s();
  49.   }
  50. }

Nem tudom ez mennyire lesz jó, de majd kipróbálom.
A NYÁK készítése még folyamatban van.

Nabukodonozor
Lehet egyszerűbb lenne, de azért esett a választávom az ATtiny85-re mert ilyen van itthon (SOIC-8), és a hely ahova be kell férnie (25 mm x 10 mm), adja magát.
A hozzászólás módosítva: Dec 1, 2025
(#) Nabukodonozor válasza Nabukodonozor hozzászólására (») Dec 1, 2025
Megmerem kockáztatni, hogy ezt egyszerűbb lenne megoldani néhány 4000-es sorozatú IC-vel, mint egy ATtinyvel.
(#) vargham válasza Laslie hozzászólására (») Nov 30, 2025
Ó, karácsonyi LED villogót én is készítettem pár éve. Ha érdekel, előtúrom a kódot.
(#) Nabukodonozor válasza Gafly hozzászólására (») Nov 29, 2025
Úgy emlékszem, hogy a felhúzó ellenállás csak input módban működik, mert a PORTx regiszterrel lehet állítani.

Az eredeti kérdéshez: a 240 mA a MOSFET-el működni fog. Szerintem nem kell ellenállás a gatere, mehet direktben. A bipoláris is jó, de a CE szaturáció elég nagy, ami csak fölöslegesen viszi el a teljesítményt.

Arra figyel, hogy a LED sor melyik végére teszed a tranzisztort, mert a bipolárist a táp és a szalag közé, addig a MOSFET-tet a szalag és a test közé kell tenni.

A tapasztalatom szerint a ChatGPT az időzítés hosszába szokott belezavarodni, abban szerintem tudunk itt segíteni, ha van már kód.

Ami szűk keresztmetszet lehet, hogy az Attiny milyen alacsony feszültségen tud működni. 1 MHz-en 1,8 V-on biztosan megy. Szerintem lehet itt trükközni hogy alacsonyabb frekiről megy. Sőt érdemes lehet a power savinggel is játszani.
(#) Laslie válasza Gafly hozzászólására (») Nov 28, 2025
Egyik sem kell? Se a soros ellenállás, se a lehúzó ellenállás a Gate-hez?
(#) Gafly válasza Laslie hozzászólására (») Nov 28, 2025
Ahogy nézem még ellenállás sem kell a FET-hez.:
Idézet:
„Port B is a 6-bit bi-directional I/O port with internal pull-up resistors (selected for each bit). The Port B output buffers have symmetrical drive characteristics with both high sink and source
capability.”

Ugyan kicsi a feszültség, de a FET adatlapja alapján működhet.
(#) Laslie hozzászólása Nov 28, 2025

ATtiny85 LED füzér vezérlés

Sziasztok!
Közeledik a karácsony, így előkerültek a fiók mélyéből az elemes LED füzérek. Van itthon jó sok. Az egyik részük időkapcsolós (van benne beépítve timer), ami 6 órán keresztül engedi világítani, majd 18 órán keresztül pedig kikapcsolva tartja a LED füzért. Ezek szinte mindegyike 2 db AA ceruza elemről működnek. Persze van 1-2 db, ami 3 db AA ceruza elemet igényel.
Mivel van itthon jó pár olyan is, ami nem időkapcsolós, és van itthon jó pár ATtiny85 chip-em is (SOIC-8 tokozású), ezért kitaláltam, hogy "felokosítom" ezeket a LED füzéreket is. Ezek is legyenek időkapcsolósosak!
Minimális kódolást igényel, ez nem gond (max. segít a ChatGPT ). Viszont nem tudom eldönteni, hogy tranzisztorral (BCX56-16, és egy 1k ellenállás a bázisra) vagy FET-el (AO3400, és egy 10k lehúzó ellenállás, és egy 10 Ohm ellenállás a Gate-re) legyen megoldva a LED füzér kapcsolgatása. Azt megmértem Amper mérővel, hogy 240 mA áramot igényel a LED füzér 2 db AA ceruza elemről.
Szerintetek melyik megoldást érdemes választani, és jól gondolom-e, hogy elég csak ennyi alkatrész?
(#) TavIR-AVR válasza chipi hozzászólására (») Okt 28, 2025
JTAG ICE MKII
AVR-JTAG
AVR-Dragon.
(#) chipi hozzászólása Szept 21, 2025

Atmega 2560 jtag debugger

Sziasztok,

Atmega 2560 Jtag olvasásra- ra mit javasoltok?
ATMEL MKII ha jól tudom csak programozó.

Köszi!
Következő: »»   2 / 842
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