Liviu M Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 Vad ca in exemplul din data-sheet (pag. 112) dau un alt cuvant de initializare pentru Frc MOVLW B’01110000’ ;ADC Frc clockDesi la tine e ca in descrierea din data-sheet, nu te costa mare lucru sa incerci si cu valoarea asta. Eventual refa initializarea respectand exact ordinea din exemplul ala, poate e importanta (pe pagina anterioara, la procedura de initializare scrie ca referinta s-o programezi inainte sa selectezi intrarea). Link spre comentariu
lama Postat Iunie 27, 2012 Autor Partajează Postat Iunie 27, 2012 Si eu sunt tot cu asm-ul.Presupunand ca lucrezi la 8 Mhz, incearca sa incarci in ADCON1 0b0101000 si vezi daca merge.Vezi ca in datasheet la pagina 109 e un tabel cu valorile in functie de frecventa de lucru.La config eu am __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)Nu am gasit ce inseamna FOSC_INTRCIO si INTOSC.Si inca o chestie.IntreGO_nDONE=1; // initiate conversion on the channel 0siwhile(GO_nDONE) continue; // Wait conversion done am un delay de 5usecLa 4 Mhz a mers si fara, la 8 nu.Am pus un delay de 1ms iar acum e mai bine:cind il pun la masa am 0 si o valoare fixa cind pun la VCC.cind las in aer iarasi o ia pe balarii.Totusi e un pas inainte.Deci ADC o fi mai lent...... Link spre comentariu
lama Postat Iunie 27, 2012 Autor Partajează Postat Iunie 27, 2012 Vad ca in exemplul din data-sheet (pag. 112) dau un alt cuvant de initializare pentru Frc MOVLW B’01110000’ ;ADC Frc clockDesi la tine e ca in descrierea din data-sheet, nu te costa mare lucru sa incerci si cu valoarea asta.Eventual refa initializarea respectand exact ordinea din exemplul ala, poate e importanta (pe pagina anterioara, la procedura de initializare scrie ca referinta s-o programezi inainte sa selectezi intrarea).Am pus si nu se schimba nimic.si am fortat VCFG = 0; inainte de ADCON0 tot fara efectmai sap Link spre comentariu
MatyC Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 unsigned int adc,adc_dec;Rezolutia ADC este pe 10 biti dar totusi folosesti numai variabile pe 8 biti fara semn. Ma intreb si eu daca nu cumva aici e problema. Recunosc ca nu am citit prea mult datasheet-ul ca nu am avut prea mult timp. (ADRESH << 8)Rezultatul nu cumva este 0 de fiecare data !!!? Nu cumva trebuia deplasare cu 6 ??? Mai studiez maine problema daca e cazul. Bafta. Link spre comentariu
Liviu M Postat Iunie 27, 2012 Partajează Postat Iunie 27, 2012 La picc (compilator destul de ansi) int e pe 16 biti.Si deplasarea e cu 8, ca bitii 0 si 1 din registrul H trebuie pusi "in continuarea" celor 8 din registrul L. Link spre comentariu
lama Postat Iunie 27, 2012 Autor Partajează Postat Iunie 27, 2012 La picc (compilator destul de ansi) int e pe 16 biti.Si deplasarea e cu 8, ca bitii 0 si 1 din registrul H trebuie pusi "in continuarea" celor 8 din registrul L.Asa este, partea aceastea e functionala caci am mai folosit-o la alte dou cipuri.Pot face un union dar nu se justifica. Link spre comentariu
MatyC Postat Iunie 28, 2012 Partajează Postat Iunie 28, 2012 Aveti dreptate cu lungimea variabilei. Cred ca stiu de ce am facut confuzia asta. Am sa ard eu manualul ala vechi. Link spre comentariu
lama Postat Iunie 28, 2012 Autor Partajează Postat Iunie 28, 2012 Am rezolvat. Cum?Din citirea aia auirea-cind nu era pus la masa sau VCC- am banui ca e ceva cu GND-ul putred.Am relipit tot ce se putea relipi dar tot asa face . Deci traseu.Cum in general fac doua cablaje, am lipit imediat al doilea si totul e ok.Deci codul postat functioneaza perfect.Multumesc de sfaturi.Stima Link spre comentariu
Liviu M Postat Iunie 28, 2012 Partajează Postat Iunie 28, 2012 Deci codul postat functioneaza perfect.Care varianta? Ca am avut cu totii atatea idei... PS Felicitari! Link spre comentariu
lama Postat Iunie 28, 2012 Autor Partajează Postat Iunie 28, 2012 Deci codul postat functioneaza perfect.Care varianta? Ca am avut cu totii atatea idei... PS Felicitari!cel publicat(+ delayul ) Link spre comentariu
costi002 Postat Iunie 28, 2012 Partajează Postat Iunie 28, 2012 dar daca scoti delay-ul, nu merge? ca am vazut parca ca rutina asteapta terminarea conversiei. Link spre comentariu
lama Postat Iunie 28, 2012 Autor Partajează Postat Iunie 28, 2012 dar daca scoti delay-ul, nu merge? ca am vazut parca ca rutina asteapta terminarea conversiei.testez. Pina acum am lucrat doar la 4MHz.Cineva spunea ca la 8MHz pe asm ii trebuie delay.Vedem daca pe C are nevoie. Link spre comentariu
Liviu M Postat Iunie 28, 2012 Partajează Postat Iunie 28, 2012 Atata timp cat dupa schimbarea intrarii/stabilizarea semnalului de intrare astepti suficient (Tad parca) si citirea rezultatelor o faci dupa ce GO/Done = 0, ar trebui sa nu-ti mai trebuiasca nici o intarziere. Zic si eu. Link spre comentariu
lama Postat Iunie 29, 2012 Autor Partajează Postat Iunie 29, 2012 dar daca scoti delay-ul, nu merge? ca am vazut parca ca rutina asteapta terminarea conversiei.testez. Pina acum am lucrat doar la 4MHz.Cineva spunea ca la 8MHz pe asm ii trebuie delay.Vedem daca pe C are nevoie. GO_nDONE=1; // initiate conversion on the channel 0 // __delay_ms(1); //let's wait while(GO_nDONE) continue; // Wait conversion done Dupa de am scos delay-ul merge fara probleme DAR nu trebuie uitat ca C face cod asm mai stufos 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