Und ich hatte bisher noch die Hoffnung in Hochsprache zu programmieren, und mich deshalb nicht um Register kümmern zu müssen. Aber so ist es wohl nun mal.
Code: Alles auswählen
$regfile = "atTiny85.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000
$prog &HFF , &H62 , &HDF , &HFF ' generated. Take care that the chip supports all fuse bytes.
' EEprom nicht löschen
Dim R As Integer , S As Integer , T As Integer , Dim_level As Integer , I As Integer
Dim Ee_dim_level As Eram Integer
' Pins:
' RESET 1 v 8 +5V
' PB3 2 7 PB2(SCK)
' high Level Input PB4 3 6 PB1(MISO) -> Widerstand -> LED2 -> Masse
' GND 4 5 PB0(MOSI) -> Widerstand -> LED1 -> Masse
Config Portb.0 = Output 'LED1
Config Portb.1 = Output 'LED2
Config Portb.4 = Input
Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up 'Timer für PWM
Config Timer1 = Timer , Prescale = 64
On Timer1 On_timer1_overflow 'Timer für Zeitmessung Input
Enable Timer1
Enable Interrupts
' Initialisierung
T = 0 ' Flag für Abfolgemarkierung Eingangspin
Dim_level = Ee_dim_level ' Wert auslesen aus EEprom
If Dim_level < 0 Or Dim_level > 100 Then Dim_level = 1 'Erstinitialisierung
' Hauptroutine
Do
If T = 2 Then ' Start wenn Flag auf zweiter Stufe
If R > 1 And R < 16 Then ' kleiner 0,1s, auf Resetwert setzen
Dim_level = 1
Elseif R > 32 And R < 256 Then ' zwischen 0,5 und 4s => 1 Stufe hochdimmen
Incr Dim_level
If Dim_level > 5 Then Dim_level = 1 'bei Max-Stufe wieder reset auf Stufe 0
Else
' do nothing
End If
I = Dim_level * 51 ' Anpassung an PWM Bereich
Pwm0a = I ' PWM value an PB0
Pwm0b = 255 - I ' PWM value an PB1
Goto Ende
End If
Loop
Ende:
If Ee_dim_level <> Dim_level Then Ee_dim_level = Dim_level ' Neuer Dim-Level Wert in EEprom speichern
End
On_timer1_overflow: ' ca. 61Hz Abtastfrequenz
If Pinb.4 = 1 Then
Incr R ' ca. 16ms / Inkrement
T = 1 ' Flag=1 setzen wenn Eingang auf "1"
Else
If T = 1 Then
T = 2 ' Flag=2 setzen wenn Eingang wieder auf "0"
Stop Timer1 ' Re-Trigger verhindern
End If
End If
Return