ik heb volgend probleempje:

ik wil een servo aansturen door middel van dmx.
ik programmeer in bascom AVR en met volgend zeer eenvoudig programma zou ik al iets moeten kunnen doen:


$regfile = "attiny2313.dat"
$crystal = 20000000

Config Dmxslave = Com1 , Channels = 10 , Start = 1 , Store = 8
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10

Config Portb.0 = Output

Enable Interrupts

Do
   Servo(1) = _dmx_received(7)
Loop

End

het probleem is nu wanneer ik de servo in een bepaalde stand zet via het dmx signaal dat deze zeer zenuwachtig is (staat te trillen). ik gebruik hiervoor een enttec open dmx controller (usb naar rs485).

ik dacht dat er iets mis was met de software dus maakte ik dit om te testen:


$regfile = "attiny2313.dat"
$crystal = 20000000

Config Dmxslave = Com1 , Channels = 10 , Start = 1 , Store = 8
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10          ', Timer = Timer1       ', Interval = 50

Config Portb.0 = Output

Enable Interrupts

Do

Servo(1) = 50
Wait 4
Servo(1) = 200
Wait 4
Servo(1) = 150
Wait 4
Servo(1) = 50
Wait 4
Servo(1) = 150
Wait 4
Servo(1) = 50
Wait 4
Servo(1) = 120
Wait 4

Loop

End

hier gaat de servo om de 4 seconden op een andere positie staan.
en dit gebeurt zonder problemen. maar vanaf ik een dmx signaal aanleg begint de servo weer te trillen.

ik vermoed eigenlijk dat er teveel interrupts gebeuren voor het inlezen van de dmx waardoor het servo signaal wordt verstoord.

iemand een idee hoe ik dit op een andere manier kan oplossen?

niemand? :'(

ik ben gewoon een beetje ongeduldig :)

Niet meer doen

FAQ: Het kicken van een je eigen topic om het hoog in de lijst te houden is niet toegestaan als de laatste reactie minder dan 24 uur geleden is.
Als je iets hebt toe te voegen aan een topic terwijl je zelf de laatste bent die geantwoord heeft wordt je geacht de edit functie te gebruiken. Deze regel vervalt als de laatste reply ouder is dan 24 uur.

Kijk eens met je scoop wat er niet stabiel is aan je uitgaande puls.

Waarschijnlijk is dat:
- tijd tussen de pulsen.

In dat geval duurt je DMX ontvangst te lang (of te kort). Zorg dat de servo met een timer interrupt ofzo werkt, en dat je kan zorgen dat je de servo wel constant aanstuurt. DMX ontvangen doe je dan in hardware, en je verwerkt de data tussen de uitgaande pulsen door.

als ik het goed gelezen heb in de handleiding werken de servo commando's (om het zo te noemen) met interrupts, ook de dmx werkt met interrupts vermoed ik dus daar zit ergens het probleem.

kan je de servo's ook aansturen met standaard pwm? anders kan ik het eens testen met standaard PWM (hardware) outputs.

Ik zou zelf het aansturen van de servo / het opwekken van het servo signaal in een interrupt uitvoeren. (En het inlezen van het DMX signaal ook).

Nu wordt je servo even aangestuurd, vervolgens gaat de boel op zijn dooie akkertje op een DMX input wachten waarna de servo weer even wordt aangestuurd.
Als het DMX signaal meer dan 20msec. op zich laat wachten gaat je servo jitteren.

Zoek eerst eens grondig uit hoe de servo / DMX commando's functioneren. Mogelijk is één van beide gewoon polling / blocking.

[Bericht gewijzigd door mbbneon op (14%)]