goedenavond

ik ben bezig met een versterker aan het bouwen
nu wil ik graag een aantal dingen op een lcd uitlezen

nu heb ik wel een klein beetje ervaring met proton
maar uit het volgende probleem kom ik niet uit

wat ik graag wil is dat er in het scherm de volume komt te staan
(dit is geen probleem)

maar als ik nu aan de balans, bass of tribble draai wil ik die graag een paar seconden in beeld hebben en dat hij daarna weer terug springt naar volume

zou iemand mij een voorbeeld klein progje kunnen schrijven die ik zelf bijvoorbeeld kan uit werken ?

In de pic basic cursus van frits staat een voorbeeld hoe je een potmeter inleest.
4 potmeters zijn 4 ingangen waar de waarde uit gelezen word en dan op een display geprint word , niet spannend.

Hoe ga je je muzikale potmeters van je versterker aan sluiten op je controller zodat hij de juiste signalen ziet.

Het volume is geen probleem, hoe heb je dat opgelost?

Volgens mij krijg je dan een beetje achterwaartse oplossing. Bij zo'n functie die je omschrijft wordt volume, balans en zo elektronisch ingesteld. Dmv een rotary stel je de waarde in en de micro regelt vervolgens de hardware bij. Wat jij hebt is een analoge regeling, waarvan je de waarde wilt afbeelden. Correct? Naar mijn mening kun je dat alleen maar doen als je (mechanisch) parallel aan de knoppen nog een extra potmeter/rotary zet, puur voor het display.

Ik gebruik van die zwart/witte potentiometers voor de pic

Ik heb de as van de potmeter aangepast zadat ik ze eroverheen ksn schuiven en deze mee draait als er aan de potmeter gedraaid wordt

Potmeters inlezen is geen probleem maar ik zoek het foefje dat hij de balans. Bass en tribble potmeter past gaat lezen als eraan gedraaid wordt een niet eerder

Ah zo. Dan kun je toch in de software continue de potmeter lezen, en als je dan ziet dat de waarde veranderd, dan zet je iets anders op het display. Net wat je wilt.

In je hoofdprogramma lees je dan continu alle potmeters uit en je vergelijkt de gemeten waarde met de vorige waarde. Je zal wel een kleine verschil in waarde moet inbouwen. Want ook als verplaatst de potmeter niet de ADC kan er elke keer een aantal stapjes naast zitten. Als er een verschil is groter dan je offset van de ADC dan spring je naar het deel wat de display laat weergeven.

[Bericht gewijzigd door benleentje op (17%)]

Het probleem is dus ook dat hij direct door gaat naar bijv balans

Als hij een keer terug is op volume is het goed
Maar bij opstarten schiet hij door

Hoe zou ik dit het beste kunnen oplossen?

Daar snap ik niks van. Wat is het probleem?

Je houdt van elke potmeter de laatste bekende stand bij. Je meet continue. Als de gemeten waarde meer afwijkt dan een klein beetje, dan zet je iets op het display, of doet iets anders leuks.

Een goede menu structuur is lastig en vereist goede disipline met gebruik van variablen. Vaak gebruik je dan een variabele als menu vlag maar dat betekend dat je andere variabelen die je ook als menu vlag gebruikt uit moet zetten. Er mag maar 1 vlag aan staan.

Maar zonder een programma te laten zien kunnen we daarin niet helpen.

[Bericht gewijzigd door benleentje op (18%)]

heb effe iets snel in elkaar gezet

hij leest ze nu allebei tegelijk uit

hoe krijg ik het dat hij de balans potmeter pas begint uit te lezen als er aan gedraaid wordt ?

Device 16F628A ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
;Algemen constanten
Symbol schaal =10
;Logische constanten
Symbol OFF = 0
Symbol On = 1

;Poortnamen
Symbol Potmeter = PORTA.0 ;Potmeter aangesloten via een condensator aan GND
Symbol balmeter = PORTA.1

;Variabele declareren
Dim Weerstand As Byte ;Deze variabele bevat straks de stand van de potmeter
Dim balans As Byte
Dim balinstel As Byte
; 76543210
TRISA = %11110111 ;PORTA.3 omschakelen als uitgang voor de LED

Clear ;Wis alle RAM geheugen
DelayMS 500 ;LCD stabilisering

;Hoofdprogramma
Cls ;Wis display scherm
While 1 = 1 ;Oneindig door blijven meten
Weerstand = Pot Potmeter, schaal
Print At 1, 1, "Instelling: ", Dec Weerstand, " " ;Zet stand op regel 1 van display

balans = Pot balmeter, schaal
Print At 1, 1, "Balans ", Dec balinstel, " "

Wend ;Terug naar WHILE

End ;Einde programma

In de While / Wend lus lees je een potmeter.
De waarde daarvan vergelijk je met de vorige waarde.
Is die afwijkend: dan toon je die waarde en leg je die vast voor de volgende doorloop.
Is die niet afwijkend: dan lees je de volgende potmeter.

In de lus een vlag bijhouden of er een potmeterwaarde is getoond.
Zo nee: dan waarde van het volume weer in beeld brengen.

Het lezen en vastleggen van waardes kan je in aparte functies stoppen.

Tip: plaats je code op het forum tussen

 tags voor meer leesbaarheid.

zou dat mischien simpel in een code geschreven kunnen worden ?
wil hem dan zelf uitwerken
maar snap nu effe helemaal niet wat er fout gaat

Dim balans As Byte
Dim balansoud As Byte

Hoofdlus

balans = Pot balmeter, schaal

IF Balans >= (Balansoud - 5) and Balans <= Balansoud + 5) then
Print At 1, 1, "Balans ", Dec balinstel, " "

Er zullen ongetwijflet wat foutjes on staan maar dat komt omdat ik niet met Basic werk. Bovenstaande code gaat meer om het idee

Daar ontbreekt al gelijk een haakje, meen ik te zien, maar dat is nog het minste. Al ik het allemaal goed gelezen heb dan luidt de basisopgave
{als er de laatse 5 seconden een van de potmeterwaardes veranderd is, display dan die};
{zoniet, display "volume"}

heb nu het volgende geschreven maar nu leest hij de volume wel uit maar de balans doet helemaal niks

;
Poortnamen
Symbol balanspot = PORTA.1
Symbol volumepot = PORTA.0

;Variabele declareren
Dim balans As Byte
Dim balansoud As Byte
Dim volume As Byte

Clear
DelayMS 500

;Hoofdprogramma
Cls
While 1 = 1
volume = Pot volumepot, 10
Print At 1, 1, "volume", Dec, volume

balans = Pot balanspot, 10

If balans >= (balansoud - 5) And balans <= (balansoud + 5) Then
Print At 1, 1, "balans", Dec balans, " "

EndIf
Wend

End

IK ben nog 1 belangrijke regel vergeten


If balans >= (balansoud - 5) And balans <= (balansoud + 5) Then
Print At 1, 1, "balans", Dec balans, " "
Else Balansoud = balans

Nu zou het wel goed moeten gaan.

Gebruik AUB ook de code tags voor PIC-basic.
Die zit boven de tekst invoerbox en is te zien aan de rode <> in het symbool. Selecteer de hele programma code druk op bovenstaan symbool en selecteer pic-basic

heb nu deze code

maar nu gaan volume en balans heel snel over elkaar heen
dus beide potmeters worden tegelijk uitgelezen

hoop dat ik de code zo goed op de site heb gezet

Device 16F628A                ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE              ;Alle ingangen digitaal

;Poortnamen
Symbol balanspot = PORTA.1 
Symbol volumepot = PORTA.0

;Variabele declareren
Dim balans As Byte 
Dim balansoud As Byte
Dim volume As Byte

Clear 
DelayMS 500

;Hoofdprogramma
Cls 
While 1 = 1 
volume = Pot volumepot, 10
Print At 1, 1, "volume", Dec, volume

balans = Pot balanspot, 10

If balans >= (balansoud - 5) And balans <= (balansoud + 5) Then
Print At 1, 1, "balans", Dec balans, " "
Else balansoud = balans

EndIf

Wend

End

BalansOud = Balans laten zakken tot buiten if loop (else kan vervallen)

dan doet hij helaas nog het zelfde

alleen als de potmeter van balans helemaal dicht gedraaid is dan komt volume in beeld

[Bericht gewijzigd door gerrit78 op (57%)]

Volgens mij klopt 't ook niet, moet zijn


If balans > (balansoud + 5) Or balans < (balansoud - 5) Then

BalansOud=Balans moet direct na EndIf staan en die and moet or zijn denk ik ook.

dat werkt ook niet

als ik er een delayms tussen plaats

balans = Pot balanspot, 10

If balans > (balansoud - 5) And balans < (balansoud + 5) Then
Print At 1, 1, "balans", Dec balans, " "
  DelayMS 100
EndIf
    
  balansoud = balans

kan ik zien dat hij direct met het opstarten naar balans gaat en volume slaat hij helemaal over

maar nu gaan volume en balans heel snel over elkaar heen

IS ook logisch. Dit programma word zeg 1000x per seconde uitgevoerd.

Je moet dus ergens een wachttijd inbouwen zodat de informatie langer op het display staat. Echter kan je niet zomaar een wachtijd inbouwen want dan dan zal je programma gedurende het wachten niet meer je potmeters uitlezen.


If balans >= (balansoud - 5) And balans <= (balansoud + 5) Then
Print At 1, 1, "balans", Dec balans, " "
delay of wait 100mS. Ik weet niet de juiste naam in picbasic. Maar op deze regel moet je 100mS wachten.
balansoud = balans

BalansOud = Balans laten zakken tot buiten if loop (else kan vervallen)

Je hebt gelijk else moet daar weg maar het moet wel binnen de IF loop staan enkel als de waarde is verandert sla je de oude waarde op.

If balans > (balansoud + 5) Or balans < (balansoud - 5) Then

Dan zit je altijd buiten de range ipv binnen de range. Die range is er omdat "POT" een soort ADC is en er wat ruis op zit. De "pot" Geeft eigenlijk een tijd die nodig was om een condensator op te laden.

er moet zoiezo een tijd bij de balans gezet worden

maar als de pic opstart gaat hij direct naar balans
en dat moet hij eigenlijk pas doen als er aan de potmeter gedraaid wordt
dan bijv. 3 sec balans laten zien en dan weer volume weer in het scherm plaatsen