//setup_adc_ports(AN0_TO_AN9); Saluti mitenand Anweisungen 1.In meinem Programm arbeite ich mit einem Externen Interrupt der einen Zähler startet. Bei jedem Zähler überlauf wird dann wieder ein Interrupt gestartet. 2.weiter wird im Programm ein analoger Input abgefragt. Problem Wenn ich den Analogen input ohne die in Anweisung 1 angegebenen dinge arbeiten lasse, funktioniert er einwandfrei. wenn ich nur Anweisung 1 ohne analog Input laufen lasse, funktioniert sie ebenfalls einwandfrei. habe herausgefunden, wenn ich den Befehl "setup_adc_ports(AN0_TO_AN9);" ausführe funktioniert "nichts mehr wirklich." "nichts mehr wirklich" = Der Zähler funktioniert nicht mehr. entdeckt jemand etwas? /***** Einzubeziehende Programmteile *****/ #include "C:\Dokumente und Einstellungen\p20000\Eigene Dateien\Projekte\PIC-MinivorlageP1\18F4680.h" #include "C:\Dokumente und Einstellungen\p20000\Eigene Dateien\Projekte\PIC-MinivorlageP1\main.h" #include "C:\Dokumente und Einstellungen\p20000\Eigene Dateien\Projekte\PIC-MinivorlageP1\system_init.c" //Prototyp void s1(void); //Globale Variabeln int32 TIMER=65535; int32 Tges_=0; int16 z=0; int p=1; ********************************************************* Interruptrutinen ********************************************************* //-----------Externer Interrupt-----------// #int_EXT1 //PIN35/INT2 void pulshigh_isr() //Aktiv bei steigener Flanke { int ueberT_rest; long x; int16 T_Teiler; int32 t1; int32 t2; int32 ueberT; int32 t2t; if(p==1) { set_timer3(0); z=0; } if (p==2) { x=get_timer3(); ueberT=z; p=0; //Auswertung der Messung und angabe in 00.0ms T_Teiler=ueberT/30; ueberT_rest=ueberT-(T_Teiler*30); t1=T_Teiler*196; t2t=(ueberT_rest*TIMER)+x+(6050*T_Teiler) t1=t1*1000; t2=t2t/10; Tges_=t1+t2; } p++; } //-----------Timer Überlaufinterrupt-----------// #int_timer3 void clock_isr() { z=z+1; } ************************************************************************ * Main loop ************************************************************************ ** void main() { setup_timer_3(T3_INTERNAL|T3_DIV_BY_1); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER3); enable_interrupts(INT_EXT1); set_adc_channel( 9 ); setup_adc_ports(AN0_TO_AN9); setup_adc(ADC_CLOCK_INTERNAL); for(;;) { //s1(); } } /*********************************** Abfrage der Anzeigenwahl ************************************ void s1() { long ZSPE=0; int x=0; int t=0; ZSPE=ADC_START_AND_READ; if (ZSPE<20) output_high(PIN_C2); if (t&&ZSPE<20&&ZSPE>100) output_low(PIN_C2); t=1; if (ZSPE>20&&ZSPE<200&&t) output_high(PIN_C3); else output_low(PIN_C3); t=0; if (ZSPE>200&&ZSPE<500&&x) output_high(PIN_D0); else output_low(PIN_D0); if (ZSPE>500) output_high(PIN_D1); x=0; if (ZSPE>400&&ZSPE<500) output_low(PIN_D1); x=1; }
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.