hallo hat von euch schon jemand ein vu meter mit einem 8515 realisiert? dann bitte kurz melden wäre auch froh über source vorschläge meins steuert nicht richtig aus ..
hi, muss es unbedingt ein AMTEL sein ? es gibt auch weniger teure und auch kleinere IC´s, die dafür geschaffen sind. mfg Kay
ja genau die apnote die habe ich verwendet ich möchte 16 leds ansteuern und deshalb reichte mir der 2313 nicht habe nun n 8515 er komme aber nicht zurecht habe den code zwar abgeändert aber ... wenn ihr wollt kann ich mal den code posten
habe es genau so wie in der appnote aufgebaut nur meine analogen inputs an den 8515 angepasst ein anderes def file genommen ( für den 8515 er ) die mhz von 10 auf 8 runter dann die ports definiert die ich im 85 er mehr habe ein paar "led zeilen" eingefügt und den datenblock ganz unten geändert... aber nocht zu keinem vernünftigen resultat gekommen ..
Hi, poste mal plz dein Quellcode .... maybe kann dann jemand besser helfen. " aber nocht zu keinem vernünftigen resultat gekommen .." Was meinste genau damit? Mfg Dirk
mein problem speziell ist wenn ich im code einen anderen db wert setze z.b. 1db step und oder einen niedrigeren maximal pegel dann leuchten mir 5 oder gar 6 led s von vorneherein... und die ganze anzeige steuert maximal 2 led s aus der rest blinkt wie 30 herz... halt keinen schönen und schnellen ausschlag ....... von -8 bis +3 z.b. .... habe ich da was im signal eingang falsch gemacht ? habe es genauso wie auf dem plan natürlich änderung at2313 und 8515 realisiert... n kumpel von mir meinte die bauteile oder die schaltung so wäre schwachsinn da sie alles unter ca 2khz filtert ?! ' ' Meter DC input >-------[ R2 ]-------> PB1 (AIN1 pin 13) ' | ' GND <---------||----- ' C2 ' ' ---[ R1 ]--- ' GND <----| |----> PB0 (AIN0 pin 12) ' -----||----- ' C1 ' R1 = 10k 5% ' R2 = 10k ' C1 = 47nF 5% ' C2 = 47nF anbei mein jetziger code !
'---[ Compiler and hardware related statements ]--------------------- $regfile = "8515def.dat" $crystal = 8000000 Ddrb = &B11110011 Portb.2 = 0 Portb.3 = 0 Ddrd = &B10111111 Portd = &B11111111 Ddrc = &B11111111 Portc = &B11111111 Ddra = &B11111111 Porta = &B11111111 Acsr.7 = 0 '---[ Variables ]---------------------------------------------------- Dim Peak_pos As Byte Dim Peak_hold As Byte Dim Drop_hold As Byte Dim Led_pos As Word Dim Bar_pattern As Word Dim T1 As Word '---[ Constants ]---------------------------------------------------- Const Peak_hold_time = 200 Const Drop_down_time = 40 Const Led_max = 16 Const T1_fs = 1385 Const T1_step = 200 Const T1_range = T1_step * Led_max + T1_fs Displ_mod Alias Pind.6 Ac_out Alias Acsr.5 '---[ Timer Configuration ]------------------------------------------ Config Timer0 = Timer , Prescale = 256 Config Timer1 = Timer , Prescale = 8 Config Watchdog = 1024 Enable Interrupts Enable Timer0 Enable Timer1 On Timer0 Dc_input_sample Timer0 = 0 Timer1 = 0 Start Timer0 Start Timer1 '---[ Main program loop ]-------------------------------------------- Do Bar_pattern = &HFFFF If Displ_mod = 1 Then Bar_pattern = Lookup(led_pos , Bar_mode) Else Bar_pattern.led_pos = 0 End If Bar_pattern.peak_pos = 0 Porta.0 = Bar_pattern.16 Porta.1 = Bar_pattern.15 Porta.2 = Bar_pattern.14 Porta.3 = Bar_pattern.13 Porta.4 = Bar_pattern.12 Porta.5 = Bar_pattern.11 Porta.6 = Bar_pattern.10 Porta.7 = Bar_pattern.9 Portc.7 = Bar_pattern.8 Portc.6 = Bar_pattern.7 Portc.5 = Bar_pattern.6 Portc.4 = Bar_pattern.5 Portc.3 = Bar_pattern.4 Portc.2 = Bar_pattern.3 Portc.1 = Bar_pattern.2 Portc.0 = Bar_pattern.1 Portd.0 = Bar_pattern.0 'led 0 = bit 0 Loop '-------------------------------------------------------------------- End '-------------------------------------------------------------------- '---[ Interrupt Service Routine on Timer0 overflow ]---------------- Dc_input_sample: Timer0 = 100 Ddrb.2 = 1 Portb.2 = 1 Waitus 200 Ddrb.2 = 0 Portb.2 = 0 Timer1 = 0 Bitwait Ac_out , Reset T1 = Timer1 If T1 < T1_fs Then T1 = T1_fs Elseif T1 > T1_range Then T1 = T1_range End If Led_pos = T1_range - T1 Led_pos = Led_pos \ T1_step If Led_pos >= Peak_pos Then Peak_pos = Led_pos Peak_hold = Peak_hold_time Else If Peak_hold > 0 Then Decr Peak_hold Else If Drop_hold > 0 Then Decr Drop_hold Else Drop_hold = Drop_down_time If Peak_pos > 0 Then Decr Peak_pos End If End If End If Reset Watchdog Return '---[ Led Bar pattern lookup data ]---------------------------------- ' Led 16......... 0 Bar_mode: Data &B11111111111111111110% Data &B11111111111111111100% Data &B11111111111111111000% Data &B11111111111111110000% Data &B11111111111111100000% Data &B11111111111111000000% Data &B11111111111110000000% Data &B11111111111100000000% Data &B11111111111000000000% Data &B11111111110000000000% Data &B11111111100000000000% Data &B11111111000000000000% Data &B11111110000000000000% Data &B11111100000000000000% Data &B11111000000000000000% Data &B11110000000000000000% '--------------------------------------------------------------------
nun der orginalcode von der bascom seite speziell für den AT90S2313 10 MHZ '-------------------------------------------------------------------- ' Filename : BG30dB_LED.bas ' Revision : 1.0 ' Controller : AVR AT90S2313-10 ' Author : Ger langezaal ' Compiler : BASCOM-AVR Rev. 1.11.6.2 ' ROM image : 3EE hex (1006 dec) ' '---[ Small program description ]------------------------------------ ' ' This program is written to create a logarithmic LED bar graphdB ' (VU) meter ' with peak-hold and drop-down. Scale range is 30dB in 3dB steps. ' Log conversion is done with the analog comparator on a RC ' discharge curve. ' C1 is charged each 4mS with PB0 as output on a Timer0 Interrupt. ' Then PB0 is set to AIN0 (analog comparator +input) Timer1 is reset ' and start counting, C1 will be discharged by R1. ' Timer1 is counting until AIN0 < AIN1. ' Analog Comparator Output = ACSR bit 5. ' Timer1 value is in T1 stored for calculation. ' ' Display mode is set with PD6 (pin 11). ' 1 = bar mode ' 0 = dot mode (for low current applications) '---[ LED to AVR connections ]-------------------------------------- ' ' AVR Resistor Cathode dB ' Port pin Ohm LED nr Scale ' PD5 9 >--[680]--> 11 +6 ' PD4 8 >--[680]--> 10 +3 ' PD3 7 >--[680]--> 9 0 ' PD2 6 >--[680]--> 8 -3 ' PD1 3 >--[680]--> 7 -6 ' PD0 2 >--[680]--> 6 -9 ' PB7 19 >--[680]--> 5 -12 ' PB6 18 >--[680]--> 4 -15 ' PB5 17 >--[680]--> 3 -18 ' PB4 16 >--[680]--> 2 -21 ' PB3 15 >--[680]--> 1 -24 ' PB2 14 >--[680]--> 0 infinit ' ' All LED Anodes to +5 Volt ' '---[ Analog comparator inputs ]------------------------------------- ' ' ' Meter DC input >-------[ R2 ]-------> PB1 (AIN1 pin 13) ' | ' GND <---------||----- ' C2 ' ' ---[ R1 ]--- ' GND <----| |----> PB0 (AIN0 pin 12) ' -----||----- ' C1 ' R1 = 10k 5% ' R2 = 10k ' C1 = 47nF 5% ' C2 = 47nF ' '---[ DC input versus Timer1 and Led position ]---------------------- ' ' Measured Timer1 values for calculation: ' DC input = 3500mV Timer1 = 192 ( +6dB) ' DC input = 312mV Timer1 = 1544 (-15dB) 21dB = factor 11.22 ' 21dB = 1543 - 192 = 1351 Timer1 counts ' 3dB = 1351 / 7 = 193 Timer1 counts ' ' Input mv Timer1 LED pos dB scale ' 3500 192 11 +6 ' 2477 385 10 +3 ' 1753 578 9 0 ' 1241 771 8 -3 ' 879 965 7 -6 ' 622 1158 6 -9 ' 440 1351 5 -12 ' 312 1544 4 -15 ' 220 1737 3 -18 ' 156 1930 2 -21 ' 110 2123 1 -24 ' <110 >2123 0 infinit ' '---[ Compiler and hardware related statements ]--------------------- $regfile = "2313def.dat" 'register file for AT90S2313 $crystal = 10000000 '10MHz crystal Ddrb = &B11111100 'PB0 and PB1 are analog inputs Portb.0 = 0 'disable input pullup Portb.1 = 0 'disable input pullup Ddrd = &B10111111 'config PD6 as input Portd = &B11111111 'output high and enable input pullup Acsr.7 = 0 'enable analog comparator ACSR bit 7 = 0 '---[ Variables ]---------------------------------------------------- Dim Peak_pos As Byte Dim Peak_hold As Byte Dim Drop_hold As Byte Dim Led_pos As Word Dim Bar_pattern As Word Dim T1 As Word '---[ Constants ]---------------------------------------------------- Const Peak_hold_time = 200 Const Drop_down_time = 40 Const Led_max = 11 'Led 0 - 11 Const T1_fs = 192 'full scale Timer1 value Const T1_step = 77 '3dB step Timer1 value Const T1_range = T1_step * Led_max + T1_fs 'Calculate Timer1 range Displ_mod Alias Pind.6 'display mode 1 = Dot 0 = Bar Ac_out Alias Acsr.5 'analog comparator output = ACSR bit 5 '---[ Timer Configuration ]------------------------------------------ Config Timer0 = Timer , Prescale = 256 'On Interrupt Timer Config Timer1 = Timer , Prescale = 8 'R/C Timer Config Watchdog = 1024 'reset after 1 Sec no reset watchdog Enable Interrupts Enable Timer0 Enable Timer1 On Timer0 Dc_input_sample 'on overflow timer0 jump to label Timer0 = 0 Timer1 = 0 Start Timer0 Start Timer1 '---[ Main program loop ]-------------------------------------------- Do Bar_pattern = &HFFFF 'set all bits If Displ_mod = 1 Then 'bar display mode Bar_pattern = Lookup(led_pos , Bar_mode) Else 'dot display mode Bar_pattern.led_pos = 0 'reset dot bit End If Bar_pattern.peak_pos = 0 'reset peak bit Portd.5 = Bar_pattern.11 'led 11 = bit 11 Portd.4 = Bar_pattern.10 Portd.3 = Bar_pattern.9 Portd.2 = Bar_pattern.8 Portd.1 = Bar_pattern.7 Portd.0 = Bar_pattern.6 Portb.7 = Bar_pattern.5 Portb.6 = Bar_pattern.4 Portb.5 = Bar_pattern.3 Portb.4 = Bar_pattern.2 Portb.3 = Bar_pattern.1 Portb.2 = Bar_pattern.0 'led 0 = bit 0 Loop '-------------------------------------------------------------------- End '-------------------------------------------------------------------- '---[ Interrupt Service Routine on Timer0 overflow ]---------------- Dc_input_sample: Timer0 = 100 'preset Timer0 for sample rate of 4mS Ddrb.0 = 1 'set AIN0 as PB0 output Portb.0 = 1 'set PB0 high to charge C1 Waitus 200 'wait for charge complete Ddrb.0 = 0 'reset PB0 as AIN0 analog input Portb.0 = 0 'disable AIN0 pullup Timer1 = 0 'clear R/C Timer1 Bitwait Ac_out , Reset 'wait for AIN0 < AIN1 T1 = Timer1 'read Timer1 value If T1 < T1_fs Then 'check T1 low limit T1 = T1_fs 'T1 clipping Elseif T1 > T1_range Then 'check T1 high limit T1 = T1_range 'T1 clipping End If Led_pos = T1_range - T1 'calculate led position Led_pos = Led_pos \ T1_step 'led_pos = 0 - 11 If Led_pos >= Peak_pos Then 'new peak value Peak_pos = Led_pos 'store peak value Peak_hold = Peak_hold_time 'preset peak hold timer Else If Peak_hold > 0 Then Decr Peak_hold Else If Drop_hold > 0 Then Decr Drop_hold Else Drop_hold = Drop_down_time 'preset drop down timer If Peak_pos > 0 Then Decr Peak_pos 'drop down one position End If End If End If Reset Watchdog Return '---[ Led Bar pattern lookup data ]---------------------------------- ' Led 11......... 0 Bar_mode: Data &B1111111111111110% 'Word constants must end with the %-sign Data &B1111111111111100% Data &B1111111111111000% Data &B1111111111110000% Data &B1111111111100000% Data &B1111111111000000% Data &B1111111110000000% Data &B1111111100000000% Data &B1111111000000000% Data &B1111110000000000% Data &B1111100000000000% Data &B1111000000000000% '--------------------------------------------------------------------
ich programmiere über die spi schnittstelle mit hilfe des isp adapters (eigenbau) und der atmel isp software sobald ich den atmel aus seiner fassung nehme und in eine andere ( ohne externen quarz) an xtal1 und xtal2 ect zeigt bleibt der atmel komplett "aus" nun meine frage benötigeich auch noch in meiner endgültigen schaltung den 8 mhz quarz den ich sonst nur zum programmiern nehme der müsste mir doch erspart bleiben denn der avr hat ja einen internen mit 8mhz ? oder stimmt da was am code nicht ? danke schon mal mal für jede art von hilfe !
Hi, erstmal die RC Kombination fuer den Analogcomperator stellt eine RC Zeit dar(Aufladezeit des Kondensators). Diese Auflade/Entladezeit wird gemessen und umgerechnet in die db Skala. Mfg Dirk
aha nun meine frage wieso läuft der atmel auf meiner isp programmier platine auf der ein 8 mhz quarz stckt und wieso auf einer anderen leiterplatte ohne quarz nicht ich dachte es wird nur der timer verwendet ?
würde statt dem RC Glied auch ein Gleichrichter mit nachgeschaltetem Tiefpaß, der das Audiosignal gleichrichtet und glättet funktionieren ?
@ dirk hast du nicht mal in nem anderen thread nach plänen von erdi oder emil nachgefragt ? hast du die noch ? bzw die mail adresse der beiden ? grüßles matthias anbei der auszug falls ich mich täusche - sorry Re: Audio Spectrum Analyzer Autor: Dirk [router.mcd-panasonic.de] Datum: 16.06.2003 08:40 ------------------------------------------------------------------------ -------- Hi, mal eine Frage : Deine VU Levelmeter mit Peakholdfunktion . Sind die mit Avr geloest ? Wenn ja magst du diese zur Verfuegungstellen? Mfg Dirk
Hi, also erstmal kann dein AT90S8515 nicht ohne Quarz laufen . Falls du z.B. ein Atmega8 haettest koenntest du die internen 1 Mhz nehmen. Der Timer arbeitet mit einer Prescaler von 8 (Quarzfrequenz/8) Schau dir mal bitte das Datasheet zu deinem µC an. Speziell Analogkomperator. Ich schau mir nochmal dein Code heute abend an, vielleicht kannst du ja nochmal im Bascom Yahoo Forum nachfragen. Mfg Dirk ------------------------------------------- Re: Audio Spectrum Analyzer Autor: Dirk [router.mcd-panasonic.de] Datum: 16.06.2003 08:40 Leider habe ich auf die Anfrage keine Antwort bekommen.
Sry dass ich einen alten Thread wieder ausgrabe aber ich hätte eine Bitte: Ich habe Zuhause ein Mischpult und möchte mir dazu oben eine Meterbridge draufbauen. Das heißt alle 16 Eingänge und die 6 Ausgänge mit VU's versehen. Der LM3xxx IC gefälltm ir nicht so recht, deshalb bin ich hierher gestoßen, mit einem Atmel ein VU zu bauen, auch mit Peakhold (was mir recht Wichtig wäre. Habe mir den Mega16 mal angesehen, der hat ja 8 Analoge Inputs (8x ADC). Hat jemand eine Software für den Atmel geschrieben, welche die 8 ADCs einliest, nach VU wandelt (mit Peakhold) und dann an sagen wir 16 LED/VU gemultiplext wieder ausgibt? Oder hat wer einfach eine Software, welche ein Analoges Signal einliest und das als VU mit Peakhold wieder ausgibt. Minimum sehe ich 10LED's wegen der Auflösung. Also was ganz Simples, was man nur noch in den Chip per ISP kopieren muss. Vielen Dank schon mal fürs lesen und eventuell das Posten eines Sourcecodes oder HEX Datei ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.