Sari la conținut
ELFORUM - Forumul electronistilor

ADC pe PIC16F690


lama

Postări Recomandate

Vad ca in exemplul din data-sheet (pag. 112) dau un alt cuvant de initializare pentru Frc

MOVLW  B’01110000’ ;ADC Frc clock
Desi 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
  • Răspunsuri 28
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • lama

    14

  • Liviu M

    7

  • costi002

    5

  • MatyC

    2

Top autori în acest subiect

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

Vad ca in exemplul din data-sheet (pag. 112) dau un alt cuvant de initializare pentru Frc

MOVLW  B’01110000’ ;ADC Frc clock
Desi 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

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

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

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

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

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

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări