Depanatoru Postat Decembrie 1, 2014 Partajează Postat Decembrie 1, 2014 ok , bine ca ai rezolvat , aveam impresia ca ce ai postat era numai o parte din cod Link spre comentariu
nickrvl Postat August 16, 2015 Partajează Postat August 16, 2015 (editat) Am o problema ciudata, in mod normal dupa initierea rutinei de mai jos pina la apasarea unui buton pe LCD nu trebuie sa fie afisat nimic dar la mine i-mi apare "Valoare = 100" ca si cum ar sarii din bucla "Do...Loop", problema e mult mai complicata eu prezint doar bucatica de cod care-mi da de cap..... $regfile = "m8def.dat"Config Lcd = 16 * 2Config Lcdpin = Pin , Db7 = Portb.7 , Db6 = Portb.6 , Db5 = Portb.5 , Db4 = Portb.4 , E = Portb.3 , Rs = Portb.0Cursor OffClsConfig Portd.3 = InputConfig Portd.4 = InputPortd.3 = 0Portd.4 = 0But1 Alias Pind.3But2 Alias Pind.4Dim Valoare As WordValoare = 100DoIf But1 = 0 Then Incr Valoare : Gosub SaltIf But2 = 0 Then Decr Valoare : Gosub SaltLoopSalt:Locate 1 , 1Lcd "Valoare" ; " = " ; Valoare ; " "Waitms 150ReturnEnd Astfel sint butoanele: Am incercat sa activez si rezistentele interne astfel ca butoanele sa nu mai fie conectate prin acele rezistente, de fapt de acolo a pornit problema si astfel am schimbat configurarea crezind ca primesc semnal fals.. As incerca si o alta compilatie banuind Bascomu` meu, daca cineva poate sa compileze si sa posteze HEX-ul as putea proba si aceasta "varianta". Daca modific bucla "Do Loop" astfel : DoIf But1 = 0 or But2 = 0 Then Gosub SaltLoop nu i-mi mai sare peste, LCD ramine gol pina la apasarea unui buton.... Editat August 16, 2015 de nickrvl Link spre comentariu
Liviu M Postat August 16, 2015 Partajează Postat August 16, 2015 Ce se intampla daca scrii un if "cinstit"? Do If But1 = 0 Then Incr Valoare Gosub Salt end if If But2 = 0 Then Decr Valoare Gosub Salt end ifLoop Link spre comentariu
Depanatoru Postat August 16, 2015 Partajează Postat August 16, 2015 (editat) Fara " end if " puse corect eu n-as da vina pe Bascom . Nu poti gasi greseli elementare in Bascom , ori de cate ori nu mi-a mers bine un program , aberatia de logica era din vina mea Editat August 16, 2015 de Depanatoru Link spre comentariu
Liviu M Postat August 16, 2015 Partajează Postat August 16, 2015 (editat) Teoretic totul este (sintactic) in regula. The one line version of IF can be used :IF expression THEN statement [ ELSE statement ]The use of [ELSE] is optional. More than one BASCOM statement can be placed on a line, but colons ( : ) must separate statements, as illustrated below.Eu voiam sa exclud din posibilele cauze combinatia "if pe o linie + instructiuni compuse". Editat August 16, 2015 de Liviu M Link spre comentariu
mars01 Postat August 16, 2015 Partajează Postat August 16, 2015 (editat) Nu stiu cum functioneaza compilatorul acesta, nu l-am folosit niciodata dar eu as face initializarea butoanelor asa: Portd.3 = 1Portd.4 = 1 avand in vedere ca starea lor default este HIGH fiind legate cu rezistori de pull-up la VCC. Nu stiu nici ce rol au acolo atata timp cat pinii sunt declarati ca intrari. Nu stiu cat de mult conteaza dar ... "my 2 cents". Editat August 16, 2015 de mars01 Link spre comentariu
Liviu M Postat August 16, 2015 Partajează Postat August 16, 2015 Nu stiu nici ce rol au acolo atata timp cat pinii sunt declarati ca intrari.Activeaza/dezactiveaza pull-up-ul?If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is activated.Sau nu asta intrebai? Link spre comentariu
nickrvl Postat August 16, 2015 Partajează Postat August 16, 2015 (editat) Musai ca in bucla Do Loop trebuie facuta departajarea altfel o anulam (bucla) si scriam direct un "If cinstit" dar trecind peste (poate o sa schimb configuratia programului) de ce daca am bucla: DoIf But1 = 0 Then Incr Valoare : Gosub SaltIf But2 = 0 Then Decr Valoare : Gosub SaltLoop sau DoIf But1 = 0 Then Incr Valoare Gosub Salt end ifIf But2 = 0 Then Decr Valoare Gosub Salt end ifLoop i-mi sare peste. Daca scriu astfel: DO If But1 = 0 or but2 = 0 Then Gosub Salt Loop functioneaza "corect" Asta nu intelg...................... L.E. Poate cineva sa scrie in alt limbaj de programare ce am incercat eu mai sus? asta daca exista echivalent, pentru a testa daca e o "logica" nepermisa sau "altceva", si sa posteze HEX-ul? Editat August 16, 2015 de nickrvl Link spre comentariu
mars01 Postat August 16, 2015 Partajează Postat August 16, 2015 (editat) Activeaza/dezactiveaza pull-up-ul?Sau nu asta intrebai? I'm dumb this evening. N-o spun si-n romana ca deh, ego-ul meu ... @nickrvl, eu zic sa renunti la tipul asta de jump-uri, cam toti spun sa te feresti de genul acesta de programare (sper sa nu spun prostii si limbajul asta sa se bazeze pe label-uri si jump-uri). Cel mai bine folosesti o variabila flag, si imediat un break. Nu stiu cum e in Bascom dar sunt sigur ca trebuie sa ai instructiunea Break. Ceva de genul: Start bucla If conditieA then{ .... flag = 1 (break) exit do} if conditiaB then{ ..... flag = 2 (break) exit do}Stop buclaselect case flag case 1: bla bla case 2: bla bla LE: Bascom-ul are o alta semnificatie pentru break. La ce ma refeream eu este instructiunea EXIT DO http://avrhelp.mcselec.com/index.html?do_loop.htm Hmmm . Astia nu au Switch Case, au ... Select Case http://avrhelp.mcselec.com/index.html?select_case_end_select.htm Editat August 16, 2015 de mars01 Link spre comentariu
Depanatoru Postat August 16, 2015 Partajează Postat August 16, 2015 (editat) De ce faci la inceput portd.3 = 0 si portd.4 = 0 ca si cum initial ar fi apasate butoanele ? E gresit sa dai tu valori la pinii ca intrari , ei citesc din afara . Asa se pare ca sunt indeplinite o data ambele conditii din bucla si sare la afisare pe lcd de doua ori , prea repede ca sa vezi , la 100 se aduna 1 si se scade 1 si ramane tot 100 pe afisaj , dupa care citeste starea reala a pinilor care e 1 , fiind legati la plus , si nu mai sare din bucla . Elimina initializarile astea si vezi daca mai afiseaza ceva . Editat August 16, 2015 de Depanatoru Link spre comentariu
mars01 Postat August 16, 2015 Partajează Postat August 16, 2015 (editat) Aceasta a fost si prima mea reactie, de acea am indicat initializarile acelea cu 1 dar de fapt sunt anulari de rezistori de pull up interni cum a reamintit Liviu (se face initializarea lor dupa ce au fost declarati ca intrari). Se scrie latch-ul de pe pin dar nu inseamna ca partea de citire a starii pinului este afectata. Editat August 16, 2015 de mars01 Link spre comentariu
nico_2010 Postat August 17, 2015 Partajează Postat August 17, 2015 nickrvl de ce nu folosesti tu functia "debounce"? Iti usurezi viata. $regfile = "m8def.dat"Config Debounce = 30 Config Lcd = 16 * 2Config Lcdpin = Pin , Db7 = Portb.7 , Db6 = Portb.6 , Db5 = Portb.5 , Db4 = Portb.4 , E = Portb.3 , Rs = Portb.0Cursor OffClsConfig Portd.3 = InputConfig Portd.4 = InputPortd.3 = 1 ' nu setate pe 0 logicPortd.4 = 1But1 Alias Pind.3But2 Alias Pind.4Dim Valoare As WordValoare = 100Do'If But1 = 0 Then Incr Valoare : Gosub Salt'If But2 = 0 Then Decr Valoare : Gosub SaltDebounce But1 , 0 , Salt 'Debounce But2 , 0 , Salt LoopEndSalt:Locate 1 , 1Lcd "Valoare" ; " = " ; Valoare ; " "Waitms 150Return Link spre comentariu
Depanatoru Postat August 17, 2015 Partajează Postat August 17, 2015 (editat) Pullup-urile nu se activeaza din oficiu daca sunt facuti pinii input , sunt registrii separati , dupa reset pinii sunt tristate din oficiu , tocmai scriind 1 se activeaza pullup-ul , si numai odata activat daca mai incolo in program e nevoie sa se dezactiveze trebuie facut 0 . Ceea ce intr-un program obisnuit nu prea ai de ce . Editat August 17, 2015 de Depanatoru Link spre comentariu
Liviu M Postat August 17, 2015 Partajează Postat August 17, 2015 @Depanatorul: Ce ai zis acum nu se potriveste deloc cu E gresit sa dai tu valori la pinii ca intrari... Link spre comentariu
Depanatoru Postat August 17, 2015 Partajează Postat August 17, 2015 (editat) Pai daca nu se stie ca pullup-urile nu se activeaza automat pe intrari ce vina am eu ? Eu nu dau valoare initiala 0 pinilor ca intrari ca sa am dileme din astea , cand pui 1 ca sa se activeze pullup-ul oricum nu conteaza . Si chiar daca prin absurd pullup-ul e activat automat , de ce sa-l dezactivezi cand tot ai o rezistenta spre plus ? Raman in paralel si functioneaza foarte bine . Daca din cauza asta nu merge corect inseamna ca chiar asa se interpreteaza , ca i-ai dat tu valoare 0 adica buton apasat pinului . Nu stiu ce se intampla atunci cand chiar vrei sa dezactivezi pullup-ul odata activat anterior ca sa folosesti altfel pinul , daca tot asa se interpreteaza , nu prea ai de ce sa folosesti optiunea asta in programele obisnuite Editat August 17, 2015 de Depanatoru 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