Witam
Posiadam starą FDD (3,5") i chcę poprzez atmegę 32 sterować ruchem głowicy stacji.
Znalazłem stronę ze znaczeniami pinów:
https://www.elektroda.pl/rtvforum/topic2136125.html
Wiem, że jak zewrę pin 16 do masy zasilania, to silnik dyskietki rusza.
Zasada sterowania ruchem głowicy jest taka:
W momencie kiedy pojawia się logiczne zero na pinie INDEX należy podać logiczne zero na STEP i DIR. Takich powtórzeń należy wykonać 80.
Po 80 krokach należy podawać na DIR logiczną jedynkę i podawać na STEP logiczne zero, do momentu kiedy na pinie TRACK00 nie pojawi się logiczne zero. W tym momencie proces rozpoczyna się od początku.
Dołączam program:
$regfile = "m32def.dat"
$crystal = 16000000
Config Porta = Output
Config Portb = Input
Config Pinb.1 = Input
Set Portb.1
Config Pinb.2 = Input
Set Portb.2
Config Pinb.3 = Input
Set Portb.3
Dim A As Byte
Dim C As Byte
Config Lcd = 16 * 2
'wyświetlacz 16*2
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
'konfiguracja pinów
Cls
If Pinb.1 = 0 Then Lcd "Stacja gotwa."
If Pinb.1 = 1 Then Lcd "Dawaj dyskietke!"
Do
For A = 0 To 80
If Pinb.2 = 0 Then Reset Porta.1
If Pinb.2 = 1 Then Set Porta.1
Next A
If A = 80 Then Do
If Pinb.2 = 0 Then Reset Porta.1
If Pinb.2 = 1 Then Set Porta.1
Loop Until Pinb.3 = 0
Loop
If Pinb.3 = 0 Then A = 0
If A = 80 Then C = 0
If C = 0 Then Set Porta.0
If A <= 79 Then C = 1
If C = 1 Then Reset Porta.0
End 'end program
Piny 16 i 12 sa zwarte bezpośrednio do masy zasilania.
Po skompilowaniu i wgraniu do procesora, nic się nie dzieje oprócz obracania dyskietką (pin16)
Czy ktoś wie na czym polega mój błąd?
Pozdrawiam,
Karol
Posiadam starą FDD (3,5") i chcę poprzez atmegę 32 sterować ruchem głowicy stacji.
Znalazłem stronę ze znaczeniami pinów:
https://www.elektroda.pl/rtvforum/topic2136125.html
Wiem, że jak zewrę pin 16 do masy zasilania, to silnik dyskietki rusza.
Zasada sterowania ruchem głowicy jest taka:
W momencie kiedy pojawia się logiczne zero na pinie INDEX należy podać logiczne zero na STEP i DIR. Takich powtórzeń należy wykonać 80.
Po 80 krokach należy podawać na DIR logiczną jedynkę i podawać na STEP logiczne zero, do momentu kiedy na pinie TRACK00 nie pojawi się logiczne zero. W tym momencie proces rozpoczyna się od początku.
Dołączam program:
Kod: text
$regfile = "m32def.dat"
$crystal = 16000000
Config Porta = Output
Config Portb = Input
Config Pinb.1 = Input
Set Portb.1
Config Pinb.2 = Input
Set Portb.2
Config Pinb.3 = Input
Set Portb.3
Dim A As Byte
Dim C As Byte
Config Lcd = 16 * 2
'wyświetlacz 16*2
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
'konfiguracja pinów
Cls
If Pinb.1 = 0 Then Lcd "Stacja gotwa."
If Pinb.1 = 1 Then Lcd "Dawaj dyskietke!"
Do
For A = 0 To 80
If Pinb.2 = 0 Then Reset Porta.1
If Pinb.2 = 1 Then Set Porta.1
Next A
If A = 80 Then Do
If Pinb.2 = 0 Then Reset Porta.1
If Pinb.2 = 1 Then Set Porta.1
Loop Until Pinb.3 = 0
Loop
If Pinb.3 = 0 Then A = 0
If A = 80 Then C = 0
If C = 0 Then Set Porta.0
If A <= 79 Then C = 1
If C = 1 Then Reset Porta.0
End 'end program
Kod: text
Piny 16 i 12 sa zwarte bezpośrednio do masy zasilania.
Po skompilowaniu i wgraniu do procesora, nic się nie dzieje oprócz obracania dyskietką (pin16)
Czy ktoś wie na czym polega mój błąd?
Pozdrawiam,
Karol