nico_2010 Postat Iunie 25, 2014 Partajează Postat Iunie 25, 2014 Ca sa nu mai continuam discutia de dragul discutiei, ai dreptate, am gresit si am explicat si motivul greselii. Multumit? Link spre comentariu
costyy86 Postat Noiembrie 30, 2014 Partajează Postat Noiembrie 30, 2014 Salutare. Vreau sa aprind un led, folosind un atmega,de fapt este un test. Ce comanda trebuie sa dau tinand cont ca voi folosi PWM1. Sa il aprind la o anumita intensitate stiu, dar nu stiu cum sa cresc intensitatea cu fiecare apasare de buton, $regfile "m8def.dat"$crystal = 1000000 Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1Config Portd.4 = InputSet Portd.4Light Alias Pind.4 Do If Light = 1 ThenCompare1a = 300 End If LoopEnd Link spre comentariu
nickrvl Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 (editat) In primul rind creaza o variabila pentru "Compare1a = 300", poate "Dim Valoare As Word(sau alt tip)", astfel "Compare1a = Valoare". Defineste butoane : Creste Alias Pinb.0 Scade Alias Pinb.1 si: Valoare = 100 Do if creste = 0 then Incr Valoare 'buton if scade = 0 then Decr Valoare 'buton waitms = 1 'temporizare pentru creste sau descreste "Valoare" cu o viteza rezonabila, fara va creste/descreste instantaneu Compare1a = Valoare Loop Ce am scris este pur teoretic, e netestat, dar cam asta ar fi idea, mai trebuie implementat in soft limita maxima si limita minima pe care o poate lua "Valoare", o sa-ti dai seama de ce mai este nevoie..... Editat Decembrie 1, 2014 de nickrvl Link spre comentariu
nico_2010 Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 La multi ani tuturor romanilor! Foloseste "Debounce". Cam asa ar trebui sa arate comenzile: Main:Do Debounce Pind.4 , 0 , Up_count , Sub ' up_count este o subrutina Debounce Pind.5 , 0 , Dn_count , Sub' dn_count este o subrutinaCall CalcCall Disp'Call IdoicLoop Link spre comentariu
costyy86 Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 (editat) Am un atmega16 si m-am pus sa fac practic, pe un cablaj de test, dar din pacate nu stiu cum sa continui codul, mai exact cum sa implementez limita minima si maxima, banui ca din acea cauza nu functioneaza nu are nici un efect, codul pe care il folosesc este mai jos. '$sim$regfile "m16def.dat"$crystal = 1000000 Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1Config Porta.0 = InputConfig Porta.1 = InputSet Porta.0Set Porta.1 Creste Alias Pina.0Scade Alias Pina.1Dim Valoare As Word Valoare = 100 Do If Creste = 0 Then Incr Valoare 'buton If Scade = 0 Then Decr Valoare 'buton Waitms 200 'temporizare pentru creste sau descreste "Valoare" cu o viteza rezonabila, fara va creste/descreste instantaneu COMPARE1A = Valoare Loop @nico, am incercat ceva si cu, codul de la tine, dar cum nu am experienta prea multa, nu am reusit nimic... Editat Decembrie 1, 2014 de costyy86 Link spre comentariu
costyy86 Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 Am refacut codul altfel, functioneaza doar ca nu stiu ca mai sus sa implementez limita maxima si minima, astfel ca la mine cand ajunge la maxim si mai apas odata o ia iarasi de la minim si viceversa... '$sim$regfile "m16def.dat"$crystal = 1000000 Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1Config Porta.0 = InputConfig Porta.1 = InputSet Porta.0Set Porta.1 Creste Alias Pina.0Scade Alias Pina.1Dim Valoare As Word Do If Creste = 1 ThenValoare = Valoare + 50Waitms 100End If If Scade = 1 ThenValoare = Valoare - 50Waitms 100Compare1a = Valoare End If LoopEnd Link spre comentariu
Depanatoru Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 (editat) limita se face cam asa if creste = 1 then if valoare < 1000 then valoare = valoare + 50 end ifwaitms 100end if in loc de 1000 pui valoarea care trebuie la tine , nu m-am uitat atent , asa incat ultima incrementare cu 50 sa nu depaseasca maximul . La minim pui valoare >= 50 ca scazand inca 50 sa ajunga la 0 Editat Decembrie 1, 2014 de Depanatoru 1 Link spre comentariu
costyy86 Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 Multumesc, functioneaza "aproapte" bine, la minim nu vrea sa se duca la zero deloc, ramane la 50, sau daca pun alte valori, sa spunem 10, la minim ramane la 10 nu vrea sa coboare la zero, la maxim merge bine.. Link spre comentariu
Depanatoru Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 Nu ai omis sa pui valoare > = 50 ? Link spre comentariu
costyy86 Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 Nu, am pus, uite codul mai jos. $regfile "m16def.dat"$crystal = 1000000 Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1Config Porta.0 = InputConfig Porta.1 = InputSet Porta.0Set Porta.1 Creste Alias Pina.0Scade Alias Pina.1Dim Valoare As Word Do If Creste = 1 Then If Valoare < 1000 ThenValoare = Valoare + 100Waitms 150 End IfEnd If If Scade = 1 Then If Valoare >= 100 ThenValoare = Valoare - 100 Waitms 150Compare1a = Valoare End IfEnd If LoopEnd Link spre comentariu
Depanatoru Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 Daca "valoare" e mereu multiplii de 100 si nu pot aparea alte valori de prin alta zona a programului trebuie sa mearga , altfel trebuie putin regandit Link spre comentariu
costyy86 Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 (editat) Gata am descoperit, lipseste un "=" din urmatoarea comanda, cel cu rosu If Creste = 1 Then If Valoare <= 1024 Then Valoare = Valoare + 100 Waitms 150 Multumesc. L.E. Dar daca tin apasat pe butonul scade, dupa ce ajunge la zero, sare la tensiunea maxima, aprinde ledul la maxim atat timp cat tim butonul apasat, de ce? Editat Decembrie 1, 2014 de costyy86 Link spre comentariu
nico_2010 Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 Cred ca ar trebui sa mai introduci o conditie care sa nu-ti permita sa mai folosesti butonul cand s-a ajuns la valoaea maxima/minima. Ceva de genul: if valoare<=minim(maxim) then valoare =minim(maxim) insa trebuie sa-ti stabilesti tu limitele "minim", respectiv "maxim". Link spre comentariu
Depanatoru Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 L.E. Dar daca tin apasat pe butonul scade, dupa ce ajunge la zero, sare la tensiunea maxima, aprinde ledul la maxim atat timp cat tim butonul apasat, de ce? De ce ... nu e buna logica programului , daca nu pui codul complet nimeni nu poate stii . Link spre comentariu
costyy86 Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 Codu complet, l-am pus mai sus postu #415, dar pana la urma am dibuit, se comporta ok, trebuia la butoane "if creste 0 then" nu 1 then, si acum se comporta bine, se opreste unde il setez eu.. Multumesc. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum