Hi,
Da ich mich immer viel zu selten mit der Programmierung beschäftige, hänge ich mal wieder am gleichem Problem.
Wie bringe Ah (Amperestundenzähler) in die richtige Form?
Code:
Procedure OnSysTick (SaveAllRegs);
Begin
a:=GetADC(1);
b:=GetADC(2);
c:=GetADC(3);
d:=GetADC(4);
a:=muldivint (a,150,1023);
Ah1:=a;
Ah1:=Ah1 * muldivint (Ah1,1,100);
AH1:=Ah1 * muldivint (Ah1,1,3600);
Ah2:=Ah1 * Ah1;
end;

Procedure Ah;
Begin


end;
begin

  EnableInts;
  DDRB:=%00000000;
  DDRC:=%00000000;
  DDRD:=%11111111;
  n:=0;
  Ah1:=0;
  loop

Ah;
LCDUpper;
LcdClr;
LCDXY(0,0);
 write (LCDout, IntToStr(a));
LCDXY(0,1);
 write (LCDout, IntToStr(Ah1));
LCDLower;
LcdClr;
LCDXY(0,2);
 write (LCDout, IntToStr(c));
LCDXY(0,3);
 write (LCDout, IntToStr(d));

  endloop;
end ADC_Test.
Mit dieser Erklärung komme ich nicht weiter...
Die 10ms kann der systick sein, kann aber auch ein timer interrupt sein. Dazu siehe auch : [www.ibrtses.com]

Nein, eine Variable, die die Stromeinheiten als (1/1024)*(1/100)*(1/3600) Amperestunden zaehlt. Jede 10ms den ADC wert addieren, fertig. Amperestunden, resp. Ladung ist nur eine einzelne Zahl.

Falls erwuenscht kann man natuerlich auch vorher schon teilen damit der Teiler nicht ueberlaeuft. Theoretisch braucht man nicht zu teilen, wenn keine Anzeige da ist, spielt es keine Rolle in welcher Einheit man zaehlt.