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...
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
#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
#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