Hall!
Hier ist der code.
Könnt ihr mir sage wie das mit dem ADC Interrupt geht?
ich meine so ähnlich wie "On Int0 tue_irgendwas", denn in der neuen Bascom Hilfe habe ich leider nichts gefunden.
Grüße Viktor
Code:
'###############################################################################
'#####
'##### Project: 6A-Netzteil
'##### Version: v1.0
'##### Date: 10.03.2007
'##### Projectname: 6A_Netzteil_v1.0.bas
'##### Developer: Krieger, Viktor
'#####
'###############################################################################
'########[ Description ]###########################################################
'####PORT A####
' PA0 = [ADC CH0] CONTROL_SPL ( voltage control 12V )
' PA1 = [ADC CH1] PWR_SPL (voltage control 33,6V )
' PA2 = [OUT] LED_ERR (Error LED) signals an error of the power-supply
' PA3 = [OUT] LED_SDWN (Shut Down LED) signals powerdown - state
' PA4 = [OUT] LED_RDY (Ready LED) signals that all ok
' PA5 = [OUT] NC this pin is not connected
' PA6 = [OUT] REL_POWON
' PA7 = [OUT] REL_PROTECT
'####PORT B####
'
' PB0 = [DEF] MOSI *
' PB1 = [DEF] MISO *
' PB2 = [DEF] SCK *
' PB3 = [IN] JP1 jumper 1
' PB4 = [IN] JP2 jumper 2
' PB5 = [OUT] ERROR signals other devices an error (no error = 1/ on error = 0)
' PB6 = [IN] SDWN input for standby sequence (active 0)
' PB7 = [DEF] RESET *
'
' * Default configuration of the portpin's by using of hardware SPI !!!
'###############################################################################
$regfile = "at26def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 16
$framesize = 24
'########[ Hardware Configuration ]#################################################
' Configurate ADC's
' Single - as single ended inputs
' Auto - for the fastest possible samplingrate
' Internal - set Vref @ 2,56V
Config ADC = Single , Prescaler = Auto , Reference = Internal
' Cofigurate Interrupts
Config Int0 = Low Level ' coonfigurate Int0 at Low Level
On Int0 ISR_Int0 ' jump to ISR_Int0 label
' Enable Global Interrupts
Enable Interrupts 'enable all Interrupts
Enable Int0 'enable Interrupt Int0
' Port's Directions & PullUp's
DDRa = &B1111_1100 ' configurate I/O's 1-OUT/ 0-IN
DDRb = &B0010_0000 ' configurate I/O's 1-OUT/ 0-IN
PORTa = &B0000_0000 ' internal PullUps 1/0 on/off
PORTb = &B1100_0000 ' internal PullUps 1/0 on/off
' Output's PORT A
LED_ERR Alias PORTa.2
LED_SDWN Alias PORTa.3
LED_RDY Alias PORTa.4
REL_POWON Alias PORTa.6
REL_PROTECT Alias PORTa.7
' Input's PORT B
JP1 Alias PINb.3
JP2 Alias PINb.4
SDWN Alias PINb.6
' Output's PORT B
ERROR Alias PORTb.5
'########[ Constants ]#############################################################
Const PowerUp_Delay = 25 ' const x 100ms = powerup delay time [ms]
Const minThresoldCh0 = 690 ' 690
Const minThresoldCh1 = 700 ' 700
'########[ Variables ]#############################################################
Dim Overload_Flag As Bit
Dim Value_Ch0 As Word
Dim Value_Ch1 As Word
'########[ Initialisation ]###########################################################
Overload_Flag = 0
Gosub LED_TEST
Gosub POWER_UP
'########[ Main Code ]############################################################
Main:
Do
Value_Ch1 = GetAdc(1)
Waitms 10
Value_Ch1 = GetAdc(1)
Waitms 10
Value_Ch0 = GetAdc(0)
Waitms 10
Value_Ch0 = GetAdc(0)
Waitms 10
If Value_Ch0 < minThresoldCh0 Then
GoSub OVERLOAD
EndIf
If Value_Ch1 < minThresoldCh1 Then
GoSub OVERLOAD
EndIf
Loop
End
'########[ Subroutines ]###########################################################
LED_Test:
LED_ERR = 0
LED_SDWN = 0
LED_RDY = 0
Waitms 1000
LED_ERR = 1
LED_SDWN = 1
LED_RDY = 1
Return
Power_Up:
Dim i As Byte
Start Adc
LED_RDY = 0
REL_PROTECT = 1
Do
Toggle LED_RDY
Waitms 100
Incr i
Loop Until i = PowerUp_Delay
REL_POWON = 1
Waitms 100
REL_PROTECT = 0
LED_RDY = 0
Goto MAIN
Power_Down:
Stop Adc
LED_RDY = 1
LED_SDWN = 0
REL_POWON = 0
Do
Waitms 400
Toggle LED_SDWN
Loop Until SDWN = 1
LED_SDWN = 1
Return
Overload:
Overload_Flag = 1
REL_POWON = 0
REL_PROTECT = 0
LED_RDY = 1
LED_ERR = 0
Do
Toggle LED_ERR
Waitms 1000
Loop
Return
'########[ ISR Routines ]##########################################################
ISR_Int0:
Disable Int0
If Overload_Flag = 1 Then
Gosub OVERLOAD
EndIf
Gosub POWER_DOWN
Enable Interrupts
Enable Int0
Gosub POWER_UP
End
Lesezeichen