danzup Postat Decembrie 7, 2010 Partajează Postat Decembrie 7, 2010 Explic din nou , poate asa ma intelege si pe mine cineva!Cand apas butonul pe PORTB.0 am 1 atunci pe PORTD.0 sa am 1 si sa ramana asa pana la apasarea din nou a butonului!Cand apas butonul a doua oara, adik pe PORTB.0 am din nou 1 atunci pe PORTD.0 sa am 0 si sa ramana asa pana la apasarea din nou a butonului!Sincer ori nu stiti ce este un bistabil ori sunt eu prost de dau in gropi!Schema mai jos ca sa intelegeti cum vine conectat atmelu!Este a 3 oara cand explic aceasi chestie in 3 exemplare!Sau si mai elegant :Dim N as bitN = 0....Do....If pinb.0 = 0 then N = NOT NEnd ifPortd.0 = N....Loop=============================iar pentru 3 chestii asa cum ai vrut in prima pagina faci asa :Dim N as byteN = 0....Do....If pinb.0 = 0 then N =N + 1 If n > 2 then n = 0 End ifEnd if....If N = 0 then ..... 'print Prog1 end ifIf N = 1 then ..... 'print Prog2 end ifIf N = 2 then ..... 'print Prog3 end if....LoopSper ca te prinzi tu ce si cum merge . Link spre comentariu
Cilibiu Postat Decembrie 7, 2010 Autor Partajează Postat Decembrie 7, 2010 Dim Led As BitConfig portb.0= InputConfig Portd.0 = OutputDoIf Pinb.0 = 0 Then Led = 1If Led = 1 And Pinb.0 = 0 Then Led = 0Portd.0 = LedLoopAm modificat pentru ce imi trebuie si tot nu este instantaneu, daca apas imd din nou nu se intampla nimik!Si eu am creat un program, dar trebuie sa tin apasat 1 secunda ca sa se stinga ledul si 1 secunda sa se aprinda!Nu reusesc sa o fac instantaneu!Programul meu este, butonul este pus in locul rezistentei iar alimentarea butonului nu mai este!$regfile = "m8def.dat"$crystal = 8000000Config Portb.0 = InputConfig Portd.0 = OutputPortb.0 = 1DoIf Pinb.0 = 0 ThenPortd.0 = 1End IfWait 1If Pind.0 = 1 ThenIf Pinb.0 = 0 ThenPortd.0 = 0End IfEnd IfWait 1LoopEnd Link spre comentariu
Vizitator Postat Decembrie 8, 2010 Partajează Postat Decembrie 8, 2010 ...Si eu am creat un program, dar trebuie sa tin apasat 1 secunda ca sa se stinga ledul si 1 secunda sa se aprinda! Nu reusesc sa o fac instantaneu!... instructiuneaWait 1 introduce o intarziere de 1 secunda peste tot pe unde apare scrisa. In locul ei scrie Waitms 100 adica intarziere 100 ms (0.1 secunde). Daca tot nu e suficient de rapid micsoreaza cifra 100, de exemplu Waitms 10 Ti-a mers? Link spre comentariu
Cilibiu Postat Decembrie 8, 2010 Autor Partajează Postat Decembrie 8, 2010 Am incercat asa dinainte, daca pun 10ms imi licare ff rapid, si nu se opreste tot timpul la 1!Iar daca pun 100ms si tin apasat, licare ledul.Deci ma refeream ca atunci cand am apasat o data butonul sa am 1 pe iesire, iar daca tin apasat tot 1, nu sa licare, iar cand apas a doua oara sa am 0 pe iesire si daca ramane apasat tot 0!Ca la ON OFF la combine muzicale etc,...!Voi cand tineti apasat butonul de la ON/OFF sau ST/BY de la vreo combina, se aprinde si se stinge ? adik licare combina?Am incercat un timp mai indelungat, dar daca apas imediat a 2 oara nu se intampla nimik pana anu trece de acele secunde sau ms!Vreau sa reactioneze ca la butonul de la combina , tv ....etc! Link spre comentariu
yo9hnf Postat Decembrie 8, 2010 Partajează Postat Decembrie 8, 2010 Schema pusa de tine ma duce cu gandul la faptul ca tu folosesti un simulator si nu o placa de dezvoltare sau de test.Fa montajul fizic si vezi cum se descurca.Ce ti-am dat eu a fost testat practic. Link spre comentariu
Cilibiu Postat Decembrie 8, 2010 Autor Partajează Postat Decembrie 8, 2010 Ok, te inteleg, am reusit sa fac programul , care merge si simulat!cod:Config Portb.0 = InputConfig Portd.0 = OutputPortb.0 = 1DoDoIf Pinb.0 = 0 ThenPortd.0 = 1End IfLoop Until Pinb.0 = 1DoIf Pinb.0 = 0 ThenPortd.0 = 0End IfLoop Until Pinb.0 = 1LoopEndIar dupa acest exemplu o sa fac si afisarea a mai multor programe, apasand acelasi buton , este simplu! Cand ajung la prog 5 ii dau sa o ia iara de la 1!Este aceasi chestie ca si on/off, doar ca in loc de la 2 sa revina la pozitia 1, eu dau de la 1 la 2, de la 2 la 3,.... iar de la 5 la 1!Oricum multumesc exemplelor care mi leati dat! Dupa ele mam luat de am reusit sa fac acest program, si bineinteles inca 5 ore de munca pe pc si variante! Link spre comentariu
Cilibiu Postat Decembrie 9, 2010 Autor Partajează Postat Decembrie 9, 2010 Imi cer scuze dar am uitat sa mai scriu ceva! Acum am dat copi si paste din bascom! Merge instantaneu si daca tin mai mul timp butonul apasat nu trece la urmatoarea faza! Exact ce vroiam, merge simulat! Folosesc proteus 7 ca program de simulat! $regfile = "m8def.dat"$crystal = 8000000Config Portb.0 = InputConfig Portd.0 = OutputPortb.0 = 1DoDoIf Pinb.0 = 0 ThenPortd.0 = 1End IfLoop Until Pinb.0 = 1 And Pind.0 = 1DoIf Pinb.0 = 0 ThenPortd.0 = 0End IfLoop Until Pinb.0 = 1 And Pind.0 = 0LoopEnd Scuzama danzup, doar acum am vazut postul tau! Da mam prins de idee si este ff usor, tot ceva de genu aveam in minte dar era cam greu de pus pe "foaie". Mersi mult! Mai am o intrebare>>> care este diferenta intre BYTE si BIT? Si ce face comanda urmatoare>>>> Dim N as Word si in ce situati se foloseste! Link spre comentariu
Liviu M Postat Decembrie 9, 2010 Partajează Postat Decembrie 9, 2010 Am incercat asa dinainte, daca pun 10ms imi licare ff rapid, si nu se opreste tot timpul la 1! Iar daca pun 100ms si tin apasat, licare ledul. Deci ma refeream ca atunci cand am apasat o data butonul sa am 1 pe iesire, iar daca tin apasat tot 1, nu sa licare, O prima problema o reprezinta oscilatiile mecanice ale butoanelor. Asta se rezolva cel mai usor cu putin "soft debouncing" (cauta pe gogu). In principiu, dupa ce detectezi apasarea butonului astepti 100-200 ms si mai testezi o data. Daca e tot apasat, e apasat, daca nu, a fost "alarma falsa": if(pinulTestat == 0 ) // sau 1, depinde ce astepti{ wait(100 ms); //soft debouncing if(pinulTestat == 0 ) // tasta e tot apasata (daca testezi 1 la inceput, trebuie sa fie tot 1 si acum) { // faci ce era de facut }}Pentru a doua problema, cea cu ramas in starea curenta cat timp tii butonul apasat, cred ca-ti mai trebuie o variabila pe post de inhibitor: bool_t variabilaInhibare; variabilaInhibare = 0;if((pinulTestat == 0 ) && (variabilaInhibare==0)) { wait(100 ms); //soft debouncing if(pinulTestat == 0 ) { variabilaInhibare = 1; //din momentul asta butonul nu mai e bagat in seama pana nu resetezi variabilaInhibare // faci ce era de facut }}if((pinulTestat == 1 ) && (variabilaInhibare==1)) { wait(100 ms); //soft debouncing si la eliberarea butonului if(pinulTestat == 1 ) { variabilaInhibare = 0; //din momentul asta butonul e iarasi bagat in seama }}LE 1 BYTE = 8 BITsWikipedia are de multe ori informatie utila si o ofera uneori mai repede decat forumistii. ;) LLE Cred ca danzup a rezolvat problema mai elegant (i-am "descifrat" greu codul, ca habar n-am in ce limbaj e scris). Link spre comentariu
danzup Postat Decembrie 9, 2010 Partajează Postat Decembrie 9, 2010 Mai am o intrebare>>> care este diferenta intre BYTE si BIT?Si ce face comanda urmatoare>>>> Dim N as Word si in ce situati se foloseste!Bit = poate avea doar valoarea 1 sau 0 de obicei variabila care are doar o singura " pozitie "Byte = 8bitiDim N as Word = dimensioneaza variabila N la valoarea de 2 Bytes adica 16 Biti in total Link spre comentariu
danzup Postat Decembrie 9, 2010 Partajează Postat Decembrie 9, 2010 LLE Cred ca danzup a rezolvat problema mai elegant (i-am "descifrat" greu codul, ca habar n-am in ce limbaj e scris).Bascom AVR = adica asa cum e specificat in titlu si cum a cerut userul. Link spre comentariu
Liviu M Postat Decembrie 9, 2010 Partajează Postat Decembrie 9, 2010 De citit am citit, da' m-a exprimat putin gresit.Voiam de fapt sa zic ca e prima data cand incerc sa inteleg un program in Bascom si ca habar n-am cu ce se mananca. Link spre comentariu
nico_2010 Postat Decembrie 9, 2010 Partajează Postat Decembrie 9, 2010 Puteai folosi si comanda "debounce" in felul asta:Debounce Pinx.y , 0 , Sub_inc , Sub unde - Pin x.y este pinul controlerului la care ai legat butonul (poate fi, spre exemplu PIND.0..7, sau oricare alt pin);- 0 este nivelul logic de la pinul x la care se produce saltul la subrutina sub_inc (este doar un exemplu de denumire a subrutinei), insa acest nivel logic poate fi si 1;.- sub_inc orice subrutina pe care o doresti;- sub indica programului ca este vorba de o subrutina.Si ca principiu, fara sa mi-o iei in rau, incearca sa citesti Help-ul bascomului si dupa aceea sa pui intrebari!!! Link spre comentariu
danzup Postat Decembrie 9, 2010 Partajează Postat Decembrie 9, 2010 Puteai folosi si comanda "debounce" in felul asta:Debounce Pinx.y , 0 , Sub_inc , Sub unde - Pin x.y este pinul controlerului la care ai legat butonul (poate fi, spre exemplu PIND.0..7, sau oricare alt pin);- 0 este nivelul logic de la pinul x la care se produce saltul la subrutina sub_inc (este doar un exemplu de denumire a subrutinei), insa acest nivel logic poate fi si 1;.- sub_inc orice subrutina pe care o doresti;- sub indica programului ca este vorba de o subrutina.Si ca principiu, fara sa mi-o iei in rau, incearca sa citesti Help-ul bascomului si dupa aceea sa pui intrebari!!!Exact !In help este dat totul in Bascom !Exista pana si functie de debounce... Link spre comentariu
Cilibiu Postat Decembrie 9, 2010 Autor Partajează Postat Decembrie 9, 2010 Multumesc de raspuns, am luat helpul la mana decant am inceput sa folosesc bascom, si chiar luni am citit despre debounce, am vazut in acest subiect in prima pagina ca folosea. Exact ce ai zis tu <<>> am citit luni, si am inteles cam ce face, dar nu in totalitate sigur, dar ff aproape! eu le gandesc logic, si pana nu descifrez in mintea mea cum sta treaba cu comanda si ce face si ce se bazeaza, care sunt priopritatile iei si cum actioneaza in acel "programel" adik in DO si LOOP.Mersi <<< Liviu M>>> pentru descifrarea facuta pentru alt tip de program, eu ma refeream la bascom cum a zis si <<>>, care ii multumesc programului oferit in "limba" bascomu-lui!Sincer programul care lam facut eu este ff simplu si inteles ff usor, pentru cei care folosesc bascomul!O sa fac ceva simulari si cu debounce ca sa vad ce si cum cu el!Multumesc de ajutor cu bit....! Link spre comentariu
Vizitator Postat Decembrie 10, 2010 Partajează Postat Decembrie 10, 2010 Limbajul folosit de Bascom este limbajul BASIC. BASCOM vine de la BASic COMpiler si inseamna ca este un compilator pentru limbajul de programare numit BASIC. Asa cum exista C, PASCAL, FORTRAN, LISP sau mai stiu eu ce alt limbaj exista si BASIC. Nu exista un limbaj de programare numit BASCOM. BASCOM este un soft care te ajuta sa scrii programe pentru microcontroller-e in limbajul BASIC. Felicitari ca ti-a mers cum ai vrut si spor la programare. P.S. Te rog nu mai scrie ca pe messenger, gen "adik" in loc de "adica" si altele. Asa e regulamentul pe elforum, nu eu l-am facut si, dupa cum observi toata lumea il respecta. Daca nu ma crezi citeste-l: viewtopic.php?p=17653#p17653 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