Data "1 4 1 0 - S p a r r o w " 'Prog-Name im .hex-File
' 1410-Sparrow mit zweitem T13
' Pegelaufbereitung für ISP, Line=90,7us+90,7us
'
' Benutzung:
' 1. Line und Target-AVR anschliessen
' 2. Master-AVR-Reset = Start, >1s warten für den Mittelwert
'
' dieses Programm dient Ausbildungszwecken
'-------------------------------------------------------------------------------
' ATTiny13 20PU
' 1 /Reset/B5/Ad0 <- Taste
' 2 B3/Ad3 <- Line_L + 10k pulldown
' 3 B4/Ad2 <- Line_R + 10k pulldown
' 4 GND
' 5 B0/mosi/oc0a -> Target-AVR-Mosi
' 6 B1/miso/Int0/oc0b -> Target-AVR-Reset (ggf.Led)
' 7 B2/Sck/Ad1/T0 -> Target-AVR-Sck
' 8 +Vcc
'-------------------------------------------------------------------------------
$crystal = 9600000
$regfile = "attiny13.dat"
$hwstack = 16
$swstack = 16
$framesize = 16
'$programmer = 19 'USBASP
$asm
ldi r16, 128 ' clock prescaler
Out Clkpr , R16 ' doc2535, T13, Seite 28
ldi r16, 0 ' clock = clock / 1
Out Clkpr , R16 ' (T13=9,6MHz)
nop ' wait
nop
nop
nop
$end Asm ' =11,5Cyclen pro Durchlauf
Ddrb = &B00111
Portb = &B11000 'Pullup für Adc 2+3
Sck Alias Portb.0 : Res Alias Portb.1 : Mosi Alias Portb.2
Line_l Alias Getadc(3) : Line_r Alias Getadc(2)
Sck = 0 : Res = 1 : Mosi = 0
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Const Hysterese = 8 ' Triggerschwelle 8= ~25mV
Declare Sub Mittelwert
Dim I As Word 'timeout
Dim Mittelwert_l As Integer , Mittelwert_r As Integer
Init:
Mittelwert 'Schwelle festlegen
Wait 1
Mittelwert
Do : Loop Until Line_r > Mittelwert_r 'leadin auf data ?
Res = 0 'Target-AVR-Reset = Prog-Led
I = 0 'timeout zurücksetzen
Do
I = I + 1
If I > 65000 Then 'timeout ?
Res = 1 'ext. Reset aufheben
Ddrb = 0 'tristate
Powerdown
End If
If Line_r > Mittelwert_r Then Mosi = 1 Else Mosi = 0 'data= 0 oder 1 ?
While Line_l > Mittelwert_l 'clk ?
Sck = 1 'ja
I = 0 'timeout zurücksetzen
Wend 'clk auf 0 ?
Sck = 0
Loop 'nächstes Datum
'-------------------------------------------------------------------------------
Sub Mittelwert:
Do ' data
Mittelwert_r = Mittelwert_r + Line_r
Mittelwert_r = Mittelwert_r / 2
Loop Until Line_r = Mittelwert_r
Mittelwert_r = Mittelwert_r + Hysterese
Do ' Sck
Mittelwert_l = Mittelwert_l + Line_l
Mittelwert_l = Mittelwert_l / 2
Loop Until Line_l = Mittelwert_l
Mittelwert_l = Mittelwert_l + Hysterese
End Sub
'end ---------------------------------------------------------------------------