Servotester mit ATtiny13
Servotester / Pulsgeber Board mit Atmel ATtiny13 Gerd Heinz, 08/2009 Assembler-Programm für AVR-Studio 4.15.6.23 Funktion Die Schaltung wurde zum Endlagen- und Geschwindigkeitstest von Servos, wie auch als Pulsgeber für Pulsschweißmaschinen entwickelt. Das Gerät 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. Die LEDs zeigen binärcodiert den Wert an. Endlagentest mit fester Pulslänge: b2: 2,0 ms b1: 1,5 ms b0: 1,0 ms Die zur Taste gehörende LED leuchtet dann dauernd. Geschwindigkeitstest 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 (PB3): Einmal drücken -> Pulsdauer 1.0 s Zweimal drücken -> Pulsdauer 0.9 s ... letzter Druck -> Pulsdauer 0.1 s. Danach rücksetzen auf Endlagentest. Wird im Automatikmode eine der Tasten PB0...2 gedrückt, erfolgt ebenfalls Umschaltung auf Endlagentest. Bedienung der Tasten: 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 Zum Hochladen des hex-Files wird ein AVR-ISP mkII Programmer sowie AVRDUDE benötigt. Bilder
Hexcode (für den ISP-Programmer)
|