Pic 18F4525 mehrere Analoge Eingänge und dann an den PC aber WIE
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  PIC Mikrocontroller Allgemein  |  AD-Wandler (Allgemein)  |  Pic 18F4525 mehrere Analoge Eingänge und dann an den PC aber WIE « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Pic 18F4525 mehrere Analoge Eingänge und dann an den PC aber WIE  (Gelesen 2157 mal)
 
gw-tuning
Newbie
*
Offline Offline

Beiträge: 10


Profil anzeigen
« am: Dezember 02, 2011, 08:44:49 »

Guten Morgen zusammen, ich habe mal wieder ein kleines Problem, wir haben den oben genannten PIC, so und haben am PortA0-A3 die Analogen eingänge, diese sollen dauerhaft gelesen werden und verschickt werden an den PC... aber wir wissen nicht wie, ersten da es ein 10Bit signal ist(was auch für unsere zwecke gut ist wegen der Auflösung) und er schnell ist... aber nun ja, wir haben bisher nurmit dem 16F877 gearbeitet, na und bei dem jetzigen kommt das Adcon2 dazu... hilfe... hat zufällig jemand ne kleine Zeile wo wir draus erkennen können, man hat uns gesagt wir müsste mit schiebern arbeiten um bereich des Adcon 0 betreffend des CHS0-3... so na ja und dann.. wir sind ratlos... weil wir schicken dem pc ja jeweils 16Bit davon sidn ja von jedem kanal 10Bit nur belegt...und das legen wir ja fest mit dem ADFM von links nach rechts... So mehr weiss ich nicht...

Danke an Euch
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #1 am: Dezember 02, 2011, 10:24:30 »

Hi,

Zitat
und verschickt werden an den PC... aber wir wissen nicht wie, ersten da es ein 10Bit signal ist(was auch für unsere zwecke gut ist wegen der Auflösung) und er schnell ist... aber nun ja, wir haben bisher nurmit dem 16F877 gearbeitet, na und bei dem jetzigen kommt das Adcon2 dazu... hilfe...
Raff ich nicht. Im Datenblatt ist doch die Funktion der Register erklärt. Was das mit dem Senden zum PC zu tun hat verstehe ich allerdings auch nicht.
Zitat
man hat uns gesagt wir müsste mit schiebern arbeiten um bereich des Adcon 0 betreffend des CHS0-3
Schieber?!? Du musst vor jeder Wandung die CHS Bit richtig setzen, fertig.
Zitat
weil wir schicken dem pc ja jeweils 16Bit davon sidn ja von jedem kanal 10Bit nur belegt...
Was ja kein Problem ist.
Zitat
...und das legen wir ja fest mit dem ADFM von links nach rechts...
Von links nach rechts ist es immer, das Bit legt fest ob die Daten links- oder rechtsbündig sind. Ich empfehe rechtsbündig in eurem Fall.

Wenn du das in einem PIC16F877 hinbekommen hast, dann solltest du doch in der Lage sein im Datenblatt nachzuschauen wie die anderen Register beschrieben werden müssen. Das DB ist extrem ausführlich und erklärt alle Einstellungen.

Gruß
Stefan
Gespeichert

gw-tuning
Newbie
*
Offline Offline

Beiträge: 10


Profil anzeigen
« Antworten #2 am: Dezember 02, 2011, 11:44:46 »

Mit dem Schieben das haben wir in unserem Schultestprogramm gehabt...siehe unten...und wie schicke ich dem PC 16 bit, ich habe gelesen das je das ADRESH 8 Bit hat und im ADRESL die restlichen 2 bit sind, und die beiden muss ich dann eventuell so schicken:
TXREG=ADRESH:ADRESL
oder wie??? Klar das FLAK vorher abfragen... und danach zurücksenden...




So dachte ich mir mein Programm, aber mir fehlt das wissen wie ich es richtig machen kann...
Code:
if (Byte1=0x20)
{
   TRISA0=0;
   TRISA1=0;
   TRISA2=0;
   TRISA3=0;
   ADCON1=0b00001011;
   ADCON2=0b00???001;      // Weiss nicht genau wofür das TAD ist
   ADCON0=0;      //Reset

   while (Byte1=0x20)
   {
       ADCON0=0b00000011 //zum einlesen vom ersten Wert

       ADCON0=0b00000111 //zum einlesen vom zweiten Wert

       ADCON0=0b00001111 //zum einlesen vom dritten Wert

       ADCON0=0b00010011 //zum einlesen vom vierten Wert

   }
}
So aber was dazwischen kommt das weiss ich nicht, und ob das so klappen
könnte auch nicht... daher meine Fragen... da weiss ich halt kaum was
drüber... und muss ich den werten eine Variable zuorden um die zu
schicken...






So sah das schulprogramm aus:


da war mal was
mit channel=channel<<3 in einer messen.c so und in dem hauptprogramm
sind dann die messen(2) an Port D und die messen(3)an Port B ausgegeben
worden.. aber das konnte ich nicht erweitern... so und das entsprechende
ergebnis habe ich dann in das txreg gschickt und zum pc versenden...
aber ich kann es nciht erweitern... ich suche es mal und lade es mit
doch.... Aber trotzdem schnmal nen riesen dank...

So das war die messen_ch: //messen_ch.h
//es wird der angegebene Kanal gemessen
Code:
#include  "delay.h"
unsigned char messen(unsigned char channel)
{
  ADCON0=(ADCON0&0b11000111)|(channel=channel<<3);
  DelayUs (20);
  ADGO=1;        //wandeln
  while(ADGO);
  return ADRESH;
}

und das die messen.c :
//messen RA23
Code:
#include   <htc.h>
__config (0x3F31);
//#include "messen.h"
void messen(void);      //Anmeldung Prototyp
void konfig(void);
void main (void)
{   konfig();
   while(1)
   {
      ADCON0=0b01010001;   //RA2;
      messen();
      PORTD=ADRESH;
      ADCON0=0b01011001;   //RA3
      messen();
      PORTB=ADRESH;
   }
}
void messen(void)
{   unsigned char i;
   for (i=4;i>0;i--);      //20us=4*6us
   //ADCON0=ADCON0 | 0b00000100; //Go-Bit gesetzt
   //while ((ADCON0&0b00000100)==0b00000100);
   //oder alternativ:
   while(ADCON0&0x04);      //false=0, true=1...
}
void konfig(void)
{
   ...
}

WOBEI DAS IST FÜR DEN 16F877 da stimmen die Adcons nicht überein, udn
der hatte nur 8Bit und ich brauche die 10Bit...

So ich glaueb das war es... aber wie gesagt wenn ich diese erweitern
könnte, dann häött ich was lauffähiges und ich könnte die werte
messen(x) zum pc schicken...

Danke


* Fluss.png (917.4 KB, 686x456 - angeschaut 23 Mal.)
« Letzte Änderung: Dezember 03, 2011, 11:55:08 von Stampede » 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.035 Sekunden mit 18 Zugriffen.
 
Top! Top!