Forum: Mikrocontroller und Digitale Elektronik Analog Input und Interrupts


von Isabelle (Gast)


Lesenswert?

//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
Noch kein Account? Hier anmelden.