where : ibrtses embedded

AVR as FSK modulator

the project required two frequencies around 55kHz with about 2kHz difference.
frequncy switching happens with continous phase.

there are two inputs : enable & low/high
the 8bit parallel go to a R-2R network, producing analog output.


; 55kHz FSK sinus generator

; programmed and simulated 16.Jan.99

; running at a 10MHz Quartz
; clocking DAC with 5MHz
; portb is DAC R-2R 47kOhm Ladder
;
; portd,0 is enable :=1 Tx_Enable
;  one(1) is enabled
;  zero(0) is disabled
;
; portd,1 is 1/0 from a UART
;  one(1) means low frequency
;  zero(0) means high frequency
;
; portd,2 is Amp_on to Amplifier output
;  one(1) means Amp on
;  zero(0) means Amp off
;
; verified with simulator :
;  low frequncy:=182 cycles   =54.945kHz
;  high frequency:=176 cycles =56.82kHz
; low frequency sinus from sinus91.asm
; high frequency sinus from sinus88.asm

; 410 of 512 Words used

; change 19.Jan.99
; replace Sinus88.asm with Sinus89.asm
; replace Sinus91.asm with Sinus92.asm
;  low frequncy:=184 cycles   =54.35kHz
;  high frequency:=178 cycles =56.18kHz

; change 23.june 99
; replace Sinus89.asm with Sinus87.asm, high frequency
; PD2:output switches amp on when PD2:=1, off:=PD2:=0 must follow PD0
; high frequency:=174 cycles =57.47kHz
;  low frequncy:=184 cycles   =54.35kHz
;...................................................

.include "1200def.inc"		; includes '.device AT90S1200' directive

	rjmp	init

.org OVF0addr
;.def	scratch =r16		korrigiert von AN

init:
.def	Temp	=r16		;temporary register	korrigiert von AN
	ser	Temp
	out	DDRB,Temp	; portb:=outputs
	out	PORTD,Temp	; activate pullups on portd
	cbi	PORTD,2		; amp:=off
	ldi	Temp,0x2
	out	DDRD,Temp	; portd:=inputs except d,2
	
loop:
	ldi	Temp,128	; preset output
	out	PORTB,Temp
	sbis	PIND,PIND0		
	rjmp	loop
	sbi	PORTD,2		; amp:=on
;................................................
;92 samples per period:=low frequency
lo_start:
        ldi     Temp,128
        out     portb,Temp
        ldi     Temp,137
        out     portb,Temp
        ldi     Temp,145
        out     portb,Temp
        ldi     Temp,154
        out     portb,Temp
        ldi     Temp,162
        out     portb,Temp
        ldi     Temp,171
        out     portb,Temp
        ldi     Temp,179
        out     portb,Temp
        ldi     Temp,186
        out     portb,Temp
        ldi     Temp,194
        out     portb,Temp
        ldi     Temp,201
        out     portb,Temp
        ldi     Temp,208
        out     portb,Temp
        ldi     Temp,215
        out     portb,Temp
        ldi     Temp,221
        out     portb,Temp
        ldi     Temp,227
        out     portb,Temp
        ldi     Temp,232
        out     portb,Temp
        ldi     Temp,237
        out     portb,Temp
        ldi     Temp,241
        out     portb,Temp
        ldi     Temp,244
        out     portb,Temp
        ldi     Temp,248
        out     portb,Temp
        ldi     Temp,250
        out     portb,Temp
        ldi     Temp,252
        out     portb,Temp
        ldi     Temp,254
        out     portb,Temp
        ldi     Temp,255
        out     portb,Temp
; decision 1 or 0
	sbis	PIND,PIND1
	rjmp	hi_cont
lo_cont:
;        ldi     Temp,255	skip for test
;        out     portb,Temp	skip for test
        ldi     Temp,255
        out     portb,Temp
        ldi     Temp,254
        out     portb,Temp
        ldi     Temp,252
        out     portb,Temp
        ldi     Temp,250
        out     portb,Temp
        ldi     Temp,248
        out     portb,Temp
        ldi     Temp,244
        out     portb,Temp
        ldi     Temp,241
        out     portb,Temp
        ldi     Temp,237
        out     portb,Temp
        ldi     Temp,232
        out     portb,Temp
        ldi     Temp,227
        out     portb,Temp
        ldi     Temp,221
        out     portb,Temp
        ldi     Temp,215
        out     portb,Temp
        ldi     Temp,208
        out     portb,Temp
        ldi     Temp,201
        out     portb,Temp
        ldi     Temp,194
        out     portb,Temp
        ldi     Temp,186
        out     portb,Temp
        ldi     Temp,179
        out     portb,Temp
        ldi     Temp,171
        out     portb,Temp
        ldi     Temp,162
        out     portb,Temp
        ldi     Temp,154
        out     portb,Temp
        ldi     Temp,145
        out     portb,Temp
        ldi     Temp,137
        out     portb,Temp
        ldi     Temp,128
        out     portb,Temp
        ldi     Temp,119
        out     portb,Temp
        ldi     Temp,111
        out     portb,Temp
        ldi     Temp,102
        out     portb,Temp
        ldi     Temp,94
        out     portb,Temp
        ldi     Temp,85
        out     portb,Temp
        ldi     Temp,77
        out     portb,Temp
        ldi     Temp,70
        out     portb,Temp
        ldi     Temp,62
        out     portb,Temp
        ldi     Temp,55
        out     portb,Temp
        ldi     Temp,48
        out     portb,Temp
        ldi     Temp,41
        out     portb,Temp
        ldi     Temp,35
        out     portb,Temp
        ldi     Temp,29
        out     portb,Temp
        ldi     Temp,24
        out     portb,Temp
        ldi     Temp,19
        out     portb,Temp
        ldi     Temp,15
        out     portb,Temp
        ldi     Temp,12
        out     portb,Temp
        ldi     Temp,8
        out     portb,Temp
        ldi     Temp,6
        out     portb,Temp
        ldi     Temp,4
        out     portb,Temp
        ldi     Temp,2
        out     portb,Temp
        ldi     Temp,1
        out     portb,Temp
; decision on/off
	sbis	PIND,PIND0
	rjmp	end_cycle
;        ldi     Temp,1		skip for test
;        out     portb,Temp	skip for test
        ldi     Temp,1
        out     portb,Temp
        ldi     Temp,2
        out     portb,Temp
        ldi     Temp,4
        out     portb,Temp
        ldi     Temp,6
        out     portb,Temp
        ldi     Temp,8
        out     portb,Temp
        ldi     Temp,12
        out     portb,Temp
        ldi     Temp,15
        out     portb,Temp
        ldi     Temp,19
        out     portb,Temp
        ldi     Temp,24
        out     portb,Temp
        ldi     Temp,29
        out     portb,Temp
        ldi     Temp,35
        out     portb,Temp
        ldi     Temp,41
        out     portb,Temp
        ldi     Temp,48
        out     portb,Temp
        ldi     Temp,55
        out     portb,Temp
        ldi     Temp,62
        out     portb,Temp
        ldi     Temp,70
        out     portb,Temp
        ldi     Temp,77
        out     portb,Temp
        ldi     Temp,85
        out     portb,Temp
        ldi     Temp,94
        out     portb,Temp
        ldi     Temp,102
        out     portb,Temp
        ldi     Temp,111
        out     portb,Temp
;        ldi     Temp,119	skip for end
;        out     portb,Temp	skip for end
	rjmp	lo_start	;
;................................................
;87 samples per period := high frequency
hi_start:
        ldi     Temp,128
        out     portb,Temp
        ldi     Temp,137
        out     portb,Temp
        ldi     Temp,146
        out     portb,Temp
        ldi     Temp,155
        out     portb,Temp
        ldi     Temp,164
        out     portb,Temp
        ldi     Temp,173
        out     portb,Temp
        ldi     Temp,181
        out     portb,Temp
        ldi     Temp,190
        out     portb,Temp
        ldi     Temp,197
        out     portb,Temp
        ldi     Temp,205
        out     portb,Temp
        ldi     Temp,212
        out     portb,Temp
        ldi     Temp,219
        out     portb,Temp
        ldi     Temp,225
        out     portb,Temp
        ldi     Temp,230
        out     portb,Temp
        ldi     Temp,236
        out     portb,Temp
        ldi     Temp,240
        out     portb,Temp
        ldi     Temp,244
        out     portb,Temp
        ldi     Temp,248
        out     portb,Temp
        ldi     Temp,250
        out     portb,Temp
        ldi     Temp,253
        out     portb,Temp
        ldi     Temp,254
        out     portb,Temp
        ldi     Temp,255
        out     portb,Temp
; decision 1 or 0
	sbic	PIND,PIND1
	rjmp	lo_cont
hi_cont:
;        ldi     Temp,255	skip for test
;        out     portb,Temp	skip for test
        ldi     Temp,254
        out     portb,Temp
        ldi     Temp,253
        out     portb,Temp
        ldi     Temp,252
        out     portb,Temp
        ldi     Temp,249
        out     portb,Temp
        ldi     Temp,246
        out     portb,Temp
        ldi     Temp,242
        out     portb,Temp
        ldi     Temp,238
        out     portb,Temp
        ldi     Temp,233
        out     portb,Temp
        ldi     Temp,228
        out     portb,Temp
        ldi     Temp,222
        out     portb,Temp
        ldi     Temp,215
        out     portb,Temp
        ldi     Temp,208
        out     portb,Temp
        ldi     Temp,201
        out     portb,Temp
        ldi     Temp,293
        out     portb,Temp
        ldi     Temp,185
        out     portb,Temp
        ldi     Temp,177
        out     portb,Temp
        ldi     Temp,169
        out     portb,Temp
        ldi     Temp,160
        out     portb,Temp
        ldi     Temp,151
        out     portb,Temp
        ldi     Temp,142
        out     portb,Temp
        ldi     Temp,133
        out     portb,Temp
        ldi     Temp,123
        out     portb,Temp
        ldi     Temp,114
        out     portb,Temp
        ldi     Temp,105
        out     portb,Temp
        ldi     Temp,96
        out     portb,Temp
        ldi     Temp,87
        out     portb,Temp
        ldi     Temp,79
        out     portb,Temp
        ldi     Temp,71
        out     portb,Temp
        ldi     Temp,63
        out     portb,Temp
        ldi     Temp,55
        out     portb,Temp
        ldi     Temp,48
        out     portb,Temp
        ldi     Temp,41
        out     portb,Temp
        ldi     Temp,34
        out     portb,Temp
        ldi     Temp,28
        out     portb,Temp
        ldi     Temp,23
        out     portb,Temp
        ldi     Temp,18
        out     portb,Temp
        ldi     Temp,14
        out     portb,Temp
        ldi     Temp,10
        out     portb,Temp
        ldi     Temp,7
        out     portb,Temp
        ldi     Temp,4
        out     portb,Temp
        ldi     Temp,3
        out     portb,Temp
        ldi     Temp,2
        out     portb,Temp
        ldi     Temp,1
        out     portb,Temp
; decision on/off
	sbis	PIND,PIND0
	rjmp	end_cycle
;        ldi     Temp,1		skip for test
;        out     portb,Temp	skip for test
        ldi     Temp,2
        out     portb,Temp
        ldi     Temp,3
        out     portb,Temp
        ldi     Temp,6
        out     portb,Temp
        ldi     Temp,8
        out     portb,Temp
        ldi     Temp,12
        out     portb,Temp
        ldi     Temp,16
        out     portb,Temp
        ldi     Temp,20
        out     portb,Temp
        ldi     Temp,26
        out     portb,Temp
        ldi     Temp,31
        out     portb,Temp
        ldi     Temp,37
        out     portb,Temp
        ldi     Temp,44
        out     portb,Temp
        ldi     Temp,51
        out     portb,Temp
        ldi     Temp,59
        out     portb,Temp
        ldi     Temp,66
        out     portb,Temp
        ldi     Temp,75
        out     portb,Temp
        ldi     Temp,83
        out     portb,Temp
        ldi     Temp,92
        out     portb,Temp
        ldi     Temp,101
        out     portb,Temp
        ldi     Temp,110
        out     portb,Temp
;        ldi     Temp,119	skip for end
;        out     portb,Temp	skip for end
	rjmp	hi_start

;.................................................
;end - from minimum to mean, taken from low
end_cycle:
        ldi     Temp,1
        out     portb,Temp
        ldi     Temp,2
        out     portb,Temp
        ldi     Temp,3
        out     portb,Temp
        ldi     Temp,5
        out     portb,Temp
        ldi     Temp,8
        out     portb,Temp
        ldi     Temp,11
        out     portb,Temp
        ldi     Temp,15
        out     portb,Temp
        ldi     Temp,19
        out     portb,Temp
        ldi     Temp,23
        out     portb,Temp
        ldi     Temp,29
        out     portb,Temp
        ldi     Temp,34
        out     portb,Temp
        ldi     Temp,41
        out     portb,Temp
        ldi     Temp,47
        out     portb,Temp
        ldi     Temp,54
        out     portb,Temp
        ldi     Temp,61
        out     portb,Temp
        ldi     Temp,69
        out     portb,Temp
        ldi     Temp,77
        out     portb,Temp
        ldi     Temp,85
        out     portb,Temp
        ldi     Temp,93
        out     portb,Temp
        ldi     Temp,102
        out     portb,Temp
        ldi     Temp,111
        out     portb,Temp
        ldi     Temp,119
        out     portb,Temp
	cbi	PORTD,2		;amp:=off
	rjmp	loop

##########################################################

disclaimer




Questions ?
Suggestions?
Feedback ?






sponsored links




AVR index
embedded software pages
home

last updated: 25.nov.99



Copyright (99,2001) Ing.Büro R.Tschaggelar