hallo,

ik heb een opdracht gekregen nl: er is een staafje op een motor gemonteerd en op dat staafje zitten 8 leds, de eerste zit op 17.5cm van het midden en maakt dus een cirkel van 110cm, een led heeft een diameter van 0.3cm dus is er een resolutie op de cirkel van 110/03=366.6 punten, deze waarde rond ik af naar 360 omdat dat makkelijker rekent. Het toerental van de motor is varaiabel, door een optische sensor worden er 8 pulsen per omwenteling geregistreerd. De led shuift per 5° één positie op, dus het is in feite een looplicht en bij de 9de stap (na45°) blijft die in zijn uiterste positie staan, daarna keert het looplicht om van richting. Er word dus in feite een bloemvorm gecreeerd. Ik vraag me af hoe ik de rotatiefrequentie hiervan kan bepalen en hoe ik die in de oefening moet brengen. Kan iemand mij hier aub mee op weg helpen?

Klinkt als een Schoolvraag.
Zoek eens op propellor klok.

De rotatiefrequentie heb je niet nodig...

Je kunt op basis van de 8 pulsen per omwenteling en het feit dat dat de snelheid geen rare sprongen maakt, voorspellen wanneer de propellor in een bepaalde positie staat.

En de draaihoek heb je dus eigenlijk ook niet nodig... je krijgt pulsen en stuurt LED's aan... that's it.

ik heb al iets om mee te beginnen:

ORG 0h
MOV P0, #00000001b
JMP volgende
ORG 30h

volgende MOV A, P0
RL A
MOV p0, A
CJNE A, #10000000b, volgende

vorige MOV A, P0
RR A
MOV P0, A
CJNE A, #00000001b, vorige
JMP volgende

dit is een knightrider programma dat ik heb opgesteld maar de bedoeling is dat per 90° het programma 1 keer word doorlopen zodat ik eigenlijk 4 verschillende blaren van de "bloem" zou kunnen zien. Hoe zou ik dit kunnen instellen?

Ik denk dat het geen zin heeft om met een oplossing te komen voordat je helder hebt wat precies het probleem is.

Pas als het probleem helder is, kun je een oplossing verzinnen.

Begin eens met je vraag opnieuw te formuleren. Maar dan alle overbodige informatie weglaten.

[Edit]
Om je op weg te helpen:

Blijkbaar gebruik je een microcontroller.
Wat is de input?
Wat is de output?

En hoe verhouden input en output zich tot elkaar in de tijd?

input: pulsen van microcontroller (8/omwenteling)
output: leds die op staafje bevestigt zijn met een motor.

1 puls per 45°
1 puls = 1us(als de frequentie =8MHz) dus 8us per omwenteling

per 45° moet het staafje 1 keer doorlopen worden, dus per 45° de helft van het knightrider programma. Of bij de eerste puls een aflopend looplicht en bij de tweede puls een oplopend looplicht. Maar ik snap niet hoe je dit moet instellen...

als ik nu gewoon het knightrider programma instel dan zou ik volgens mij 8 blaren bekomen, want bij elke puls word het programma 1 keer doorlopen(=1blad per puls). Maar ik moet maar 4 blaren bekomen dus moet ik de tijd halveren of per puls een looplicht instellen. Maar ik snap niet goed hoe dit uitgewerkt word. Hieronder heb ik geprobeerd om de tijd te halveren.

het is al een tijdje geleden dat ik nog iets van microcontrollers heb gezien daarmee dat ik het niet meer zo goed begrijp...

ORG 0h
JMP start
ORG 30h
Start: MOV P0,#00000001b
lus: CALL tijd
CALL start2
JMP lus

tijd: MOV R0,#0
MOV R1,#0
tlus: DJNZ R0,tlus
DJNZ R1,tlus
RET

Start2: MOV A,P0
RL A
MOV P0,A
CJNE A,#10000000b,start2
Start3: MOV A,P0
RR A
MOV P0,A
CJNE A,#0000010b,start3
JMP Start2

Op 8 september 2010 14:26:38 schreef billybob:
1 puls = 1us(als de frequentie =8MHz) dus 8us per omwenteling

Die kan ik niet volgen...

Maar voor de rest heb je het redelijk goed in de gaten hoe het zit.

Het echte probleem is:
Tussen twee pulsen heb je een oplopend of aflopend looplicht. Maar vooraf weet je niet exact op welke snelheid de propeller gaat draaien.

Je zult dus bij je looplicht niet met een vast geprogrammeerde snelheid moeten werken, maar met een snelheid die (mede) afhangt van de snelheid waarmee de pulsen binnenkomen.

De enige uitzondering is als je nu exact weet op welke snelheid de propeller draait, dan mag je met vaste tijden werken.

Volgens mij moet ik gewoon bij puls 1 een aflopend looplicht instellen en bij puls 2 een oplopend looplicht en dan herhalen.
Want bij elke snelheid heb ik 8 pulsen per omwenteling, dus dan heb ik bij elke snelheid de juiste vorm. Maar hoe stel je de verschillende pulsen dan in? Dat weet ik niet meer..

Stel je voor dat je een perfecte bloem in beeld hebt...

Wat gebeurt er dan:

- als de propeller sneller gaat draaien?
- als de propeller langzamer gaat draaien?

maar enkel het programma starten op een puls is volgens mij niet genoeg. Het programma moet volgens mij ook exact de lengte hebben van de tijd tussen 2 pulsen, anders krijg je dode stukken in je circle volgens mij.
Als je idd bij de ene puls een oplopende nightrider en bij de volgende pulse een aflopende, dan zou je volgens mij een soort van ster vorm krijgen of niet?

als de propellor sneller draait dan zullen de bloemblaadjes dikker worden, en als de propellor trager draait dan zullen de bloemblaadjes smaller worden volgens mij.

Ik ben het eens met stijnos dat als je bij de ene puls een oplopende nightrider hebt en bij de ander puls een aflopende nightrider hebt dat het dan wel klopt. Maar weet iemand hoe je dat in een programma steekt?

Ik weet niet wat precies de opdracht was... maar ik kan me voorstellen dat het de bedoeling is dat de blaadjes dezelfde grootte en vorm houden... en dat red je niet als je de puls alleen gebruikt om het looplicht te starten.

Dit is de opdracht letterlijk, er staat niet bij dat de bloemvorm steeds dezelfde moet zijn:

Op het uiteinde vaneen balkje staan 8 leds (D0..D7, met D0 dichtst bij de as). Dit balkje is gemonteerd op de as van een motor. Daardoor beschrijft de ledbalk een cirkel. De eerste led is gemonteerd op 17,5cm van de as, waardoor deze led een cirkel beschrijft van 110cm omtrek. Aangezien het om 3mm leds gaat geeft dit een resolutie op de cirkel van 110/0,3 = 366,66 punten. We ronden deze waarde af op 360.

Het toerental van de motor is variabel. Door middel van een optische sensor worden 8 pulsen per omwenteling geregistreerd, waarmee de rotatiesnelheid van de motor te bepalen is.

De leds D0..D7 zijn verbonden met poort 0. De optische sensor geeft8 pulsen per rotatieop P1.0.

Patroon 1
cirkelsegment D0..D7
0°-45° 00000001
45°-90° 00000010
90°-135° 00000100
135°-180° 00001000
180°-225° 00010000
225°-270° 00100000
270°-315° 01000000
315°-360° 10000000

Patroon 2: Vergelijkbaar met patroon1, maar nu schuift de led 1 positie op per 5° en maakt een heen en weer gaande beweging zodat het totaalresultaat een soort "bloemvorm" is. Per 45° doorloopt de led dus de volledige ledbalk. Aangezien er per segment van 45 graden45°/5° = 9 stappen zijn blijft de led in de 9e positie ook in de uiterste stand.

Heb je patroon 1 al gerealiseerd?

patroon 1 is toch gewoon een looplicht?

ORG 0h
JMP start
ORG 30h
start: MOV P0,#00000001b
JMP start2
start2: MOV A,P
RL A
MOV P0,A
CJNE A,#10000000b,start2
RET

Nee ... patroon 1 is géén gewoon looplicht.

Met jouw code is de kans bijzonder klein dat je iets maakt dat patroon 1 oplevert.

[Edit]
Gratis hint:

De optische sensor geeft 8 pulsen per rotatie op P1.0.

dus per puls moet de led telkens 1 plaats naar links opschuiven
maar hoe doe je dit? Maar wat definieert men met een puls? Ik begrijp niet goed hoe je per puls een instructie kan geven..
sorry voor mijn onwetendheid over microcontrollers

Ik weet niet zeker of dit een schoolopdracht is...

Maar als dit een schoolopdracht is, dan wordt er blijkbaar vanuit gegaan dat je deze kennis over de microcontroller wel hebt. En om patroon 2 tot een goed einde te brengen zul je nog best wat moeten weten van de betreffende controller.

Je conclusie klopt... voor patroon 1 zul je per puls het looplicht één positie moeten verschuiven. Er is al aangegeven op welke ingang de puls komt. Je zul dus steeds moeten wachten op de puls op de betreffende ingang voordat je het looplicht een stapje verder laat lopen.

Hoe je dat moet doen op je microcontroller weet ik niet precies te zeggen... tenminste niet in deze specifieke assembler code.

Voor patroon 2:

Als je de frequentie van de motor wilt weten zul je de frequentie moeten meten (meten is weten, toch?). Je heb 8 pulsen in een volle rotatie, hoe kun je aan de hand daarvan de frequentie uitrekenen?

En in hoeveel stukjes is een stuk van 45 graden opgedeeld? Als je dat weet en dat dan combineert met de snelheid van de motor kun je uitrekenen hoelang elke led aan moet zijn.

Leime

Je hoeft voor patroon 2 de frequentie van de propeller niet te weten...

Je hoeft alleen maar te zorgen dat je de 9 gewenste led-combinaties netjes laat zien tussen twee pulsen... het liefst alle 9 combinaties precies even lang.

Je zult dus de snelheid van het looplicht af moeten laten hangen van de tijd tussen de pulsen.

Je zult de tijd tussen een "led-verandering" moeten uitrekenen, en daar zijn meerdere manieren voor. Dus de frequentie is niet percé nodig.

Sommige scholen zijn ontzettend suf in wat men als "voorkennis" aanneemt voordat men de leerlingen in het diepe gooit.

Billybob, probeer eens een actie-diagram te tekenen.
Lang lang geleden werden die gebruikt. Is voor jou een bruikbaar hulpmiddel.

Meteen assembly gaan schrijven is NIET GOED.

Om in lijn te zijn met wat vroeger gebruikt werd, teken je een actie in een gewone rechthoek en een beslissing in een ruit-vorm.

ik vind nergens uitleg over een actie-diagram in mijn cursu...

ik wil gewoon instellen dat mijn programma bij puls 1 het eerste deel (volgende) van mijn nightrider programma doorloopt en bij puls 2 het tweede deel (vorige) ervan doorloopt, dan klopt het volgens mij maar ik weet niet hoe dit in zijn werk gaat, en ik vind er ook geen duidelijke uitleg over... bedoelt men met puls 1 P1.0 en met puls 2 P1.1? Als het zo zou zijn dan moet ik dus voor het tweede deel (vorige) P1.1 instellen? kan iemand mij hier verder mee helpen aub? Ik moet het vanavond om 6u indienen...

ORG 0h
MOV P1.0,#00000001b
JMP volgende

ORG 30h

volgende: MOV A,P1.0
RL A
MOV P1.0,A
CJNE A,#10000000b,volgende

vorige: MOV A,P1.0
RR A
MOV P1.0,A
CJNE A,#00000001b,vorige
JMP volgende

OK. Je wilt geen hulp. Kan geregeld worden. Doei!

Je hebt het nu weer over patroon 2... terwijl we nog niet eens een werkende oplossing voor patroon 1 gevonden hebben.

Bij schoolvragen gaat het erom dat je een oplossing vindt door de juiste beredeneringen te volgen. En zelf denk ik dat dat nog niet helemaal gelukt is. Ik ben het eens met de reactie van rew. Je kunt niet zomaar in de software aan de slag gaan voordat je weet wat het probleem is en wat de mogelijke oplossing is.

Terug naar patroon 1:

Op 8 september 2010 16:40:56 schreef billybob:
dus per puls moet de led telkens 1 plaats naar links opschuiven
maar hoe doe je dit? Maar wat definieert men met een puls? Ik begrijp niet goed hoe je per puls een instructie kan geven..
sorry voor mijn onwetendheid over microcontrollers

Wat weet je wèl over microcontrollers? Net zoals ze uitgangen hebben (waarmee je de LED's aanstuurt) hebben ze ook ingangen. En op één van deze ingangen komt de genoemde puls binnen.