Sooo ich bin jetzt endlich dazu gekommen mal ein bischen zu programmieren und jetzt gibts leider Probleme... Mein Programm läuft eindeutig auf dem Controller da die Kontroll LED im Sekundentakt blinkt aber leider wird an den Schieberegistern nichts ausgegeben...
Vielleicht kann ja mal jemand drüber schaun:
Code:$regfile = "m8def.dat"
$crystal = 8000000
'Ports einstellen
Config Portb.0 = Output 'SRData
Config Portb.3 = Output 'PWM
Config Portd.7 = Output 'SCK
Config Portd.6 = Output 'RCK
Config Portd.5 = Output 'Reset
Config Portd.2 = Output 'LED
Config Pinc.3 = Input 'Taster1
Config Pinc.4 = Input 'Taster2
Config Pinc.5 = Input 'Taster3
'Alias definieren
Rck Alias Portd.6
Sck Alias Portd.7
Datasr Alias Portb.0
Resetsr Alias Portd.5
Led Alias Portd.2
Pwm Alias Portb.3
Taster1 Alias Pinc.3
Taster2 Alias Pinc.4
Taster3 Alias Pinc.5
'Portpegel setzen
Rck = 0
Sck = 0
Datasr = 0
Resetsr = 0
Led = 0
Pwm = 1
Taster1 = 1
Taster2 = 1
Taster3 = 1
'Timer konfigurieren
Config Timer1 = Timer , Prescale = 256
Enable Timer1
On Timer1 Sekundentakt
Enable Interrupts
Timer1 = 34285
'Config Timer2 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
'Variablen definieren
Dim Sekunden As Integer
Dim Minuten As Byte
Dim Stunden As Byte
Sekunden = 0
Minuten = 0
Stunden = 12
'Bitmuster erstellen und Array befüllen
Dim Stundenarray(12) As Word
Dim Minutenarray(12) As Byte
Dim I As Byte
Dim Stdpos As Byte
Dim Minpos As Byte
Minutenarray(1) = &B00000000 'Voll
Minutenarray(2) = &B10000001 'Fünf nach
Minutenarray(3) = &B10000010 'Zehn nach
Minutenarray(4) = &B00010001 'Viertel nach
Minutenarray(5) = &B00100110 'Zehn vor Halb
Minutenarray(6) = &B00100101 'Fünf vor Halb
Minutenarray(7) = &B00100000 'Halb
Minutenarray(8) = &B00101001 'Fünf nach Halb
Minutenarray(9) = &B00101010 'Zehn nach Halb
Minutenarray(10) = &B01010000 'Viertel vor
Minutenarray(11) = &B01000010 'Zehn vor
Minutenarray(12) = &B01000001 'Fünf vor
Stundenarray(1) = &B0000000100000000 'Eins
Stundenarray(2) = &B0000001000000000 'Zwei
Stundenarray(3) = &B0000010000000000 'Drei
Stundenarray(4) = &B0000100000000000 'Vier
Stundenarray(5) = &B0001000000000000 'Fünf
Stundenarray(6) = &B0010000000000000 'Sechs
Stundenarray(7) = &B0100000000000000 'Sieben
Stundenarray(8) = &B1000000000000000 'Acht
Stundenarray(9) = &B0000000000010000 'Neun
Stundenarray(10) = &B0000000000100000 'Zehn
Stundenarray(11) = &B0000000001000000 'Elf
Stundenarray(12) = &B0000000010000000 'Zwölf
'Hauptschleife
Do
'Arrayposition berechnen Bsp: Minuten = 3 ===> Arrayposition 1 muss ausgegeben werden
Minpos = Minuten / 5
Minpos = Minpos + 1
'Überprüfen ob die Stunde + 1 ausgegeben werden muss. Bsp: 05:31 ===> Halb Sechs
Stdpos = Stunden
If Minuten >= 5 Then
Stdpos = Stdpos + 1
End If
'Stundenarray an der Position "Stunden" in die Schieberegister takten
For I = 1 To 16 Step 1
Datasr = Stundenarray(Stunden).I
Toggle Sck
Toggle Sck
Next A
'Minutenarray an der Position "Minpos" in die Schieberegister takten
For I = 1 To 8 Step 1
Datasr = Minutenarray(Minpos).I
Toggle Sck
Toggle Sck
Next A
'Latch der Schieberegister auf Ausgänge schalten
Toggle Rck
Toggle Rck
'In Idle Mode wechseln zum strom sparen und um unnötiges beschreiben der Schieberegister
'zu vermeiden. Geweckt wird im Sekundentakt des Timers.
POWER IDLE
Loop
End
'Interrupt Routine für den Timer1. Läuft Sekündlich über.
Sekundentakt:
Timer1 = 34285
Toggle Led
If Sekunden < 59 Then
Sekunden = Sekunden + 1
Else
Sekunden = 1
Minuten = Minuten + 1
End If
If Minuten >= 59 Then
Minuten = 0
Stunden = Stunden + 1
End If
If Stunden > 12 Then
Stunden = 1
Minuten = 0
End If
Return
Wo liegt mein Fehler? Falls Ihr mehr Infos braucht dann geb ich die natürlich so bald wie möglich raus. Danke schonmal!
Edit: Hier schonmal der Schaltplan falls der auch von interesse ist:
http://rapidshare.com/files/440502830/Qlocktwo.pdf