TommyB
Team Bitschubse
Du hast Zeile 10 vergessen umzubenennen.
Es ist nur ein Zähler der die Überläufe, also die Anzahl der Interrupts zählt.
Es ist nur ein Zähler der die Überläufe, also die Anzahl der Interrupts zählt.
Ich dachte mal Frequenz 1 MHz / 8 =120000 Hz, im Phasenkorrekter 8-Bit-PWM /510 Schritte = 245.Schon eine Idee?
$hwstack = 40 'Stacks $swstack = 16 $framesize = 32
Dim Fla As Byte Dim Pause As Byte Dim Pausex2 As Byte Dim Tov1cnt As Byte Dim Ldr As Word
$hwstack = 32 $swstack = 6 $framesize = 20
Hast Du bestimmt übersehen.$hwstack = 16 'Stacks$swstack = 8$framesize = 16
$regfile = "attiny13a.dat" 'Controllerdefinitionsdatei einbinden $crystal = 1000000 'Systemtakt angeben (Baudrate) $hwstack = 32 'Stacks $swstack = 10 $framesize = 10 Dim C As Byte Dim Fla As Byte Dim Pause As Byte Dim Pausex2 As Byte Dim Tov0cnt As Byte Dim Ldr As Word Ddrb = &B10_1111 Portb = &B00_0000 Gruen Alias Portb.3 'Phasenkorrekter 8-Bit-PWM = 0-255 und 255-0 = 510, PWM-Frequenz=245Hz 'Fast PWM = 0-255 Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Do If Tifr0.tov0 = 1 Then 'wenn Timer übergelaufen ist Set Tifr0.tov0 'Überlaufflag zurücksetzen Incr Tov0cnt 'überlaufzähler inkrementieren If Pause = Tov0cnt Then 'entspricht dem 2ten "waitms pause" Fla = Rnd(200) Fla = Fla + 55 Pwm0a = Fla End If If Pausex2 = Tov0cnt Then 'entspricht dem ersten "waitms pause" Pwm0b = 255 - Fla Pause = Rnd(10) Pause = Pause * 6 Pausex2 = Pause Shift Pausex2 , Left 'pausex2=pause*2 Tov0cnt = 0 End If Incr C If C = 245 Then 'Überläufe zählen (245) C = 0 'Zähler zurücksetzen Toggle Gruen 'LED toggeln End If Ldr = Getadc(2) If Ldr < 500 Then Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Else Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Disconnect , Compare B Pwm = Disconnect End If End If Loop End
Interrupts Service Routine, wenn ich richtig liege, hab ich doch keinen Interrupt drin.Die ISR fehlt auch noch.
Der kleine Tiny ist jetzt schon mit 59% belegt und mit der Main-Schleife hatte ich es auch chon versucht. Da gab es allerdings Probleme mit dem Speicher.Warum hast du es wieder "destrukturiert"?
$regfile = "attiny13a.dat" 'Controllerdefinitionsdatei einbinden $crystal = 1000000 'Systemtakt angeben (Baudrate) $hwstack = 32 'Stacks $swstack = 10 $framesize = 10 Dim C As Byte Dim Fla As Byte Dim Pause As Byte Dim Pausex2 As Byte Dim Tov0cnt As Byte Dim Ldr As Word Ddrb = &B10_1111 Portb = &B00_0000 Gruen Alias Portb.3 'Phasenkorrekter 8-Bit-PWM = 0-255 und 255-0 = 510, PWM-Frequenz=245Hz 'Fast PWM = 0.255 Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Config Adc = Free , Prescaler = Auto , Reference = Avcc On Timer0 Ontimer1overflow Enable Timer0 On Adc Onadc Enable Adc Enable Int0 Enable Interrupts Main: Goto Main 'If Tifr0.tov0 = 1 Then 'wenn Timer übergelaufen ist Ontimer1overflow: Set Tifr0.tov0 'Überlaufflag zurücksetzen Incr Tov0cnt 'überlaufzähler inkrementieren If Pause = Tov0cnt Then 'entspricht dem 2ten "waitms pause" Fla = Rnd(200) Fla = Fla + 55 Pwm0a = Fla End If If Pausex2 = Tov0cnt Then 'entspricht dem ersten "waitms pause" Pwm0b = 255 - Fla Pause = Rnd(10) Pause = Pause * 6 Pausex2 = Pause Shift Pausex2 , Left 'pausex2=pause*2 Tov0cnt = 0 End If Incr C If C = 245 Then 'Überläufe zählen (245) C = 0 'Zähler zurücksetzen Toggle Gruen 'LED toggeln End If Return Onadc: Ldr = Getadc(2) If Ldr < 100 Then Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Else Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Disconnect , Compare B Pwm = Disconnect End If Returnund der andere ohne Interrupt funktioniert.
$regfile = "attiny13a.dat" 'Controllerdefinitionsdatei einbinden $crystal = 1000000 'Systemtakt angeben (Baudrate) $hwstack = 32 'Stacks $swstack = 10 $framesize = 10 Dim C As Byte Dim Fla As Byte Dim Pause As Byte Dim Pausex2 As Byte Dim Tov0cnt As Byte Dim Ldr As Word Ddrb = &B10_1111 Portb = &B00_0000 Gruen Alias Portb.3 'Phasenkorrekter 8-Bit-PWM = 0-255 und 255-0 = 510, PWM-Frequenz=245Hz 'Fast PWM = 0-255 Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Config Adc = Free , Prescaler = Auto , Reference = Avcc Do If Tifr0.tov0 = 1 Then 'wenn Timer übergelaufen ist Set Tifr0.tov0 'Überlaufflag zurücksetzen Incr Tov0cnt 'überlaufzähler inkrementieren If Pause = Tov0cnt Then 'entspricht dem 2ten "waitms pause" Fla = Rnd(200) Fla = Fla + 55 Pwm0a = Fla End If If Pausex2 = Tov0cnt Then 'entspricht dem ersten "waitms pause" Pwm0b = 255 - Fla Pause = Rnd(10) Pause = Pause * 6 Pausex2 = Pause Shift Pausex2 , Left 'pausex2=pause*2 Tov0cnt = 0 End If Incr C If C = 245 Then 'Überläufe zählen (245) C = 0 'Zähler zurücksetzen Toggle Gruen 'LED toggeln End If Ldr = Getadc(2) If Ldr < 100 Then Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down 'Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Disconnect , Compare B Pwm = Disconnect Else Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Disconnect , Compare B Pwm = Disconnect 'Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down End If End If Loop End