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.
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
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
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
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.
benleentje
Golden Member
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?
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
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.
benleentje
Golden Member
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
Boudie
Vervangen DOOR.
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
benleentje
Golden Member
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
benleentje
Golden Member
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 = balansNu 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
EndArco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
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%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Volgens mij klopt 't ook niet, moet zijn
If balans > (balansoud + 5) Or balans < (balansoud - 5) Thendat 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 = balanskan ik zien dat hij direct met het opstarten naar balans gaat en volume slaat hij helemaal over
benleentje
Golden Member
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