Elektronika.lt
 2024 m. kovo 29 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2024 03 29, 07:50. Visos datos yra GMT + 2 valandos.
 Forumas » Programavimas » PIC18 delay su tmr1
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 11
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 PIC18 delay su tmr1
PranešimasParašytas: 2019 03 26, 19:05 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Moterka
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Sveiki, pasileidau tmr1 per mcc kurio periodas 50us, nes reikia clocko 10kHz, į išvadą RC0 išvedžiau taip:

Kodas:
if (TMR1_HasOverflowOccured())
        {                                                   
            IO_RC0_Toggle();
            TMR1_Reload();
            TMR1IF = 0;
        }


Viskas būtų gerai, jei čia programa ir baigtusi, bet toliau vykdau šitai:

Kodas:
/*TEMPIMAS CW**********************************************************/
        if (res==0){
            LATA = 0b01101100; //programled;reset;m2;m1-1
            LATC = 0b00001000; //enable-1
        /*ATLEIDIMAS CCW*******************************************************/   
        }else if (set==0){ //-/set mygtuko nuspaudimas
            LATA = 0b01101100; //programled;reset;m2;m1-1
            LATC = 0b00001100; //enable;ccw-1
        }else{
            LATA = 0;
            LATC = 0;
        }


Ir prie šitų mygtukų negaliu naudoti šitokio vėlinimo:

Kodas:
void delay (unsigned int ms){
    unsigned int i;
    while (ms--){
        for (i = 0; i < 398; i++);

    }
}


Nes programa sustoja, sustoja ir mano clockas. Niekaip neįšeina suregzti kažkokio vėlinimo su tuo pačiu tmr1 įsivedus kintamuosius. Gal kas galit padėt?


Paskutinį kartą redagavo Moterka, 2019 03 26, 23:47. Redaguota 4 kartus(ų)
 PIC18 delay su tmr1
PranešimasParašytas: 2019 03 26, 19:45 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Panasu, kad isvado kontrole tau reikia vykdyti paciame timer interrupte.
 PIC18 delay su tmr1
PranešimasParašytas: 2019 03 26, 20:16 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Moterka
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Ta prasme sugeneruotame tmr1.c faile?
 PIC18 delay su tmr1
PranešimasParašytas: 2019 03 26, 20:55 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Moterka rašo:
Ta prasme sugeneruotame tmr1.c faile?


Noras visgi neisiziurejau is pradziu...
Parodyk ka daro funkcija IO_RC0_Toggle();?
 PIC18 delay su tmr1
PranešimasParašytas: 2019 03 26, 21:21 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Moterka
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
#define IO_RC0_Toggle() do { LATCbits.LATC0 = ~LATCbits.LATC0; } while(0)

ištraukiau iš pin_manager.h, kiek matau ant proteus ir ant realaus maketo, ima tik puse clock periodo, tai todėl ir laiką imu 50us, o ne 100us norėdamas gauti 10kHz clock signalą. Aplamai šita komanda paimta iš pavyzdžio, nežinau ar galiu naudot kažkokia kitą, visa ta vieta if (TMR1_........ paimta iš pavyzdžio.
 PIC18 delay su tmr1
PranešimasParašytas: 2019 03 26, 23:03 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Moterka
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Dabar pastebėjau, kad dažnis gaunasi jau 16,...kHz, pakeičiau periodo laiką į 90us, jei pakeičiu į 100us gaunu, jau virš 10kHz... Bet vistiek kažkaip kreivai viskas veikia, kai nespaudžiu jokio mygtuko ant clock turiu 9739Hz:


O jei žingsninį variklį noriu pasukt į kažkurią pusę, dažnis pakyla iki 9979Hz:


Iš pradžių galvojau, kad čia proteus man grybauja, pamėginau ant maketo, rodosi pats grybauju Very Happy
 PIC18 delay su tmr1
PranešimasParašytas: 2019 03 26, 23:11 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Nepyk, vakar biski klaidu iveliau, debauncinga aprasiau, o klaviso busenos nevertinau. Ziurek zemiau.


Paskutinį kartą redagavo AlgisL, 2019 03 27, 07:29. Redaguota 1 kartą
 PIC18 delay su tmr1
PranešimasParašytas: 2019 03 26, 23:30 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Kompiliuoji su FREE mcc, tai nenustebk, kad bajeris su soft reload veikia neteisingai, nes kompileris is principo gamina 4 kar ilgesni ir 6 kar neefektyvesni koda, arba mokek 1000eu vienam mikrovaldikliu tipui.
nebent suderintum su univeru ar kolegija del studentiskos licencijos.
Jei iseina, pasiskaiciuok koks max PRESCALERis tau tinka ir ji naudok.
TMR1 ivykius apdorok pirmiausia, susitikrink kad priority butu HIGH, jei naudoji prioretizavima, o kitus ivykius nustatyk kaip LOW.
Kadangi PRESCALERis resetinamas irasant i TMR1, tai jei kiek nors uzdelsi tai padaryti, tai ir gauni neteisinga perioda.
https://www.mikroe.com/ebooks/pic-microcontrollers-programming-in-c/timer-tmr1
 PIC18 delay su tmr1
PranešimasParašytas: 2019 03 26, 23:55 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Moterka
Dažnas dalyvis
Dažnas dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Su skaitliukais nelabai pagavau minties, nors ir su pvz. pateikei, bet vistiek.
Apie patį darbą, dabar tikslas padaryti, kad paspaudus res mygtuką variklis suktusi 2 sekundes (dabar sukasi kol mygtukas laikomas), o paspaudus set mygtuką irgi 2 sekundes tik į kitą pusę, ta prasme, kad paspaudus išmestu aukštus ant tų išvadų kuriuos nurodęs LATA ir LATC.

Pasiskaičiuot prescaleri ir naudot, ta prasme visą tmr1 parašyti pačiam kode, o ne konfigūruoti per mcc ar kaip? Ir kaip su prioretizavimu, tai irgi aprašoma pačiam kode ar kažkur mcc?

Kolegijoje taip pat free mcc, tai apie studentiškas licenzijas turbūt nėra ką kalbėt.
 PIC18 delay su tmr1
PranešimasParašytas: 2019 03 27, 00:27 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
ten kur pavyzdyje debauncinge "veiksmai = 20ms" iterpi
Kodas:

#define btnPin1 PORTBbits.RB0
#define btnPin2 PORTBbits.RB1
#define CW_PULSE() .....
#define CCW_PULSE() ....
void doM1steps( int steps );
volatile unsigned char btnPressed1 = 0;
volatile unsigned char btnPressed2 = 0;
volatile int stepsM1 = 0;

void isr_high( void ) {
   if (TMR1IE && TMR1IF) {
      TMR1 = TMR1_SEED;
      // kiti tavo veiksmai su pinais ir t.t.
      // klaviso debaunce
      // lai buna pasleptas nuo likusiu proceduru
      static unsigned int debounceCounter1 = 0;
      static unsigned char oldState1 = btnPin1;
      unsigned char newState1 = btnPin1;
      if (oldState1  != newState1) {
         oldState1 = newState1;
         debounceCounter1 = 0;
         // kiti veiksmai, kai keiciasi busena, bet ji nenusistovejusi
      } else
      if (60000 >= debounceCounter1) {  // mygtuko busena sekama iki 6 sek
          if (200 == ++debounceCounter1) { // 10kHz/200=50ms
             if ( !newState1 ) { // dazniausiai mygtukai trumpina i GND
                  btnPressed1 = 1;
                 // nuspaustas ir debouncintas btn1
                stepsM1 += 1000; // suksis CW 1000 zingsneliu
                 // kiti veiksmai nuspaudus mygtuka
             }  else  { // buvo atleistas
                   btnPressed1 = 0;
                  // kiti veiksmai atleidus mygtuka
             }
             // kiti galimi veiksmai, kai busena nusistovejusi 50ms
          } else {
             // kiti galimi veiksmai, kai busena nusistovejusi <50ms
          }
      } else {
          // kiti galimi veiksmai, kai busena nusistovejusi >50ms
      }

      static unsigned int debounceCounter2 = 0;
      static unsigned char oldState2 = btnPin2;
      unsigned char newState2 = btnPin2;
      if (oldState2  != newState2) {
         oldState2 = newState2;
         debounceCounter2 = 0;
         // kiti veiksmai, kai keiciasi busena, bet ji nenusistovejusi
      } else
      if (60000 >= debounceCounter2) {  // mygtuko busena sekama iki 6 sek
          if (200 == ++debounceCounter2) { // 10kHz/200=50ms
             if ( !newState2 ) { // dazniausiai mygtukai trumpina i GND
                  btnPressed2 = 1;
                 // nuspaustas ir debouncintas btn2
                stepsM1 -= 1000; // suksis CCW 1000 zingsneliu
                 // kiti veiksmai nuspaudus mygtuka
             }  else  { // buvo atleistas
                   btnPressed2 = 0;
                  // kiti veiksmai atleidus mygtuka
             }
             // kiti galimi veiksmai, kai busena nusistovejusi 50ms
          } else {
             // kiti galimi veiksmai, kai busena nusistovejusi <50ms
          }
      } else {
          // kiti galimi veiksmai, kai busena nusistovejusi >50ms
      }

       // realiai cia dar reiktu ivertinti greitejima/letejima
       // juolab pertrauktis pas tave lyg ir 10kHz
      if ( 0 < stepsM1 ) { // CW
          CW_PULSE();
          stepsM1--;
      }else
      if ( 0 > stepsM1 ) { // CCW
         CCW_PULSE();
         stepsM1++;
      }

      TMR1IF = 0;
    }
}

// teigiamas - CW, neigiamas CCW
void doM1steps( int steps ) {
   GIE = 0;
   stepsM1 += steps;
   while ( 0 != stepmsM1 ) {
      GIE = 1;
      yeld(); // arba idle(); cia jau kaip nori
      GIE = 0;
   }
   GIE = 1;
}

// kazkur kode...
doM1steps( 2000 ); // CW 2000 zingsneliu;
doM1steps( -500 ); // CCW 500 zingsneliu;
Pradėti naują temą  Atsakyti į pranešimą
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

GENERAL FINANCING BANKAS

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

Technologijos.lt

Buitinė technika ir elektronika internetu žemos kainos – Zuza.lt

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

„Deinavos baldai“ — šeimos baldai

FS 22 Tractors
Farming Simulator 19 Mods, FS 22 Maps, FS22 Mods
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS22 Trucks
VAT calculator
VAT number check, What is VAT, How much is VAT
Paskola internetu
Vartojimo paskola, paskola automobiliui, paskola būsto remontui
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope
FS22 Mods
FS22 Harvesters, FS22 Tractors Mods, FS22 Maps Mods
FS22 Mods
FS22 Maps,
FS22 Harvesters,
FS22 Tractors
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
Sims 4 Mods
Sims 4 CC Clothes,
Sims 4 Hair CC,
Sims 4 Skill Cheat
Optic sight
Binoculars for hunting elk,
Best compact binoculars,
Riflescope hunting
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Script hook v, Openiv, Menyoo
gta5mod.net
Farming Simulator 2019 Mods, FS22 Mods, FS22 Maps
farmingsimulator19mods.fr
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Reklamos paslaugos
SEO sprendimai

www.addad.lt
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama