#define __SFR_OFFSET 0
#include <avr/io.h>
/* Pinzuordnung ATtiny12 (ATtiny11 geht auch) - besser ATtiny12V
1 RESET 3V (kein Pullup!)
2 XTAL1 Uhrenquarz 32 KHz
3 XTAL2 Uhrenquarz
4 GND 0V
5 PB0 Kontrolle Taktausgang 128 Hz
6 PB1 Treibspule +
7 PB2 Treibspule -
8 Ucc 3V
*/
#define PW 50 // 20 % aktiv
sbi ACSR,7 // Analogvergleicher ausschalten
sbi DDRB,0 // PB0 = Ausgang
rjmp main
isrt0:
// Timer0-ISR @ 128 Hz
// Register müssen nicht gesichert werden!
sbi PORTB,0 // Prüfimpuls 128 Hz
subi r23,-10 // Addiere 10
brcs 1f // kein Überlauf bei Addition
out PORTB,r18 // positiver Treibpuls
out DDRB,r17 // ausgeben!
rjmp 3f
1: cpi r23,PW
brcs 2f
out DDRB,r16 // Treiber hochohmig
rjmp 3f
2: cpi r23,PW/2
brcs 3f
out PORTB,r19 // negativer Treibpuls
3: cbi PORTB,0 // Ende Prüfimpuls
reti
main: ldi r16,1 // R16: DDRB: Treibspule hochohmig
out TCCR0,r16 // Timer0 mit Vorteiler 1 starten
ldi r24,2
out TIMSK,r24 // Interrupt aktivieren
ldi r24,0x60 // Pull-Up-Disable
out MCUCR,r24 // SLEEP aktivieren (Quarz läuft durch)
ldi r17,7 // R17: DDRB: Treibspule treibt
ldi r18,3 // R18: PORTB: Treibspule +
ldi r19,5 // R18: PORTB: Treibspule -
sei
4: sleep
rjmp 4b
Detected encoding: UTF-8 | 0
|