Hallo,

De titel is wat vreemd maar mijn probleem komt op het volgende neer: Ik heb een aansturing gemaakt voor een rookmachine die normaal op 0..10 volt werkt en nu via dmx met een lichttafel bestuurd kan worden. Een PIC wekt een PWM signaal op, dat wordt via een RC netwerk en een opamp vertaald naar 0..10 volt.Op zich werkt dit goed. Maar het probleem is het volgende:
De machine heeft de volgende spanningen nodig:

Function
0 - 1.0 V No function - machine stand by.
1.0 - 2.5 V Enabling the heater circuit - same as ’power on’.
2.5 - 9.5 V Smoke emission. Output increases with control voltage.
9.5 - 10.0 V Timer store.

Nu wil ik dat zodra de connectie er is de heating al begint. Dat betekent dat de output nooit lager mag zijn dan +/- 1.5 volt (ik leg de grens niet bij 2,5 om ongewenst roken te voorkomen). En de bovengrens moet liggen op 9.4 volt. Die geheugenfunctie is alleen maar irritant.

Als ik dat vertaal naar de waarde van het registers waarop de PWM is gebaseerd, dan betekend dat dat dat register nooit lager mag worden dan F en nooit hoger dan 82.

Nu is het geen probleem om te programmeren dat indien lager dan F het register op F wordt gezet en indien hoger dan 82 het op 82 wordt gezet.

Maar dat betekent dat de schuif op de lichttafel maar voor een klein deel invloed heeft op de rookmachine.
Wat ik dus wil is met het gehele bereik van de schuif ( een hele byte, 256 stapjes) een waarde van 15..130 varrieren. 0 moet overeenkomen met 15, 255 met 130. Zodat de schuif over zijn hele lengte effect heeft!

Ik snap dat er precisie verloren gaat. Een pic kent geen 15,5 bijvoorbeeld. Maar dat maakt niet uit! HEt is natuurlijk morgelijk om een offset toe te voegen bij de opamp en de versterking te verkleinen, maar aangezien de print al in elkaar zit, doe ik dit liever niet en los ik het liever software matig op!

Het gaat om een Pic16F628A..

Op 13 april 2006 22:23:41 schreef Wouter van Ooijen:
lookup table!

Ja dat is een mogelijkheid waar ik nog niet aan gedacht had... hoe werkte dat ook al weer precies? JE ehbt toch een lijst met een return functie ofzo.. mijn geheugen is wat vaag :P

(Mijn Taal is trouwens ASM, Dus aan een JAL voorbeeld heb ik niet zo heel veel :) ) Ik ga wel even zoeken hiero

Je kan gemakkelijk maal en gedeeld door 2 doen in asm, gewoon een bitje naar rechts of links verschuiven. Dus de waarde die van je schuiver komt (0-255) deel je door 2 (RRF "waarde" dacht ik), dan wordt dat 0-127, die kan je gemakkelijk inpassen in je gewenste waarde, zonder moeite te moeten doen voor een lookup table (als het gemakkelijk kan, waarom niet).

Op 13 april 2006 22:37:18 schreef Videomodulator:
Je kan gemakkelijk maal en gedeeld door 2 doen in asm, gewoon een bitje naar rechts of links verschuiven. Dus de waarde die van je schuiver komt (0-255) deel je door 2 (RRF "waarde" dacht ik), dan wordt dat 0-127, die kan je gemakkelijk inpassen in je gewenste waarde, zonder moeite te moeten doen voor een lookup table (als het gemakkelijk kan, waarom niet).

Dat was ook mijn eerste idee maar om de een of andere reden werkt het niet.. Hoe ging dat ook al weer met die lookup?

een tellertje
actie 1,2,3,4

dan tel je de waarde van je teller op bij de PCL
directy daaronder zet je een RETLW


       call lookup
 na retlw komt de pcl weer hier met de waarde in w      


lookup movf teller,w
       addwf PCL,f         ;pcl+X
       retlw  effect1      ;pcl+1
       retlw  effect2      ;pcl+2
       retlw  effect3      ;plc+3
       retlw  effect4      ;pcl+4

Zoiets moet het dan worden.

Op 13 april 2006 23:29:15 schreef The Headhunter:
een tellertje
actie 1,2,3,4

dan tel je de waarde van je teller op bij de PCL
directy daaronder zet je een RETLW


       call lookup
 na retlw komt de pcl weer hier met de waarde in w      


lookup movf teller,w
       addwf PCL,f         ;pcl+X
       retlw  effect1      ;pcl+1
       retlw  effect2      ;pcl+2
       retlw  effect3      ;plc+3
       retlw  effect4      ;pcl+4

Zoiets moet het dan worden.

In de datasheet staat dat er 5 bits van PCL beschrijfbaar zijn.. dat betekend dus dat ik niet 256 entries kan hebben in de table. Kan ik natuurlijk ondervangen door te kijken of bit 7 geset is: zo ja: lookup table 2, zo nee: lookup table 1.. Of is hier oko een pasklare oplossing voor?

Op 13 april 2006 23:32:37 schreef T.Assies:
[...]In de datasheet staat dat er 5 bits van PCL beschrijfbaar zijn.

welke chip? volgens mij moet dat 8 zijn. maar dan moet je nog steeds goed opletten om een 256-entry table te maken (lees over PCH).