logo Avr Programmierung

Headings: !!Info !!Projekte !!!Komponententests !!!!Pulsweitenmodulator !!!!Temperatursensor !!!Servosteuerung !!!Servoregelung !!!Tauchlampe !!Bausätze allgemein !!Bottomline

Info ^

Hier geht's um die Programmierung von AVR ATTiny Prozessoren mit dem AVR Studio.

Projekte ^

Komponententests ^

Pulsweitenmodulator ^

 #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

Temperatursensor ^

 ;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

Servosteuerung ^

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.

Servoregelung ^

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.

Tauchlampe ^

Bausätze allgemein ^

Was macht m.E. einen gutem Bausatz aus:


Bottomline ^

WelcomeVisitors MervinsSeite UwesSeite

Add comment
Last edited August 4, 2012

WikiOrg -- Return to WelcomeVisitors