Elektrotekno.com Ana Sayfa || Pic ve diğer işlemci ve denetleyiciler ile yapılmış devreler, projeler


atmel atmega8 dosya derleme için yardım

Kayıt: 05 Şub 2009
Mesajlar: 70

Offline
caglarm
Tarih: 15 11 2011 18:05

arkadaşlar,nette bulduğum bir devreyi kurabilmem için ekdeki bas uzantılı dosyayı atmega8-16pu için derlemem gerekiyor.bugüne kadar atmel ile hiç ilgilenmediğimden bu dosyayı hex e çevirebilecek var mı?

Kod
' _____________________________________________________________________________

'|program "analizator widma akustycznego 16*2 lcd   kompilator bascom 1.11.8.3 |
'|autor: hunterhouse.     pcb,filtr: manekınen.                                |
'|                                                                             |
'|info: http://www.elektroda.pl/rtvforum/topic776332-0.html                    |
' -----------------------------------------------------------------------------


$regfile = "m8def.dat"
'$crystal = 26601712
$crystal = 16000000
'----------------------konfıguracja--------------------
const falloff = 1                                           'iloœæ cykli po jakim s³upki opadn¹, wolne opadanie
const lcd_offset = 1
const czulosc = 20
'----------------------sta£e---------------------------

const timer1_h = _xtal / 44000
const timer1_l = _xtal / 2000
reset watchdog
config watchdog = 256
stop watchdog
const poziom_a = 8 -(czulosc * 0.4)


'------------------------zmıenne--------------------------
dim div as ıram ınteger at 16
dim k as byte
dim ı as byte
dim tmp_s as ınteger
dim tmp_c as ınteger
dim beta as ıram byte
dim suma as word
dim sam as byte
dim sampling as bit
dim rex_t as ınteger , ımx_t as ınteger
dim dane(32) as ınteger
dim sample_h(32) as ınteger
dim sample_l(32) as ınteger
dim okno(32) as byte
dim rex(16) as ınteger
dim sinus(40) as ınteger
dim wynik(16) as byte , wynik_o(16) as byte
dim sing as single
dim poziom as ınteger
dim line1 as string * 16 , line1d(16) as byte at line1 overlay
dim line2 as string * 16 , line2d(16) as byte at line2 overlay
dim falloff_count(16) as byte




$lib "lcd4busy.lbx"
const _lcdport = portd
const _lcdddr = ddrd
const _lcdin = pind
const _lcd_e = 3
const _lcd_rw = 2
const _lcd_rs = 1
config lcd = 16 * 2
ınitlcd
waitms 10
ınitlcd
cls
deflcdchar 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 31
deflcdchar 2 , 0 , 0 , 0 , 0 , 0 , 0 , 31 , 31
deflcdchar 3 , 0 , 0 , 0 , 0 , 0 , 31 , 31 , 31
deflcdchar 4 , 0 , 0 , 0 , 0 , 31 , 31 , 31 , 31
deflcdchar 5 , 0 , 0 , 0 , 31 , 31 , 31 , 31 , 31
deflcdchar 6 , 0 , 0 , 31 , 31 , 31 , 31 , 31 , 31
deflcdchar 7 , 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31
cls
cursor off


config adc = single , prescaler = 4 , reference = avcc
start adc

config timer1 = timer , prescale = 1
on compare1a sampleh
on compare1b samplel
compare1a = timer1_h
compare1b = timer1_l
enable timer1
start timer1

enable ınterrupts
disable ınt0
disable ınt1

for k = 0 to 31
sinus(k + 1) = lookup(k , tab_sin)
   'okno(k + 1) = 255
   'okno(k + 1) = lookup(k , okno_blackman)
   'okno(k + 1) = lookup(k , okno_hamming)
   okno(k + 1) = lookup(k , okno_hanning)
next k

sinus(33) = lookup(0 , tab_sin)
sinus(34) = lookup(1 , tab_sin)
sinus(35) = lookup(2 , tab_sin)
sinus(36) = lookup(3 , tab_sin)
sinus(37) = lookup(4 , tab_sin)
sinus(38) = lookup(5 , tab_sin)
sinus(39) = lookup(6 , tab_sin)
sinus(40) = lookup(7 , tab_sin)


start watchdog




main:
do
reset watchdog

gosub sample_h
main_1:
ıf sampling = 1 then goto main_1

gosub sample_l
gosub copy_low
gosub dft
gosub przelicz_low
gosub copy_high
gosub dft
gosub przelicz_high

main_3:
ıf sampling = 1 then goto main_3
gosub save
loop







copy_high:
   poziom = 0

   for k = 1 to 32
      div = sample_h(k)
      asr r17:ror r16:asr r17:ror r16
      sample_h(k) = div
      poziom = poziom + sample_h(k)
   next k

   div = poziom
   asr r17:ror r16:asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
   asr r17:ror r16
   poziom = div

   for k = 1 to 32
      dane(k) = sample_h(k) - poziom
      dane(k) = dane(k) * okno(k)
      div = dane(k)
      asr r17:ror r16:asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
      asr r17:ror r16:asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
      dane(k) = div
      ıf dane(k) > 127 then dane(k) = 127
      ıf dane(k) < -127 then dane(k) = -127
   next k
return



copy_low:
   poziom = 0

   for k = 1 to 32
      div = sample_l(k)
      asr r17:ror r16:asr r17:ror r16
      sample_l(k) = div
      poziom = poziom + sample_l(k)
   next k

   div = poziom
   asr r17:ror r16:asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
   asr r17:ror r16
   poziom = div

   for k = 1 to 32
      dane(k) = sample_l(k) - poziom
      dane(k) = dane(k) * okno(k)
      div = dane(k)
      asr r17:ror r16:asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
      asr r17:ror r16:asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
      dane(k) = div
      ıf dane(k) > 127 then dane(k) = 127
      ıf dane(k) < -127 then dane(k) = -127
   next k
return




dft:
for k = 1 to 15
 rex_t = 0
 ımx_t = 0

   for ı = 0 to 31
      beta = ı * k
      beta = beta and 31
      tmp_s = sinus(beta + 1) * dane(ı + 1)
      tmp_c = sinus(beta + 8) * dane(ı + 1)

      div = tmp_s
      asr r17:ror r16:asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
      asr r17:ror r16:asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
      tmp_s = div

      div = tmp_c
      asr r17:ror r16:asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
      asr r17:ror r16:asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
      tmp_c = div


     rex_t = rex_t + tmp_c
     ımx_t = ımx_t - tmp_s

   next ı

   div = rex_t
   asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
   rex_t = div

   div = ımx_t
   asr r17:ror r16:asr r17:ror r16:asr r17:ror r16
   ımx_t = div

   tmp_c = rex_t * rex_t
   tmp_s = ımx_t * ımx_t


   tmp_c = tmp_c + tmp_s
   rex(k + 1) = sqr(tmp_c)
next k
return



sample_l:
'pobiera 32 próbki z czêstotliwoœci¹ 2khz
config adc = single , prescaler = auto , reference = avcc
start adc

timer1 = 0
enable compare1b
sam = 0
sampling = 1
return


samplel:
timer1 = 0
ıncr sam
sample_l(sam) = getadc(1)                                   'nı¯sze pasmo
ıf sam = 32 then
   disable compare1b
   sampling = 0
end ıf
return




sample_h:
'pobiera 32 próbki z czêstotliwoœci¹ 44khz
config adc = single , prescaler = 2 , reference = avcc
'adc dzia³a ju¿ doœæ niestabilnie na preskalerze 2 ale na 4 ju¿ sie nie wyrobi i prubkuje z f=37khz
' przez du¿e f pojawiaja sie szumy jak podajemy sygna³ z generatora
start adc

timer1 = 0
enable compare1a
sam = 0
sampling = 1
return

sampleh:
timer1 = 0
ıncr sam
sample_h(sam) = getadc(0)                                   'wy¯sze pasmo
ıf sam = 32 then
   disable compare1a
   sampling = 0
end ıf
return





'---------oblıczanıe wysokoŒcı dla hıgh (6-10)--------------


przelicz_high:
suma = rex(3)
wynik(9) = suma

suma = rex(4)
wynik(10) = suma

suma = rex(5)
wynik(11) = suma

suma = rex(6)
wynik(12) = suma

suma = rex(7)
ıf rex(8) > suma then suma = rex(8)
wynik(13) = suma

suma = rex(9)
ıf rex(10) > suma then suma = rex(10)
wynik(14) = suma

suma = rex(11)
ıf rex(12) > suma then suma = rex(12)
ıf rex(13) > suma then suma = rex(13)
wynik(15) = suma

suma = rex(14)
ıf rex(15) > suma then suma = rex(15)
ıf rex(16) > suma then suma = rex(16)
wynik(16) = suma
return


'---------oblıczanıe wysokoŒcı dla low (1-5)--------------


przelicz_low:
suma = rex(2)
wynik(1) = suma

suma = rex(3)
wynik(2) = suma

suma = rex(4)
wynik(3) = suma

suma = rex(5)
ıf rex(6) > suma then suma = rex(6)
wynik(4) = suma

suma = rex(7)
ıf rex(8) > suma then suma = rex(8)
wynik(5) = suma

suma = rex(9)
ıf rex(10) > suma then suma = rex(10)
wynik(6) = suma

suma = rex(11)
ıf rex(12) > suma then suma = rex(12)
ıf rex(13) > suma then suma = rex(13)
wynik(7) = suma

suma = rex(14)
ıf rex(15) > suma then suma = rex(15)
ıf rex(16) > suma then suma = rex(16)
wynik(8) = suma
return




save:


'-------------oblıczanıe kolejnych (k) s£upkÓw---------------

for k = 1 to 16                                             'w ci¹gu jednej pêtli obliczany i wyœwietlany 1 s³upek 1/10
sing = wynik(k) * 0.1

'ıf k = 1 then sing = sing * 0.5                             ' umnie jakos zawysoko skacz¹, byæ moze przez brak filtrów mozna usunaæ
'ıf k = 2 then sing = sing * 0.75


sing = log10(sing)

sing = czulosc * sing
tmp_c = sing + poziom_a




'-----------pılnowanıe granıcy s£upkÓw---------------

ıf tmp_c < 0 then tmp_c = 0
ıf tmp_c > 16 then tmp_c = 16

wynik(k) = tmp_c                                            'przeniesienie wyniku z tmp_c do zmiennej wynık


ıf wynik(k) > wynik_o(k) then
   wynik_o(k) = wynik(k)
else
   ıf falloff_count(k) = falloff then
      ıf wynik_o(k) > 0 then decr wynik_o(k)
      falloff_count(k) = 0
   end ıf
   ıncr falloff_count(k)
end ıf

line1d(k) = lookup(wynik_o(k) , l1)
line2d(k) = lookup(wynik_o(k) , l2)

next k



'-------------w£asne wyŒwıetlanıe lcd---------
locate 1 , lcd_offset
lcd line1;
locate 2 , lcd_offset
lcd line2;


return

l1:
data 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 255

l2:
data 32 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255



' tabela 32 liczb 16 bitowych ze znakiem
' za³o¿ony format: msb - czêœæ ca³kowita, lsb - czêœæ u³amkowa
' kwantyzacja: 0.19635 rad
' tabela ı æwiartki sin(x), 8 pozycji (co 11,25 stopnia od 0 do 78.75)
tab_sin:
data 0% , 50% , 98% , 142% , 181% , 213% , 237% , 251%
' tabela ıı æwiartki sin(x), (co 11,25 stopnia od 90 do 178.75)
data 255% , 251% , 237% , 213% , 181% , 142% , 98% , 50%
' tabela ııı i ıv æwiartki sin(x), (co 11,25 stopnia od 180 do 258.75 i 270 - 348.75)
' zanegowane 2 poprzednie tabele
data 0% , -50% , -98% , -142% , -181% , -213% , -237% , -251%
data -255% , -251% , -237% , -213% , -181% , -142% , -98% , -50%



okno_hanning:
data 0 , 3 , 10 , 23 , 40 , 60 , 84 , 109 , 134 , 160 , 184 , 206 , 225 , 240 , 250 , 255 , 255 , 250 , 240 , 225 , 206 , 184 , 160 , 134 , 109 , 84 , 60 , 40 , 23 , 10 , 3 , 0

okno_hamming:
data 20 , 23 , 30 , 42 , 57 , 76 , 97 , 120 , 144 , 168 , 190 , 210 , 228 , 241 , 251 , 255 , 255 , 251 , 241 , 228 , 210 , 190 , 168 , 144 , 120 , 97 , 76 , 57 , 42 , 30 , 23 , 20

okno_blackman:
data 0 , 1 , 4 , 10 , 18 , 31 , 48 , 69 , 94 , 122 , 151 , 181 , 208 , 230 , 246 , 255 , 255 , 246 , 230 , 208 , 181 , 151 , 122 , 94 , 69 , 48 , 31 , 18 , 10 , 4 , 1 , 0



Reklamlar



atmel atmega8 dosya derleme için yardım


Benzer Konular
- Aydınlatma projeleri için ayrı bölüm açılmıştır
- Topraklama ve Paratoner projeleri için ayrı bölüm açılmıştır
- İstekleriniz için bu bölümü kullanının.

- Autocad proje istekleriniz için bu başlığı kullanın.

- Dosya paylaşmak için yukarıdaki alt forumları kullanınız
- Kou Statik anahtarlama Sınav Soruları Yardım!!
- Atmega8 saat
- Citroen ve peugeot için cam kaldırma modülü
- Fiat Tipomuz için Yaptığım iç ve Dış sıcaklık sensörü-pic16f628a ve DS18B20

- rn171 wifi modul 802.11 bg pic,avr,arm, kontrol devreleri icin

- Assembly- TMR0 kesmesi ile ilgili yardım

Sitemize üyelik ve içeriğin indirilmesi tamamen ücretsizdir. Sitemizde paylaşılan tüm dokümanlar (Tezler, makaleler, ders notları, sınav soru cevaplar, projeler) paylaşımcıların bireysel çalışmaları olup telif hakları kendilerine aittir ya da açık bir şekilde kamusal alana yerleştirilmiş dokümanların birer kopyalarıdır. Kişilerin bireysel çalışmalarını sitemizde yüklemesinde, sitemizde paylaşıma teşvik eden puanlama sisteminin de etkisi büyüktür. Bunlara rağmen hala size ait olan ve burada bulunmasına izin vermediğiniz dokümanlar varsa iletişim bölümünden yöneticilere bildirmeniz durumunda derhal silineceklerdir.
Powered by phpBB | Translated by phpBB Turkiye | Ads by Google Adsense | Design by Crazy Bat based
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72