Headings: !!Info !!Projekte !!!Komponententests !!!!Pulsweitenmodulator !!!!Temperatursensor !!!Servosteuerung !!!Servoregelung !!!Tauchlampe !!Bausätze allgemein !!Bottomline
Hier geht's um die Programmierung von AVR ATTiny Prozessoren mit dem AVR Studio.
#include "tn24def.inc";// Interrupt vectors for ATTiny24/44/84
.org 0x0000 rjmp RESET .org 0x000B rjmp TIMER_OVL
#define rWDHILF R17 #define rANGLE R18 #define rWAIT R19 #define rHILF R20 #define rSETVALUE R21 #define rWAIT22 R22 #define rANACNT R23 #define rTEMP R24
;///////////TIMER_OVL///////////// TIMER_OVL: sbic PORTA,PA2 rjmp TOGGLE_AN sbi PORTA,PA2 reti TOGGLE_AN: cbi PORTA,PA2 reti
; Programmstart nach reset findet hier statt RESET: ldi r16,low(RAMEND) ;set stackpointer out SPL,r16
;set data direction to output.. sbi DDRB,DDB2 ;..for PWM 0A (1) sbi DDRA,DDA7 ;..for PWM 0B (2) sbi DDRB,DDB0 ;..for ?LowSide left (3) sbi DDRB,DDB1 ;..for ?LowSide right (4) sbi DDRA,DDA1 ;..for controlling LED
;setup timer/counter in rHILF,TCCR0A ;enable PWM-generator A sbr rHILF,(1<<COM0A1) sbr rHILF,(1<<COM0A0) sbr rHILF,(1<<COM0B1) sbr rHILF,(1<<COM0B0)
sbr rHILF,(1<<WGM00) sbr rHILF,(1<<WGM01) out TCCR0A,rHILF
in rHILF,TCCR0B cbr rHILF,(1<<WGM02) sbr rHILF,(1<<CS00) ;set IOclock = 4MHz/64 wenn beide out TCCR0B,rHILF
ldi rHILF,255 out OCR0A,rHILF ;Pulsweite auf minimum initialisieren
in rHILF,TIMSK0 sbr rHILF,(1<<TOIE0) ;enable timer overflow interrupt out TIMSK0,rHILF sei
;//////////////////////////////////////////////////////
MAINLOOP: ldi rWAIT22,10 rcall WAIT_R22 inc rHILF out OCR0A,rHILF ;Pulsweite (1) setzen
rjmp MAINLOOP
;//////////////////////////////////////////////////////
WAIT_R19: push rWAIT inc rWAIT LOOP: nop nop dec rWAIT brne LOOP pop rWAIT ret
WAIT_R22: push rWAIT22 inc rWAIT22 LOOP_22: ldi rWAIT,255 rcall WAIT_R19 dec rWAIT22 brne LOOP_22 pop rWAIT22 ret
;Registersatz und Interruptvektoren ; ====== für ATTiny24/44/84 ====== #include "tn24def.inc" .org 0x0000 rjmp RESET .org 0x000D rjmp ADC_READY
; defines von Arbeitsregistern #define rAnalogLow R17 #define rAnalogHigh R18 #define WARNLEUCHTE PA1
; Interrupt- Routine für AD-Wandler ADC_READY: in rAnalogLow, ADCL ; read low byte (first!) in rAnalogHigh, ADCH ; read high byte sbi ADCSRA, ADSC ; restart conversion CHECK_TEMP: ;mit 10 bit AD Wandler, ; -40° = 230LSB ; +25° = 300LSB = 1*256 + 44 ; +85° = 370LSB = 1*256 + 114 ;bei Temperatur über 85° geht die Warnlampe an! cpi rAnalogHigh,1 brge TOO_HOT cpi rAnalogLow,115 brge TOO_HOT rjmp TEMP_OK TOO_HOT: cbi PORTA, WARNLEUCHTE reti TEMP_OK: sbi PORTA, WARNLEUCHTE reti
; Initialisierung nach Start oder Reset RESET: ldi r16,low(RAMEND) ;set stackpointer out SPL,r16
; Init PORT A sbi DDRA,DDA1 ; Warnleuchte auf A1 als Ausgang sbi DDRA,DDA3 ; Kontrollleuchte für Betrieb
; Init ADC ; switch to VCC ref voltage cbi ADMUX,REFS1 ; set MUX to temperature reading (100010) sbi ADMUX,MUX5 cbi ADMUX,MUX4 cbi ADMUX,MUX3 cbi ADMUX,MUX2 sbi ADMUX,MUX1 cbi ADMUX,MUX0 ; make sure the data is presented right aligned cbi ADCSRA,ADLAR ; enable the AD converter sbi ADCSRA,ADEN ; enable interrupt for AD converter sbi ADCSRA,ADIE ; start first conversion sbi ADCSRA,ADSC ; ; hier beginnt das Hauptprogramm ; MAIN: ; wir tun zunächst mal nix cbi PORTA,PA3 sbi PORTA,PA3 rjmp MAIN
Hier geht's darum ein Modellbauservo über pulbreitenmodulierte Signale anzusteuern. Dafür muss ein puls von 1-2ms mit einer Wiederholrate von etwa 50Hz (alle 20 ms) abgesendet werden. 1ms ist ganz links, 2ms ist ganz rechts.
Hier geht's darum eine eingestellte position mit einem Stellmotor anzufahren, der über ein Potentiometer die Positionsrückmeldung bekommt. Das Servo wird auf Überlastung geprüft und wenn nötig schwächer angesteuert.
Was macht m.E. einen gutem Bausatz aus:
WelcomeVisitors MervinsSeite UwesSeite
Last edited August 4, 2012
WikiOrg -- Return to WelcomeVisitors |