Vizitator johnny Postat August 30, 2007 Partajează Postat August 30, 2007 Proton basic nu l-am folosit ! Daca face delay-uri de diferite valori cu doar 4 sau 5 instructiuni in plus este perfect! Sunt dispus sa-l incerc dar nu stiu cum sta cu celelalte library-uri, in comparatzie cu Mikrobasic . compileaza doar odata vreo 50 de instructiuni cat o avea rutina de delay .Daca sunt 50 ,imi pare totusi mult . este adevarat ca daca folosesti multe delay-uri in program se compenseaza , Dar daca ai doar cateva...La 20ms Mikrobasic-ul a generat 17 instructiuni, la 200ms ,32 instructiuni ,la 2000ms tot 32 instructiuni.the_beast : in Mikrobasic exista functia Button in Util library trebuie sa fie si in Mikropascal. Cred ca era mai usor sa folosesti intreruperi ,dar daca portulB este ocupat... Link spre comentariu
Vizitator johnny Postat August 30, 2007 Partajează Postat August 30, 2007 Acum invat si C-ul dar noi discutam de eficientza compilatoarelor nu de cea a limbajelor de programare.Pentru a programa un amarit de PIC nu cred ca este asa de important limbajul de programare. Link spre comentariu
bogdanm Postat August 30, 2007 Partajează Postat August 30, 2007 C-ul nu e nici pe departe un remediu universal. Link spre comentariu
petre_s Postat Septembrie 6, 2007 Autor Partajează Postat Septembrie 6, 2007 the_beast : in Mikrobasic exista functia Button in Util library trebuie sa fie si in Mikropascal. Cred ca era mai usor sa folosesti intreruperi ,dar daca portulB este ocupat...da, este functia asta: function Button(var port : byte; pin, time, active_state : byte) : byte; Returns 0 or 255. Function eliminates the influence of contact flickering upon pressing a button (debouncing).Parameter port specifies the location of the button; parameter pin is the pin number on designated port and goes from 0..7; parameter time is a debounce period in milliseconds; parameter active_state can be either 0 or 1, and it determines if the button is active upon logical zero or logical one.dar nu inteleg o chestie: parameter time is a debounce period in milliseconds, ce este debounce period, cum lucreaza functia asta mai exact, pote cineva sa-mi explice si mie? mai trebui pus condensator in paralel cu butonul? Link spre comentariu
Vizitator johnny Postat Septembrie 7, 2007 Partajează Postat Septembrie 7, 2007 Teoretic nu trebuie sa mai pui condensator.Pinii pe care doresti sa pui butoane ,ii faci intrari din TRISA si ii legi cu cite un rezistor de 10k la VDD.In functia Button bagi parametrii ceruti (portul in cazul tau PORTA,pinul etc.) Debounce-ul face practic o intirziere intre momentul apasarii butonul si executia secventei de cod asociata butonului respectiv.Astfel se elimina starile false ce pot apare la apasarea pe buton(inchiderea si deschiderea repetata a contactului),pana la realizarea ferma a contactului.In functie de calitatea butoanelor folosite selectezi valoarea debounce-ului 10;20;50 ms.Cel mai bine faci incercari ;pornesti de la o valoare mai mica shi vezi cum se comporta ,daca apar probleme maresti intirzierea.Spor la treaba. Link spre comentariu
petre_s Postat Septembrie 7, 2007 Autor Partajează Postat Septembrie 7, 2007 am inteles.. deci dupa apasarea butonului se introduce un delay time debouce dupa are se iese din functie. ce nu intelegeam eu era daca functia astepta pana la eliberarea butonului Link spre comentariu
petre_s Postat Ianuarie 26, 2008 Autor Partajează Postat Ianuarie 26, 2008 Salutari. am reluat proiectul, am facut simulari in proteus etc... problema este ca nu reusesc sa controlez rtc-ul... poate imi dati niste sugestii initialializez i2c asa: I2C_init(100000);citesc ceasul asa: procedure Read_time;begin I2C_start; rm:=i2c_rd(1); //primele sunt secundele care nu ma intereseaza while I2C_Is_Idle = 0 do nop; rm :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; ro :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; rz :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; I2C_Stop;end; transform asa: procedure Transform_time;begin rm := ((rm and $F0) shr 4)*10 + (rm and $0F); ro := ro.5*10 + (ro and $0F); //ziua saptamanii nu mai trebuie transformataend; dupa operatiilea astea in variabilele rm, ro si rz (minut, ora, zi din saptamana) nu am datele corecte.. poate aveti ceva idicatii sa ma ajutati... Link spre comentariu
sofian Postat Ianuarie 26, 2008 Partajează Postat Ianuarie 26, 2008 procedure Read_time;begin I2C_start; I2C_Wr($D0); // adresa slave I2C_Wr($00); // adresa de unde vrei sa citesti (0=secunde,1=minute) I2C_Repeated_Start; rm:=i2c_rd(1); //primele sunt secundele care nu ma intereseaza while I2C_Is_Idle = 0 do nop; rm :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; ro :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; rz :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; I2C_Stop;end; Link spre comentariu
petre_s Postat Ianuarie 26, 2008 Autor Partajează Postat Ianuarie 26, 2008 multam fain, nu mi-a mers nici asa dar am mai sapat dupa doc si am adus completare: procedure Read_time;begin I2C_start; I2C_Wr($d0); // adresa slave scriere I2C_Wr($01); // adresa de unde vrei sa citesti (0=secunde,1=minute) I2C_Repeated_Start; I2C_Wr($d1); //adresa skave in citire rm :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; ro :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; rz :=I2C_Rd(0); //la ultimima citire trebuie sa fie 0 while I2C_Is_Idle = 0 do nop; I2C_Stop;end; ma bucur ca macar am mai priceput cate ceva din bus-ul asta.... vorba lu' hagi: e mult de munca, avem mult de muncit si trebuie sa muncim mult... Link spre comentariu
petre_s Postat Ianuarie 29, 2008 Autor Partajează Postat Ianuarie 29, 2008 revin cu stiri noi... am cam terminat programul, simularile merg bine except one thing: fisierul HEX generat de micropascal are 15K :rolleyes: dar proteus imi zice ca incarca vreo 5.6KB. pe de alta parte mikropascal imi zice used rom 2.5K. pana la urma care e adevarul? :smt005 si mai e ceva, nu f important dar.. poate imi dati vreo idee: programul meu proceseaza ora o data pe secunda. Dar mai are si un meniu de setari. problema este ca daca se intra in meniu... nu se mai proceseaza ora pentru ca bucla arata cam asa: Init; while true do begin Read_time; Transform_time; lcd_tm; if time_ then ring_now; delay_ms(1000); if menupressed then menu; end; am inteles ceva vag ca as putea cu intreruperi.. dar cum se folosesc astea... hm, nu prea stiu :smt024 Link spre comentariu
Abram Burel Postat Ianuarie 29, 2008 Partajează Postat Ianuarie 29, 2008 Hex-ul codeaza o locatie de memorie pe 4 caractere. Una la mana. A doua, mai sunt si adrese din loc in loc si altele, deci...Trebuie sa folosesti un soi de intreruperi, altfel cam cum sa implementezi doua procese concurente? Link spre comentariu
petre_s Postat Februarie 13, 2008 Autor Partajează Postat Februarie 13, 2008 ei bine, m-am lamurit ci mikropascalu asta, sa va explic problema:am adaugat mai multe optiuni la program cu incurajarea ca memoria rom este destul de incapatoare dar bineinteles, cu asta a crescut si utilizarea ram-ului. acum sunt pe la 50% din ram si incep probleme serioase de administrare a acesteia. de fiecare data cand folosesc o procedura care are ca parametru un string si eu pun o constanta (sir definit de mine, ex strcpy(x,'test'), lcd_out_cp('test')) imi apare la link "Array has been split over two banks" :smt013 asta se intampla si cand constanta sir este doar dintr-un caracter! Ca urmare stringul nu mai aprare pe lcd, sau daca apare, apare cu totul altceva ! acum chiar ca am nevoie de mare ajutor de la cineva trecut prin asta sau care stie. Si daca le-ar splitui, nu m-ar deranja deloc daca le-ar accesa corectplz :prayer:LE: anormalitatea asta am observat-o folosind proteus ca simulator. sa nu simuleze acesta bine, iar picul sa functioneze ok? Link spre comentariu
petre_s Postat Februarie 13, 2008 Autor Partajează Postat Februarie 13, 2008 dupa munci seculare am gasit cuvantul magic "absolute" cu care pot sa-mi aranjez singur datele in RAM, ca un compilator de 150$ nu stie asta. va salut :smt031A, btw, aveti ceva recomandari/ trucuri pentru marirea preciziei unui ceas DS1307? Link spre comentariu
Vizitator Postat Februarie 14, 2008 Partajează Postat Februarie 14, 2008 "Array has been split over two banks"Dupa mintea mea PIC-urile sunt pentru masochisti. Nu prea gasesti doua modele la fel. Iar treaba cu paginile de memorie e chiar diabolica. Te-ai jucat vreodata cu AVR-uri. Alea au RAM-ul continuu, sunt mai rapide, mai ieftine, executa o instructiune intr-un singur ceas, nu in patru, au mai multa memorie si din cauza asta exista compilatoare multiplatforma serioase pentru mai multe limbaje. Ca sa nu mai spun ca gasesti IDE-uri open source si multi OS.Incearca de exemplu familia de AVR-uri de la ATMEL cu Eclipse ca mediu de programare multilimbaj si multiplatforma si WinAvr compilator de C. Daca ai timp si aplicatii mai stufoase incearca si FreeRTOS ca sistem de operare de timp real pentru microcontroller (stie si PIC-uri). Si asta e tot Open Source.Nu vreau sa spun ca PIC-urile sunt mai proaste decat AVR-urile, doar ca mi se par organizate cel putin ciudat, de parca ar fi fost proiectate de vreo secta, zau asa.In schimb am tot respectul pentru Application Note-urile de la Microchip. Sunt mina de aur, indiferent cu ce producator de controllere lucrezi. Link spre comentariu
petre_s Postat Februarie 14, 2008 Autor Partajează Postat Februarie 14, 2008 Stiu, am vazut, dupa ce termin proiectul asta nici nu vreau sa mai aud de pic-uri si produse mikroelectronika :smt013 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