Arduino PWM regulátor
Moderátor: Moderátoři
Arduino PWM regulátor
- Přílohy
-
pwm_oled.txt- (4.41 KiB) Staženo 216 x
-
petrfilipi
- Příspěvky: 2901
- Registrován: 13 zář 2005, 00:00
U standardních mikrořadičů (třeba PIC) je watchdog, který je schopen zresetoval procesor. Ale není to řešení příčiny, nýbrž následku. Je-li watchdog i u Arduina, to nevím - nikdy jsem to nepotřeboval. Ale určitě tuto informaci někde najdeš.
PF
Kód: Vybrat vše
while(oled_1.nextPage());
Preto je lepšie si naštudovať povely pre displej a napísať vlastné funkcie.
Mimochodom, s takto napísanou podmienkou to funguje len náhodou
Kód: Vybrat vše
if (Duty_Cycle < 255)
Duty_Cycle=Duty_Cycle+5;- pocitujlasku
- Příspěvky: 2764
- Registrován: 12 pro 2005, 00:00
- Bydliště: SR, Poprad
Kód: Vybrat vše
void my_control (void);
void my_display (void);
loop()
{
my_control();
// my_display(); tady to je zakomentováno, dočasně se neprovádí
}
void my_control (void)
{
...
...
...
}
void my_display (void)
{
...
...
...
}Jak psal "pocitujlasku", delay() ve funkci loop() nahradit za millis(). Vysvětlení: delay() je pasivní čekání, kdy MCU stojí a nic nedělá. V mnoha případech je lepší mít "časový flag" a např. funkci pro display volat jen co 500ms. Ideově nějak takto:
Kód: Vybrat vše
void my_control (void);
void my_display (void);
int16_t time_is, time_mem1;
loop()
{
time_is = (int16_t) millis();
my_control();
if ((signed)(time_is-time_mem1-1000)>=0)
{
time_mem1 = time_is;
// tento kód běží 1x za sekundu
my_display();
}
}
void my_control (void)
{
...
...
...
}
void my_display (void)
{
...
...
...
}- pocitujlasku
- Příspěvky: 2764
- Registrován: 12 pro 2005, 00:00
- Bydliště: SR, Poprad
Kód: Vybrat vše
unsigned long akcia1=0;
unsigned long aktcas=0;
loop()
{
aktcas=millis();
if (akcia1<akcas)
{
akcia1=aktcas+1000;
vykonaj akciu;
}
} delay caka, toto bezi stale a tak napr. reaguje na tlacidla hned. v pripade delay by si ho musel drzat min. taky cas ako je delay, aby prebehol cyklus a precital si stav tlacidla.
a tymto vyriesis aj to, ak ti napr. display neodpoveda. tak jednoducho ti na chvilu zatuhne, ale zbytok programu pobezi dalej.
Este take upozornenie, ten millis pretecie za necelych 50 dni. s tym je potrebne pocitat v programe. idealne obcas ten procak resetnut.
- pocitujlasku
- Příspěvky: 2764
- Registrován: 12 pro 2005, 00:00
- Bydliště: SR, Poprad
while jedine v setup, kedy cakam, kym sa inicializuju vsetky komponenty, aby sa program spustil az ked bude vsetko ok.
bdn: to som neskusal, arduino pouzivam skor na take doplnkove veci, kde nevadi, ze sa obcas restartne, na napr. riadenie kurenia by som ho urcite nepouzil.
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
potom by bylo snadné napsat jednoduchý program i pro nováčka .
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler