Micro-PlC

Gestart door conducteur, 04 augustus 2014, 01:37:41 AM

Geert

Dit is mijn ontwerp om via DCC wisselspoelen en/of seinen aan te sturen.

De gebruikte methode om adressen in te stellen is dezelfde die ik gebruik om een servo met DCC aan te sturen. Een brugje zetten, dan een wissel of sein aan sturen, brugje weg en minstens 50 jaar zeker dat de schakeling zal blijven reageren op dat adres. Voor het gebruiksgemak zal deze ineens 16 wissels/seinen zijn adressen opeenvolgend opslaan.

Het printje is enkelzijdig en past net op 1/3 van een Euro printformaat. Altijd handig geen afval hebben  :D






Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

conducteur

Citaat van: PeterC op 07 september 2014, 10:27:30 AM
Rian,

Het ziet er al goed uit!

Citaat van: conducteur op 06 september 2014, 23:56:57 PM
...Morgen test als DCC wisseldecoder...

Code 'gevonden' of eigen ontwerp via bit banging en/of interrupts?
Eigen ontwerp, interrupts/timers moet ik zeker nog eens bestuderen hoe dat moet. Het zou me sterk verwonderen dat mijn veel te eenvoudige delay zal werken 8)
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Sattrickske

Hi Rian,

Wat betreft je SMD electrolytische condensatoren in Eagle, ik gebruik enkel de modelletjes van Panasonic (PANASONIC_<X> in de CPOL-EU van de rcl library).  De uitleg over <X> vindt je in de datasheet, bv. http://industrial.panasonic.com/www-data/pdf/ABA0000/ABA0000PE251.pdf (p.173).  Als de diameter van een elco van een andere fabrikant overeenkomt met die van Panasonic, werkt 't altijd (bij mij toch).

Ik zie dat je ondertussen al aardig wat opgeschoten bent...

De DIP schakelaar zou ik persoonlijk niet gebruiken om het adres in te stellen.  Dat je kan rechstreeks programmeren, door een constante in je software te gebruiken, in de memory map het adres van deze constante opzoeken en dan effe de .hex file editeren.  Voor serie werk is de DIP schakelaar natuurlijk wel handig, maar je hebt jezelf wel beperkt tot 16 addressen.  Ik zou 'm eerder gebruiken om wat specifieke configuratie in te stellen (bv. wissel die traag of snel moet overgaan oid.)

Op de µC zijde van je print denk ik dat de pinnetjes 2 tem 7 niet goed gesoldeerd zijn...

conducteur

PIN 2-7 waren op moment van foto nog niet gedaan, maar nu wel  ;)
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Sattrickske

Allez dan, want ik heb het al voorgehad, een paar pinnetjes vergeten en zoeken maar waarom de software niet werkt :-\

conducteur

#140
Door een of andere reden beetje pech gehad: smd µC in rook opgegaan :( 


Tijd voor plan B: op de "µPlC" een DIP 16f887 gestoken en daar begonnen het programma te testen (heb daar meer mogelijkheden om te testen, ook ledjes/knopjes).


Mijn ledje gaat niet uit, dus mijn systeempje om de "1"tjes te tellen is niet goed...




teller=0
  led=on
  while (teller<10) loop


   bitdetect
   if dccbit then
   teller=teller + 1
   else
   teller=0
   end if


  end loop
  led=off




"bitdetect": wacht op puls, en zal beslissen of ontvangen bit"1" of "0" is.
procedure bitdetect is


while !dcc loop  ; wacht op dcc-puls
end loop


    _usec_delay(80)     ; wacht (58µs (1) <80µs <100µs (0)
      if dcc then        ;is puls "0" of "1"
          dccbit=false   ;ontvangen bit is 0
      else
          dccbit=true   ; ontvangen bit is 1
       end if
end procedure
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

PeterC

Citaat van: conducteur op 08 september 2014, 20:53:34 PM
Door een of andere reden beetje pech gehad: smd µC in rook opgegaan :( 

Maar daarvoor moet je toch al een serieuze hardware fout hebben gemaakt!  Die PIC's kunnen tegen serieuze stoten!
...
...Maar troost je, ik heb er ook al opgeblazen  8)

...PIC zegt vaarwel met een serieuze rookpluim...  ...stinken...  ...vensters open om te verluchten, verbrande elektronica 'stinkt'   :) :) :)   ;)


Groetjes, Peter


Geert

Citaat van: PeterC op 08 september 2014, 21:41:44 PM

...Maar troost je, ik heb er ook al opgeblazen  8)


zelfs 220V kan op zulk ingangspinneke, maar dat is wel de limiet, ook zelf ondervonden.

Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

Geert

Rian, moeilijk te zeggen waar het fout loopt. Niet opgeven, kan soms iets zeer stom zijn.

Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

PeterC

Citaat van: Geert op 08 september 2014, 21:46:49 PM
zelfs 220V kan op zulk ingangspinneke, maar dat is wel de limiet, ook zelf ondervonden.

Rian, iedereen schiet wel eens een kemel.  Al draaiend keer je, al doende leer je! 
Vallen en direct terug opstaan!
Groetjes, Peter


conducteur

...en toen ging het ledje even uit, maar dat was omdat ik mijn vinger tegen het pootje van het 120K weerstandje had geduwd... Nog steeds op zoek naar wat er fout gaat in dat ogenschijnlijk simpele lusje dat wacht tot 10 opeenvolgende "1"tjes "gezien" zijn...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Geert

Citaat van: conducteur op 08 september 2014, 22:52:44 PM
...en toen ging het ledje even uit, maar dat was omdat ik mijn vinger tegen het pootje van het 120K weerstandje had geduwd... Nog steeds op zoek naar wat er fout gaat in dat ogenschijnlijk simpele lusje dat wacht tot 10 opeenvolgende "1"tjes "gezien" zijn...

10 of meer eentjes, ik weet niet welke centrale je gebruikt....


Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

conducteur

#147
Multimaus, Geert. Na die 10 is er nog een lusje dat wacht tot er een "0" komt... Daarna komen de "gegevens".
(ik volg toch wat op je site staat :  http://users.telenet.be/RedDeBist/MBAAN/Servo_aansturen_digitaal_2.htm#Opbouw DCC signaal om wissels/seinen aan te sturen)
Voorlopig test ik enkel het lusje uit die de 10 opeenvolgende "1"tjes "zoekt".


edit:Voor vandaag stop ik ermee... Al heel de tijd zoeken wat het mogelijk zou kunnen zijn...
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Sattrickske

Ik denk dat je bitdetect routine niet deugt.
Je wacht 80µs om te beslissen of het 0 of een 1 is; dat is correct.  Je beginvoorwaarde is echter niet juist.
while !dcc loop  ; wacht op dcc-puls
end loop

Deze kan vertrekken midden in een puls.  Je moet een stijgende flank detecteren anders loopt je timing in het honderd.  Zonder interrupt kan je best als volgt werken:
while dcc loop  ; wacht op einde dcc-puls
end loop
while !dcc loop  ; wacht op start dcc-puls
end loop

conducteur

Volgens mij heb je gelijk, maar het werkt nog steeds niet met de extra while. Verder zoeken naar een oplossing dus.
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum