messu Postat Decembrie 16, 2010 Partajează Postat Decembrie 16, 2010 Va rog sa ma ajutati cu o sugestie in urmatoarea problema, pentru ca nu prea am experienta la microcontrollere.Incerc sa realizez o masina de bobinat "cu comanda digitala" (nu c-as avrea nevoie de asa ceva dar vreau sa ma mai "joc"cu microcontrollere). Pentru asta incerc sa folosesc un 877A cu un quart de 20 de Mhz. Problema sta in felul urmator:Am incarcat hex-ul intr-o simulare in PROTEL si totul merge brici ! Toate functiile sint OK (display, butoane, afisaj, etc.). In realitate insa - DEZASTRU !!!Microcontrollerul se manifesta ca si cum s-ar reseta la foarte des. Ceva de genul - reset de 5 ori pe secunada. Cred ca asta se si intampla, dealtfel.... Mi-a mancat sufletul :cry: Initial, m-am gandit ca e vorba de WDT, pe care l-am dezactivat , ... dar tot nimic....Ce sa mai fac ??Microcontroller-ul pare sa functineze, pentru ca am facut un cod mic (care aprinde niste led-uri intr-o anumita secventa si produce un beep) si totul functioneaza perfect. Si pe simulare si in realitate... Atasez si codul, desi nu stiu cat de edificator va fi ....La compilare imi da un "warning" (la argumentul functiei delay) insa la fel imi spune si la codul cu leduri si beep care functioneaza OK.Orice sugestie e binevenita, ca eu sint invatacel...Va multumesc ! Link spre comentariu
puiu Postat Decembrie 16, 2010 Partajează Postat Decembrie 16, 2010 1. Din pacate softul este scris in C si eu nu stiu decat asm. Desi unele instructiuni sunt in asm nu ma pot pronunta, atata doar ca s-ar putea, daca WDT este anulat, sa ai un argument prea mare inintea de a face call in tabelele respective. Acesta este un motiv care poate sa duca la acel comportament. Link spre comentariu
messu Postat Decembrie 16, 2010 Autor Partajează Postat Decembrie 16, 2010 In C ??Sincer credeam ca e asm... Dar nu va contrazic. Codul e generat de Flowcode, nu e scris de mana mea...In C, cu siguranta e partea de sunet (beep) deci partea cu "delay us" . A fost singura sansa de a crea o intarziere de ordinul microsecundelor pentru realizarea beep-ului. Asa ca am introdus o linie de program, in C, ca sa pot realiza intarzierea. Altfel Flowcode nu "stie" delay decat de ordinul milisecundelor...Cu multumirile pentru raspunsul dvs. tre sa recunosc ca momentan nu m-am lamurit ce trebuie sa modific ca sa rezolv problema...Poate-mi mai da cineve vreo idee... Link spre comentariu
messu Postat Decembrie 16, 2010 Autor Partajează Postat Decembrie 16, 2010 Apropos, exista posibilitatea sa rulez programul in microcontroller, linie cu line, ca sa vad unde se poticneste ?Ca atunci cand se scrie si se verifica liniile unui program inainte de compilare...Scuze daca intreb o prostie..... Link spre comentariu
puiu Postat Decembrie 16, 2010 Partajează Postat Decembrie 16, 2010 1. In program este scris: Code Generator: BoostC Compiler2. Exista posibilitatea de rulare a unei singure linii printr -un simulator. Chiar acest lucru am vrut sa-l fac eu sa rulez programul prin MPLAB SIM, fara procesor, dar trebuie cineva care stie C in care este scris, deoarece in ASM nu merge (initial trebuie compilat). Oricum am observat ca in loc de org 0x0000 foloseste org 0x00000000. Deci folosesti un sistem de operare pe mai multi biti, s-ar putea acest lucru sa nu-i convina si sa ia la un momentat numai 4 octeti(scrisi in hexa) si sa ia pe cei de la stanga in loc sa ia de la drepta si sa ignore zerourile din fata. Cauzele pot fi multe.3. Vrei sa creze un beep de ordinul us? Link spre comentariu
messu Postat Decembrie 16, 2010 Autor Partajează Postat Decembrie 16, 2010 Nu,nu, nu vreau sa creez un beep de oridinul microsecundelor. Asta a fost calea la care m-am gandit ca sa pot crea un beep.Practic, deschid si inchid un port. Ca sa iasa beep il tin inchis respectiv deschis un interval de ordinul microsecundelor. Nu stiu daca am gandit barbar treaba, dar asta e ... ca idee, beep-ul se aude. Practic se aude un beep si se aprinde un led dupa care se reseteaza si face asta la infinit. Secventa e corecta, ca asa am gandit-o, dar n-ar trebui sa se repete. Practic executia codului se opreste in acel punct si apoi se reia de la capat Practic vreau sa am un beep de confirmare la fiecare apasare a unei taste. Asta e ideea...Oricum beep-ul e dor o parte din proiect. Ca idee, am refacut codul fara beep, insa nu s-a schimbat nimic... :( Link spre comentariu
puiu Postat Decembrie 16, 2010 Partajează Postat Decembrie 16, 2010 1. Daca am timp sa incerc diseara o compilare sub C sa vad daca merge in MPLAB. Link spre comentariu
puiu Postat Decembrie 16, 2010 Partajează Postat Decembrie 16, 2010 1. Din pacate nu merge ce am vrut eu. Te pot ajuta numai daca programul sursa este in ASM. Link spre comentariu
puiu Postat Decembrie 16, 2010 Partajează Postat Decembrie 16, 2010 1. Am reusit in cele din urma sa fac o simulare si nu se opreste desi l-am lasat 10 s. Cum sunt setati biti de programare?2. Cicleaza in bucla label69 din cauza lui gbl_FCV_BUTON_RESET. Link spre comentariu
puiu Postat Decembrie 16, 2010 Partajează Postat Decembrie 16, 2010 1. Trebuie sa stiu semificatia tuturor registrilor.2. Rutina : delay_10us_00000 este de 201 uS. Nu stiu cum a fost calculata Link spre comentariu
messu Postat Decembrie 17, 2010 Autor Partajează Postat Decembrie 17, 2010 Multumesc mult pentru bunavointa.Delay-ul de 201 uS a fost apreciat, sa-i spunem "la bunul simt". Nu tineteam o frecventa anume ci doar sa obtin un beep. Asa ca am procedat la incercari cu cateva valori cand am ajuns la un rezultat multumitor.Cu scuzele de rigoare nu prea stiu ce sa raspund la intrebarea despre registrii. In Flowcode n-am treaba cu ei Cuvantul de configurare e: 0x3F7ASa inteleg ca problema e la gbl_FCV_BUTON_RESET, la label 69 ?Ce ma omoara e ca, ambele simulari, in Flowcode si Protel merg perfect, insa in realitate nu ...O sa incerc in weekend sa "sparg" codul in bucati, sa scot macro-urile si sa vad ce se intampla. Poate ma prind... Desi ma gandesc ca e posibil ca diagnosticarea sa fie "o palarie cam mare" pentru mine... Link spre comentariu
puiu Postat Decembrie 17, 2010 Partajează Postat Decembrie 17, 2010 1. Incearca cuvantul de configurare 0x3F3A in loc de 3F7A. S-ar putea sa ai un soc pe tensiunea de alimentare.2. Nu cred ca gbl_FCV_BUTON_RESET este problema deoarece trece de el daca ii crez conditiile necesare. Link spre comentariu
Vizitator flopir Postat Decembrie 17, 2010 Partajează Postat Decembrie 17, 2010 Daca in simulari merge si practic nu, sa nu ai o problema electica.... 20 Mhz e cam limita maxima a PIC-ului, atentie daca modelul tau suporta... Alta problema pote sa fie de la alimentare, un condensator de 100uF in paralel cu alimentarea ar trebui sa rezolve problema... Dupa asta treci la configurare.... Link spre comentariu
messu Postat Decembrie 20, 2010 Autor Partajează Postat Decembrie 20, 2010 Multumesc pentru noile sugestii.Din pacate n-am reusit nimic in weekend, ca am avut 1000 de alte treburi, insa de gandit m-am gandit si la asta.Intr-adevar nici eu nu nu cred ca e problema la "gbl_FCV_BUTON_RESET" pentru ca asa am gandit codul. Practic acolo citesc starea unui switch, asa ca zic eu ca e normal sa stea intr-un ciclu acolo, pana cand switch-ul trece dintr-o stare in alta...Azi o sa incerc sa trec pe o frecvenata mai joasa, 16 sau chiar 10 MHz. Sa vad ce quarz gasesc p-acasa. Oricum cand am probat uC-ul cu softuletul ala mic care aprinde leduri si face beep, l-am pus tot la 20 MHz si totul a mers brici... Sper ca, tot azi, sa incerc si condensatorul pe alimentare si noul cuvant de configurare si am sa va tin la curent cu rezultatele... Link spre comentariu
messu Postat Decembrie 21, 2010 Autor Partajează Postat Decembrie 21, 2010 Am facut modificarile. Mai putin cea cu quatz-ul, ca n-am avut vreme sa caut unul mai mic.Schimbari sint, dar n-as spune ca in bine... Merge tot prost, dar altfel.... Incep sa suspectez, si eu, tot o problema electrica, desi momentan nu-mi dau seama care.... Comportamentul e foarte ciudat, cel putin pentru mine. Acum beep-aie si se aprind 2 led-uri in loc de unul si cel mai ciudat e ca frecventa se modifica in momentul in care apropii sau departez mana de microcontroller. Oare sint paranormal ?? Am mai incercat un delay de o secunda intre beep si aprinderea ledurilor si asta executa corect, dupa care face tot ce vrea el, arza-l-ar focu'. Ma gandesc sa bag cate un delay de o secunda dupa fiecare punc in care citesc/scriu un port sau se ia o decizie, poate asa, la viteza mica imi dau seama unde se impiedica... In sfarsit, ideea e ca tot nu merge. Mai investighez si va mai povestesc de si cum .Daca mai aveti sugestii, le astept cu tot interesul ! 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