Nieuws:

Nu in MSM 244 PRAKTIJK: Een kasteeltje uit Forex * Een diorama uit de mouw schudden: een tutorial door Evan Daes

Hoofdmenu

Waar zijn we nu mee bezig ? Microcontrollers

Gestart door ToThePoint, 13 januari 2012, 10:27:28 AM

PeterC

@Gerolf: Controller?  Taal?  Interruptgestuurd?

@Geert: we komen weer eens in elkaars vaarwater: voor een RGB ledstripsturing heb ik gebrek aan ingangen op een PIC (voor uitgebreide instellingen).  Overal waar ik rondkijk in huis liggen er IR afstandsbedieningen...  Eén ingang volstaat om een IR decoder aan te sluiten...
Hoe is het met de afwerking van je 'tunnel' op 1/1  ;) ?
Groetjes, Peter


krispy

Ik zit hier met het gedacht om extra functies uit decoders te gaan halen door middel van het susi kanaal die er zich op bevinden

Hiervoor ben ik op zoek naar allerhande info ivm data dat op dit kanaal verschijnt

Doel : ik zou willen een controlerke programmeren zodat er extra functies vrij komen op decoders ( zoiets als LSM heeft toegepast in hun HLE18² ) zij maken dmv een extra u controler ook extra functies uit decoders met susi aansluiting.

Heb hier verschilende projectjes liggen waar dit zekers van pas zou komen.

iemand ervaring mee ?
opbouw protocol , welke woorden worden verstuurt , ....
MVG
Kispy
Modelbouw Foto-album op flicker
https://flic.kr/s/aHsmTwwZ6m

Gerolf

Citaat van: PeterC op 15 november 2012, 13:04:10 PM
@Gerolf: Controller?  Taal?  Interruptgestuurd?
AtMega8, Bascom, en nee  :D
't Is de bedoeling dat de servo's door logische niveau's aangestuurd worden naar voorgeprogrameerde standen aan een instelbare snelheid, en terugmelding geven als ze effectief die stand bereikt hebben.
Een meerpolige connector geeft verbinding met een kastje-met-LCD-en-klaviertje, dat ik later ook voor andere projectjes wil kunnen gebruiken.
Ik twijfel nog om in dat kastje ook een µC te steken. Het zou heel wat poorten bezuinigen, maar het "communicatieprotocol" blijft lastig
RS232? I2C? ... ?
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

PeterC

Gerolf, ik zou sowieso een afzonderlijke controller gebruiken voor de keyboard/LCD module.  Die controller moet zich dan enkel maar bezig houden met zijn kavier te scannen, data naar het display sturen en zijn communicatiebus in de gaten houden.

Communicatie?  I2C!  Ik weet wel niet of een AtMega8 die hardwarematig aan boord heeft en/of er via Bascom eventueel een software-emulatie mogelijk is (één of andere 'nerd' zal daar wel al een bibliotheek voor geschreven hebben zeker)?

Waarom niet interruptgestuurd?  Elk programma (hoe klein of hoe groot ook) die bij mij in een controller gaat, is interrupt gestuurd (meestal time-based).  Op die manier kan je heel eenvoudig synchrone en asynchrone processen laten samenwerken.

Die meerpolige connector kan met I2C tot 4 draadjes teruggebracht worden (Vcc, GND, SDA en SCL).

Om met busprotocollen te spelen is een Bus-Pirate een zinvolle investering  ;)

Groetjes, Peter


Geert

@Peter,

vandaag tussen de verbouwingswerkzaamheden (niet aan de tunnel 1/1, deze is al een tijdje in gebruik) ook wat opzoekwerk gedaan naar hoe het Lego protocol met IR afstandsbediening werkt. Spijtig genoeg is dit geen bestaand treinprotocol, of ik moest me vergissen?  Om dit protocol na te bootsen met µC zie ik nu al iets minder zitten. Maar ja wie weet...

toch een leuk filmpje gevonden wat je er o.a. mee kunt doen: http://www.youtube.com/watch?v=2s4yFDAOhHA


Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

Gerolf

@PeterC: Ik denk dat ik voor seriële communicatie ga, en een Atmega8 bij de LCD en toetsen ga zetten.
Maar I2C veronderstelt master en slave, en welke is dan master? Bovendien is een slave in Bascom niet zo eenvoudig te maken

RS232 (maar zonder signaalnivo-aanpassing met een MAX232) lijkt me handiger, en ja - met interrupts  ;)
Volgens mij even veel (even weinig) draadjes nodig  ;)
én er hoeft geen slave te zijn,
én er moet immers slechts tussen 2 controllers "gepraat" worden.
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

PeterC

Gerolf, bij het 'master-slave' gebeuren moet je soms eens achterste voren denken: in jou geval wil je servo's aansturen dmv een keyboard.  Je zou denken dat de keyboardcontroller de master is maar dat is niet zo!  De controller van de servo's is de master want die voert het uiteindelijke werk uit!
De keyboardcontroller moet alleen maar zijn toetsenbord in de gaten houden en als er een toets ingedrukt wordt, meldt hij dat (nederig) aan de master door een interruptlijn laag te maken (geen controller interrupt, wel een I2C interruptlijn).  De master (servocontroller) ziet dat als hij die lijn polled en als hij tijd en zin heeft gaat hij de slave vragen wat de toets was en daar gepast op reageren (asynchroon proces - steekt hem op geen xx ms).

Als die Atmega's niet echt uitgerust zijn voor (zowel) master als slave I2C communicatie ben je inderdaad wellicht beter af met seriële communicatie (zonder niveau-omzetters).

I2C is ideaal als je een heleboel werk wil verdelen over verschillende controllers waarbij elke controller zijn stukje verricht en één of meerdere 'masters' daar de vruchten van plukken.  Het voordeel is dat je een groot project kan opdelen in kleine (onderhoudbare) programmaatjes en nadien kan bundelen (hardware- en softwarematig) met ook een minimaal (onderhoudbaar) programma.

Toch interrupts  :) :) :)  Je zal zien: kl*terij als het niet werkt zoals je dacht maar eenmaal onder de knie kan je een controller doen multitasken (tijdverdeling over de verschillende processen).

Een kleine tip (je hebt een goeie scoop heb ik al gezien): bij aanvang van je interruptroutine zet je een poort hoog; bij het verlaten van de interruptroutine zet je ze terug laag.  Met je scoop kijk je op die poort en als je daar een een stabiel signaal krijgt, werkt je interrupt (time-based).  Aan de hand van je duty-cycle (puls/pauze verhouding) kan je zien hoeveel tijd (procentueel) je per interrupt-cycle nog over hebt om je main-loop uit te voeren (die main loop kan over xxx interruptcycles lopen).

Ik ben op die manier aan het 'spelen' om RGB Led strips aan te sturen met werkelijke RGB kleuren (3*8 bits) op een PIC die op 8MHz draait (0,5 µs per instructie) en ben de interruptroutine met de scoop zo aan het tunen dat er daadwerkelijk nog wat beperkte tijd over blijft om het hoofdprogramma uit te voeren (3 potmeters via AD lezen en de resultaten op een LCD zetten).  De sturing van de Led's gebeurt met drie software gestuurde PWM's (bij gebrek aan hardware PWM's).
Het werkt momenteel maar niet zoals ik het wil.  Ik ben van 8 bits PWM (256 mogelijkheden per kleur R G B) al moeten minderen tot 6 bits (64 stappen per kleur) om de zaak draaiende te krijgen.
Ik speel nu met de gedachte om per kleur een controller in te zetten en via I2C...    ;)


Groetjes, Peter


Gerolf

De tip met de controllerport voor een scoop hou ik in gedachte  8)
Ik hou het (waarschijnlijk) toch op RS232.
- Daarmee kan ik gemakkelijker strings versturen, die dan rechtstreeks naar de LCD gaan (2x16)
- Toetsaanslagen gaan dan als eenvoudige 1byte-code naar de servocontroller
Doosje en LCD heb ik al - printontwerp zou dan niet te lastig mogen zijn  ;)
Een manier om "heet" aan te sluiten heb ik ook al in gedachte ...
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

Dreha

Gerolf, RS232 is inderdaad het eenvoudigste.
Om die servo's trillingsvrij te sturen kan je het best met een timerinterrupt werken.
Ik verklaar me nader:
- Je laat een timer bv elke 10µs een interrupt genereren
- Je telt deze interrupts
- Bij 0 maak je hetservosignaal hoog en bij een waarde tussen 100 en 200 maak je het terug laag (zo heb je een puls van 100 * 10µs a 200 * 10µs = 1 à 2ms.
- Als je er 2000 geteld heb dan begin je op nieuw (20ms tussen het begin van elke puls).

Je kan zo simultaan zeker 8 servo signalen generen die mooi stabiel blijven (geen trillende servo's) zelfs als via RS-232 de stand van de servo's aanpast.

Voor meer info stuur je me maar een PM.

Harald

Geert

Best ook rekening houden met het feit dat de servomotor het meeste stroom trekt  op het moment dat je deze 1 à 2ms puls aanbrengt, en deze aangebrachte puls niet overeenkomt met de interne puls. Heb ik al eens nagegaan met een oscilloscoop.  (spanningsval over 1 Ohm) Heb je geen goed gestabiliseerde voeding, dan kan het zijn, dat als alle servomotoren bewegen de voeding onderuit gaat.  :(
Dit kan je deels oplossen door op de uitgangen van de µC de pulsen te verschuiven.  Een schema maakt direct duidelijk hoe je de uitgangen van de µC het best aanstuurd:




Maar ook dit blijkt soms nog niet voldoende, zelf moet ik de software nog aanpassen dat er ook tussen elke verschillende puls even een kleine pauze is. 

En zoals je weet, als de pulsen stoppen, dan blijft de servo vast staan in deze positie. Zeer handig...

Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

Geert

#280
@Peter:

je staat toch redelijk wat stappen voor op mij zulle. Hopelijk deel je ook nu je opgedane kennis via je site  ;)

( ja ik weet het, een site up to date houden daar steek je veel tijd in, en we leven maar zo kort, en in die korte tijd willen we zo veel doen...)

Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

PeterC

Citaat van: Geert op 16 november 2012, 17:07:50 PM
...Hopelijk deel je ook nu je opgedane kennis via je site  ;)
...

Kennis die niet gedeeld wordt, gaat verloren...
Groetjes, Peter


Gerolf

Citaat van: Geert op 16 november 2012, 17:00:22 PM
Best ook rekening houden met het feit dat de servomotor het meeste stroom trekt  op het moment dat je deze 1 à 2ms puls aanbrengt, en deze aangebrachte puls niet overeenkomt met de interne puls. ... Heb je geen goed gestabiliseerde voeding, dan kan het zijn, dat als alle servomotoren bewegen de voeding onderuit gaat.  :(
Om die reden dacht ik de servovoeding (per servo) pas in te schakelen als er moet bewogen worden. Bij wisselmotoren is dat niet zo tijd-kritsich, dus dat kan één voor één ipv allemaal tegelijk  ;)
Groeten uit "Marche-en-Bières"   ** Modelspoor is plezant **   TPIII-H0-DC-Zelfbouw

Geert

Ik heb deze week het communicatieprotocol P50x tussen een PC programma (vb koploper) en een centrale (vb: Intellibox;)  is bekeken. Eigenlijk is dit best te doen om dit in een µC te stoppen.  Waarom een dure centrale aanschaffen die enkel maar als doorgeefluik moet dienen of een tweede PC met bv. MR-direct, denk ik dan... Ervaring met zelfbouw boosters en S88 modules heb ik al. Hoe diverse lok protocollen werken DCC, MM daar heb ik ook al één en het ander voor geschreven. Mfx is nog een uitdaging voor later... 

Vandaar mijn vraag, zijn er al onder jullie die dat ook al eens geprobeerd hebben. Overigens dit project is voor de toekomst, en zoals gewoonlijk (als het lukt) te volgen op mijn site.

Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

Steam.N

Geen ervaring, maar grote interesse !
Ik volg met argusogen  ;)
Knutselgroeten !  Jean       TP-I (B) & TP-II (DR) - N - DC - Handbediening - Zelfbouw  { Sedelocus - De Feniks - Pira-N's Crossing - Turnhout NEEB - Scrap Yard }