mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik dsPIC / ADC Wandlung


Autor: schnudl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiss nicht, in welches Forum dies reingehört, im Elektronikforum 
sind mehr Leute als im DS Forum, und es hat ja auch nix mit DS zu tun:

Ich möchte eine Serie aufeinanderfolgender manueller Conversions 
durchführen, und nach jeder Conversion zwischen MUXA und MUXB wechseln.

Init Code ist wie folgt:

 void ADC_Init(void)
 {
     ADCON1bits.ADON = 0;         // Turn ADC OFF
     
     ADPCFG = 0b1111111111110000; // AN0-AN3 configured as analog input
     
     ADCON1bits.FORM = 0b00;      // integer form
     ADCON1bits.SAMP = 0;         // Set sampling off at begin
     ADCON1bits.SSRC = 0b111;     // clock based convert
     ADCON1bits.ASAM = 0;         // no auto sampling
     
     ADCON2bits.VCFG = 0b111;     // Reference AVdd, AVss
     ADCON2bits.CSCNA = 0;        // No input scan
     ADCON2bits.SMPI = 0;         // Interrupt every conversion
     ADCON2bits.BUFM = 0;         // one 16 bit buffer
     ADCON2bits.ALTS = 1;         // alternate MUXA/B sampling
     
     ADCHSbits.CH0NA = 0;         // Vref- as negative reference
     ADCHSbits.CH0SA = 2;         // MUXA = AN2
     ADCHSbits.CH0NB = 0;         // Vref- as negative reference
     ADCHSbits.CH0SB = 0;         // MUXB = AN0
     
                                  // TCY = 10MHZ * 4  / 4 = 10MHZ
     ADCON3bits.ADCS = 9;         // Tad = (ADCS+1) * TCY/2
     ADCON3bits.SAMC = 2;         // 2 Tad autosample time
                                  // 16 Tad cycles per channel = 8µs
                                  
     ADCON1bits.ADON = 1;         // Turn ADC ON
     
     
     
     
     ADCInterrupt_Init();
     
     
 }
 
 
 
 void ADCInterrupt_Init(void)
 {  
     IFS0bits.ADIF = 0;      // clear the U2RXIF interrupt flag
     IPC2bits.ADIP = 6;      // set ADC priority to 6
     IEC0bits.ADIE = 1;      // enable ADC Interrupt Service Routine
 }


Leider sieht es so aus, als ob nur MUXA verwendet würde, jedenfalls 
bekomme ich nur Messwerte von AN2, und keine von AN0. Beschaltung ist 
richtig.



Konversionen starte ich mit ADCON1bits.SAMP = 1;

Wieso geht das nicht ???

Wieso geht ausserdem

ADCON2bits.SMPI = 1;

nicht? Hier sollte doch, wie beim Wert SMPI=0 jede Konversion zu einem 
IR führen, oder? Leider passiert dies aber nur einmal (beim ersten mal), 
dann nie mehr!

**** dsPIC-BUG ???

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Glaskugel,

kannst Du mir bitte sagen, welchen dsPIC der  schnudl verwendet ?

Danke,
bis zum nächsten Mal,
lauf aber nicht so weit weg, ich glaube es werden höchstens 2-3 Posts 
bis ich Dich wieder brauche !!

Autor: schnudl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry: es ist ein dsPIC30F4013

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus meiner kurzen Erfahrung mit dem dsPIC33F sage ich mal, daß es 
mindestens 2 Methoden gibt, den ADC zu betreiben:

   - Single-Conversion, da steht 1 Ergebnis im Buffer
   - Mehrfach-Conversion, da wird dann gleich ein Array gefüllt.
   und diese Conversion kann man noch mittels SCAN oder anders 
bewerkstelligen. Scan sieht einfacher aus...
Es gibt dsPICs, die können Mehrfach-Ergebnisse nur über DMA ausliefern.

Mein brandheißer Tip: Datenblatt lesen, Wort-für-Wort !

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und nicht nur das was da steht, sondern auch das was nicht da steht.
Ich habe mich über die dsPICs auch schon oft aufgeregt. Meist gibt es 
irgendwo einen versteckten Hinweis irgendwo anderst bei einer anderen 
Peripherie. Ich bleib daher bei den AVRs, die laufen wenigstens und 
kosten weniger Nerven.

Autor: schnudl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem Wort für Wort lesen hab ich schon hinter mir...

Und alles was jetzt kommt ist möglicherweise schon Betriebsblindheit.

Vielleicht lese ich nochmal genau, aber das Problem ist, dass sich in 
diesen Datenblättern des dsPICs vieles unnötig über dutzende Seiten 
hinweg wiederholt, oft nur mit anderen Worten, aber grundlegende Dinge 
offen bleiben.

Scan-mode kann ich nicht verwenden, da ich dazu zwei Konversionen 
hintereinander anstossen müsste, aber ohne Interrupt nicht weiss, wann 
die erste fertig ist (pollen will ich nicht, da ich andere Dinge auch 
erledigen muss). Bei einem Scan über 2 Kanäle muss nämlich eingestellt 
sein, dass nur alle zwei Konversionen ein Interrupt generiert wird.

Daher die Idee, das wie beschrieben zzu machen. Sollte gehen, ... aber 
leider nicht bei mir :-)

Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das "Programmers Reference Manual" für die dsPIC-Serie ist nach meinen 
Erfahrungen vieel aussagekräftiger als das Datenblatt. Von dem her ist 
man von Atmel schon verwöhnt...

Gruß
Christian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.