Pískanie na PWM

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

Používateľov profilový obrázok
ITIaster
Stály člen
Stály člen
Príspevky: 177
Dátum registrácie: 01 Jún 2014, 13:00
Vek: 25

Pískanie na PWM

Príspevok od používateľa ITIaster » 09 Okt 2016, 13:36

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 ?
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington

mr.mio
Ultimate člen
Ultimate člen
Príspevky: 5036
Dátum registrácie: 01 Okt 2009, 00:00
Bydlisko: Podunajska pahorkatina
Vek: 36

Re: veľa delay

Príspevok od používateľa mr.mio » 09 Okt 2016, 13:43

0

Používateľov profilový obrázok
ITIaster
Stály člen
Stály člen
Príspevky: 177
Dátum registrácie: 01 Jún 2014, 13:00
Vek: 25

Re: veľa delay

Príspevok od používateľa ITIaster » 09 Okt 2016, 13:48

pfuuu diki a vedel by si mi to aj vysvetliť? lebo som z toho mimo :D :D :D
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington

Používateľov profilový obrázok
ITIaster
Stály člen
Stály člen
Príspevky: 177
Dátum registrácie: 01 Jún 2014, 13:00
Vek: 25

Re: veľa delay

Príspevok od používateľa ITIaster » 09 Okt 2016, 16:04

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

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);
}
}
je to len tak narýchlo zbúchané taže tie omačky navyše čo som experimentoval a nevymazal, si nevšímajte :D
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington

jova
Stály člen
Stály člen
Príspevky: 201
Dátum registrácie: 12 Júl 2016, 00:00
Kontaktovať používateľa:

Re: veľa delay

Príspevok od používateľa jova » 09 Okt 2016, 16:43

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

Používateľov profilový obrázok
ITIaster
Stály člen
Stály člen
Príspevky: 177
Dátum registrácie: 01 Jún 2014, 13:00
Vek: 25

pískanie na PWM

Príspevok od používateľa ITIaster » 09 Okt 2016, 16:54

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

Používateľov profilový obrázok
ITIaster
Stály člen
Stály člen
Príspevky: 177
Dátum registrácie: 01 Jún 2014, 13:00
Vek: 25

Re: veľa delay

Príspevok od používateľa ITIaster » 09 Okt 2016, 16:56

skús mi to bližšie popísať , ako amatérovi :D diki :D
0
"Nemôžete sa báť ľudí, že vám ublížia, pretože ak sa budete obávať života, nikdy nebudete žiť..."
Chester Bennington

Používateľov profilový obrázok
Najgel
Ultimate člen
Ultimate člen
Príspevky: 1695
Dátum registrácie: 02 Júl 2010, 00:00
Bydlisko: Námestovo, Žilina(škola)
Vek: 29

Re: pískanie na PWM

Príspevok od používateľa Najgel » 09 Okt 2016, 17:08

Zmeň frekvenciu PWM.
0
Keď neodpisujem tak tu nie som, alebo som a neodpisujem :D

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

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12407
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: veľa delay

Príspevok od používateľa boraicho » 09 Okt 2016, 17:11

namiesto delay použi for

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

Používateľov profilový obrázok
ITIaster
Stály člen
Stály člen
Príspevky: 177
Dátum registrácie: 01 Jún 2014, 13:00
Vek: 25

Re: pískanie na PWM

Príspevok od používateľa ITIaster » 09 Okt 2016, 17:11

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

Používateľov profilový obrázok
Najgel
Ultimate člen
Ultimate člen
Príspevky: 1695
Dátum registrácie: 02 Júl 2010, 00:00
Bydlisko: Námestovo, Žilina(škola)
Vek: 29

Re: pískanie na PWM

Príspevok od používateľa Najgel » 09 Okt 2016, 17:12

Naštuduj, ja s arduinom nerobím.
0
Keď neodpisujem tak tu nie som, alebo som a neodpisujem :D

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

jova
Stály člen
Stály člen
Príspevky: 201
Dátum registrácie: 12 Júl 2016, 00:00
Kontaktovať používateľa:

Re: veľa delay

Príspevok od používateľa jova » 09 Okt 2016, 17:16

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 :)
0

Používateľov profilový obrázok
ITIaster
Stály člen
Stály člen
Príspevky: 177
Dátum registrácie: 01 Jún 2014, 13:00
Vek: 25

Re: pískanie na PWM

Príspevok od používateľa ITIaster » 09 Okt 2016, 17:17

pokiaľ viem tak sa to ani nedá :D ale opýtam sa na fóre v téme Arduino :D

! 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

Používateľov profilový obrázok
ITIaster
Stály člen
Stály člen
Príspevky: 177
Dátum registrácie: 01 Jún 2014, 13:00
Vek: 25

Re: veľa delay

Príspevok od používateľa ITIaster » 09 Okt 2016, 17:19

tak a ty si ma doplietol ešte viacej ako som bol :D 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

Používateľov profilový obrázok
ITIaster
Stály člen
Stály člen
Príspevky: 177
Dátum registrácie: 01 Jún 2014, 13:00
Vek: 25

fmena frekvencie PWM

Príspevok od používateľa ITIaster » 09 Okt 2016, 17:21

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

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2573
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: pískanie na PWM

Príspevok od používateľa maskrtnik01 » 09 Okt 2016, 17:25

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ť.
0

Používateľov profilový obrázok
ITIaster
Stály člen
Stály člen
Príspevky: 177
Dátum registrácie: 01 Jún 2014, 13:00
Vek: 25

Re: Pískanie na PWM

Príspevok od používateľa ITIaster » 09 Okt 2016, 17:45

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

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2573
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Pískanie na PWM

Príspevok od používateľa maskrtnik01 » 09 Okt 2016, 18:01

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.
0

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4319
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: Pískanie na PWM

Príspevok od používateľa misocko » 09 Okt 2016, 18:18

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

24mato
Stály člen
Stály člen
Príspevky: 301
Dátum registrácie: 09 Jún 2011, 00:00
Bydlisko: PD

Re: pískanie na PWM

Príspevok od používateľa 24mato » 09 Okt 2016, 20:17

ITIaster napísal:robím to cez arduino , ako tam mám zmeniť frekvenciu ?
Pozri co ma na sebe napisane ten cipv tom tvojom arduine. Tipoval by som ze je to Atmgega328 .

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.

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok