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



Bild 1: Aufbau auf Lochrasterplatte, die SMD Widerstände
befinden sich auf der Leiterseite



Bild 2: Layout der Frontplatte



Bild 3: In Betrieb: Eine hex-Sieben blinkt:
0,7 Sekunden sind eingestellt.



Bild 4: Schaltung. Es empfiehlt sich, die VDD-Versorgung des Mikrocontrollers
mit einem RC-Glied stärker zu entkoppeln, oder JP2 generell offen zu lassen.
Manche Servos bringen ein sehr hohes VDD-Noise mit.



Bild 5: Einbau erfolgte in ein flaches, 40x40 mm großes
Plastgehäuse, hier als Pulsgeber bezeichnet.



Bild 6: Leiterplattenentwurf, einlagig, nicht verifiziert



Download

Kurzbeschreibung

Sourcecode Assembler

Hexcode (für den ISP-Programmer)

ZIP-File alles