Guten Morgen, ich habe ein Problem... ich muss folgendes erreichen: AN0 - AN3 einlesen aber je als 10 Bit... Gut wir haben die Kommunikation zum PC stehen, der PiC soll die AN´s einlesen und dann kontinuierlich zum PC schicken( das ist nur ein teil des gesamten) so aber wie... nun ich weiss das die 10 Bit im Adresh und Adresh low abgelegt werden, je nach einstellung von links oder von rechts... Nun wir arbeiten mit c... Mein frage ist jetzt hat jemand ein Beiospiel Programm wie ich es schaffe das er die 4 einliest, ich weiss nur was das man schieben muss was die Eingansgbestimmung angeht(CHS1-3 im Adcon 0) aber wie weiss ich nicht, und wie ich das dann sende, oder ausgebe... Vielleicht hat es schon jemand von euch gemacht,m und hat da eine idee... zum pc senden ansich haben wir hinbekommen... :" Zur Aufklärung... der PC senden einen Hexcode mit dem wir in einem Hauptprogramm über eine IF schleife in die ANALOG EIngangsvariante wechseln, so dann muss ich den wandler einschalten..etc.. aber dann wie weiter... danke...
Kennst du http://www.sprut.de/ ? Da wird das eigentlich sehr schön erklärt ;) Uwe K. schrieb: > so dann muss ich den wandler einschalten..etc.. aber dann wie > weiter... danke... Wie dann weiter? Na messen und den Messwert dann an den PC schicken. Ist eigentlich kein Problem.
Ja aber ich habe 4 Eingänge die direkt hintereinander eingelesen werden und an den pc geschcikt werden, in einer while schleife bis der zustand darin sich ändert...
Und wo soll da ein Problem sein? Messen und anschließend Messwert senden und wieder messen und wieder Messwert senden...ich versteh dich hier nicht wo da ein Problem sein soll. Beschreibe deinen Aufbau (Programm, Hardware geht ja wenn ich dich recht verstanden habe) genauer, z.b. mit einem Flussdiagramm ;).
So ich habe mal versucht ein Fluss Diagramm zu erstellen, da ich aber kaum Ahnung habe was die Analogen Dinge angeht hoffe ich das es Verständlich ist... ich weiss nicth wie ich das Unterprogramm erstellen soll... 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... wir hatten mal ein Testprogramm in der Schule 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) { ... } 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
So ich habe mal versucht ein Fluss Diagramm zu erstellen, da ich aber kaum Ahnung habe was die Analogen Dinge angeht hoffe ich das es Verständlich ist... ich weiss nicth wie ich das Unterprogramm erstellen soll... 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... wir hatten mal ein Testprogramm in der Schule 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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.