Quantcast
Channel: MCS Electronics Forum
Viewing all articles
Browse latest Browse all 20771

BASCOM-AVR Old versions : ADC Measurement : REPLY

$
0
0
I added another battery and just copy some routine.. [code:1:92394513c8]'MICRO-CONTROLLER BASED SOLAR CHARGE CONTROLLER 'USED CHIP: ATMEGA8L WITH INTERNAL RC OSCILLATOR '*************************************************************** ' INITIAL SETTINGS '*************************************************************** $regfile = "m8def.dat" 'REGISTER FILE FOR ATMEGA8 $crystal = 1000000 'OSCILLATOR FRQUENCY=1MHZ $swstack = 40 'SOFT STACK SIZE $hwstack = 32 'HARDWARE STACK SIZE $framesize = 32 'FRAME SIZE '*************************************************************** ' DEFINE INPUT/OUTPUT PORTS '************************************************************** Config Portd.2 = Output Config Portd.3 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portb.3 = Output Config Portb.4 = Output Config Portb.5 = Output Config Portb.6 = Output Config Portb.7 = Output '************************************************************** ' DEFINE ALIAS FOR GOOD READEBILITY '************************************************************** Charging Alias Portd.3 _load Alias Portd.2 Ch_led Alias Portb.3 Bat_h_led1 Alias Portb.1 Bat_l_led1 Alias Portb.2 Bat_h_led2 Alias Portb.4 Bat_l_led2 Alias Portb.5 Ac_led Alias Portb.6 Ac_chrg Alias Portb.7 '*************************************************************** ' SETUP ADC MODULE '*************************************************************** Config Adc = Single , Prescaler = Auto , Reference = Avcc '_2.56_nocap Start Adc '*************************************************************** ' VARIABLE DECLARATIONS '*************************************************************** Dim W As Word , W_single As Single Dim Sol_v As Single , B1_high As Single Dim Bat1_v As Single , Bat2_v As Single Dim B1_low As Single , B2_high As Single , B2_low As Single Dim Gp1 As Byte , Gp2 As Byte '*************************************************************** ' MAIN PROGRAM LOOP '*************************************************************** Main: Gosub Check_adc If Bat1_v < B1_high And Sol_v > Bat1_v Then Charging = 1 'CHARGING ON Ch_led = 0 'CHARGING LED ON Bat_h_led1 = 1 'BAT HIGH LED OFF _load = 0 'LOAD CONNECT TO BATT2 End If If Bat1_v >= B1_high Then Charging = 0 'CHARGING STOPS Ch_led = 1 'CHARGING LED OFF Bat_h_led1 = 0 'BAT HIGH LED ON Bat_l_led1 = 1 'BAT LOW LED OFF _load = 1 'LOAD CONNECT TO BATT1 Else Bat_h_led1 = 1 'BAT HIGH LED OFF End If If Sol_v < Bat1_v Then Ac_led = 1 Ch_led = 0 'CHARGING LED ON Ac_chrg = 1 'TURN AC CHARGER ON. _load = 1 'LOAD CONNECT TO BATT2 End If If Bat2_v < B2_high And Sol_v > Bat2_v Then Charging = 1 'CHARGING ON Ch_led = 0 'CHARGING LED ON Bat_h_led2 = 1 'BAT HIGH LED OFF _load = 1 'LOAD OFF End If If Bat2_v >= B2_high Then Charging = 0 'CHARGING STOPS Ch_led = 1 'CHARGING LED OFF Bat_h_led2 = 0 'BAT HIGH LED ON Bat_l_led2 = 1 'BAT LOW LED OFF Else Bat_h_led2 = 1 'BAT HIGH LED OFF End If If Sol_v < Bat2_v Then Ac_led = 1 Ch_led = 0 'CHARGING LED ON Ac_chrg = 1 'TURN AC CHARGER ON. _load = 0 'LOAD CONNECT TO BATT1 End If If Bat2_v <= B2_low Then _load = 0 'LOAD OFF Bat_l_led2 = 0 'BAT LOW LED ON Else Bat_l_led2 = 1 'BAT LOW LED OFF End If Goto Main '*************************************************************** ' ADC MEASUREMENT SUB ROUTINE '*************************************************************** Check_adc: For Gp1 = 1 To 7 'Loop through Gp1 (2-5) This is the ADC number we'll read later W_single = 0 'Setup an accumulator For Gp2 = 1 To 200 'Read the ADC 200 times in this loop W = Getadc(gp1) 'Actually read the ADC Value W_single = W_single + W 'Add to the accumulator Next Gp2 ' If W_single <> 0 Then 'If the total of all ADC values read for this ADC is > 0 then W_single = W_single / 200 'Divide by 200 (The number of times we read the ADC). This will give us an average Else W_single = 0 End If Select Case Gp1 'Where should the average value for the ADC just read be stored? Case 2 : Sol_v = W_single 'Save value from ADC 2 to Sol_v Case 3 : B1_high = W_single 'Save value from ADC 3 to B1_High Case 4 : B1_low = W_single 'Save value from ADC 4 to B1_low Case 5 : Bat1_v = W_single 'Save value from ADC 5 to Bat1_v Case 6 : B2_high = W_single 'Save value from ADC 6 to B2_High Case 7 : B2_low = W_single 'Save value from ADC 7 to B2_low Case 8 : Bat2_v = W_single 'Save value from ADC 1 to Bat2_v Case Else End Select Next Gp1 Return '**************************************************************** End 'end program[/code:1:92394513c8] [/code] Simulation seems to be fine..

Viewing all articles
Browse latest Browse all 20771

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>