Pískanie na PWM
Moderátor: Moderátori
Pískanie na PWM
mam tu program v arduino kde používam delay cca 2 sekundy , a rozhodol som sa pridať tlačidlo a až potom mi došlo keď som to spustil že tlačidlo reaguje každé 2 sekundy, no ja potrebujem aby reagovalo instantne no delay nemôžem zmazať...
viete mi niekto poradiť čo s tým ? pomohla by nová karta v IDE ? kde by bola iba funkcia tlačidla ? alebo ?
viete mi niekto poradiť čo s tým ? pomohla by nová karta v IDE ? kde by bola iba funkcia tlačidla ? alebo ?
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington
Chester Bennington
Re: veľa delay
pfuuu diki a vedel by si mi to aj vysvetliť? lebo som z toho mimo
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington
Chester Bennington
Re: veľa delay
okej tak ja som si to naštudoval podarilo sa mi to spraviť ale mam trošku problém že sa mi ten interrupt pletie s hlavným programom , výsledkom je že na displeji mám "FAN:OFFMODE:MANUAL OFF" čo sa tam ani nevojde poprosím pomoc , posielam kód
je to len tak narýchlo zbúchané taže tie omačky navyše čo som experimentoval a nevymazal, si nevšímajte
Kód: Vybrať všetko
#include <LiquidCrystal.h>
#include <Servo.h>
#include <math.h>
#define pwm 6
int reading;
int previous = LOW;
int x = 1;
long time = 0;
long debounce = 200;
LiquidCrystal lcd (12, 11, 10, 9, 8, 7);
byte degree[8] = {
B11100,
B10100,
B11100,
B00000,
B00000,
B00000,
B00000,
};
byte vent1[8] = {
B00000,
B10000,
B01000,
B00100,
B00010,
B00001,
B00000,
};
Servo myservo;
double ThermistorC(int RawADC) {
double Temp;
Temp = log(10000.0*((1024.0/RawADC-1)));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
Temp = Temp - 273.15;
return Temp;
}
void setup() {
Serial.begin(9600);
attachInterrupt(0,Mode, FALLING);
lcd.createChar(0, degree);
lcd.createChar(1, vent1);
lcd.begin(16, 2);
myservo.attach(10) ;
myservo.write(0);
}
void loop() {
int valC;
double temp;
valC=analogRead(0);
temp=ThermistorC(valC);
lcd.clear();
lcd.print(temp);
lcd.write(byte(0));
lcd.print("C");
// if the input just went from LOW and HIGH and we've waited long enough
// to ignore any noise on the circuit, toggle the output pin and remember
// the time
//----------------------------------MODE1 PWM----------------------------------------------
if(temp<19.00&&x==1)
{
analogWrite(pwm,0 );//51
lcd.setCursor(0,1);
lcd.print("FAN:OFF");
lcd.setCursor(15,1);
lcd.print("|");
delay(1200);
}
else if(temp>=19.00&&temp<20&&x==1)
{
analogWrite(pwm,51 );//51
lcd.setCursor(0,1);
lcd.print("FAN:20%");
lcd.setCursor(15,1);
lcd.print("-");
delay(300);
lcd.setCursor(15,1);
lcd.write(byte(1));
delay(300);
lcd.setCursor(15,1);
lcd.print("|");
delay(300);
lcd.setCursor(15,1);
lcd.print("/");
delay(300);
}
else if(temp>=20.00&&temp<21&&x==1)
{
analogWrite(pwm,77 );//51
lcd.setCursor(0,1);
lcd.print("FAN:30%");
lcd.setCursor(15,1);
lcd.print("-");
delay(300);
lcd.setCursor(15,1);
lcd.write(byte(1));
delay(300);
lcd.setCursor(15,1);
lcd.print("|");
delay(300);
lcd.setCursor(15,1);
lcd.print("/");
delay(300);
}
else if(temp>=21 && temp<22&&x==1)
{
analogWrite(pwm, 102);
lcd.setCursor(0,1);
lcd.print("FAN:40%");
lcd.setCursor(15,1);
lcd.print("-");
delay(250);
lcd.setCursor(15,1);
lcd.write(byte(1));
delay(250);
lcd.setCursor(15,1);
lcd.print("|");
delay(250);
lcd.setCursor(15,1);
lcd.print("/");
delay(250);
}
else if(temp>=22 && temp<23&&x==1)
{
analogWrite(pwm, 128);
lcd.setCursor(0,1);
lcd.print("FAN:50%");
lcd.setCursor(15,1);
lcd.print("-");
delay(250);
lcd.setCursor(15,1);
lcd.write(byte(1));
delay(250);
lcd.setCursor(15,1);
lcd.print("|");
delay(250);
lcd.setCursor(15,1);
lcd.print("/");
delay(250);
}
else if(temp>=23 && temp<24&&x==1)
{
analogWrite(pwm, 153);
lcd.setCursor(0,1);
lcd.print("FAN:60%");
lcd.setCursor(15,1);
lcd.print("-");
delay(200);
lcd.setCursor(15,1);
lcd.write(byte(1));
delay(200);
lcd.setCursor(15,1);
lcd.print("|");
delay(200);
lcd.setCursor(15,1);
lcd.print("/");
delay(200);
}
else if(temp>=24 && temp<25&&x==1)
{
analogWrite(pwm, 178);
lcd.setCursor(0,1);
lcd.print("FAN:70%");
lcd.setCursor(15,1);
lcd.print("-");
delay(200);
lcd.setCursor(15,1);
lcd.write(byte(1));
delay(200);
lcd.setCursor(15,1);
lcd.print("|");
delay(200);
lcd.setCursor(15,1);
lcd.print("/");
delay(200);
}
else if(temp>=25&&temp<26&&x==1)
{
analogWrite(pwm, 204);
lcd.setCursor(0,1);
lcd.print("FAN:80%");
lcd.setCursor(15,1);
lcd.print("-");
delay(150);
lcd.setCursor(15,1);
lcd.write(byte(1));
delay(150);
lcd.setCursor(15,1);
lcd.print("|");
delay(150);
lcd.setCursor(15,1);
lcd.print("/");
delay(150);
}
else if(temp>=26&&temp<27&&x==1)
{
analogWrite(pwm, 204);
lcd.setCursor(0,1);
lcd.print("FAN:90%");
lcd.setCursor(15,1);
lcd.print("-");
delay(150);
lcd.setCursor(15,1);
lcd.write(byte(1));
delay(150);
lcd.setCursor(15,1);
lcd.print("|");
delay(150);
lcd.setCursor(15,1);
lcd.print("/");
delay(150);
}
else if(temp>=27&&x==1)
{
analogWrite(pwm, 255);
lcd.setCursor(0,1);
lcd.print("FAN:100%");
lcd.setCursor(15,1);
lcd.print("-");
delay(100);
lcd.setCursor(15,1);
lcd.write(byte(1));
delay(100);
lcd.setCursor(15,1);
lcd.print("|");
delay(100);
lcd.setCursor(15,1);
lcd.print("/");
delay(100);
}
//-----------------------------MODE2 AUTO-----------------------------------------------
if(temp<25.00&&x==2)
{
analogWrite(pwm,0 );//51
lcd.setCursor(0,1);
lcd.print("FAN:OFF");
lcd.setCursor(15,1);
lcd.print("|");
delay(1200);
}
else if(temp>=25&&x==2)
{
analogWrite(pwm, 255);
lcd.setCursor(0,1);
lcd.print("FAN:ON");
lcd.setCursor(15,1);
lcd.print("-");
delay(100);
lcd.setCursor(15,1);
lcd.write(byte(1));
delay(100);
lcd.setCursor(15,1);
lcd.print("|");
delay(100);
lcd.setCursor(15,1);
lcd.print("/");
delay(100);
}
//-----------------------------MODE 3 MANUAL ON------------------------------------------
if(x==3)
{
analogWrite(pwm, 255);
lcd.setCursor(0,1);
lcd.print("FAN:ON");
lcd.setCursor(15,1);
lcd.print("-");
delay(100);
lcd.setCursor(15,1);
lcd.write(byte(1));
delay(100);
lcd.setCursor(15,1);
lcd.print("|");
delay(100);
lcd.setCursor(15,1);
lcd.print("/");
delay(100);
}
//-----------------------------MODE 4 MANUAL OFF----------------------------------------
if(x==4)
{
analogWrite(pwm,0 );//51
lcd.setCursor(0,1);
lcd.print("FAN:OFF");
lcd.setCursor(15,1);
lcd.print("|");
delay(1200);
}
}
void Mode()
{x++;
if (x==5)
{x=1;}
if (x==1)
{lcd.clear();
lcd.setCursor(0,1);
lcd.print("MODE PWM");
delay(2000);
}
if (x==2)
{lcd.clear();
lcd.setCursor(0,1);
lcd.print("MODE AUTO");
delay(2000);
}
if (x==3)
{lcd.clear();
lcd.setCursor(0,1);
lcd.print("MODE Manual ON");
delay(2000);
}
if (x==4)
{lcd.clear();
lcd.setCursor(0,1);
lcd.print("MODE Manual OFF");
delay(2000);
}
}
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington
Chester Bennington
Re: veľa delay
V basicu to řeším tak, že vytvořím smyčku např. for-next o tolika krocích, aby to vytvořilo ten požadovaný čas a do ní ten odkaz reagující na tlačítko. Pokud to běží na vysoké frekvenci, dá se tam i vložit ještě delay v milisekundách.
0
pískanie na PWM
Zdravím, rozhodol som sa že si spravím reguláciu ventilátora pomocou PWM mam tu program v arduino ktorý mi pekne dáva PWM impulzy podľa teploty a mam tu ventilátor 12V 0,12A , je to pripojené cez BC547 ktorý zatiaľ stačí, všetko ide ventilátor funguje, ale od 10% do 90% píska na 100% už ide čisto, neviem kde hľadať chybu, či vo ventilátore či v tranzistore, napájanie som už skúšal meniť zo zdroja na baterku a nepomohlo ... za rady vopred ďakujem
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington
Chester Bennington
Re: veľa delay
skús mi to bližšie popísať , ako amatérovi diki
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington
Chester Bennington
- Najgel
- Ultimate člen
- Príspevky: 1695
- Dátum registrácie: 02 Júl 2010, 00:00
- Bydlisko: Námestovo, Žilina(škola)
- Vek: 28
Re: pískanie na PWM
Zmeň frekvenciu PWM.
0
Keď neodpisujem tak tu nie som, alebo som a neodpisujem
MPLAB & PIC
Texas Instruments DSP TMS320Fxxxxx
Tevo Tarantula 3D
Ponúkam 3D tlač.
Ponúkam návrh a vývoj elektroniky na zákazku.
UNIZA 5.ročník
MPLAB & PIC
Texas Instruments DSP TMS320Fxxxxx
Tevo Tarantula 3D
Ponúkam 3D tlač.
Ponúkam návrh a vývoj elektroniky na zákazku.
UNIZA 5.ročník
- boraicho
- Ultimate člen
- Príspevky: 12404
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: veľa delay
namiesto delay použi for
for(int dl;dl<2000;dl++)
{
snimaj_tlačitko;
_delay_ms(1);
}
for(int dl;dl<2000;dl++)
{
snimaj_tlačitko;
_delay_ms(1);
}
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS
Re: pískanie na PWM
robím to cez arduino , ako tam mám zmeniť frekvenciu ?
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington
Chester Bennington
- Najgel
- Ultimate člen
- Príspevky: 1695
- Dátum registrácie: 02 Júl 2010, 00:00
- Bydlisko: Námestovo, Žilina(škola)
- Vek: 28
Re: pískanie na PWM
Naštuduj, ja s arduinom nerobím.
0
Keď neodpisujem tak tu nie som, alebo som a neodpisujem
MPLAB & PIC
Texas Instruments DSP TMS320Fxxxxx
Tevo Tarantula 3D
Ponúkam 3D tlač.
Ponúkam návrh a vývoj elektroniky na zákazku.
UNIZA 5.ročník
MPLAB & PIC
Texas Instruments DSP TMS320Fxxxxx
Tevo Tarantula 3D
Ponúkam 3D tlač.
Ponúkam návrh a vývoj elektroniky na zákazku.
UNIZA 5.ročník
Re: veľa delay
Prostě tu 2s. pauzu nahradím smyčkou do které vložím i ten odkaz reagující při stisknutí tlačítka. Pokud se tlačítko nestiskne, provede se x krát ta smyčka (2s) a program pokračuje dál. Pokud se tlačítko stiskne zareaguje to takřka okamžitě protože se to tlačítko v té smyčce neustále „testuje“.
boraicho: Jo to bude asi pro arduino ono
boraicho: Jo to bude asi pro arduino ono
0
Re: pískanie na PWM
pokiaľ viem tak sa to ani nedá ale opýtam sa na fóre v téme Arduino
! Jasne,ešte sa opýtaj vo viacej témach,aby sme mali po tebe čo riadiť."9 ) Je zakázané viacnásobné zakladanie tém." presunul a zlúčil: 9.10.2016 mirosne !
! Jasne,ešte sa opýtaj vo viacej témach,aby sme mali po tebe čo riadiť."9 ) Je zakázané viacnásobné zakladanie tém." presunul a zlúčil: 9.10.2016 mirosne !
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington
Chester Bennington
Re: veľa delay
tak a ty si ma doplietol ešte viacej ako som bol viac by mi pomohlo ak by si mi povedal ako to fuunguje alebo mi to doplnil do kódu ja to pochopím sám
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington
Chester Bennington
fmena frekvencie PWM
nazdar chcem sa opýtať či sa dá v arduine zmeniť frekvencia PWM pretože mam na PWM cez tranzistor zapojený 12V ventilátor a ten hrozne piští no a dostal som radu zmeniť frekvenciu PWM
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington
Chester Bennington
-
- Ultimate člen
- Príspevky: 2555
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: pískanie na PWM
Dobrý večer,
http://playground.arduino.cc/Code/PwmFrequency
Takto by sa to malo dať, avšak ako je tam aj napísané, zmenou nastavenia timerov Atmegy rozhádžete niektoré iné funkcie/knižnice. Ak nič z toho nepoužívate, mohlo by to fungovať.
http://playground.arduino.cc/Code/PwmFrequency
Takto by sa to malo dať, avšak ako je tam aj napísané, zmenou nastavenia timerov Atmegy rozhádžete niektoré iné funkcie/knižnice. Ak nič z toho nepoužívate, mohlo by to fungovať.
0
Re: Pískanie na PWM
a problém je ten že používam takže nemôžem to meniť...
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington
Chester Bennington
-
- Ultimate člen
- Príspevky: 2555
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Pískanie na PWM
Potom to vidím asi tak, že bude nutné program napísať bez použitia arduino knižníc, vtedy máte väčšiu kontrolu nad tým, ktorý timer je na čo.
Ale možno niekto skúsenejší niečo navrhne.
Ale možno niekto skúsenejší niečo navrhne.
0
Re: Pískanie na PWM
bez zmeny frekvencie, by som to riesil pridanim diody, tlmivky, kondenzatora (vytvoris na vystupe stepdown menic), do motora uz pojde iba nekmitajuce napetie, a nebude to tak cvakat.
0
Re: pískanie na PWM
Pozri co ma na sebe napisane ten cipv tom tvojom arduine. Tipoval by som ze je to Atmgega328 .ITIaster napísal:robím to cez arduino , ako tam mám zmeniť frekvenciu ?
Tu je k nemu datasheet:
http://www.atmel.com/Images/Atmel-42735 ... asheet.pdf
Od kapitoly 19 zacina casovace. Je tam aj to ako sa generuje PWM, mody PWM. Aj od coho zavisi jej frekvencia. Takze studuj studuj.
Fakt sa to velmi tazko sem pise a vysvetluje do fora.
0
Darovanému tranzistoru sa na kremík nepozeraj.
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok