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?
Mit dieser Erklärung komme ich nicht weiter...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.
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.







 
			
			 
					
					
					
						 Zitieren
Zitieren

Lesezeichen