ADC wie schnell ist möglich ?
Montag, 21. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  CCS Compiler  |  AD-Wandler (CCS)  |  ADC wie schnell ist möglich ? « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: ADC wie schnell ist möglich ?  (Gelesen 2500 mal)
 
Nuke
Newbie
*
Offline Offline

Beiträge: 6


Profil anzeigen
« am: April 19, 2007, 19:09:21 »

Hallo,

ich bastel mit einem 18F4680 @ 20MHz

Als Compiler hab ich den CCS.

Ich mache eine AD Wandlung in einer Interruptroutine. Also auf externes Signal an EXT0.

Nach meinen Messungen ist die Acquisition Time recht schnell und die Wandlung vermutlich auch.

Mein Problem ist, dass der erst ca. 12-14uS nach dem Interrupt die Acquisition Time startet.
Ist das normal, dass der so lange braucht?


Die Interrupt Routine ist nicht überladen, also es steht nix vor read_adc. Danach hab ich jede menge Zeit.

Danke schonmal
Nuke
Gespeichert
Bernd
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 3815



Profil anzeigen
« Antworten #1 am: April 19, 2007, 20:25:43 »

Zitat
Ist das normal, dass der so lange braucht?

Das Interrupthandling des CCS ist nicht gerade effizient. 12µs sind 60 Befehlszyklen, was mir zwar etwas viel erscheint, aber leider durchaus noch im Bereich des möglichen liegt. Du solltest Dir mal das Dissassembly Listing des vom CCS generierten Codes anschauen.

Zitat
Danach hab ich jede menge Zeit.

Wenn es Dir tatsächlich darauf ankommt, die Wandlung schnellst möglich nach einer "externen" steigenden Flanke zu starten, gibt es wahrscheinlich eine bessere Möglichkeit als den INT0 Pin. Das ECCP1-Modul im Compare-Modus verfügt über einen "special event trigger", der die Wandlung automatisch in Hardware startet.

Prinzipielle Vorgehensweise:

  • externes Signal an den T13CKI-Pin anlegen
  • Timer1 (oder Timer3) so konfigurieren, daß er externe Flanken zählt (synchron), Prescaler auf 1:1
  • ECCP1-Modul auf "Compare mode, trigger special event" und den gewünschten Timer (1 oder 3) konfigurieren
  • <ECCPR1H:ECCPR1L> auf 0x0001 setzen (Timerwert, bei dem der "special event trigger" ausgelöst und die Wandlung gestartet wird)
  • nach Abschluß der automatisch gestarteten Wandlung erfolgt ein Interrrupt des AD-Wandlers

Ich bin mir nicht hunderprozentig sicher, ob bei dieser Vorgehensweise der "special_event_trigger" wirklich bei jeder steigenden Flanke an T13CKI ausgelöst wird (wenn ich falsch liegen sollte, erfolgt der Trigger bei jeder zweiten steigenden Flanke).


Viele Grüße

Bernd
Gespeichert

Nuke
Newbie
*
Offline Offline

Beiträge: 6


Profil anzeigen
« Antworten #2 am: April 19, 2007, 23:00:36 »

Hallo Bernd,

danke für die Superantwort.
Das war genau das was ich wissen musste.

Gruß
Peter
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.031 Sekunden mit 19 Zugriffen.
 
Top! Top!