Sida 1 av 2
Arduino: går det att ta reda på aktuell analog out?
Postat: 27 september 2020, 10:07:18
av FormerMazda
Ny nöt att knäcka..
I mitt program så sätter jag flertalet analoga utgångar till lite olika värden, detta i olika funktioner och vid olika tillfällen.
Kort och gott, inget jag håller reda på i programmet så att säga.
Går det att på något vis få fram vad en analog UTgång har för värde?
Testat att helt enkelt göra en analogRead på samma pinne, men det verkar ju inte ge så bra svar..
Är inne på att i varje funktion som gör en analogWrite också spara värdet i en array, men det kändes inte snyggt.
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 27 september 2020, 10:19:39
av Castor
Pinnen kan ju påverkas av det som är anslutet, bli lastad för hårt tex, så att spara det man lägger ut (och vill ha) är väl det sätt man ska hantera börvärdet. Om man inte har det värdet på pinnen så får man väl åtgärda på något sätt.
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 27 september 2020, 10:22:55
av Klas-Kenny
Det går att läsa tillbaka, men tror inte det finns någon färdig funktion för det.
Kollar man i källkoden för analogWrite:
https://github.com/arduino/ArduinoCore- ... g_analog.c
Så ser man att värdet bara skrivs rakt in i ett timer-register. Det skulle absolut gå att läsa tillbaka därifrån. Kopiera analogWrite-funktionen och implementera den "baklänges" med hur det väljs vilket register som ska användas.
Vill man inte gå så långt är ju den enkla och mer eleganta lösningen är ju att skriva någon egen "wrapper" runt funktionen, typ en sån här fil:
Kod: Markera allt
int values[5];
void myAnalogWrite(uint8_t pin, int val) {
values[pin] = val;
analogWrite(pin,val);
}
int getAnalogOutVal(uint8_t pin) {
return values[pin];
}
Och sen bara använda de funktionerna istället för den vanliga analogWrite. Så slipper du pilla in sparandet på varje ställe som sätter analogutgångarna.
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 27 september 2020, 10:24:47
av HUGGBÄVERN
Är inne på att i varje funktion som gör en analogWrite också spara värdet i en array, men det kändes inte snyggt.
Men det kanske ÄR snyggt ändå och helt enligt kaninbibeln. Jag skulle nog själv göra så för att inte hamna i värsta Londonsmogen.
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 27 september 2020, 10:41:33
av FormerMazda
Det Klas-Kenny skriver gör mig lite sugen på att gå på djupet med den idén. Men samtidigt .. det är ju att göra vad jag ändå kommer få göra nu.
En wrapper överväger, då är det ju lättare att modda den i framtiden, skulle behovet uppstå. Men det betyder att vid en fade-funktion, alltså en for-loop med 256 steg så hoppar man dit 256 gånger och skriver om en variabel.
Så det slutar väl med att lägga in en rad efter varje _färdig_ analogWrite.
Exempel wrapper:
Kod: Markera allt
for (int x = iMaxBright; x >= 0; x--){
for (int i = 1; i <= iN; i++){
MYanalogWrite(pinPWMN[7-i], x);
}
delayMicroseconds(iDelay);
}
Exempel skriv när klar: (kräver väl dock att inte deklarera i och x i for-loopen)
Kod: Markera allt
for (int x = iMaxBright; x >= 0; x--){
for (int i = 1; i <= iN; i++){
analogWrite(pinPWMN[7-i], x);
}
delayMicroseconds(iDelay);
}
PWMvalueN[7-i] = x;
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 27 september 2020, 10:45:08
av sodjan
> Men det betyder att vid en fade-funktion...
... så gör du som idag, din egna funktion använder du bara då
du faktiskt behöver/vill spara värdet.
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 27 september 2020, 10:54:18
av FormerMazda
Vilket jag vill efter varje fade-funktion också.
Men det ena utesluter ju inte det andra förstås, kan ju ha en kombo.
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 27 september 2020, 10:56:08
av Klas-Kenny
FormerMazda skrev: ↑27 september 2020, 10:41:33En wrapper överväger, då är det ju lättare att modda den i framtiden, skulle behovet uppstå. Men det betyder att vid en fade-funktion, alltså en for-loop med 256 steg så hoppar man dit 256 gånger och skriver om en variabel.
Lite nyfiken, vad gör det egentligen?

I exemplen har du ju ändå bara "dum" delay där inget vettigt görs efter varje skrivning. Vad spelar det för roll om ett par extra instruktioner körs för att spara en variabel varje gång?
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 27 september 2020, 17:45:05
av FormerMazda
Det är nog grejen med mig, det gör nog inget.
Jag har bara en defekt som vill tänka på att inte göra saker i onödan, detta trots att jag inte är intresserad av assembler eller liknande utan trivs jättebra med högnivåspråken.
Så med tanke på vad jag försöker åstadkomma så spelar det nog ingen roll.
Jaa.. Kanske är den vägen att ta ändå då.
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 28 september 2020, 05:38:51
av Pebert
Om det är noga att veta vad det faktiska värdet är, gör en feedbackloop och läs med en analog in.
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 28 september 2020, 08:21:24
av FormerMazda
Det som är noga är inte faktiska värdet på så vis, men jag har en del kanske lite klumpiga rutiner som ska fadea en kanal i tag, säg från tänt till släckt.
Då om nån kanal redan är släckt så tänds ju den, och sen fadeas ner.
Så i den rutinen vill jag kunna kolla om kanalen redan är släckt, eller i nåt annat värde än 100% (eller ja, vad nu iMaxBright är).
Men att spara undan vid varje analogWrite blir ju melodin här.
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 28 september 2020, 09:31:08
av sodjan
Men, som någon annan tidigare sa, processorn måste ju redan ha det aktuella värdet någonstans.
Kanske onödigt att skapa en egen variabel om man kan hitta var det är lagrat...
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 28 september 2020, 10:19:07
av FormerMazda
Ja det tycker jag också.
Men enda sättet som jag hintats om än är ju det Klas-Kenny skrev, att modda källkoden. Vilket inte lockar.
Det borde ju finnas i nåt register eller nåt nånstans som man kan peeka på eller så. Men där är jag lååångt utanför mina kunskaper.
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 28 september 2020, 11:15:56
av Klas-Kenny
Alltså du behöver ju inte modda källkoden för att göra på det sättet.
Bara kopiera den och skapa din egen funktion.
Kopiera och byt alla skrivningar av register till läsningar, ungefär.
Re: Arduino: går det att ta reda på aktuell analog out?
Postat: 28 september 2020, 16:00:13
av Swech
"I mitt program så sätter jag flertalet analoga utgångar till lite olika värden, detta i olika funktioner och vid olika tillfällen.
Kort och gott, inget jag håller reda på i programmet så att säga."
Det där är ett recept på program som blir buggigt och oerhört svårt att felsöka.
Du behöver en array med analog ut värden, En enda rutin skall vara ansvarig för att
flytta dessa värden från arrayen till analog ut med jämna intervall t.ex. 50 gånger / sekund.
Alla andra rutiner jobbar mot arrayen och inte direkt mot analog ut.
Grundprincipen för stabila program är att merparten av dina funktioner inte vet hur hårdvaran ser ut utan jobbar mot
en virtuell processor. Några få funktioner översätter och ser till att värdena hamnar på rätt pinnar/ portar.
Swech