Und wie ich das werden würde... ^^
Hallo Sauerbruch.
Die Wahrheitstabelle habe ich jetzt im Ganzen umgesetzt. Dabei sind alle Eingangspins benannt. Die internen PullUp's sind gesetzt, wodurch ich die nicht angeschlossenen Pins im Grunde auch in der Luft hängen lassen könnte - oder was meinst/denkst du? Würde dies vielleicht zu Fehlfunktionen führen?
Der Code sieht bislang so aus (nach meinem letzten Post geschrieben):
Code:
$regfile = "m8515.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
'-------------------------------------------------------------------------------
' *** Konfiguriere Ein- und Ausgangsports ***
Config Porta = Input
Config Portb = Output
Config Portc = Output
Config Portd = Output
Porta = &HFF ' Aktiviert die internen Pullup-Widerstände
Portb = &HFF ' schaltet alle Ausgänge 1, LED = 0
Portc = &HFF
Portd = &HFF
'-------------------------------------------------------------------------------
' *** Konfiguriere Timer ***
Config Timer0 = Timer , Prescale = 1024
On Timer0 Isr_timer0
Enable Timer0
Timer0 = 177
Enable Interrupts
'-------------------------------------------------------------------------------
' *** Deklarieren der Variablen ***
Dim Timercounter As Byte
'-------------------------------------------------------------------------------
' *** Deklarieren der Subroutinen ***
Declare Sub All_off
Declare Sub All_on
Declare Sub Horizontal_lines
Declare Sub Vertical_lines
Declare Sub Straight
Declare Sub Diagonal_falling
Declare Sub Diagonal_rising
Declare Sub Net
Declare Sub Net_invert
Declare Sub Arrow_up
Declare Sub Moving_net
'-------------------------------------------------------------------------------
' ===============================
' ***** Hauptprogramm *****
' ===================================
Do
Select Case Pina
Case &B11111111 : Call All_off ' 00000
Case &B11111110 : Call All_on ' 00001
Case &B11111101 : Call Horizontal_lines ' 00010
Case &B11111100 : Call Vertical_lines ' 00011
Case &B11111011 : Call Straight ' 00100
Case &B11111010 : Call Diagonal_falling ' 00101
Case &B11111001 : Call Diagonal_rising ' 00110
Case &B11111000 : Call Net ' 00111
Case &B11110111 : Call Net_invert ' 01000
Case &B11110110 : Call Arrow_up ' 01001
Case &B11110101 : Call Moving_net ' 01010
End Select
Loop
'-------------------------------------------------------------------------------
' *** ISR für Timer erzeugen - Overflow-Counter in Warteposition bringen ***
Isr_timer0:
Timer0 = 177
Incr Timercounter
' ### Gestartet wird der Timer im jeweiligen Unterprogramm.
' Eingestellt ist der Timer auf 0,01s. ###
'-------------------------------------------------------------------------------
' ====================================
' **** Unterprogramme ****
' ================================
Sub All_off: ' 00000
Portd = &B11111111
Portc = &B11111111
Portb = &B11111111
Stop Timer0
Timer0 = 177
End Sub All_off
Sub All_on: ' 00001
Portd = &B00000000
Portc = &B00000000
Portb = &B00000000
End Sub All_on
Sub Horizontal_lines: ' 00010
Portd = &B10101010
Portb = &B10101010
Portc = &B10101010
End Sub Horizontal_lines
Sub Vertical_lines: ' 00011
Portd = &B00000000
Portc = &B11111111
Portb = &B00000000
End Sub Vertical_lines
Sub Straight: ' 00100
Portd = &B11111111
Portc = &B00000000
Portb = &B11111111
End Sub Straight
Sub Diagonal_falling : ' 00101
Portd = &B00100100
Portc = &B01001001
Portb = &B10010010
End Sub Diagonal_falling
Sub Diagonal_rising: ' 00110
Portd = &B10010010
Portc = &B01001001
Portb = &B00100100
End Sub Diagonal_rising
Sub Net: ' 00111
Portd = &B10101010
Portc = &B01010101
Portb = &B10101010
End Sub Net
Sub Net_invert: ' 01000
Portd = &B01010101
Portc = &B10101010
Portb = &B01010101
End Sub Net_invert
Sub Arrow_up: ' 01001
Portd = &B11011101
Portc = &B10111011
Portb = &B11011101
End Sub Arrow_up
Sub Moving_net ' 01010
Start Timer0
If Timercounter = 1 Then
Portd = &B10101010
Portc = &B01010101
Portb = &B10101010
Elseif Timercounter = 120 Then
Portd = &B01010101
Portc = &B10101010
Portb = &B01010101
Elseif Timercounter = 240 Then
Timercounter = 0
End If
End Sub Moving_net
Erläuterungen zu den einzelnen Modulen habe ich nicht mehr beigefügt. Bei Interesse kann man sich das Ergebnis im Code der einzelnen Ports anschauen. Quasi stellen die 3 Ports das Regal dar, welches eigentlich nur nach links gekippt wurde ^^.
Beim letzten Modul mit dem Timer habe ich derzeit noch ein kleines Konflikt-Problem: Die LED leuchten nicht konstant, sondern nur ganz kurz auf, erlöschen sofort wieder und mit dem nächsten Takt erleuchtet die andere LED-Reihe nur ganz kurz - usw.ff. Denke, dass es mit der Ausschalt-Logik zusammenhängt, die ich schreiben musste, wenn kein Eingangsport ein Low-Signal führt. Dann muss die Steuerung nämlich auch alle Ports auf High schalten.
Konfiguriert ist die Steuerung derzeit noch für mein Testboard, das STK-500. Für den Controller selbst muss ich es später komplett invertieren.
LG - Maik
Lesezeichen