Vizitator Mishi Postat Iulie 22, 2010 Partajează Postat Iulie 22, 2010 SalTot incerc sa fac PORTB sa fie ca input si sa vad la PORTD ceea ce se citeste de la portul B.Problema ii urmatoarea: atunci cand PORTB nu ii conectat la masa si nici la HIGH (este in gol) la iesire(PORTD) bitii imi apar pe "1". Si daca pun la masa un pin de la PORTB atunci se stinge si LED-ul corespunzator de la PORTD. Ma gandesc ca are ceva legatura cu pull-ups.void init(){ ADCON1 = 0b00001111; // AN 9,10,11,12 as digital TRISB=0XFF; // PORTB selected as input PORTB=0; TRISD=0; // PORTD selected as output LATD=0; //INTCON2<7>=0; // enable/disable PORTB pull-ups (aici am incercat in ambele feluri dar nici o schimbare)}unsigned int temp;void main() {init();while(1){ LATD=PORTB; }}Spuneti-mi va rog daca gresesc undeva, sau daca am uitat sa configurez anumiti biti sau daca nu am bagat in seama.Mersi anticipat,si scuze daca, cumva s-a mai discutat subiectul acesta!Mihai Link spre comentariu
Liviu M Postat Iulie 22, 2010 Partajează Postat Iulie 22, 2010 Si tu cam cum te astepti sa functioneze? In general, se recomanda ca intrarile nefolosite sa nu fie lasate libere, in caz contrar aparand hazardul (nu stii niciodata ce o sa se intample cu intrarea respectiva). Tinand cont ca PORTB e configurat ca intrare, codul PORTB=0; n-are prea mare efect, ala se foloseste pentru iesiri; intrarile sunt "comandate" de "exteriorul" pic-ului. Asa ca dupa parerea mea, ai asteptari "false". Link spre comentariu
Vizitator Mishi Postat Iulie 22, 2010 Partajează Postat Iulie 22, 2010 Pai io ma asteptam atunci cand nu ii conecatat nimic la portu B sa fie pe 0. asta ma punea pe mine pe ganduri.(si retin parca si eu ca nu ii indicat sa las pini in gol) deci sa inteleg ca atunci cand conectez ceva din exterior, nu o sa existe nimic in gol? sa nu imi faca surprize Link spre comentariu
Liviu M Postat Iulie 22, 2010 Partajează Postat Iulie 22, 2010 Ce voiam eu sa zic e ca atunci cand porturile sunt programate ca intrari (TRISx.y=1), nu mai poti "fixa" valoarea portului/pinului respectiv in program. Daca nu e in aer, portul va "citi" potentialul la care e conectat; daca e lasat in aer, n-ai nici un fel de siguranta ca la doua citiri diferite vei gasi portul respectiv in aceeasi stare. Link spre comentariu
kit Postat Iulie 22, 2010 Partajează Postat Iulie 22, 2010 pull-up-ul intern este dezactivat la POR (pag 116 manual). apoi, daca ai PBADEN setat (in regiunea de configurare) atunci trebuie sa pui pe digital pinii RB4-RB0, care, implicit, sunt in acest caz intrari analogice. un exemplu de initializare ai pe coloana a 2-a de la aceeasi pagina. foarte util, la sfarsitul fiecarui (sub)capitol gasesti toti registrii implicati, iar pentru PORTB asta este la pagina 118 (din manual). foarte important insa este sa nu lasi pinii PORTB (ca intrari) in gol. asta inseamna ca ei sa fie ori pe 1L ori pe 0L, indiferent de metoda. ce inseamna 1L, respectiv 0L gasesti la pagina 374 (din manual).daca pui pinul direct la masa este ok, dar nu-l pune direct la VDD, foloseste o rezistenta (10k, 4k7, etc); INTCON2<7>=0; // enable/disable PORTB pull-ups (aici am incercat in ambele feluri dar nici o schimbare)aceasta instructiune activeaza pull-up. daca o comentezi atunci vei dezactiva pull-up. initializarea facuta de tine pare buna, ramane de verificat conectarea la pic a circuitului(~elor) de intrare. acuma, eu cred ca daca lasi pinii liberi cu pull-up-ul activat nu-i bai, prin pull-ul-ul intern pinul este pus implicit pe 1L (VDD); astfel, poti detecta doar 0L ca fiind actiune utila (de exemplu apasarea unei taste). pentru operatiuni mai complexe, trebuie dezactivat pull-up-ul intern si rezolvata problema cu ajutorul unui hard extern. NOTA! am luat numerotarea paginii ca fiind cea indicata de adobe reader si nu cea inscrisa pe fiecare pagina. exista un deplasament de 2 pagini intre numerotarea oferita de adobe reader si cea oferita de producator. bafta! Link spre comentariu
Vizitator Mishi Postat Iulie 23, 2010 Partajează Postat Iulie 23, 2010 Da! am inteles. faza cu pinii lasati in gol ii problema. Eu fac un sistem de achizitii de date, si portul B as vrea sa il folosesc la intrarile digitale. voi folosi conector cu 8 pini la intrare. deci ma gandesc ca atunci cand se va conecta ceva la cei 8 pini nu are relevanta daca ei sunt lasati in gol in prealabil. ca va citi exact nivelurile logice ce sunt transmise.dupa asta o sa inceapa partea mea distractiva, cea cu USB-ul. Am cautat o groaza pe net si am ajuns la concluzia ca varianta HID ar fi cea mai ok.mersi foarte fain de suport Link spre comentariu
Liviu M Postat Iulie 23, 2010 Partajează Postat Iulie 23, 2010 Uita-te si la PORTD, poate se potriveste mai bine decat PORTB. Link spre comentariu
kit Postat Iulie 24, 2010 Partajează Postat Iulie 24, 2010 cel mai frumos ar fi ca sa tii pinii PORTB ca iesiri (TRISB=0), iar cand vrei sa conectezi dispozitivul "de citit" la pic atunci sa setezi pinii ca intrari (TRISB=1). asta pentru ca daca legi picul la un calculator pe usb s-ar putea sa ai probleme in implementarea citirii aiurelilor date de pinii lasati in aer. un alt motiv ar mai fi si acela descris anterior: nu se lasa pinii ca intrari in gol. ori faci un pull-up cu ei, ori ii faci iesiri. eu, ca dezvoltare pe usb, am folosit CDC Basic Demo din toate variantele puse la dispozitie de biblioteca de aplicatii pe USB a Microchip (http://www.microchip.com/stellent/idcpl ... odeId=2896). apoi, instaland driverul aferent, am facut programelul de pe partea de calculator folosind, in Visual Studio C# Express, componenta SerialPort. daca respecti datele hard de proiectare n-ar trebui sa ai probleme (prea mari). bafta! Link spre comentariu
Vizitator Mishi Postat Iulie 27, 2010 Partajează Postat Iulie 27, 2010 Mersi frumos de idei. Acu am dat de alta problema. Cand conectez sistemu prin usb, imi zice ca "USB device not recognized. One of the USB devices attached to this computer has malfunctioned and win....".Am incercat sa refac si circuitu, am schimbat unele componente, dar acelasi rezultat.Daca ati mai trecut prin asa ceva is deschis la orice sugestie. Link spre comentariu
Liviu M Postat Iulie 27, 2010 Partajează Postat Iulie 27, 2010 Ce firmware ai folosit pentru partea de comunicatie USB?Mie mesajul ala de eroare mi-l da cand (inca nu m-am prins de ce) mi se strica firmware-ul din ICD2. Solutia - reprogramat 18F4550. Link spre comentariu
Vizitator Mishi Postat Iulie 27, 2010 Partajează Postat Iulie 27, 2010 Am folosit un exemplu de la MikroC, l-am adaptat pt oscilatorul de 20MHz ce il am eu, si am generat automat USB descriptorul. nu is sigur ce trebe sa scriu la PID si VID.La ce te referi ca trebuie reprogramat? in sensu ca eu l-am tot reprogramat schimband diverse prin cod, dar tot nici un rezultat. Link spre comentariu
Liviu M Postat Iulie 27, 2010 Partajează Postat Iulie 27, 2010 Nu, cu reprogramat ma refeream la cazul meu, da' eu foloseam un firmware gata facut (de uChip) care in mod normal functiona.La tine probabil nu functioneaza corect comunicatia pe USB si windowsul nu poate comunica cu chipul. De aceea, cand il conectezi, windowsul incearca sa comunice si nereusind striga.Din pacate eu chiar n-am facut nimic cu USB, asa ca n-am idee. Poate te ajuta altcineva. Link spre comentariu
kit Postat Iulie 28, 2010 Partajează Postat Iulie 28, 2010 as putea sa incerc sa te ajut daca folosesti C18 de la microchip. n-am lucrat pana acum cu MicroC. Dar... - verificarile ar trebui sa inceapa de la partea hard: ai pus un cond de 220 nF (470 nF dupa alti autori) la pinul VUSB al uC-ului? - apoi, daca ai definit ceva de genul USE_USB_IO_SENSE, adica un senzor hard de prezenta al usb pe unul din pini (la mine este RA2, de exemplu), acesta ar trebui sa fie 1L (VDD) daca dispozitivul este conectat la usb si 0L (VSS) daca nu. - mai departe, trebuie sa verifici firmware-ul. in plus, pentru acest firmware iti trebuie un driver, care sa-l instalezi pe comp. - foarte important: daca ai modificat frecventa la 20MHZ trebuie sa te uiti la "2.3 Oscillator Settings for USB" din manual pentru a face TOATE modificarile necesare si in program: #pragma config PLLDIV = 5 //20MHz#pragma config FOSC = HSPLL_HS //20 MHz#pragma config CPUDIV = OSC1_PLL2 //20 MHz(ca exemplu in C18) ti-am recomandat C18 cu biblioteca de aplicatii de la microchip pentru ca acolo ai cam tot ce ai nevoie. C18 il gasesti in versiunea lite si este gratuit tot pe site-ul producatorului. ti-am recomandat si acel Basic serial demo pentru ca-l poti integra foarte usor intr-un program scris de tine. oricum, nu dispera, iar daca nu-ti iese intreaba aici sau pe forumul producatorului sau oriunde altundeva, pana cand iti iese. nici mie nu mi-a iesit din prima si i-am adus pe toti in pragul isteriei tot intreband in stanga si in dreapta. bafta! Link spre comentariu
Vizitator Mishi Postat Iulie 28, 2010 Partajează Postat Iulie 28, 2010 ok... ms de ajutor...o iau iara de la 0 cu alte componente... sa vad ce rezolvmai postez cand ajung la un consens Link spre comentariu
Vizitator picbasic Postat Iulie 29, 2010 Partajează Postat Iulie 29, 2010 Daca nu ai reusit contacteaza-ma sa iti dau cateva linku-ri si ceva surse 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