Pulsgeber mit ATtiny13
; Pulsgeber mit Delay-Variation ; Board mit Atmel ATtiny13 ; Gerd Heinz, 08/2009 ; Assembler-Programm für AVR-Studio 4.15.6.23 /* Funktion Für die Simulation variierender Pulsbreiten (PPM) bei Pulsschweißmaschinen wurde diese kompakte Schaltung entwickelt. Sie eignet sich ebenso zum Endlagen- und Geschwindigkeitstest von Servos. Der Pulsgeber wird über vier Tasten und vier zugeordnete LEDs an PB0...3 bedient. An PB4 wird ein Puls variabler Länge (1...2 ms) ausgegeben. Tasten/LEDs b0...b2 (verbunden mit Portpins PB0...PB2) sind für manuelle Vorgabe der Pulslänge vorgesehen. Drückt man b0, so wird eine Pulslänge von 1.0 ms ausgegeben, beim Druck auf b1 werden 1.5 ms und beim Druck auf b2 werden 2.0 ms ausgegeben. Die Pulspause ist auf 25 ms fixiert. Manuell - feste Pulslänge: b2: 2,0 ms b1: 1,5 ms b0: 1,0 ms Die zur Taste gehörende LED leuchtet dauernd. Taste PB3 (Mode) schaltet um auf Automatikmode, dabei wird zwischen den Endlagen hin- und hergeschaltet (1ms -> 2ms -> 1ms -> ... ). Die Zeitdauer des Umschaltens ist in Zehntelsekunden vorgebbar. Sie wird auf den vier LEDs binär codiert blinkend angezeigt. (Start mit 1.0 Sekunden (0x0A), Ende mit 0.1 Sekunden (0x01): Mode (b3 ~ PB3): blinkende Anzeige b3 b2 b1 b0: einmal drücken -> Pulsdauer 1.0 s -> 1010 zweimal drücken -> Pulsdauer 0.9 s -> 1001 dreimal gedrückt -> Pulsdauer 0.8 s -> 1000 viermal gedrückt -> Pulsdauer 0.7 s -> 0111 fünfmal gedrückt -> Pulsdauer 0.6 s -> 0110 sechmal gedrückt -> Pulsdauer 0.5 s -> 0101 siebenx gedrückt -> Pulsdauer 0.4 s -> 0100 achtmal gedrückt -> Pulsdauer 0.3 s -> 0011 viermal gedrückt -> Pulsdauer 0.2 s -> 0010 letzter Druck -> Pulsdauer 0.1 s -> 0001 Danach rücksetzen auf Handbetrieb. Wird im Automatikmode eine der Tasten PB0...2 gedrückt, erfolgt ebenfalls Umschaltung auf Handbetrieb. */ ; ; Mode Handbetrieb (startup): ; BTN0 1 ms LED0 an ; BTN1 1,5 ms LED1 an ; BTN2 2 ms LED2 an ; BTN3 n-mal drücken für auto-hin/zurück ; Binärwert wird auf LEDs 0...3 blinkend angezeigt ; ; Automatikmode (hin/zurück): ; Dauer = schritte * 4 * 25,5 ms = schritte * 102 ms ; Beispiel: ; Anzeige binär 0x0a (zehn): Dauer = 10*4*25,5ms = 1,02 sec .equ schritte = 0x0b ; Maximale Zahl von Tastendrücken bei auto plus Eins ; Prozessor: ATMEL ATtiny13A mit 5V und Fuse 9,6MHz interner RC-Osz. .include "tn13def.inc" ; Prozessordaten ; ; Pinout 8-PDIP/SOIC: ; ________ ; `´ ; /RESET PB5 |1 8| VCC ; PB3 |2 7| PB2 SCK ; PB4 |3 6| PB1 MISO ; GND |4 5| PB0 MOSI ; ________ ; Ports: ; PB0: LED0 BTN0 1.0 ms ; PB1: LED1 BTN0 1.5 ms ; PB2: LED2 BTN0 2.0 ms ; PB3: LED3 BTN3 Mode ; PB4: Ausgabe Puls ; ; Beschaltung Ports 0 bis 3 (4x LED/Button an PB0...3): ; BTNx ziehen auf +5V - aktiv high !!! ; LEDx leuchten bei 1 - aktiv high !!! ; Test von LED und Button: PBx auf H -> LED leuchtet ; BTNx drücken -> LED aus ; Timing: ; Puls variabel 1...2ms, Pause 25,5ms fix ; PWM-Timer: clocks laufen von 10 bis 20 (mal 0,1 sec) ; Pause 25,5 ms anhängen ; OCR0A erzeugt Puls 10...20 ; Timer-Overflow erzeugt 255 ~> 25,5 ms Pause ; Ziel Pulsdauer (0,1000 ms) für clocks: ; interner clock 104,166 ns ~ 9,6 MHz (RC-Oszillator) ; Vorteiler 1024: 104,166ns x 1024 = 106,66 µs -> zu lang: ; ; Grundtakt 0,100 ms erzeugen: ; Oscillator von 9,6 auf 10,240 MHz setzen ; dazu Oszillator höher trimmen ; ; Frequenzerhöhung um 106,666 % von 9,6 auf 10,24 MHz ; dazu oscal zunächst aus ATtiny auslesen, dann soft überschreiben: ; ; Beispiel: ; MHz 9,6 10,24 Typ ; oscal 0x57 0x5c ATtiny13A ; oscal 0x68 0x6e ATtiny13 .equ oscal = 0x6e ; oscillator calibration (maximum frequency 0x7f) ; nachmessen und oscal ggf. leicht korrigieren Bilder
DownloadsDatei/speichern unter ...Sourcecode (Assembler) Hexcode (für den AVR-ISP-mkII Programmer)
|