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, 10:01. Visos datos yra GMT + 2 valandos.
 Forumas » Programavimas » Su PWM valdymu nesusitvarkau
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ą 
 Su PWM valdymu nesusitvarkau
PranešimasParašytas: 2014 10 28, 09:58 Pranešti apie taisyklių pažeidimą Atsakyti su citata
ewas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Šiokį tokį suraičiau PWM valdymą, bet jis "šlubas" jei startuoja kaip ir tvarkingai nuo 350 ir reguliuojasi į visas puses, bet kai nuvarai iki 500 t.y. stop atgal nebegaliu sugrįžti tenka restartinti, ko neįvyksta priešingai kai PWM didini t.y. link 0, 0=max apsukos, jos ten "neužsikerta".
Suprantu, kad primityvus kodas, bet gal galite psiūlyti kokį sprendimo būdą kaip "neužstrikti tie 500?

#include <Wire.h>
#include <avr/interrupt.h>
int MotorPWM = 10;
int MotorSpeed = 350; // vary this value between 0 and 500 for 9-bit precision whereby 500 = stop and 0 = full speed

/*čia išimti membraninės 4x4 klaviatūros ir LCD nustatymai ir bibliotekos*/

void setup()
{

TCCR1A = B11110010;
TCCR1B = B00010001;
ICR1 = 500 ; // 9 bit resolution, this value sets the frequency of the PWM-signal to 16kHz
OCR1B = 500; // vary this value between 0 (max power) and 500 (500 = off) for 9-bit precision - PWM at pin MotorPWM
pinMode(MotorPWM, OUTPUT); // declare the port as an OUTPUT OCR1A = 1023;
analogWrite(MotorPWM,MotorSpeed); //initialize primary pwm
}

void loop()
{
// čia išimti LCD informaciniai pranešimai

if (Key =='1')
{
lcd.clear();
lcd.setCursor(0,0); lcd.print("didiname apsukas");
if (MotorSpeed > 0) {MotorSpeed = MotorSpeed -50; lcd.setCursor(10,1); lcd.print(MotorSpeed);}
if (OCR1A < 500) {OCR1A = MotorSpeed;}
if (OCR1B < 500) {OCR1B = MotorSpeed;}
}
if (Key == '7')
{
lcd.clear();
lcd.setCursor(0,0); lcd.print("maziname apsukas");
if (MotorSpeed < 500) {MotorSpeed = MotorSpeed +50; lcd.setCursor(10,1); lcd.print(MotorSpeed);}
if (OCR1A < 500) {OCR1A = MotorSpeed;}
if (OCR1B < 500) {OCR1B = MotorSpeed;}
}
}
 Su PWM valdymu nesusitvarkau
PranešimasParašytas: 2014 10 28, 11:04 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Tiesa sakant nesigilinau i koda, bet siaip uzmetus aki panasu, kad nezinai tokiu salygu kaip "daugiau arba lygu" >= ir "maziau arba lygu" <=.

Citata:

if (MotorSpeed > 0) {MotorSpeed = MotorSpeed -50; lcd.setCursor(10,1); lcd.print(MotorSpeed);}
if (OCR1A < 500) {OCR1A = MotorSpeed;}
if (OCR1B < 500) {OCR1B = MotorSpeed;}

}
if (Key == '7')
{
lcd.clear();
lcd.setCursor(0,0); lcd.print("maziname apsukas");
if (MotorSpeed < 500) {MotorSpeed = MotorSpeed +50; lcd.setCursor(10,1); lcd.print(MotorSpeed);}
if (OCR1A < 500) {OCR1A = MotorSpeed;}
if (OCR1B < 500) {OCR1B = MotorSpeed;}

}
}

copy-pasta bug'as?

O siaip del bendros kulturos, kiekvienas kintamuju priskyrimas turi buti naujoje eiluteje. Pratinkis dabar, nes jei teks dirbti kokioje rimtesneje kompanijoje, tai kodo tikrinimo irankiai tokio dalyko nepraleis. Pvz.:
Kodas:

if (MotorSpeed > 0) {
   MotorSpeed = MotorSpeed - 50;
   lcd.setCursor(10,1);
   lcd.print(MotorSpeed);
}
 Su PWM valdymu nesusitvarkau
PranešimasParašytas: 2014 10 28, 11:47 Pranešti apie taisyklių pažeidimą Atsakyti su citata
ewas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Socrates rašo:
Tiesa sakant nesigilinau i koda, bet siaip uzmetus aki panasu, kad nezinai tokiu salygu kaip "daugiau arba lygu" >= ir "maziau arba lygu" <=.

copy-pasta bug'as?


Kadangi aš neprogramuotojas, o tik laisvalaikiu bandau eksperimentuoti šioje srityje, kartais pasitikėjimas "ale' programuotojais" pakiša koją. Kaip ir šiuo atveju tai nukopinau kodą (tą dalį kur su registrais PWM dažnis išgaunamas) iš roboto-skraiduolio reversinio valdymo schemos, maniau, kad ji veikianti, juo lab, kad ir klipas yra kaip jis skraido Smile. Gal tyčia kokių lepų įkišo.
Bet nežiūrint to PWM generacija yra būtent tokia kokios reikia ir reguliuojasiaip kaip esu pasirašęs, visa kita jau mano autorystė.
Socrates rašo:

O siaip del bendros kulturos, kiekvienas kintamuju priskyrimas turi buti naujoje eiluteje. Pratinkis dabar, nes jei teks dirbti kokioje rimtesneje kompanijoje, tai kodo tikrinimo irankiai tokio dalyko nepraleis. Pvz.:
Kodas:

if (MotorSpeed > 0) {
   MotorSpeed = MotorSpeed - 50;
   lcd.setCursor(10,1);
   lcd.print(MotorSpeed);
}


Na nesibark, dėl kultūros, kitą kartą patvarkysiu, kaip dera, nes kadangi sau rašiau, tai man lengviau taip skaitosi ir visokių kabliukų skliaustukų nepametu Smile
Rimtesnėje kompanijoje (nei dabar) turbūt jau nebeteks dirbti. Senas perdalius jau niekam nebeįdomus ir juolab kaip "ale programuotojas" Smile
Na gerai grįžtame prie kodo tai gal ten ir turi būti "mažiau", o ne "mažiau arba lygu" nesupratau ką norėjote pasakyt.
 Su PWM valdymu nesusitvarkau
PranešimasParašytas: 2014 10 28, 14:02 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Ok, reikia pasinagrineti koda.
Kaip suprantu pradeda neveikti po to, kai keleta kartu paspaudziamas skaicius 7?
Jei po paleidimo paspaudi tris kartus skaiciu 7, tai nuo to laiko ir uzstringa?
 Su PWM valdymu nesusitvarkau
PranešimasParašytas: 2014 10 28, 14:24 Pranešti apie taisyklių pažeidimą Atsakyti su citata
ewas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Taip kai pasiekia 500 ribą ir PWM generacija sustoja ir spaudant 1 MotorSpeed skaičiukai keičiasi, bet PWM - ne.
 Su PWM valdymu nesusitvarkau
PranešimasParašytas: 2014 10 28, 14:31 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
ewas rašo:
Taip kai pasiekia 500 ribą ir PWM generacija sustoja ir spaudant 1 MotorSpeed skaičiukai keičiasi, bet PWM - ne.


Taigi ka as ir minejau apie salyga "daugiau arba lygu". Dabartineje situacijoje pas tave yra tikrinimas, ar registro reiksme yra maziau, negu 500.
Taigi tu paleidi programa, kurioje priskiri MaxSpeed reiksme 350. Po triju paspaudimu, tavo MaxSpeed tampa lygus 500. Si reiksme taip pat priskiriama PWM registram, todel kai tu jau tikrini ar reiksme yra mazesne uz 500, tai atsakymas beabejo ne. Tau reikia tikrini ar reiksme mazesne arba lygi 500.
 Su PWM valdymu nesusitvarkau
PranešimasParašytas: 2014 10 28, 16:23 Pranešti apie taisyklių pažeidimą Atsakyti su citata
ewas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Sutinku, bet tada kita dar mintis, kad reiktų uždrausti reikšmę didinti virš 500 nes, gerai jei 500 ir sąlyga <= tenkinama, o jei 600, 700.

if (MotorSpeed>500) { MotorSpeed==MotorSpeed;}

turbūt nusišnekėjau. Neturiu kaip pabandyti.
 Su PWM valdymu nesusitvarkau
PranešimasParašytas: 2014 10 28, 17:06 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Socrates
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
ewas rašo:
Sutinku, bet tada kita dar mintis, kad reiktų uždrausti reikšmę didinti virš 500 nes, gerai jei 500 ir sąlyga <= tenkinama, o jei 600, 700.

if (MotorSpeed>500) { MotorSpeed==MotorSpeed;}

turbūt nusišnekėjau. Neturiu kaip pabandyti.


Nelabai supratau, ka cia norejai padaryti, bet tau pravartu butu ismokti apriboti reiksme iki tam tikro skaiciaus. Tas dalykas vadinamas bitu maskavimu (eng. bit mask), pasiskaityk apie tai. Siuo atveju uzmaskaves bitus susidursi dar ir su kita problema, bet paliksiu issiaiskinti paciam Smile
Kitas variantas yra tiesiog pastoviai tikrinti ar tavo skaiciuojama reiksme perlipa per nustatyta riba ir jei taip, tai kintamojo reiksme nustatyti lygia ribai.

Tarkim max = 500.
if (var > 500) var = max;
 Su PWM valdymu nesusitvarkau
PranešimasParašytas: 2014 10 28, 17:29 Pranešti apie taisyklių pažeidimą Atsakyti su citata
sopkis
Moderatorius
Moderatorius
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje ICQ numeris
Mano nuomone tai geriau pradėti mokytis nuo nulio, o ne kopypastinant svetimą kodą ir poto bandytis aiškintis kaip jis veikia.

_________________
LY1PR
 Su PWM valdymu nesusitvarkau
PranešimasParašytas: 2014 10 28, 21:34 Pranešti apie taisyklių pažeidimą Atsakyti su citata
ewas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Question


Paskutinį kartą redagavo ewas, 2014 10 29, 20:43. Redaguota 1 kartą
 Su PWM valdymu nesusitvarkau
PranešimasParašytas: 2014 10 28, 22:50 Pranešti apie taisyklių pažeidimą Atsakyti su citata
ewas
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Socrates rašo:

Taigi ka as ir minejau apie salyga "daugiau arba lygu". Dabartineje situacijoje pas tave yra tikrinimas, ar registro reiksme yra maziau, negu 500.
Taigi tu paleidi programa, kurioje priskiri MaxSpeed reiksme 350. Po triju paspaudimu, tavo MaxSpeed tampa lygus 500. Si reiksme taip pat priskiriama PWM registram, todel kai tu jau tikrini ar reiksme yra mazesne uz 500, tai atsakymas beabejo ne. Tau reikia tikrini ar reiksme mazesne arba lygi 500.

Dėkui suveikė perrašius "<=" be jokių papildomų fintų, gal kas ir "nešvaru" bet pradžiai veikia "patobulėsiu" prišlifuosiu.
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