www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Uporaba Arduino timer-jev
Pojdi na stran Prejšnja  1, 2, 3
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
dejko1
Član
Član



Pridružen-a: Ned 16 Mar 2008 0:21
Prispevkov: 265
Aktiv.: 1.35
Kraj: Ljubljana

PrispevekObjavljeno: Sre Nov 26, 2014 2:22 pm    Naslov sporočila:   Odgovori s citatom

OCR1B je potrebno nastavit pred TCCR. Pa tisto ( a > (b+1) || a < (b-1) ) spremeniš na vsaj ( a > (b+5) || a < (b-5) ). Bi pa moral probat zadevo, da bi lahko rekel kaj ti nagaja...

OCR registre bi se mogoče dalo spreminjat v interruptih (z nekaj pametne logike kdaj spreminjat), da se znebiš ustavljanja timerja.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
KlemenD
Član
Član



Pridružen-a: Sre 18 Maj 2011 15:08
Prispevkov: 188
Aktiv.: 1.19
Kraj: Maribor

PrispevekObjavljeno: Sob Nov 29, 2014 1:57 pm    Naslov sporočila:   Odgovori s citatom

Zdravo,

vseeno kje nastavim ORC1B, napaka se ponovlja. Ali bi pomagalo, ce nalozim posnetek signala z osciloskopom kadar se obraca potenciometer ?

Lep pozdrav,
Klemen
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.05

PrispevekObjavljeno: Sob Nov 29, 2014 2:34 pm    Naslov sporočila:   Odgovori s citatom

Ja pa ne moreš (beri: ne smeš) vsakič izvesti celotnega setup() z nastavitvami portov, timerjev in vsega ostalega.
Takrat signal na prvem izhodu začne s prvim impulzom 01, ne glede na trenutno stanje obeh izhodov 00, 01, 10, 11. Ti to opaziš kot premik faze, čeprav iz stališča MCU to ni. On samo začne znova.

Spremeni smo OCR1B
Koda:


int a;
int b;
volatile int c;

void setup() {
  TCCR1A=0;
  TCCR1B=0;
  PORTB=0x00;
  DDRB=0x06;
 
  ICR1=199;
  OCR1A=0; 
  TCNT1=0;
  TCCR1A=0x50;
  TCCR1B=0x19;
  OCR1B= c;
}

void loop() {
 a = analogRead(0);
 if( a > (b+1) || a < (b-1) )
  {    //tole za silo popravi skakanje
  c = round(a*(199/1023.0));
  while (!TCNT1){} ;   // Počakaš, da je TCNT1 enak 0
  OCR1B= c;  // nato spremeniš vrednost
  b = a;
  }
}

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
KlemenD
Član
Član



Pridružen-a: Sre 18 Maj 2011 15:08
Prispevkov: 188
Aktiv.: 1.19
Kraj: Maribor

PrispevekObjavljeno: Sob Nov 29, 2014 6:55 pm    Naslov sporočila:   Odgovori s citatom

Pozdravljen,

navedena koda še vedno ne popravi obračanja signala Sad

Lep pozdrav,
Klemen
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
KlemenD
Član
Član



Pridružen-a: Sre 18 Maj 2011 15:08
Prispevkov: 188
Aktiv.: 1.19
Kraj: Maribor

PrispevekObjavljeno: Sob Nov 29, 2014 11:25 pm    Naslov sporočila:   Odgovori s citatom

igo a nebi potem delalo, če bi samo PORTB register pustil namiru, ko stvar resetiram ? Temu ni tako...koda še vedno ne deluje Sad

Takole:
Koda:


int a;
int b;
volatile int c;
volatile int i;

void setup() {
  TCCR1A=0;
  TCCR1B=0;
  if( i == 0)˙{
      PORTB=0x00;
      i = 1;
  }
  DDRB=0x06;
 
  ICR1=199;
  OCR1A=0; 
  TCNT1=0;
  TCCR1A=0x50;
  TCCR1B=0x19;
  OCR1B= c;
}

void loop() {
 a = analogRead(0);
 if( a > (b+1) || a < (b-1) ){    //tole za silo popravi skakanje
  c = round(a*(199/1023.0));
  setup(); 
  b = a;
    }

}
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
dejko1
Član
Član



Pridružen-a: Ned 16 Mar 2008 0:21
Prispevkov: 265
Aktiv.: 1.35
Kraj: Ljubljana

PrispevekObjavljeno: Tor Dec 02, 2014 12:24 am    Naslov sporočila:   Odgovori s citatom

V bistvu PORT register ne vpliva na vrednost izhoda ki prihaja iz timerja. Da spremeniš vrednost pina moraš uporabit force compare match.

Evo koda ki bi mogla delovat:
Koda:

void setup() {
  PORTB=0x00;
  DDRB=0x06;
 
  ICR1=199;
  OCR1A=100;
  OCR1B=100;
  TCNT1=0;
  TCCR1A=0x50;
  TCCR1B=0x19;
}

int j=0;
int a;

void loop() {
  delay(100);
 
  a = analogRead(0);
  j = (a/3);
  if(j>199) j=199;
 
  TCCR1B=0x18;
  if((PINB&0x02)!=00) TCCR1C=0x80;
  if((PINB&0x04)!=00) TCCR1C=0x40;
  TCNT1=0;
  OCR1B = j;
  if(j==0) TCCR1C=0x40;
  TCCR1B=0x19;
}


Nekaj več o kodi:
http://www.rei-labs.net/arduino-generating-two-fast-phase-offset-signals

Hehe, reševanje tuje domače naloge je lahko tudi izziv Mr. Green
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Jani
Član
Član



Pridružen-a: Ned 14 Dec 2003 22:48
Prispevkov: 460
Aktiv.: 2.06
Kraj: Bela krajina

PrispevekObjavljeno: Ned Nov 13, 2016 12:11 pm    Naslov sporočila:   Odgovori s citatom

Pozdravljeni,

Na internetu sem našel PID regulacijo za spajkalnik z arduinom. Uspelo mi je spremeniti program do te mere, da regulacija začne delovati takoj, brez pritiska na tipko, želel bi pa še vključiti časovnik, ki bi regulacijo ugasnil po cca 3 urah. Regulacijo bi rad vključil spet za tri ure s pritiskom na katero koli tipko. Časovnik se mi zdi zelo uporaben, saj je včasih zgodi, da spajkalnik pozabim ugasniti Confused

Ker pa se mi ne sanja kako, lepo prosim nekoga, ki to obvlada.

Sicer pa toplo priporočam to regulacijo, saj se (zaenkrat) zelo dobro obnese! Temperaturo drži stabilno na +/- 1 stopinjo.

Hvala za pomoč!

Link projekta



spajkalnik_start_280.zip
 Opis:

Download
 Ime datoteke:  spajkalnik_start_280.zip
 Velikost datoteke:  2.73 KB
 Downloadano:  6 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5773
Aktiv.: 25.91
Kraj: Grosuplje

PrispevekObjavljeno: Ned Nov 13, 2016 4:32 pm    Naslov sporočila:   Odgovori s citatom

Jani pozdravljen,

uporabi funkcijo millis(), ki šteje milisekunde od začetka izvajanja programa (ko Arduino zaštarta).
Npr:
Koda:
unsigned long ShutDown; // Definiraš novo spremenljivko unsigned long tam kjer so ostale definicije, potem pa lahko daš v loop() ali funkcijo Buttons() test

ShutDown = millis();
if (ShutDown > 10800000){ //toliko milisekund je za 3 ure
fTset=0;
}


Če to dodaš v Buttons(), ki jo izvaja v Loop() bi potem izgledala funkcija Buttons() nekeko takole:
Koda:
void Buttons() {
 ShutDown = millis();
 if (ShutDown > 10800000){      //toliko milisekund je za 3 ure
 fTset=0;
 }

  if ((digitalRead(btnUp) == HIGH) && (digitalRead(btnDown) ==LOW )) {   
      fTSet = fTSet + 5.0 ;
      if (fTSet > 380.0)  {       fTSet = 380.0 ; }  //LIMIT to 380 degC
  } 
  if ((digitalRead(btnUp) == LOW) && (digitalRead(btnDown) ==HIGH )) {   
      fTSet = fTSet - 5.0 ;
      if (fTSet < 0.0)  {    fTSet = 0.0 ; } //LIMIT to 0
  } 
  if ((digitalRead(btnUp) == HIGH) && (digitalRead(btnDown) ==HIGH )) {   
      iPID_or_OnOff++ ; //increment
      if (iPID_or_OnOff > 1)  {     iPID_or_OnOff = 0; } //then reset it to 0
  }
  if (digitalRead(btnMode) == HIGH) {   
    fTSet = fTSet + 5.0;
    if (fTSet < 150.0) {   
        fTSet = 150.0 ;
      }   
      if ( (fTSet > 150.0) && (fTSet < 280.0 ) ) {  fTSet = 280.0 ;   }   
      if ( (fTSet > 280.0) && (fTSet < 320.0 ) ) {  fTSet = 320.0 ;   }   
      if ( (fTSet > 320.0) && (fTSet < 350.0 ) ) {  fTSet = 350.0 ;   }   
      if (fTSet > 350.0)                         {  fTSet = 0.0 ;     }   
  } 
}

In ko se to zgodi, da ne kompliciramo s programom, moraš resetirati Arduina, kajti millis() pride zopet na nulo čez 50 dni.
Enostavno daš dodatno tipko za reset, ki ga imaš na zunanjih pinih Arduina.

Definicijo unsigned long ShutDown; daj pa nekam na začetek programa, tja kjer so že ostale definicije spremenljivk.

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Jani
Član
Član



Pridružen-a: Ned 14 Dec 2003 22:48
Prispevkov: 460
Aktiv.: 2.06
Kraj: Bela krajina

PrispevekObjavljeno: Ned Nov 13, 2016 6:35 pm    Naslov sporočila:   Odgovori s citatom

Zdravo Jaka,

Hvala lepa za pomoč! Sem že vključil vrstice v program in preizkusil... DELA!!! Very Happy
Sicer dodatne tipke za reset ne morem dodati, saj imam ohišje že končano Confused Me pa prav nič ne moti, če po pretečenem času enostavno pritisnem na tipko izklop in ponovni vklop... Konec koncev ni prav veliko dnevov v letu, ko bi spajkal več kot tri ure skupaj Very Happy Se mi je pa zdel izklop uporabna funkcija.
No, na sliki mi manjka še konektor (dobim čez dva tedna Smile )

HVALA še enkrat!

LP



DSC_1324.jpg
 Opis:
 Velikost datoteke:  300.63 KB
 Pogledana:  23 krat

DSC_1324.jpg



spajkalnik_start_280_izklop.ino.zip
 Opis:

Download
 Ime datoteke:  spajkalnik_start_280_izklop.ino.zip
 Velikost datoteke:  2.9 KB
 Downloadano:  7 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MadMax
Član
Član



Pridružen-a: Pet 09 Sep 2005 22:16
Prispevkov: 4743
Aktiv.: 21.29

PrispevekObjavljeno: Ned Nov 13, 2016 7:03 pm    Naslov sporočila:   Odgovori s citatom

Na stojalo napelji eno žico, pa detektiraj kdaj je spajkalo odloženo.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5773
Aktiv.: 25.91
Kraj: Grosuplje

PrispevekObjavljeno: Ned Nov 13, 2016 8:01 pm    Naslov sporočila:   Odgovori s citatom

Jani je napisal/a:
...Sicer dodatne tipke za reset ne morem dodati, saj imam ohišje že končano Confused Me pa prav nič ne moti, če po pretečenem času enostavno pritisnem na tipko izklop in ponovni vklop... Konec koncev ni prav veliko dnevov v letu, ko bi spajkal več kot tri ure skupaj......
Ja, tudi ON/OFF je rešitev Wink
Ker je ohišje zelo lično narejeno, bi lahko malo delil kako si vse skupaj naredil, posebno pa čelno ploščo.

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Jani
Član
Član



Pridružen-a: Ned 14 Dec 2003 22:48
Prispevkov: 460
Aktiv.: 2.06
Kraj: Bela krajina

PrispevekObjavljeno: Ned Nov 13, 2016 9:05 pm    Naslov sporočila:   Odgovori s citatom

Hvala za pohvalo Very Happy So mi kar krilca narasla..
Čelno ploščo sem zrisal v programu Front designer. Program je že precej star, je pa zelo enostaven. Še posebej, če narediš tu pa tam kakšno čelno ploščo.
V osnovi je ohišje zelo enostavno, saj je sestavljeno iz 6 stranic in 8 veznih elementov. Na sliki se jih malce vidi. Stranice so iz 2,5mm aluminija. Vse stranice razen prve, sem skrtačil in polakiral s prozornim lakom. Čelna plošča je pobarvana z belim sprejem (2x), nato pa sem gor nalepil natisnjeno nalepko. Tri tipke (gre za mikro tipkice) sem na zadnjo stran nalepil z epoksijem, nato pa jih toliko pobrusil, da so gledale desetinko milimetra čez aluminij. To sem naredil seveda pred lepljenjem nalepke. Tipkice se obnašajo zelo podobno kot folijska tipkovnica. Za takšno izdelavo sem se odločil zgolj zaradi tega, ker nisem imel primernih stikal. Res pa je, da teh tipk ne bom pritiskal 23x na dan, ampak le občasno. Ta spajkalnik bo namreč le kot rezerva.



Nalepka za spajkalnik.pdf
 Opis:

Download
 Ime datoteke:  Nalepka za spajkalnik.pdf
 Velikost datoteke:  20.15 KB
 Downloadano:  13 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3
Stran 3 od 3

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 69 dni


Powered by phpBB © 2001, 2005 phpBB Group