LCD's reageren idd. niet geweldig snel, maar nog altijd sneller dan het (mijn) oog kan volgen. Zo kan je een karakter "grijs" maken, door het zo snel mogelijk te laten wisselen tussen "space" en "karakter".
Dat moet volstaan voor de toepassing die de TS voor ogen heeft, denk ik.

Heb zelf ook een keer een testje gedaan (23-07-08) met audio en een PIC. Heb daar ook nog een filmpje van, zal hem zo wel even uploaden. maar mijn bevinding is dat met een gewoon LCD het niet echt lekker gaat, veel "ghost" karakters.. een PLED gaat veel beter.
Heb een filmpje met een gewoon LCD.

//EDIT: Duurde even, maar : http://www.youtube.com/watch?v=fRjDgnrwcTY
Dit is trouwens geen VU. lijn 1 is bovenste helft van de sinus en lijn 2 in de onderstehelft. Dit alles is gesampled op ongeveer 100Hz.

[Bericht gewijzigd door BernardV op (26%)]

Jep! Dit is wat ik wil hebben :D
(of toch om mee te beginnen)

't lijkt me wel dat je LCD'tje niet echt actueel is, de peak komt precies na de beat, mss hogere kloksnelheid ofzo?

Ik programmeer in BASCOM; wat me lukt is om één schermpje te schrijven dus bv


R:#####|
L:#######|

maar vanaf dat ik er een andere waarde in wil steken gebeurt er niets.
Het schrijven van de waarde naar het LCD scherm gebeurt in een subroutine, en het lijkt alsof de µC na de subroutine niet meer terug keert naar z'n retour adres. Heb ik de foute subroutine gebruikt of wat moet er veranderen?

@ BernardV kan je eventueel eens je code uploaden?

begin eens met hier en daar i/o pinnen te flippen

Portd=Portd XOR 1
...
Portd=Portd XOR 2
...
etc

op verschillende punten in het programma, om te zien of de uitvoer daar iedere seconde komt (meet de pennen met multimeter)

Klopt dat het lijkt dat het na de beat komt, dat is volgens mij een nare eigenschap van Youttube bij het encoden. Live zie je dat niet.
De code zal ik vanavond wel even plaatsen hier.. (ben nu niet thuis).
Is echt maar een paar regels.

Niet te moeilijk denken allemaal er zit gewoon een simpele fout in je code, in je subroutine idd deze loopt vast in en infinite loop door de volgende code:

Do
   If L > 5 Then
      Lcd Chr(5)
      L = L - 5
   End If
Loop Until L < 5

L = 20, dus na 3 iteraties is L gelijk aan 5, hij voldoet niet meer aan de IF (hiervoor moet deze immers groter dan 5 zijn) maar ook niet aan de escape, UNTIL (hiervoor moet hij kleinder dan 5 zijn)

Oplossing:

If L >= 5 Then

zelfde fout zit in de loop voor het rechterkanaal alleen gaat deze wel goed omdat de startwaarde (in dit geval) niet deelbaar is door 5.

edit:

Nog wat opmerkingen over de code,

Je kunt in dit geval veel beter een for-lus gebruiken dan ben je van de if-statement af; een do-while constructie gebruik je eigenlijk alleen als de loop ALTIJD minimaal 1x doorlopen moet worden wat hier absoluut niet het geval is. Ook ben je gelijk van je backup waarden af.

Het select statement kun je vervangen door 1 simpele regel door gebruiken te maken van de modulus (restwaarde van deling)

Meer edit:
volgens mij kun je je hele subroutine vervangen door de volgende code:

Sub Writelcd
Cls

FOR Rx = 5 TO R STEP 5 
   Lcd Chr(5) 
NEXT Rx

Lcd Chr(R MOD 5)

Lowerline

FOR Lx = 5 TO R STEP 5 
   Lcd Chr(5) 
NEXT Lx

Lcd Chr(L MOD 5)

End Sub

Ik programeer zelf nooit in basic dus het zou kunnen dat er een syntax fout in zit, maar deze code is iig een stuk overzichtelijker.

http://elm-chan.org/works/akilcd/report_e.html

leuk linkje waar de FFT module te downloaden. Deze is geoptimaliseert voor de AVR MEGA reeks.

Dank aan Scorpie! De subroutine werkt perfect nu
(en ik hoop met het zo gedaan te hebben een minimale berekeningstijd gebruikt te hebben qua snelheid)

Nu nog de ADC inlezen; omzetten naar een schaal van 70 en vervolgens deze waarde in L & R steken.

Even een sestje gedaan ook; om de 20ms een waarde doorsturen in toch wel het minimum. Aan 10ms werkt de bovenste lijn nog perfect; de onderste lijn knippert maar wat raar.

Sample rate zal ik dus wat moeten verlagen dmv een delay.

Q: Hoe moet ik de ADC instellen? M.a.w. met AVCC & AREF
EDIT: Gelukt :D

Q: Voor de inkoppeling van het geluid; kan ik hiervoor een simpele AM-detector gebruiken? Dat is dus een diode en een condensator én een weerstand. Zoja; wat zou ik moeten nemen als RC-tijd?

[Bericht gewijzigd door Scheef_schaap op (15%)]

Als je met AM detector dit bedoeld
http://members.bellatlantic.net/~vze2n9fe/meteor/peak1.gif
dan Ja.

Voor de RC tijd is het erg persoonsgebonden (de een houd van lekker vlot en flikkerend terwijl de andere liever de pieken langzaam ziet dalen), als lower bound zal ik dan iets nemen als r*c=0.01 en verhoog R om trager te laten gaan.

Jap, indeed dit werkte :D

Werkte .. Het is nu al het 2e LCD display dat ik van Dick Best gekocht heb dat het spontaan begeeft.. Door daar gewoon aan te liggen. Altijd zelfde symptomen, na reset µC werkt het perfect, dan na enige tijd begint het allemaal rare tekens te geven,maar na reset werkt het opnieuw terug, na nog enige tijd 2 volle rijen blokjes, dan blokjes met gaatjes in... Nu als ik spanning steek op de displays wordt er een IC gloeiend heet & heb ik 2 rijen van die mislukte blokjes..

Raar.. Doe ik iets verkeerd? Ik denk het niet want de display's heb ik al weken gebruikt..
Misschien kunnen ze er niet tegen van lang aan te liggen.
Kan het zijn dat ik het contrast té hard instel? 'k gebruik geen POT meter, maar een weerstandje.

http://users.skynet.be/fa296995/DSC00402.JPG

[Bericht gewijzigd door Sine op (1%)]

Ik heb geen idee wat er met je display is, als je ons geen schema verstrekt.

Ik kan je nu hooguit mijn schema geven ter vergelijking:
http://www.uploadarchief.net/files/download/hd44780-aansluitingen.png

[Bericht gewijzigd door Zom-B op (30%)]

Ik gebruik hetzelfde schema; enkel hangen DB0 - DB3 te zweven ipv aan massa. Is dit de oorzaak ev?

Geen idee, maar het zou zo eens kunnen.

ik heb ook een lcd van dick best en mijn beeld werd vaag. ik kwam er achter dat als ik het beeld aandrukte en opnieuw de schakeling aanzette het beeld weer goed was. dus heb ik met ijzerdraad het beeld beter vast gemaakt.

edit: ik heb d0 tot d3 ook zwevend. geen problemen.

[Bericht gewijzigd door robojan op (11%)]

Ik denk dat ik het probleem gevonden heb; m'n 7805 geeft geen 5V, maar 6V af. Volgens mij is deze defect ..

Vandaag is er alweer eentje gesneuveld ... :/

Wat spook jij met die arme dingen uit? Je koelt ze toch, mag ik hopen? Het backlight v/d LCD neemt nogal wat stroom op...

Man man man, miserie. Het probleem situeerde zich dus zo (denk ik na wat foutzoeken): De afvlakelco is losgekomen, waardoor m'n 78S05 wat rare dakjessignalen binnenkrijgt. De 78S05 heeft dit niet zo graag en beslist dan om eens 9V door te laten. Het LCD scherm heeft dit niet zo graag, de chip warmt op en gaat defect.

Echter, nu ik een nieuwe 78S05 er heb ingestoken, reageert m'n LCD weer op signalen, echter is het display bijna niet meer leesbaar; er ontbreken tekens etc etc, enfin, ik heb het probleem gevonden denk ik, en hopelijk GEEN defecte LCD's niet meer in de toekomst...

Oké , alles werkt nu :D

Tot op heden geeft m'n display het volume liniair weer, dit zou logaritmisch moeten.

Dit is m'n code:


Dim R As Single
Dim L As Single
Dim Rx As word
Dim Lx As Word

Sub Leesadc
   Rx = Getadc(0)
   Lx = Getadc(1)
   R = Rx
   L = Lx

   R = Log10(r) * 20
   L = Log10(l) * 20
   Call Writelcd
End Sub

Waarbij Writelcd het getal R & L op het display zet, geteld in streepjes, bv 20 = 20 streepjes.

Ook loop ik nog een beetje verward met die ADC. Moet ik er een byte voor gebruiken of een word? Als ik een byte gebruik merk ik dat het getal max 256 kan zijn (de rest gaat verloren?)

Met deze code draait m'n LCD echter in de soep :/
2 rijtjes volle blokjes krijg ik nu.

Dit is m'n Writelcd sub:



Sub Writelcd
Cls

Lcd "R:"
Do
   If R >= 5 Then
      Lcd Chr(5)
      R = R - 5
   End If
Loop Until R < 5

Select Case R
   Case 4:
      Lcd Chr(4)
   Case 3:
      Lcd Chr(3)
   Case 2:
      Lcd Chr(2)
   Case 1:
      Lcd Chr(1)
   Case 0:

End Select

Lowerline

Lcd "L:"
Do
   If L >= 5 Then
      Lcd Chr(5)
      L = L - 5
   End If
Loop Until L < 5

Select Case L
   Case 4:
      Lcd Chr(4)
   Case 3:
      Lcd Chr(3)
   Case 2:
      Lcd Chr(2)
   Case 1:
      Lcd Chr(1)
   Case 0:
End Select
End Sub

Die blokjes, dit komt wss door een overflow denk ik?

Jipla boaskes, de fout zat'm dus in dat het komma getallen waren dat writelcd doorkreeg..
Het enige dat nu nog moet gebeuren is het gelijkrichten door een precisie gelijkrichter, omdat ik nu telkens m'n diodespanning verlies op al zo'n mini signaaltje.
Vervolgens nog een interfeeske, wat multitasking zal worden. Ik ben nu aan het zoeken naar een aangename audio-processor voor bass, tribble & volume regeling.

Trots kan ik een foto sturen van een werkend design:
http://users.skynet.be/fa296995/DSC00414.JPG

[Bericht gewijzigd door Henry S. op (0%)]

gefeliciteerd! maar waarom heb je ingodsnaam nou weer die lelijke/slechte Writelcd() functie in je code opgenomen?

Die constructie met Do-Until en daarin enkel een IF is gewoon onlogisch en onnodig traag (2 evaluaties per iteratie), lees bijvoorbeeld dit eens: http://www.geocities.com/learnprogramming123/Clesson10.htm
Case vervangen door een enkele modulus operatie zoals ik al eerder heb uitgelegd.

Hier ben ik alweer met een vraag ..

Graag had ik de instellingen (volume,kanaal,etc) bewaard in de microcontroller na spanningsuitval. Dit zijn allemaal bytes die zich in de µC bevinden (RAM), maar gereset worden na spanningsuitval. Hoe kan ik deze in een vast (ROM) geheugen plaatsen ? Compiler is BASCOM AVR.

EEPROM, intern of extern (I2C/SPI)

Op 15 september 2008 21:04:17 schreef Henry S.:
EEPROM, intern of extern (I2C/SPI)

Wat voor een boel is dat? Ik heb een ATMEGA8 voorhanden, heeft dit zo'n intern geheugen?

Ja hoor. 512 bytes EEPROM.
Hoe je dat in BASIC benadert, kan je wellicht met Google code-search vinden.

Jeepz,

Mijn audio weergave is nu in dB. Graag had ik dit in VU weergegeven.

Nu gebruik ik de formule

L(dB) = 20. log(ADC)

Waarvan ADC de topspanning is die de ADC constant meet.
1024 = 5V amplitude.
Nu vind ik dat met deze formule de weergave niet mooi gebeurt, weet iemand een formule om de weergave mooi in VU te laten weergeven?

Het flikkeren van het LCD scherm heb ik ook goed opgelost, ik kan nu een enorm rappe refreshrate gebruiken, ik werk nu zelf zonder delays.
Het truukje zat hem in ipv iedere keer een CLS uit te voeren, de cursor gewoon terug in het begin te positioneren, zodat hij gwn z'n beeld overschrijft, er is nu niets van flikkering meer te zien.

Zoek een VU-schaal op, verder heeft VU nog een bepaalde attack en sustain.

[Bericht gewijzigd door Henry S. op (54%)]