Egy kicsit átalakítottam az AVRWEB32 panelt.
Az eredeti Mega32 helyett egy Mega644P 20 PU került
A portD4 (19) láb össze volt kötve az bemenetet leválasztó optokapuval.
Annyi átalakítást végeztem, hogy most portD2 [int0] 16 lábra átkötöttem, mert a bemenet polling nem volt megfelelő.
Arra gondoltam, miért ne működhetne megszakítással.
Sajnos nem működik.
Kód: Egész kijelölése
$crystal = 14745600
$regfile = "M644Pdef.dat"
$baud = 9600
$hwstack = 64
$swstack = 64
$framesize = 64
Out1 Alias Portc.2
Out2 Alias Portc.3
Out3 Alias Portc.4
Config Out1 = Output
Config Out2 = Output
Config Out3 = Output
Out1 = 0
Out2 = 0
Out3 = 0
Dim Sz1 As Integer '1-es bemenet szamlalo
Dim Ezvolt As Byte 'a D port megszakításkor
Dim Ezlet As Byte 'A D port átalakítás után
Dim Gomb As Byte 'aktuális gomb allapot
Dim Tmp_gomb As Byte 'elozo gomg alaapot
Dim Fut As Byte '1-ha a számlálás folyamatban van
Dim Irni As Byte '1-ha kijelzőt kell írni
Dim Fel As Byte
Dim Le As Byte
Dim Jobb As Byte
Dim Bal As Byte
Dim Ent As Byte
Dim Full As Integer
Dim Resz As Byte
Dim Go As Byte
Dim Szint As Integer
Echo Off
'Csipogo
Config Portc.7 = Output
Portc.7 = 0
Speaker Alias Portc.7
'LED
Config Portd.3 = Output
Portd.3 = 0
Led Alias Portd.3
'I2C settings
Config I2cdelay = 10 'slow mode:10
Config Scl = Portc.0 'SCL
Config Sda = Portc.1 'SDA
'I2C_LCD
$lib "#lcd_i2c-bl_mcpduo.lib" 'MCP23017(40)+MCP23008(4E)
Const _i2c_lcd_address_w40 = &B01000000 'MCP23017
Const _i2c_lcd_address_w4e = &B01001110 'MCP23008
'Const _i2c_lcd_bl = 0
Const _i2c_lcd_bl = 1 'Backlight yes/no
Config Lcd = 20 * 4 , Chipset = Ks077
Config Pind.2 = Input
Config Int0 = Falling
Enable Int0
On Int0 Szamoljunk
I2cinit
I2cstart
I2cstop
Initlcd
Waitms 500
Initlcd
Set Led
Wait 1
Reset Led
Cls
Locate 1 , 1
Lcd "Hopper counter v 1.0"
Locate 2 , 6
Lcd "Keszítette"
Locate 3 , 4
Lcd "Gyugel Zsolt"
Locate 4 , 7
Lcd "2011.07."
Gosub Csipog1
Wait 1
Cls
Sz1 = 0
Tmp_gomb = &B11111111
Full = 500
Resz = 20
Go = 0
Szint = Full
Fut = 0
Irni = 1
Set Out1
Set Out2
Locate 1 , 1
Lcd "Maximum:" ; Full
Locate 1 , 14
Lcd "resz:" ; Resz
Locate 2 , 1
Lcd "Szamlalas inditasa"
Do
'I2C_lcd_gomb
Const _i2c_lcd_address_w = &B01000000
I2cstart
I2cwbyte _i2c_lcd_address_w40
I2cwbyte &H12
I2cstop
Waitms 25
I2cstart
Gomb = _i2c_lcd_address_w40 + 1
I2cwbyte Gomb
I2crbyte Gomb , Nack
I2cstop
If Tmp_gomb <> Gomb Then
Tmp_gomb = Gomb
If Gomb.7 = 1 Then
Ent = 1
Set Out3
Fut = 1
Irni = 1
Else
Ent = 0
End If
End If
If Fut = 1 Then
Locate 2 , 11
Lcd "folyik..."
Else
Locate 2 , 11
Lcd "inditasa"
Locate 4 , 15
Lcd " "
End If
If Irni = 1 Then
Irni = 0
Locate 3 , 8
Lcd "Szint:" ; Szint
Locate 4 , 8
Lcd "Resz :"
If Sz1 < 10 Then
Locate 4 , 16
Else
Locate 4 , 15
End If
Lcd Sz1
End If
Loop
'megszakítás rutin
Szamoljunk:
If Fut = 1 Then
'Incr Sz1
'Decr Szint
Szint = Szint - 1
Sz1 = Sz1 + 1
Irni = 1
If Sz1 = 20 Then
Reset Out3
Fut = 0
End If
End If
Return
Csipog1:
Sound Speaker , 100 , 1000 'make some noice
Sound Speaker , 100 , 1200 'make some noice
Csipog2:
Sound Speaker , 100 , 1000 'make some noice
Return
Várom az ötleteket!